SHOEISHA iD

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

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

japan.internet.com翻訳記事

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

Linux上でLinuxを稼働する

  • このエントリーをはてなブックマークに追加

Debianを離れずにUbuntu 7.10の世界を体験してみましょう。本稿では、Linux上で複数のLinuxインスタンスを稼働させて開発や学習に活用する方法を説明します。

  • このエントリーをはてなブックマークに追加

はじめに

 何か別のことを探しているときに面白い発見に出会うことがあります。私にもありました。お気に入りのLinuxディストリビューションであるDebian以外の別のLinuxディストリビューションを試そうと決めたときのことです。私とDebianとの出会いは1998年までさかのぼります。まだ若きJava開発者だった私は、Linux環境にJava仮想マシンをインストールしようとしたのですが、当時、これを行えるディストリビューションはDebian 2.1(slink)しかありませんでした。以来、私はDebianを使い続け、経験豊かなDebianユーザーとなり、管理者もこなすようになった今では、多くのユーザビリティの難問を手作業で解決することを楽しんでいます。

 これまでずっと他のLinuxディストリビューションの誘惑に抵抗してきて、ここ数年はあまり浮気心も起きなくなってきたのですが、Ubuntuが次第に世界的現象になってきたので、ついに試してみることを決意しました。とは言ってもDebianを離れたくはないので、仮想化技術を使うことにしました。Linux(Debian)上でLinux(Ubuntu)を稼働する、というわけです。

 現在、仮想化ソリューションはあらゆる場所で使われています。BIOS上で直接実行することもあれば、LinuxやWindows環境で実行することもあります。私は、Linuxカーネルにも、UML(User Mode Linux)フレームワークでLinuxカーネルを実行する方法があることを発見しました。UMLは、別のLinuxインスタンス(=ホスト)の内側で稼働する、ネストされたLinuxインスタンス(=ゲスト)です。ゲストLinuxは、標準アプリケーションとしてユーザー空間で稼働するので、ゲスト内の操作が原因でホストシステムがクラッシュすることはありません。

 本稿では、私が実際にUbuntuディストリビューションの2つの独立したUMLインスタンスをビルドして実行してみたプロセスと、その際に学んだことをご紹介します。私のようなDebianユーザーがUMLの可能性を学んだり、お気に入りのDebian環境から離れずにUbuntu 7.10(Gutsy Gibbon)リリースをいじったりするときのお役に立てば幸いです。

UMLのビルディングブロック

 Linuxユーザー空間を稼働させるには、次の作業が必要でした。

  1. Linuxホストシステムを構成する。
  2. 標準の完全なLinuxファイルシステムを準備してカスタマイズする。
  3. Linuxホストの内側で稼働させる特別な実行可能Linuxカーネルをコンパイルする。

 私が使用したLinuxカーネルは、執筆時点で安定していたバージョン2.6.24.2です。UMLのルートファイルシステムを作成するために、ループバックデバイスとext3ファイルシステムのサポートが必要でした。そこで、カーネル構成メニューに次の行を入力しました。

Device Drivers  --->
     [*] Block devices  --->
          <*>   Loopback device support

File systems  --->
     <*> Ext3 journaling file system support
     [*]   Ext3 extended attributes

 けれども、Linuxホストシステムの内側で複数のLinuxディストリビューションを作成して稼働させるだけでは十分ではありません。これらのLinuxディストリビューションを本当のネットワーク接続につなげることも必要でした(実際のところ、UMLはネットワークのシミュレーションと学習に適しており、複数の方法でネットワークのように構成して通信を行えます)。そこで、Linuxカーネルツリーのtuntap.txtというファイルに記載されている下記の説明に従って、Universal TUN/TAPデバイスドライバを使いました。

"It provides packet reception and transmission for user space programs. It can be seen as a simple Point-to-Point or Ethernet device, which, instead of receiving packets from physical media, receives them from user space program and instead of sending packets via physical media writes them to the user space program." (このデバイスドライバは、パケットの送受信機能をユーザー空間のプログラムに提供します。このデバイスは、単純なPoint-to-Pointデバイスまたはイーサネットデバイスと見なすことができますが、物理メディアからのパケットを受け取る代わりにユーザー空間のプログラムからのパケットを受け取り、パケットを物理メディアを通じて送信する代わりにユーザー空間のプログラムへと書き込みます。)

 TUN/TAPのサポートにより、仮想ネットワークインターフェイスを確立できます。TUNインターフェイスとTAPインターフェイスはそれぞれ、IPまたはイーサネットのネットワークインターフェイスまたはキャラクタデバイスとして動作します。私の場合は、イーサネットフレームの交換用としてホストマシン上にTAPインスタンスを作成し、一方をゲストのイーサネットネットワークインターフェイスと通信させ、もう一方をホストのカーネルと通信させました。この方法で、ゲストシステムはeth0デバイスを認識します(これは、本物のイーサネットカードがあったからです。つまり、eth0デバイスファイルはホストLinuxシステムのTAPデバイスと通信します)。

 もちろん、TUN/TAPのサポートはホストとゲストの両方のLinuxカーネルに必要です。

Device Drivers  --->
     [*] Network device support  --->
          <M>   Universal TUN/TAP device driver support

 次に、ホストをさまざまなネットワークセグメントを接続するスイッチとして機能させるときに、TCPアドレスとMACアドレスのどちらを使うかを決める必要がありました。TCPアドレスの場合、ホストはルーター(レイヤ3スイッチ)になり、MACアドレスの場合はイーサネットブリッジ(レイヤ2スイッチ)になります。私はMACアドレスのソリューションを選択しました。この選択は、イーサネットLAN用の追加の使用可能なIPアドレスがあり、さらに、LAN上にインターネットへの出口となるルーターの役割を果たすマシンがあるという前提の上でのものです。もちろん、カーネルのホストマシンはイーサネットブリッジをサポートしている必要があります。

Networking  --->
     Networking options  --->
          <M> 802.1d Ethernet Bridging

 さらに、ホストマシンにbridge-utilパッケージをインストールしておく必要がありました。

apt-get install bridge-util

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
Linuxホストのセットアップ

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

  • このエントリーをはてなブックマークに追加
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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング