SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

DebianユーザーのためのUbuntu活用法

Linux上でLinuxを稼働する

Linux実行可能ファイルをコンパイルしてブートする

 Debianパッケージuser-mode-linuxをインストールするだけで、コンパイル済みのUMLカーネルをユーザー空間でブートする準備ができました(UMLの概念の理解を深めるため、カーネルはご自身でコンパイルすることをお勧めします)。しかし、UMLの管理と構成用のuml-utilitiesパッケージをインストールしなければなりませんでした。標準ユーザーのhomeディレクトリ下で、次のように最新のカーネルを取得しました。

wget ?c http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.2.tar.bz2
tar ?xvjf linux-2.6.24.2.tar.bz2

 Linuxカーネルのコンパイルをよくご存じであれば、これ以降のコマンドは説明するまでもありません。ただし、変数の設定ARCH=umは例外です。これは、コンパイラに特別なユーザーモードアーキテクチャ向けのカーネルのビルド方法を指示する重要な設定です。今回は、x86やARM CPUアーキテクチャ向けのカーネルをコンパイルするのではなく、このコマンドを使ってユーザーモードの仮想アーキテクチャ向けのカーネルを取得しました(UMLの作成者であるJeff DikeはLinuxへのLinuxのポートとして定義しています)。

make ARCH=um defconfig

 次に、次のコマンドを使って少しだけ変更したUMLの標準構成を作成しました。

make ARCH=um menuconfig

 この時点で、Linux実行可能ファイルを作成するために完了したステップは次のとおりです。

  1. モジュールを持たないようにする(モジュールがあると、UMLのルートファイルシステム下にコンパイル済みのモジュールをインストールしなければなりません)。
     
    [ ] Enable loadable module support  --->
    
     
  2. 適切なプロセッサを設定する。
     
    Host processor type and features  --->
    
     
  3. TUN/TAP以外のネットワークサポートを含めない。
     
    UML Network Devices  --->
    [*] Virtual network device
    [ ]   Ethertap transport 
    [*]   TUN/TAP transport
    [ ]   SLIP transport
    [ ]   Daemon transport
    [ ]   VDE transport
    [ ]   Multicast transport
    [ ]   pcap transport
    [ ]   SLiRP transport
    
     
  4. PPPのサポートを無効にする。
     
    [*] Network device support  --->
    [ ]   PPP (point-to-point protocol) support
    
     
  5. セクション下のオプションをすべてチェックする。
     
    Kernel hacking  --->
    
     
  6. 最後に、次を実行する。
     
    make ARCH=um linux
    
     
著者注
 完全を期するため、ここでSKAS(Separate Kernel Address Space)カーネルパッチを紹介します。これにより、UMLの一部のセキュリティおよびパフォーマンス問題が解決されます。標準の方法はTT(Tracing Thread)モードと呼ばれます。
 

 コンパイルの終了後、linuxというファイルができました。これが、実行する実行可能ファイルです。

 すでに説明したように、コマンドラインで、UMLの実行環境であるハードウェアプラットフォームを構成できます。1つ目のUMLでは、次のスイッチ変数を設定しました。

  • ubd0=/path/to/file/uml1-root ― ルートファイルシステムのマウント元のブロックデバイスを設定します。
  • con=pty con0=null,fd:2 con1=fd:0,fd:1 ― コンソール端末の構成を処理します。
  • eth0=tuntap,the_uml_conn1 ― UML eth0のネットワークインターフェイスとホストのTAPネットワークインターフェイスとの関連付けです。eth0には、ランダムな架空のMACアドレスが割り当てられます。
  • mem=512M ― この変数では、ホストマシン上の実際の既存のメモリに関係なく、UMLが使う物理RMAメモリを設定できます。
  • umid=uml1-umid ― ホストのUMLユーティリティだけでなくデバッガでも使われる1つ目のUMLマシンの一意のIDラベルです。

 設定する変数は他にもたくさんあります。詳細については、manページを参照してください。

 これで、ブートしてコマンドを実行する準備が整いました。

linux-2.6.24.2/linux \
     ubd0=/path/to/file/uml1-root \
     con=pty con0=null,fd:2 \
     con1=fd:0,fd:1 \
     eth0=tuntap,the_uml_conn1 \
     mem=512M \
     umid=uml1-umid

 1つ目のUMLの完全なブートログについては、リスト1を参照してください。

Ubuntuをフル活用する

 この時点でビルドを完成したのは、Ubuntu 7.10の基本的なルートファイルシステムだけです。一般的なUbuntuのデスクトップを体験するには、そのデスクトップをインストールする必要がありました。すでにLANに接続していたのでこれ以上簡単なことはなく、単にコマンドを実行するだけでした。

apt-get install ubuntu-desktop

 多くのパッケージをインストールする必要があったため、この操作には時間がかかりました。また、メモリを大量消費するプロセスでもあり、ホストシステムはtmpfsの抽象化を使うため、このtmpfsを1GB以上の大きさにする必要もありました。このために、ホストファイルに次の行を挿入しました。

tmpfs     /tmp     tmpfs     size=5000M     0     2

 さらに、ホスト上に完全なリモートXセッションが必要なので、XnestのXサーバーもインストールする必要がありました。

apt-get install xnest

 また、ホスト上のリモートXセッションを許可することも必要でした。

xhost +

 最後に、UMLで、次の2つのコマンドを実行しました。

Xnest :1 &
gnome-session --display=:1 &

 これで、DebianホストのウィンドウにUbuntuのデスクトップが表示されました(図2を参照)。

図2 実行中のUML Ubuntuセッション:Debianホストシステム下で2つのUML Ubuntuセッションを実行している。
図2 実行中のUML Ubuntuセッション:Debianホストシステム下で2つのUML Ubuntuセッションを実行している。

次のページ
サンドボックスを試す

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Roberto Giorgetti(Roberto Giorgetti)

イタリアに拠点を置くITマネージャ、テクニカルライター。主にビジネス分野と工業分野でオープンソースの開発に従事。核工学の学位を持つ。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2405 2008/09/05 11:14

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー