# Development for Multiple Linux Distributions mini-HOWTO

Ed
Hill

    <ed@eh3.com>

山口つかさ
日本語訳

    PDC01212@nifty.com

この文書では複数のディストリビューション向けにユーザースペースプログラムの開発とテストを行うときに役立つ手軽な方法について概略を示します。

2001-03-01
0.9.1
2002-08-14
EH3
Small update for using X11 (sockets).
0.9
2001-12-03
EH3
Initial version.

## 始めに

プログラム開発をしていると複数の Linux ディストリビューション向けにプログラムの作成やテストをする羽目に陥ることもあるでしょう。この mini-howto で概説する方法を使えば、巧妙な chroot トリックを使うことにより、テストや開発を複数の Linux ディストリビューションで行う度に再起動するのをほぼ避けられます。

簡単に言えば、「トリック」のネタは、ある Linux ディストリビューション固有のファイルを一個のディレクトリ内に収めて、プログラムの開発・テスト・デバッグに際しては chroot でそのディレクトリをルートに設定する点にあります。この方法を実現するには以下の条件があります―

1. 使用する「メイン」あるいは「プライマリ」のディストリビューションのカーネルが「セカンダリ」または chroot されるディストリビューションと(最低限何らかの)互換性があること、及び

2. 対象のアプリケーションが本来ユーザースペースのものであり(カーネルモジュールなどではなく)、特定のカーネルの機能に強く依存したりしていないこと(例えば /proc の振る舞いに依存しない)

### 著作権及び使用許諾

This document is copyright 2001 by Ed Hill III. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is available at http://www.gnu.org/copyleft/fdl.html.

## セットアップ

以下に挙げるものを前提としています―

1. 2.4 系以降のカーネルを使用する「メイン」または「プライマリ」の Linux ディストリビューションがインストール済み

2. 2 〜 4 GByte の空きパーティションが利用可能

3. 「セカンダリ」のディストリビューションのインストール(それに続けて行う開発・テスト作業)に十分な空きスペース

上述の条件を満たした上で、以下の手順により「セカンダリ」の Linux ディストリビューションをセットアップし、開発・テストなどの目的に利用します―

1. 始めに、十分な空き容量 (通常 2 〜 4 GByte) のあるハードディスクに未使用のパーティションを作成し、「セカンダリ」のディストリビューションを通常通りインストールするのに使います。

2. 「セカンダリ」のディストリビューションを、作成したパーティションにインストールしますが、起動用の設定項目に追加はしません。ここでは開発対象(テスト対象)のアプリケーションに必要なパッケージだけをインストールする点に注意してください。例えば X サーバーなどの場所食い虫を入れることはならないでしょう。

3. 「プライマリ」 の Linux ディストリビューションを再起動して、次に新しくインストールした「セカンダリ」のディストリビューションが入ったパーティションをマウントします。「セカンダリ」ディストリビューションの全ファイルを `/opt/distros/DISTRO_NAME` 等の場所にコピーします（許可属性の保持が可能な `tar -cp` などの方法が好ましい）。

4. 2 〜 3 の手順を繰り返して必要なディストリビューションをインストールします。その結果、下に示すようなディレクトリ構造になるはずです―

       /opt/distros/redhat_6.2/
                    suse_7.2/
                    mandrake_8.1/
                    debian-potato/
                    slackware_8.0/

   各々のディストリビューションをインストールした際に作成されたファイルは全て各ディレクトリ下にあります。

## 「セカンダリ」ディストリビューションの利用

「セカンダリ」ディストリビューションのインストール後は次の手順で利用できるようにします―

1. ここで重要なのは「プライマリ」Linux ディストリビューションには 2.4 系以降のカーネルを用いることで、その結果 2.4 系が備えるマルチマウントポイント機能が使えます。多くの作業では、以下に示す方法で `/proc` と `/tmp` ファイルシステムを「セカンダリ」ディストリビューションに再マウントする必要があるでしょう―

       mount --bind /proc /opt/distros/redhat_6.2/proc
       mount --bind /tmp /opt/distros/redhat_6.2/tmp

2. また、「プライマリ」ディストリビューションのソースツリーは「セカンダリ」ディストリビューションに再マウントする方が ( コピーするよりは ) 有益です―

       mount --bind /home/USER/src/PROJECT /opt/distros/redhat_6.2/USER/src/PROJECT

3. root になって次のコマンドを使います―

       xhost +localhost chroot /opt/distros/redhat_6.2
       /bin/bash

   これで「セカンダリ」ディストリビューションのシェルを使えるようになります。X Window Systemのアプリケーションを使おうとしている場合にのみ `xhost` コマンドが必須な点に注意してください。

4. 最後に、(必要に応じて) `chroot` したシェル上でユーザーを作成し、この「独立した」Linuxディストリビューションで開発、ビルド、テストを行ってください。X 用アプリケーションを使う場合は 、忘れずに`DISPLAY` 関連の変数を指定してください。

でき上がり！これで任意の「セカンダリ」ディストリビューションで好きなようにシェルが使えるようになりました。

## クレジット

この文書のアイデアは私が考え出したものではありません。( OpenNMS の) Ben Reed 氏が TriLUG のメーリングリストに投稿したものです。私にはとても有用に思われたので文書化して多くの人に知らせることにしました。

## 日本語訳について

翻訳にあたって適切な助言を頂いた JF メーリングリストの小林雅典さん、IKEDA Katsumi さんに感謝します。ありがとうございました。