Gentoo Linux x86 ハンドブック

Sven Vermeulen  Author
Roy Marples  Author
Daniel Robbins  Author
Chris Houser  Author
Jerry Alexandratos  Author
Seemant Kulleen  Gentoo x86 Developer
Tavis Ormandy  Gentoo Alpha Developer
Jason Huebel  Gentoo AMD64 Developer
Guy Martin  Gentoo HPPA developer
Pieter Van den Abeele  Gentoo PPC developer
Joe Kallar  Gentoo SPARC developer
John P. Davis  Editor
Pierre-Henri Jondot Editor
Eric Stockbridge  Editor
Rajiv Manglani  Editor
Jungmin Seo  Editor
Stoyan Zhekov  Editor
Jared Hudson  Editor
Colin Morey  Editor
Jorge Paulo  Editor
Carl Anderson  Editor
Jon Portnoy  Editor
Zack Gilburd  Editor
Jack Morgan  Editor
Benny Chuang  Editor
Erwin  Editor
Joshua Kinard  Editor
Tobias Scherbaum  Editor
Xavier Neys  Editor
Grant Goodyear  Reviewer
Gerald J. Normandin Jr.  Reviewer
Donnie Berkholz  Reviewer
Ken Nowack  Reviewer
Lars Weiler  Contributor
おぎうち やすお  翻訳
わただ ゆうすけ  翻訳
せーいち  翻訳
五十嵐 正尚  翻訳
武田 洋之  翻訳
村上 誠  翻訳
小林 弘樹  翻訳
真藤 直観  翻訳
萩原 佳明  翻訳
松葉  翻訳
中野 正智  翻訳
飴谷 茂寛  翻訳
村上 卓  翻訳
田中 裕也  翻訳
増田 昌也  翻訳

更新日 2009年 10月 4日
このドキュメントのオリジナルバージョン の更新日は2009年 11月 16日

目次:

A. Gentooをインストールする

1. Gentoo Linuxのインストールについて

1.a. はじめに

ようこそ!

Gentooへようこそ。あなたは選択の自由とパフォーマンスの追求を 許された世界に足を踏み入れようとしています。Gentooとは選択です。 Gentooをインストールするとき、あなたはこの事実に何度か向き合うことになります。 どのくらい自分でコンパイルするのか、どのようにGentooをインストールするのか、 どのシステムロガーを使うのか、といったことをあなたが自分で決めるのです。

Gentooはシンプル、かつフレキシブルにデザインされた、 速くて先進的なメタディストリビューションです。 Gentooはディストリビューションとしてフリーソフトウェア (訳註: フリーではないものもあります)の上に覆い被さっていますが、 それをユーザーから覆い隠すようなことはしません。 Portage、これはGentooの使うパッケージ管理システムですが、 誰もが簡単にソースコードを見たり変更したりできるように、 Pythonで書かれています。 Gentooのパッケージングシステムはソースコードを使いますし (とはいえ、コンパイル済みパッケージのサポートもあります)、 Gentooの設定も通常のテキストファイルを通して行なわれます。 一言でいえば「Openness Everywhere」です。

選択がGentooを動かすのであって、Gentooが選択させるのではない、 ということを理解する事はとても重要です。 私たちは、あなたにあなたの望まないことを強いることのないよう、 十分気を付けています。もし、私たちがそうしていると感じたら、それをバグ報告してください。

インストールの流れはどんな感じ?

Gentooのインストールは、2章から11章に対応した、 10段階の手順に分けることができます。 それぞれの段階を終えたときの状態は、以下の通りです。

選択肢を提示するときには、 それぞれの良い点と悪い点について説明するようにしています。 そのあとで、タイトルに"一般的な選択:"と明記された、 一般的な選択肢を提示します。 その他の選択肢には"もう一つの選択:"と記されています。 一般的な選択を私たちが推奨しているとは考えないでください。 それは私たちが、大多数のユーザーが選択すると考えている選択肢です。

ある場面では任意的な段階を挟むこともできます。 そのような段階には"自由選択:"と記されています。 任意選択ですのでGentooのインストールに絶対必要なものではありません。 その中には事前の決定の影響を受けるものもあります。 そのようなときは、その決定時とその段階の説明直前の双方で、 そのことについての説明があります。

どんなことを選べるの?

Gentooは様々な方法でインストールできます。私たちのインストールCDや、 インストール済みのデストリビューション、起動可能なCD(Knoppixなど)、 ネットワークブート環境、緊急用フロッピー、 といったものの中から適当なものを適宜ダウンロードして、 そこからインストールすることができます。

この文書ではGentooインストールCDを使ったインストールと、一部、 ネットワークブートを扱います。ここでは個々のパッケージについて、 最新バージョンをインストールするものとして話が進められています。 ネットワークレス・インストールを行ないたい場合は、 ネットワークレス環境でのインストール方法が載っているGentoo 2008.0 ハンドブック(英語)をご覧ください。

また、GRP (Gentoo Reference Platform、コンパイル済みパッケージのコレクション。 Gentooインストールの終了と同時にシステムを使えるようにするためのもの) を利用しようと考えている場合は必ずGentoo 2008.0 ハンドブック の指示に従うようにしてください。

その他のインストール手段については、 Alternative Installation Guide (日本語訳)をご覧ください。 Gentoo Installation Tips & Tricks(日本語訳)という文書も参考になるでしょう。 そのインストールの説明が細か過ぎると感じたときは、 Documentation Resources(日本語訳)にある Quick Installation Guideを試してみてください (あなたのアーキテクチャにそのような文書があれば)。

選べることはまだあります。 システム全体をスクラッチからコンパイルすることもできますし、 コンパイル済み環境を利用して、Gentoo環境をすぐに立ち上げることもできます。 もちろんその中間の方法として、全てをコンパイルするのではなく、 半分出来上がった状態のシステムからコンパイルを始めることもできます。

トラブル?

インストール中に(またはインストール文書に)何か問題を見つけたら、 バグ・トラッキング・システム(訳注:日本ユーザ会bugzilla)で 既知のバグとして報告されていないかどうか、確認してみてください。 もし無いようであれば、私たちが対応できるように、その問題をバグ報告してください。 その(あなたが報告した)バグを担当する開発者たちを恐れないでください。 取って喰われるようなことは滅多にありませんから。

あなたが今読んでいる文書は、特定のアーキテクチャ向けということになっていますが、 他のアーキテクチャの情報も、その中に紛れ込んでしまっているかもしれない、 ということを一応、先に言っておきます。これはGentooハンドブックの多くの部分が、 全てのアーキテクチャに共通のソースコードを使用していることに因ります (重複作業を減らして開発リソースを節約するため)。 混乱しないように、このような部分は最小限に抑えていきたいと思っています。

その問題が、ユーザーの問題(文書をよく読んだにもかかわらず起きたあなたのミス)なのか、 ソフトウェアの問題(インストール/文書をよくテストしたにもかかわらず起きた私たちのミス)なのか、 はっきりしないときには、irc.freenode.netの#gentooに気軽に参加してみてください。 もちろん、そんなときじゃなくても全然かまいません :)

Gentooについて何か分からないことがあったら、 Gentoo Documentation (日本語訳)Frequently Asked Questions (日本語訳)や、 フォーラムFAQsを見てください。 そこで解決できないときは、irc.freenode.netにある私たちのIRCチャンネル、 #gentoo(訳注:GentooJPのチャネル #gentoo-jaもあります)で質問してください。誰もいなかったら? ご安心ください、私たちのうちの何人かはIRC常駐フリークです :-)

2. 適切なインストールメディアの選択

2.a. ハードウェアの必要条件

はじめに

最初に、Gentooのインストールに必要なハードウェアの条件を掲載します。

ハードウェアの必要条件

Minimal CD LiveCD
CPU i486以上 i686以上
メモリ 64MB 256MB
ディスクの空き容量 1.5GB(スワップ領域を除く)
スワップ領域 最低256MB

2.b. GentooインストールCD

はじめに

GentooインストールCDは独立したGentoo環境を含むブート可能CDです。 これらのCDを使うとLinuxをCDから起動することができます。 起動時に、接続されたハードウェアが検出されて適切なドライバが読み込まれます。 これらのCDは、Gentooの開発者によってメンテナンスされています。

どのインストールCDでも、ブート、ネットワーク設定、パーティション構成、インターネット経由でのGentooのインストールが可能です。

Gentoo MinimalインストールCD

MinimalインストールCDはinstall-x86-minimal-2008.0.isoと呼ばれ、ディスク容量を57MBしか使いません。 このCDをGentooのインストールに使うには、必ずインターネット接続が必要です。

stage3 tarball

stage3 tarballは最小限のGentoo環境を含んだアーカイブで、 このマニュアルに従ってインストールを進めるのに適しています。 以前は、Gentooハンドブックでは3つのstage tarballから1つを選ぶインストール方法を説明していました。 現在でもstage1とstage2 tarballを提供していますが、公式なインストール手順ではstage3 tarballを使用します。 もしstage1またはstage2 tarballからインストールしたいのであれば、 Gentoo FAQ内のHow do I Install Gentoo Using a Stage1 or Stage2 Tarball?日本語訳)を読んでください。

stage3 tarballはLiveCD上にはなく、どのGentoo公式ミラーサイト日本語訳)(訳注:日本語訳は古いかもしれません。英語版の「日本」の部分へのリンクを張っておきます。)上の、 releases/x86/2008.0/current-stages/からでもダウンロードすることができます。

2.c. GentooインストールCDのダウンロード、書き込み、ブート

インストールCDのダウンロードと書き込み

1つのGentooインストールCDを使うことを決めましたね(訳注:使用するGentooインストールCDを選んだことを前提に進めます)。 まずは選択したインストールCDをダウンロードして書き込むことから始めます。 先に使用可能なインストールCDについて述べましたが、それらはどこで見つけられるのでしょう?

すべてのインストールCDはGentoo公式ミラーサイト日本語訳)(訳注:英語版の「日本」の部分)からダウンロードできます。 インストールCDはreleases/x86/2008.0/current-isoにあります。

そのディレクトリの中にはISOファイルがあり、それらはCD-Rに書き込むことができる完全なCDイメージです。

もしダウンロードしたファイルが破損していないかどうか心配であれば、 ファイルのMD5チェックサムが元のファイルのもの(install-x86-minimal-2008.0.iso.DIGESTSにあります)と一致しているかどうか確認できます。 Linux/Unixではmd5sumツールで、Windowsではmd5sum.exeで、 MD5チェックサムを調べることができます。

ダウンロードしたファイルの正当性を確認するもう一つの方法は、 GnuPGを使って提供されているデジタル署名(.ascで終わるファイル)を確認する方法です。 署名ファイルをダウンロードして公開鍵を取得します。

コード表示 3.1: 公開鍵を取得

$ gpg --keyserver subkeys.pgp.net --recv-keys 17072058

そして署名を確認します。

コード表示 3.2: デジタル署名を確認

$ gpg --verify <signature file> <downloaded iso>

ダウンロードしたISOファイルを書き込む時には、RAWモード(訳注:ISOファイルを普通のファイルとしてCDに書き込むのではなく、CDイメージとしてCD上に再現させること)を選択しなくてはなりません。 その方法は使用するプログラムによってかなり異なります。 ここではcdrecordK3Bについて述べます。 より多くの情報はGentoo FAQ日本語訳)にあります。

インストールCDのブート

インストールCDの書き込みが終わったら、ブートしましょう。 すべてのCDをCDドライブから取り除き、システムをリブートしてBIOSに入ります。 BIOSによりますが、多くの場合はDELかF1またはESCを押せば入れます。 BIOS内では、CD-ROMがハードディスクよりも前に試されるように起動順序を変更します。 これは多くの場合「CMOS Setup」の中にあります。 この設定をしなかった場合、システムはCD-ROMを無視して、ただハードディスクからリブートしてしまうでしょう。

ここで、CD-ROMドライブにインストールCDを入れてリブートします。ブートプロンプトが表示されるはずです。 その画面では、デフォルトのブートオプションで起動を開始するにはEnterを押し、 カスタムブートオプションで起動するにはブートオプションを含めてカーネルを指定しEnterを押します。

カーネルを指定する? そうです、インストールCDでは何種類かのカーネルが収められています。 デフォルトはgentooです。他には特定のハードウェア向けのものと、フレームバッファを無効にした-nofb版のカーネルがあります。

利用可能なカーネルの概要を次に記します。

カーネル 説明
gentoo マルチCPUをサポートするデフォルトの2.6カーネル
gentoo-nofb フレームバッファのサポートはないこと以外はgentooと同じです
memtest86 システムRAMのエラーをチェックします

カーネルにオプションを渡すこともできます。 それらは任意に有効・無効を切り替えることのできる追加設定を表します。

ハードウェアオプション

acpi=on
ACPIサポートを読み込み、acpidデーモンがCDによって起動時に開始されるようにします。 これはあなたのシステムが正しく機能するためにACPIが必須である場合のみ必要です。 これはHyperthreadingサポートに必要ではありません。
acpi=off
ACPIを完全に無効にします。これは一部の古いシステムにのみ役に立ち、APMを使用するために必要です。 これはプロセッサのHyperthreadingサポートをすべて無効にします。
console=X
CDへのシリアルコンソールアクセスをセットアップします。 1つ目のオプションはデバイスで、x86では通常はttyS0です。 後ろにはコンマで区切られた接続オプションが続きます。デフォルトは9600,8,n,1です。
dmraid=X
device-mapper RAIDサブシステムにオプションを渡します。 オプションは引用符で囲まれていなくてはなりません。
doapm
APMドライバサポートを読み込みます。これを使うにはacpi=offを指定しておく必要があります。.
dopcmcia
PCMCIAとCardbusハードウェアのサポートを読み込みます。 これはPCMCIA/Cardbusデバイスから起動する場合のみ必要です。
doscsi
ほとんどのSCSIコントローラのサポートを読み込みます。 これは、SCSIサブシステムを利用するので、USBデバイスから起動する場合も必須です。
sda=stroke
BIOSが容量の大きなハードディスクを扱えなくても、ディスク全体を扱う(訳注:原文ではpartition)ことができるようにします。 このオプションは古いBIOSを搭載しているコンピュータでのみ使用します。 sdaをこのオプションが必要なデバイスに変更してください。
ide=nodma
カーネルでDMAを強制的に無効にします。一部のIDEチップセットやCD-ROMドライブに必要です。 もしシステムにIDE CD-ROMの読み取りに問題があるならば、このオプションを試してください。 これは、デフォルトのhdparmの設定の実行も無効にします。
noapic
比較的新しいマザーボードで利用可能であるAdvanced Programmable Interrupt Controller(訳注:APIC)を無効にします。 それ(訳注:APIC)は古いハードウェアでは問題を引き起こすことがあると知られています。
nodetect
デバイスの自動認識とDHCPへの問い合わせを含む、CDによって行われるすべての自動認識を無効にします。 これは問題のあるCDやドライバのデバッグに役立ちます。
nodhcp
検出されたネットワークカードにおける、DHCPへの問い合わせを無効にします。 これは静的アドレスのみのネットワークを利用する場合に役立ちます。
nodmraid
device-mapper RAIDサポートを無効にします。 オンボードIDE/SATA RAIDコントローラを使用する場合などに使います。
nofirewire
Firewireモジュールを読み込みません。 FirewireハードウェアがCDからの起動に問題を起こしている場合にのみ必要です。
nogpm
gpmコンソールマウスサポートを無効にします。
nohotplug
hotplugとcoldplugのinitスクリプトを起動時に読み込まれないようにします。 これは問題のあるCDやドライバのデバッグに役立ちます。
nokeymap
US以外のキーボードレイアウトの選択に使われる、keymapの選択を無効にします。
nolapic
ユニプロセッサカーネルにおいて、ローカルAPICを無効にします。
nosata
SATAモジュールを読み込みません。 SATAサブシステムに問題がある場合に使います。
nosmp
SMP(対称型マルチプロセッシング)が有効であるカーネルにおいて、SMPを無効にします。 これは特定のドライバやマザーボードにおいてSMPに関連した問題がある場合のデバッグに役立ちます。
nosound
サウンドのサポートとボリューム設定を無効にします。 サウンドのサポートがシステムに問題を起こす場合に役立ちます。
nousb
USBモジュールを自動的に読み込みません。 USBに関連した問題のデバッグに役立ちます。
slowusb
IBM BladeCenterで使用されているような遅いUSB CD-ROMのために、一時停止をいくつか追加します。

ボリュームとデバイスの管理

doevms
IBMによって開発されたEVMS (Enterprise Volume Management System)のサポートを有効にします。 これをlvmと同時に使用することは安全ではありません。
dolvm
LinuxのLogical Volume Managementを有効にします。 これをevmsと同時に使用することは安全ではありません。

その他のオプション

debug
デバッグ用のコードを有効にします。 これは多くのデータを画面に表示するため厄介になるかもしれません。
docache
実行時に必要なCD-ROM内のデータ全体をRAMにキャッシュし、 「umount /mnt/cdrom」を実行して別のCD-ROMのマウントできるようにします。 このオプションは最低でもCD-ROMのサイズの2倍の、利用可能なRAMを必要とします。
doload=X
initial ramdiskに、記載されたすべてのモジュールとそれらが依存するモジュールを読み込ませます。 Xをモジュール名に置き換えてください。
コンマで区切って複数のモジュールを指定することができます。
dosshd
sshdを起動時に開始します。遠隔インストールを行う際に役立ちます。
passwd=foo
rootパスワードを、イコールの後に記述されたものに設定します。 (訳注:このオプションなしでは)rootパスワードにスクランブルをかけてしまうため、dosshdを使う際には必須です。
noload=X
initial ramdiskに、問題を起こしているかもしれない特定のモジュールの読み込みをスキップさせます。 構文はdoloadのものと同じです。
nonfs
portmapとnfsmountを起動時に開始しません。
nox
X(訳注:X Window System)が有効であるLiveCDにおいて、Xを自動的に起動しません。 その代わりに、コマンドラインに降ります。
scandelay
初期化の遅いデバイスが準備完了になるのを待つために、CDに特定の起動過程において10秒の一時停止を行わせます。
scandelay=X
初期化の遅いデバイスが準備完了になるのを待つために、CDに特定の起動過程において一時停止を行わせる秒数を指定します。 Xを一時停止を行う秒数に置き換えてください。

注意: CDは「do」から始まるオプションの前に「no」から始まるオプションを調べるので、どのオプションも指定した順番どおりに上書きすることができます。

では、CDをブートしましょう。 (デフォルトのgentooカーネルでは困るなら)カーネルとブートオプションを選択します。 例として、gentooカーネルをカーネルパラメータにdopcmciaを指定して起動する方法を示します。

コード表示 3.3: インストールCDをブート

boot: gentoo dopcmcia

最初にブートスクリーンとプログレスバーが表示されるはずです。 US以外のキーボード配列のシステムにGentooをインストールするのであれば、 詳細モードに変更しプロンプトに従うために、必ずすぐにAlt-F1を押してください。 10秒以内に選択しなければ、デフォルト(USキーボード)が選択され、ブートプロセスが継続されます。 ブートプロセスが完了すると、「Live」Gentoo Linuxにスーパーユーザ「root」として自動でログインします。 root(「#」)プロンプトが現在のコンソールに表示されるはずです。 また、Alt-F2やAlt-F3、Alt-F4を押すことによって他のコンソールに切り替えることもできます。 最初のコンソールに戻るにはAlt-F1を押します。

ここからは、特別なハードウェアの構成から続けます。

特別なハードウェアの構成

インストールCDは、ブート時に接続されたハードウェアデバイスを検出し適切なカーネルモジュールを読み込みます。 ほとんどの場合はうまく動作しますが、ときどき必要なカーネルモジュールが読み込まれないことがあります。 もしPCIデバイス自動検出機能がシステムのハードウェアを見逃したら、適切なカーネルモジュールを手動で読み込む必要があります。

次の例では8139tooモジュール(特定のネットワークカード用)を読み込みます。

コード表示 3.4: カーネルモジュールを読み込む

# modprobe 8139too

任意自由選択: ユーザアカウント

インストール環境を他の人に使わせる予定がある場合や、 (セキュリティの都合上)root権限なしでirssiを使ってチャットをしたい場合は、 必要なユーザアカウントを作成し、rootのパスワードを変更する必要があります。

rootのパスワードを変更するには、passwdユーティリティを使います。

コード表示 3.5: rootパスワードを変更

# passwd
New password: (新しいパスワードを入力)
Re-enter password: (パスワードをもう一度入力)

ユーザアカウントを作成するには、まずユーザを作成して、次にパスワードを設定します。 この作業にはuseraddpasswdを使います。 次の例では、「john」というユーザを作成します。

コード表示 3.6: ユーザアカウントを作成

# useradd -m -G users john
# passwd john
New password: (アカウント用のパスワードを入力)
Re-enter password: (パスワードをもう一度入力)

suを使って、ユーザIDをrootから新しく作ったユーザへ変更することができます(訳注:権限の変更)。

コード表示 3.7: ユーザIDを変更

# su - john

任意自由選択:インストール中のドキュメント閲覧

インストールの間に(CDからまたはオンラインで)Gentooハンドブックを見たいのであれば、 先にユーザアカウントを作成しておいてください(任意自由選択:ユーザアカウントを見てください)。 その後、Alt-F2を押して新しいターミナルでログインしてください。

CD上のドキュメントを見たいならば、すぐにlynxを起動します。

コード表示 3.8: CD上のドキュメントを閲覧

# lynx /mnt/cdrom/docs/html/index.html

しかしながら、CD上にあるものよりも新しいことがあるので、オンラインのGentooハンドブックを使うことが望まれます。 CD上のときと同じようにlinksを使うことができますが、 先にネットワーク設定の章を完了させる必要があります(でないとドキュメントを見るためにインターネットを使うことはできないでしょう)。

コード表示 3.9: オンラインドキュメントの閲覧

# lynx http://www.gentoo.org/doc/en/handbook/handbook-x86.xml

Alt+F1を押せば元のターミナルに戻ることができます。

Optional: Starting the SSH Daemon

もし、Gentooのインストールの間に他のユーザにコンピュータを使わせたい場合は(それらのユーザにGentooのインストールの手助けをしてもらうか、それどころかインストールそのものをしてもらうためかもしれません)、 ユーザアカウントを作ってあげる必要があり、 さらにはrootパスワードをも教える必要があるかもしれません(そのユーザを完全にに信頼している場合のみ教えてください)。

SSHデーモンを起動するには、次のコマンドを実行します。

コード表示 3.10: SSHデーモンを開始

# /etc/init.d/sshd start

sshdを使うためには、先にネットワークを設定する必要があります。 ネットワーク設定の章から続けてください。

3. ネットワーク設定

3.a. 自動的なネットワークの検知

動いているかも?

もしあなたのシステムがDHCPサーバを備えたEthernetネットワークに接続されているなら、おそらく、既にネットワーク設定は自動的に完了しているでしょう。 その場合には、LiveCD内のネットーワークが必要な各種コマンド( sshscppingirssiwgetlinks など)を使うことができるでしょう。

また、ネットワークが設定されている場合には、/sbin/ifconfigコマンドで、 loインターフェースと並んで、たとえばeth0のようにリストされるはずです。

コード表示 1.1: 動作中のネットワークのための/sbin/ifconfigコマンド

# /sbin/ifconfig
(...)
eth0      Link encap:Ethernet  HWaddr 00:50:BA:8F:61:7A
          inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::50:ba8f:617a/10 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1498792 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1284980 errors:0 dropped:0 overruns:0 carrier:0
          collisions:1984 txqueuelen:100
          RX bytes:485691215 (463.1 Mb)  TX bytes:123951388 (118.2 Mb)
          Interrupt:11 Base address:0xe800 

自由選択: proxyの設定

インターネット接続にproxyを使用している場合には、 インストール中にproxy情報について設定する必要があるかもしれません。 proxyの設定はとても簡単です。 proxyサーバーの情報を含むように値を設定するだけです。

多くの場合、proxyサーバーのホスト名を変数として定義するだけです。 例として、proxy.gentoo.orgというサーバーにport 8080で接続するとしましょう。

コード表示 1.2: proxyサーバーの定義

(proxyがHTTPの通信をフィルタする場合)
# export http_proxy="http://proxy.gentoo.org:8080"
(proxyがFTPの通信をフィルタする場合)
# export ftp_proxy="ftp://proxy.gentoo.org:8080"
(proxyがRSYNCの通信をフィルタする場合)
# export RSYNC_PROXY="proxy.gentoo.org:8080"

proxyがユーザ名やパスワードを必要とするなら、次の文法で値を定義する必要があります。

コード表示 1.3: proxy変数にユーザ名/パスワードを追加

http://username:password@proxy.gentoo.org:8080

ネットワークのテスト

パケットがインターネットに届いているか、 DNSで名前が正しく解決できるか、といったことを確認するために、 プロバイダのDNSサーバー(/etc/resolv.confに書かれている) やWebサイトにpingをしましょう。

コード表示 1.4: さらにネットワークのテスト

# ping -c 3 www.gentoo.org

この時点でネットワークを使えているならば、残りのセクションを飛ばしてディスクの準備から続けることができます。 もし使えていないなら、この次へ進んでください。

3.b. 自動でのネットワーク設定

ネットワークが動いていない場合には、 いくつかのインストールメディアではnet-setup(通常のネットワーク用)や、 pppoe-setup(ADSLユーザー用)、pptp (PPTPユーザー用-x86、amd64、 alpha、ppc、そしてppc64で利用可能)が使用できます。

もしインストールメディアにそのツールが含まれていなかったり、 ネットワークがそれでも動かなかったら、 手動でのネットワークの設定 から続けてください。

一般的な選択: net-setupの使用

もし自動でネットワークが設定されなかった場合に、 一番単純に設定を行なう方法はnet-setupスクリプトを実行することです。

コード表示 2.1: net-setupスクリプトの起動

# net-setup eth0

net-setupはネットワーク環境に対するいくつかの質問をします。 すべての質問が終わったときに、ネットワーク接続ができているはずです。 確認のために上に書いたネットワークのテストを行なってください。 もしそのテストがいい結果なら、おめでとう! Gentooをインストールする準備ができました。 残りのセクションを飛ばして ディスクの準備 へ行ってください。

まだネットワークが接続されていないのなら、手動でのネットワークの設定から続けてください。

もう一つの選択: PPPの使用

インターネットに接続するためにPPPoEが必要な環境のために、 インストールCD(どのバージョンでも)には、その接続を簡単にするためのppp が含まれています。 それに付属しているpppoe-setupスクリプトを接続を設定するために使用してください。 そして、 ADSLモデムに接続されたEthernetデバイス用に、ユーザ名、パスワード、 DNSサーバーのIPアドレス、基本的なファイアウォールが必要か否かを入力します。

コード表示 2.2: pppを使用する

# pppoe-setup
# pppoe-start

もし何かがうまくいかなかったら、 ユーザ名とパスワードを正しく入力したかどうかを、 /etc/ppp/pap-secretsまたは /etc/ppp/chap-secretsを見て再確認してください。 また、正しいEthernetデバイスを使用していることも確認しください。 もし、Ethernetデバイスが存在しない場合には、 適切なネットワークモジュールを読み込む必要があります。 この場合には、適切なモジュールを読み込む方法を説明している 手動でのネットワークの設定 から続けてください。

ネットワークが動いたら、ディスクの準備へ行ってください。

もう一つの選択: PPTPの使用

PPTPサポートが必要なら、pptpclientというインストールCDに入っているツールを使用することができます。 しかし、その前に設定が正しいか確認する必要があります。 /etc/ppp/pap-secretsまたは/etc/ppp/chap-secretsを正しいusername/passwordになるように記述します。

コード表示 2.3: /etc/ppp/chap-secretsの編集

# nano -w /etc/ppp/chap-secrets

それから/etc/ppp/options.pptpを必要なら編集します。

コード表示 2.4: /etc/ppp/options.pptpの編集

# nano -w /etc/ppp/options.pptp

これらが全部済んだら、ただpptpを実行し(コマンドラインオプションとoptions.pptpの両方は設定できません)サーバーへ接続します。

コード表示 2.5: dial-inサーバーへ接続

# pptp <server ip>

次は、ディスクの準備へ行ってください。

3.c. 手動でのネットワークの設定

適切なネットワークモジュールを読み込む

インストールCDは、ブートするときにすべてのハードウェアデバイスを検出、 ハードウェアをサポートするための適切なカーネルモジュール(ドライバー)を読み込もうとします。 大部分のケースでは、これはとても良く機能します。 ただ、いくつかのケースでは、必要なカーネルモジュールが自動的に読み込まれません。

net-setuppppoe-setupが失敗するというのは、 ネットワークカードが見つからなかった可能性があります。 この場合には、手動で適切なカーネルモジュールを読み込まないといけません。

ネットワーク用に提供しているカーネルモジュールを見るにはls を使用します。

コード表示 3.1: 提供されているモジュールの検索

# ls /lib/modules/`uname -r`/kernel/drivers/net

使用しているネットワークカードが見つかったら、 modprobeを使ってそのカーネルモジュールを読み込みます。

コード表示 3.2: modprobeを使用してカーネルモジュールを読み込む

(この例では、pcnet32モジュールを読み込みます)
# modprobe pcnet32

今ネットワークカードが検出されたかどうかチェックするために、 ifconfigを使用してください。 検出されたネットワークカードは次のように表示されるでしょう。

コード表示 3.3: ネットワークが機能しているかテスト 成功した場合

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr FE:FD:00:00:00:00  
          BROADCAST NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

しかし、次のようなエラーメッセージが出たなら、 そのネットワークカードは検出されていません。

コード表示 3.4: ネットワークが機能しているかテスト 失敗した場合

# ifconfig eth0
eth0: error fetching interface information: Device not found

もし、あなたのシステムに複数のネットワークカードが存在する場合には、 その名前はeth0eth1など、となります。 動かしたいネットワークカードを確認してください。 そして、このドキュメントを通してその名前を使用してください。 このドキュメントでは、ネットワークカードはeth0を想定しています。

ネットワークが検出された場合には、 net-setupまたはpppoe-setupをやり直してください(今は動くはずです)。 また、パワーユーザーの方々のために、 マニュアルでのネットワークの設定の方法を説明します。

ネットワークセットアップのベースになる次のセクションを一つ選択してください。

DHCPを使用する

DHCP (Dynamic Host Configuration Protocol)を使用すると、 自動的にネットワーク情報 (IPアドレス、ネットマスク、ブロードキャストアドレス、ゲートウェイ、 ネームサーバーなど)を受けとることが可能になります。 これはDHCPサーバーがネットワーク内に存在する場合にのみ動きます (または、プロバイダがDHCPサービスを提供している場合)。 自動的にこのネットワークインタフェース情報を受け取るためには、 dhcpcdを使用します。

コード表示 3.5: dhcpcdを使用する

# dhcpcd eth0
ネットワーク管理者によっては、hostnameとdomainnameは
DHCPサーバーが提供するものを使うように、と要求するかもしれません。
このような場合には、下のコマンドを使ってください。
# dhcpcd -HD eth0

もしこれが動いたら(Googleのように、 いくつかのインターネットサーバーにpingしてみてくてください)、 先に進む用意ができたことになります。 残りのセクションを飛ばして、ディスクの準備から続けてください。

無線LANアクセスの準備

注意: iwconfigコマンドが入っているはx86、AMD64、PPC用のインストールCDだけです。 それ以外の場合にも、linux-wlan-ng projectの指示に従うことで動かすことができるでしょう。

もし無線LAN(802.11)用のカードを使用しているのなら、 他のことをする前に、まず無線LANの設定をする必要があります。 現在の無線LANの設定を見るために、iwconfigを使います。 iwconfigを実行すると、次のような表示されるかもしれません。

コード表示 3.6: 現在の無線LAN設定の表示

# iwconfig eth0
eth0      IEEE 802.11-DS  ESSID:"GentooNode"                                   
          Mode:Managed  Frequency:2.442GHz  Access Point: 00:09:5B:11:CC:F2    
          Bit Rate:11Mb/s   Tx-Power=20 dBm   Sensitivity=0/65535               
          Retry limit:16   RTS thr:off   Fragment thr:off                       
          Power Management:off                                                  
          Link Quality:25/10  Signal level:-51 dBm  Noise level:-102 dBm        
          Rx invalid nwid:5901 Rx invalid crypt:0 Rx invalid frag:0 Tx          
          excessive retries:237 Invalid misc:350282 Missed beacon:84            

注意: デバイス名がeth0の代わりにwlan0ra0となるワイヤレスのカードがあります。 iwconfigコマンドをコマンドラインパラメターなしで実行し、 正しいデバイス名を取得してください。

大部分のユーザーにとって、重要な設定の変更はESSID(無線LANネットワーク名と呼ばれている)またはWEPキーの2つだけです。 上記リストに載っているESSIDとアクセスポイントアドレスがあなたのアクセスポイントになっていて、WEPを使っていない場合には、すでに無線LANは動いています。 もし、ESSIDを変更したい場合や、WEPキーを加えたい場合には、次のコマンドを実行します。

注意: 無線LANネットワークにWPAまたはWPA2が設定されている場合は、wpa_supplicantを使う必要があるでしょう。 GentooLinuxでの無線LANの構成に関するより詳しい情報は、 Gentooハンドブックのワイヤレスネットワーク の章をみてください。

コード表示 3.7: ESSID/WEPキーの変更

(ネットワーク名を"GentooNode"とセットしています)
# iwconfig eth0 essid GentooNode

(16進数でWEPキーを設定します)
# iwconfig eth0 key 1234123412341234abcd

(プレフィクスとして"s:"を付け、ASCII文字を設定します)
# iwconfig eth0 key s:some-password

iwconfigを使用して、再度ネットワークの設定を確認します。 一度無線LANが動いてしまえば、次章(ネットワーク用語を理解する) で記述されているIPレベルのネットワーク設定をすることができます。 また、前述したnet-setupを使用することもできます。

ネットワーク用語を理解する

注意: もし、IPアドレス、ブロードキャストアドレス、ネットマスク、 ネームサーバーといったものを知っているのならば、 このサブセクションを飛ばし、ifconfigとrouteの設定 から続けてください。

上記のすべての方法が失敗する場合には、ネットワークを手動で設定する必要があります。 これは全然難しくありません。 しかし、あなたが満足のいくネットワーク設定ができるために、ある程度のネットワークの知識が必要です。 これを読み終わった後には、ゲートウェイとは何か、 ネットマスクは何のためにあるのか、 ブロードキャストアドレスはどうやって作るのか、 なぜネームサーバーが必要なのかがわかります。

ネットワークの中では、各ホストはIPアドレス(Internet Protocolアドレス)で識別されます。 アドレスは0から255までの4つの数字の組合せです。 これはわかりやすくするためで、 実際には、IPアドレスは32ビット(0と1の列)です。 この例を見てください。

コード表示 3.8: IPアドレスの例

IP Address (numbers):   192.168.0.2
IP Address (bits):      11000000 10101000 00000000 00000010
                        -------- -------- -------- --------
                           192      168       0        2

IPアドレスはアクセス可能なネットワークすべての中でユニークです(つまり、接続可能なすべてのホストは異なるIPアドレスを持っているはずです)。 内部のホストと外部のホストを区別するために、IPアドレスは2つの部分、 ネットワーク部と、ホスト部に分割されています。

その分割は、先頭が1の連続で、それに続いて0の連続になる値を持つnetmaskによって行なわれます。 IPアドレスの1の部分をネットワーク部、0の部分をホスト部とします。 通常に、ネットマスクはIPアドレスと同じように記述されます。

コード表示 3.9: ネットワーク部/ホスト部の分割例

IP-address:    192      168      0         2
            11000000 10101000 00000000 00000010
Netmask:    11111111 11111111 11111111 00000000
               255      255     255        0
           +--------------------------+--------+
                    Network              Host

言い換えると、192.168.0.14はこのサンプルネットワーク内に存在するホストですが、192.168.1.2は違います。

ブロードキャストアドレスはネットワーク部は同じネットワークアドレスを使用し、 ホスト部はすべて1のIPアドレスです。 ネットワーク上のすべてのホストがこのIPアドレスに反応します。 これはブロードキャストパケットのためのものです。

コード表示 3.10: ブロードキャストアドレス

IP-address:    192      168      0         2
            11000000 10101000 00000000 00000010
Broadcast:  11000000 10101000 00000000 11111111
               192      168      0        255
           +--------------------------+--------+
                     Network             Host

インターネットに接続するためには、 どのホストでインターネット接続を行なうのか知っている必要があります。 このホストはゲートウェイと呼ばれています。 このホストは普通のホストなので、普通のIPアドレスを持っています。 (例えば192.168.0.1)

すべてのホストがそのホスト自身のIPアドレスを持っていると前述しました。 各ホストに名前で(IPアドレスの代わりに)アクセスすることができるように、 名前(たとえばdev.gentoo.gr.jp)からIPアドレス(たとえば 64.5.62.82)に変換するサービスが必要です。 そういったサービスをネームサーバーと呼んでいます。そのようなサービスを使用するためには、ネームサーバー/etc/resolv.conf、定義する必要があります。

場合によっては、ゲートウェイがネームサーバーを兼ねていることがあります。 そうでなければ、プロバイダから提供されているネームサーバーを入力する必要があります。

まとめると、この先を続ける前に次の情報が必要となるでしょう。

ネットワークアイテム
IPアドレス 192.168.0.2
ネットマスク 255.255.255.0
ブロードキャスト 192.168.0.255
ゲートウェイ 192.168.0.1
ネームサーバー 195.130.130.5, 195.130.130.133

ifconfigとrouteの設定

ネットワークの設定は3段階から成ります。 最初に、ifconfigを使用して自分自身のIPアドレスを割当てます。 次に、routeを使用しゲートウェイへのルーティングを設定します。 そして最後に、/etc/resolv.confにネームサーバーのIPアドレスを記述します。

IPアドレスを設定するために、IPアドレス、ブロードキャストアドレス、 ネットマスクが必要です。 そして、${IP_ADDR}をIPアドレスに、 ${BROADCAST}をブロードキャストアドレスに、 ${NETMASK}をネットマスクに置換して、次のコマンドを実行します。

コード表示 3.11: ifconfigの使用

# ifconfig eth0 ${IP_ADDR} broadcast ${BROADCAST} netmask ${NETMASK} up

さて、routeを使用してルーティングの設定です。 ${GATEWAY}をゲートウェイアドレスに置換します。

コード表示 3.12: routeの使用

# route add default gw ${GATEWAY}

そして、好きなエディタで(この例ではnanoを使います) /etc/resolv.confを開きます。

コード表示 3.13: /etc/resolv.confの作成

# nano -w /etc/resolv.conf

次のテンプレートを使ってネームサーバーを記述します。 ${NAMESERVER1}${NAMESERVER2}を適切なネームサーバーアドレスに置換するのを忘れないでください。

コード表示 3.14: /etc/resolv.confテンプレート

nameserver ${NAMESERVER1}
nameserver ${NAMESERVER2}

これですべてです。 インターネットサーバーのホスト(例えばGoogle)へpingをして、ネットワークのテストをしてください。 もしそれがうまくいったら、おめでとう。 Gentooをインストールする準備ができました。 ディスクの準備へ進んでください。

4. ディスクの準備

4.a. ブロックデバイス入門

ブロックデバイス

Linuxファイルシステム、パーティション、ブロックデバイスを含めて、Gentoo LinuxとLinux全般でのディスクに適している側面を詳しく見て行きましょう。 そして、ディスクとファイルシステムの一部始終を理解してもらった上で、Gentoo Linuxのインストールの為にパーティションとファイルシステムのセットアップの手順を案内します。

初めに、ブロックデバイスを紹介します。 おそらく最も有名なブロックデバイスはLinux上で1番目のドライブ、すなわち/dev/sdaでしょう。 SCASIもしくはシリアルATAドライブは両方とも/dev/sd*という名前が付けられます。 カーネルで新しいlibataフレームワークを使用していれば、IDEドライブさえ/dev/sd*という名前が付けられます。 もし古いデバイスフレームワークを使用していたら、1番目のIDEドライブは/dev/hdaになるでしょう。

上記のブロックデバイスはディスクへの抽象的インターフェイスを表しています。 ユーザープログラムはドライブがIDEやSCSIもしくは他のどんなものかどうかを気にすること無く、ディスクと情報をやりとりするためにブロックデバイスを使用できます。 プログラムは簡単にディスク上の記憶領域をランダムアクセス可能な512Mバイトごとの連続したブロックとしてアドレスを指定できます。

パーティション

Linuxシステムを格納するのにディスクの全体を使用することは理論上可能ですが、実際にはほとんどそうはされません。代わりにディスク全体のブロックデバイスはもっと扱いやすいブロックデバイスにより小さく分割されます。x86システムではこれら分割されたものをパーティションと呼びます。

パーティションは以下の3つのタイプに分けられます。 基本拡張そして論理です。

基本パーティションはMBR(マスターブートレコード)にその情報が格納されているパーティションです。MBRはとても小さい(512バイト)ので、4つの基本パーティションだけが定義できます。(例えば、/dev/sda1から/dev/sda4)です。

拡張パーティションはより多くのパーティションが含まれた特殊な基本パーティションです。(これは拡張パーティションは4つの基本パーティションの1つで無ければならないということです)。こういったパーティションは元々あった訳ではありません。しかし4つのパーティションでは少なすぎるので、下位互換性を損なうこと無く構成仕様を拡張する為に生まれたものです。

論理パーティションは拡張パーティション内のパーティションです。これらの定義はMBRの中ではなく、拡張パーティション内で宣言されています。

高度な記憶領域

x86のインストールCDではEVMSとLVM2のサポートを提供します。EVMSやLVM2ではパーティション設定の柔軟性が増します。このインストールハンドブックでは、"通常"のパーティションに焦点を当てますが、EVMSとLVM2もサポートされていることを知っておくのも良いことです。

4.b. パーティション構成を計画する

通常のパーティション構成

もしシステムのパーティション構成を編集するのに興味が無ければ、このハンドブックを通して使っているパーティション構成を使用できます。

パーティション ファイルシステム サイズ 種別
/dev/sda1 ext2 32M ブートパーティション
/dev/sda2 (swap) 512M スワップパーティション
/dev/sda3 ext3 残りのディスク領域 ルートパーティション

もしパーティション(もしくは論理ボリューム)がどれぐらいのサイズにすればいいのか、どれだけの数のパーティション(もしくはボリューム)かにすべきかを知りたいのならば読み進んでください。そうでなければ、今からパーティション作成にfdiskを使うを読みながら、ディスクのパーティション作成作業を進めてください。

パーティション数とその大きさ

パーティションの数は環境に大きく依存します。例えば、多数のユーザーがいるのならセキュリテイを強めバックアップを容易にする為に多分/homeを別にしたいでしょう。もしメールサーバーとして稼働させる為にGentooをインストールしようとしているのなら、全てのメールは /var内に保存されるので/varは別にすべきでしょう。ファイルシステムの良い選択はパフォーマンスを最大限にするでしょう。ゲームサーバーではほとんどのゲームサーバーパッケージが/optにインストールされるので、そこは別にされます。理由は/homeをセキュリティとバックアップの為に別にするのと同じようなものです。/usrは絶対に大きく取らなければならないです。大部分のアプリケーションが含まれるだけでなく、Portageツリーだけで、保存されるソースは別にしても500MB程度は取られます。

こういったように、どういうシステムにしたいのかにかなり依存します。分割されたパーティションまたはボリュームには以下の利点があります。

しかし、複数のパーティションには一つ大きな欠点があります。 正しく設定しないと、空き容量がかなりあるパーティションと空き容量の無いパーティションのあるシステムになってしまうでしょう。また、SCSIとSATAでは15個迄というパーティション数の制限があります。

パーティション設定例として、ラップトップのデモ機(ウェブサーバー、メールサーバー、gnome等を含む)として使われている20GBのディスクを見ていただききましょう。

コード表示 2.1: ファイルシステム使用例

$ df -h
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sda5     ext3    509M  132M  351M  28% /
/dev/sda2     ext3    5.0G  3.0G  1.8G  63% /home
/dev/sda7     ext3    7.9G  6.2G  1.3G  83% /usr
/dev/sda8     ext3   1011M  483M  477M  51% /opt
/dev/sda9     ext3    2.0G  607M  1.3G  32% /var
/dev/sda1     ext2     51M   17M   31M  36% /boot
/dev/sda6     swap    516M   12M  504M   2% <not mounted>
(将来使用のための未パーティション領域: 2 GB)

/usrはここでかなりの量(83%使用)を占めていますが、一旦全てのソフトがインストールされると /usrはそんなに増えて行きません。/varに数ギガバイトのディスク容量を割り当てるのは多過ぎる様に思われますが、Portageシステムではパッケージをコンパイルするのに、標準でこのパーティションを使用する事を心に留めておいて下さい。もし/varを1GBのようなもっと適当なサイズにしておきたい場合は、OpenOfficeのような巨大なパッケージをコンパイルするのに十分な空き容量のあるパーティションを指すように、/etc/make.confPORTAGE_TMPDIRの値を変える必要があります。

4.c. パーティション作成にfdiskを使う

以下の部分では先に紹介した例のパーティション設定の作成方法を説明します。

パーティション 種別
/dev/sda1 ブートパーティション
/dev/sda2 スワップパーティション
/dev/sda3 ルートパーティション

パーティションの割当てを自分の望むように変更してください。

現在のパーティションの割当てを見る

fdiskはディスクをパーティションに分割するのに高機能かつ普及しているツールです。 さあfdiskを実行しましょう。(例では/dev/sdaを使っています)。

コード表示 3.1: fdiskを起動する

# fdisk /dev/sda

fdiskを起動すると、下記の様なプロンプトが出ます。

コード表示 3.2: fdiskプロンプト

Command (m for help): 

現在のディスクのパーティション情報を表示するにはpを入力します。

コード表示 3.3: パーティション情報例

Command (m for help): p

Disk /dev/sda: 240 heads, 63 sectors, 2184 cylinders
Units = cylinders of 15120 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sda1   *         1        14    105808+  83  Linux
/dev/sda2            15        49    264600   82  Linux swap
/dev/sda3            50        70    158760   83  Linux
/dev/sda4            71      2184  15981840    5  Extended
/dev/sda5            71       209   1050808+  83  Linux
/dev/sda6           210       348   1050808+  83  Linux
/dev/sda7           349       626   2101648+  83  Linux
/dev/sda8           627       904   2101648+  83  Linux
/dev/sda9           905      2184   9676768+  83  Linux

Command (m for help): 

このディスクの例では7つのLinuxファイルシステム("Linux"と表示されてた各パーテイション)とスワップ("Linux swap"と表示されたパーテイション)で構成するように設定されています。

全てのパーティションを削除する

最初に現在の全てのパーティションをディスクから削除します。dを入力するとパーティションを削除します。例えば、現在の/dev/sda1を削除するには、以下のようにします。

コード表示 3.4: パーティションを削除する

Command (m for help): d
Partition number (1-4): 1

パーティションの削除準備ができました。これでpと入力してもパーティションは表示されませんが、変更が保存されるまで実際には削除されません。もし間違えてしまって変更を保存せずに取消たいときはすぐにqと入力し、エンターキーを押してください。これでパーティションは削除されません。

さあ、これでシステム上の全パーティションを削除したい!と思っているでしょう?パーティションを表示するのにpを、 削除するのにdとパーティション番号を繰り返し入力してください。最後にパーティションテーブルに何も無くなれば終了です。

コード表示 3.5: 空のパーティションテーブル

Disk /dev/sda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot    Start       End    Blocks   Id  System

Command (m for help):

さて今はメモリー上のパーティション構成は空になりました。パーティションを作成する準備が整いました。先程検討したように、通常のパーティション構成を使うことにしましょう。同じパーティション構成にしたくなければ、当然ですがこのハンドブックの例の通りにしてはいけません。もちろん同じパーティション構成にしたくなければ、厳密に案内にならわないでください。

ブートパーティションを作成する

最初に小さなブートパーティションを作成します。新しいパーティションを作成するにはnと入力します。そして基本パーティションを選択するのにpと入力するのに続き、1番目の基本パーティションを選択するのに1と入力します。最初のシリンダーが表示されると、エンターキーを押してください。最後のシリンダーが表示されたら、32Mバイトサイズののパーティションを作成するのに+32Mと入力し、ブート可能(bootable)フラグをセットしてください。

コード表示 3.6: ブートパーティションを作成する

Command (m for help): n
Command action
  e   extended
  p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-3876, default 1): (エンターキーを押す)
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-3876, default 3876): +32M

さて、pと入力すれば以下のパーティションテーブル表示が見られるはずです。

コード表示 3.7: 作成されたブートパーティション

Command (m for help): p

Disk /dev/sda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sda1          1        14    105808+  83  Linux

このパーティションをブート可能にする必要があります。このパーティションにブート可能フラグを付加するにはaと入力します。もう一度pを入力すると、"Boot"欄に*が付いているのがわかるでしょう。

スワップパーティションを作成する

さあスワップパーティションを作成しましょう。この作業のためには、新規パーティションを作成するのにn、基本パーティションを選択するのにpを入力します. そして2番目の基本パーティション、この例では/dev/sda2を作成するのに2と入力します。最初のシリンダーが表示されると、エンターキーを押してください。最後のシリンダーが表示されたら、512Mバイトサイズののパーティションを作成するのに+512Mと入力してください。この作業の後、パーティションタイプを設定するのにtと入力します。先程作成したパーティションを選択するのに2と入力して、このパーティションタイプを"Linux Swap"にする為に82と入力します。これらの手順が完了後、pを入力すれば下記のようなパーティションテーブルが表示されるはずです。

コード表示 3.8: スワップパーティション作成後のパーティションテーブル

Command (m for help): p

Disk /dev/sda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sda1 *        1        14    105808+  83  Linux
/dev/sda2         15        81    506520   82  Linux swap

ルートパーティションを作成する

最後にルートパーティションを作成しましょう。この作業のためには、新規パーティションを作成するのにn、基本パーティションを選択するのにpを入力します. そして3番目の基本パーティション、この例では/dev/sda3を作成するのに3と入力します。最初のシリンダーが表示されると、エンターキーを押してください。最後のシリンダーが表示されたら、ディスクの残りの空き容量を確保する為にエンターキーを押します。これらの手順が完了後、pを入力すれば下記のようなパーティションテーブルが表示されるはずです。

コード表示 3.9: ルートパーティション作成後のパーティションテーブル

Command (m for help): p

Disk /dev/sda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sda1 *        1        14    105808+  83  Linux
/dev/sda2         15        81    506520   82  Linux swap
/dev/sda3         82      3876  28690200   83  Linux

パーティションの割当てを保存する

パーティションの割当てを保存して、fdiskを終了するにはwを入力します。

コード表示 3.10: 保存してfdiskを終了する

Command (m for help): w

これでパーティションが作成されましたので、ファイルシステムの作成に進むことができます。

4.d. ファイルシステムを作成する

はじめに

さてパーティションが作成されましたので、それぞれにファイルシステムを作成するときが来ました。 もしファイルシステムを選ぶことに興味がなくて、このハンドブックのデフォルトのものを使うことで満足ならば、パーティションにファイルシステムを適用するに進んでください。そうでなければ利用可能なファイルシステムに関して知るために読み進めてください...。

Filesystems

Linuxカーネルでは様々なファイルシステムをサポートしています。 ここではLinuxシステムの多くで共通して使われているext2、ext3、ReiserFS、XFS、JFSについて説明します。

ext2は実証済みで真のLinuxファイルシステムですがメタデータジャーナリングを持ちません。 これは起動時の定期のext2ファイルシステムのチェックにかなりの時間が掛かることもあるということです。 現在、整合性のチェックをとても早く終わらせることのできる次世代のジャーナリングファイルシステムの選択肢があります。 そのために一般的には非ジャーナリングファイルシステムより好まれています。 ジャーナリングファイルシステムはファイルシステムの不整合状態の発生やシステム起動時の大幅な遅延を防ぎます。

ext3はext2ファイルシステムのジャーナル化バージョンです。 full data及びordered dataジャーナリングの様に優れたジャーナリングモードに加えて、素早い回復のためのメタデータジャーナルを提供します。 ほぼすべての状況下で高いパフォーマンスを上げることができるHtreeインデックスを使用しています。 要するにext3は素晴らしいファイルシステムだということです。 ext3はすべての目的、すべてのプラットフォームに推奨されるファイルシステムです。

JFSはIBMの高性能なジャーナリングファイルシステムです。 JFSは軽くて速くて信頼できるB+treeに基づくファイルシステムで、様々な状況下で良いパフォーマンスを上げます。

ReiserFSはB+treeに基づくジャーナル付きのファイルシステムです。 全般的に高パフォーマンスであり、特により多くのCPUサイクルを犠牲にしてたくさんの小さなファイルを扱うようなときに顕著です。 ReiserFSは他のファイルシステムと比べるとあまりメンテナンスされていないようです。

XFSは堅牢という特徴を持ち、拡張性に最適化されたメタデータジャーナリングを持つファイルシステムです。 XFSは様々なハードウェアの問題にあまり寛容ではないようです。

パーティションにファイルシステムを適用する

パーティションやボリュームにファイルシステムを作成するには、それぞれのファイルシステムに合った利用可能なツールがあります。

ファイルシステム 作成コマンド
ext2 mke2fs
ext3 mke2fs -j
reiserfs mkreiserfs
xfs mkfs.xfs
jfs mkfs.jfs

例えば、 ブートパーティション(この例では/dev/sda1)をext2に、ルートパーティション(この例では/dev/sda3)をext3(今回の例として)にするには、以下の様にします。

コード表示 4.1: パーティションにファイルシステムを適用する

# mke2fs /dev/sda1
# mke2fs -j /dev/sda3

さあ新しく作成されたパーティション(もしくは論理ボリューム)にファイルシステムを作成しましょう。

スワップパーティションを有効にする

mkswapはスワップパーティションを初期化するのに使うコマンドです。

コード表示 4.2: スワップパーティションを初期化する

# mkswap /dev/sda2

スワップパーティションを有効にするにはswaponを使用します。

コード表示 4.3: スワップパーティションを有効にする

# swapon /dev/sda2

上記のコマンドでスワップを作成して有効にしましょう。

4.e. マウント

さてパーティションが初期化されてファイルシステムが収まったので、それらのパーティションをマウントするときが来ました。mountというコマンドを使います。作成したそれぞれのパーティション用にマウントに必要なディレクトリを作成するのを忘れないでください。例ではルートとブートパーティションをマウントします。

コード表示 5.1: パーティションをマウントする

# mount /dev/sda3 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/sda1 /mnt/gentoo/boot

注意: もし/tmpを別のパーティションとして置きたいのであれば、マウント後にパーミッションを変更するのを忘れないでください。: chmod 1777 /mnt/gentoo/tmp。これは/var/tmpも同様です。

procファイルシステム(カーネルとの仮想インターフェイス)も/procにマウントする必要があります。しかし、最初にパーティション上に色々なファイルを置く必要があります。

Gentooインストールファイルをインストールするに進みましょう。

5. Gentooインストールファイルをインストールする

5.a. stage tarballのインストール

日時を正確に設定する

先に進める前に、日時をチェックして、更新しておく必要があります。 狂った時計は後でおかしな結果が起きる元になります。

現在の日時を確認するには、dateを実行してください。

コード表示 1.1: 日時を確認する

# date
Fri Mar 29 16:21:18 UTC 2005

もし表示された日時が間違っていたら、date MMDDhhmmYYYYを使って更新してください。 構文としては、(Month(月)、Day(日)、hour(時)、minute(分)、Year(年)を表しています)。現在のところ、UTC時間を使用すべきです。自分のタイムゾーンに、後で設定することができます。例えば、2005年3月29日 16:21を設定したい場合には以下のように実行します。

コード表示 1.2: UTC日時の設定

# date 032916212005

stageの選択

次のステップとして、stage3tarballをシステムにインストールする必要があります。 必要なtarballをインターネットからダウンロードするか、一般的なGentoo UniversalCDやLiveDVDから起動しているなら、ディスクからコピーすることができます。もしUniversal CDやLiveDVDを持っていて使用したいstageがディスクにあるのなら、インターネットからダウンロースするのは全くネットワーク帯域の浪費でしかありません。それらのstageは全く同一なのですから。 多くの場合、どのstageファイルをダウンロードすればいいのかを判断するのには、uname -mコマンドの結果が役に立つでしょう。

Minimal CDや LiveCDs はstage3アーカイブを含みませんが、LiveDVDは含みます。

5.b. 一般的な選択: インターネットからダウンロードしたstageを使う

stagetarballのダウンロード

Gentooをインストールしようとしているファイルシステムのマウントポイントに移動してください。 (大概は、次の場所です。/mnt/gentoo)

コード表示 2.1: インストール先のマウントポイントに移動

# cd /mnt/gentoo

インストールに使用している媒体によりますが、stageをダウンロードするツールが2、3用意されています。 もしlinksが使用可能なら、すぐにでもthe Gentoo mirrorlistにアクセスして、最寄のミラーを選択することができます。

もしlinksが使えない場合には、lynxを一時的に使用できるでしょう。 proxyを使う必要がある場合には、http_proxyftp_proxyを設定してください。

コード表示 2.2: lynxでのproxy情報の設定

# export http_proxy="http://proxy.server.com:port"
# export ftp_proxy="http://proxy.server.com:port"

ここから先はlinksが使用できると仮定して説明してきます。

releases/x86/2008.0/stages/ディレクトリにアクセスしてください。あなたのアーキテクチャ(もしかしたら、それらは個別のサブアーキテクチャ名のディレクトリ配下に置かれているかもしれません) ひとつを選んで、Dをおしてダウンロードしましょう。ダウンロードが完了したら、Qを押してブラウザを終了させます。

ほとんどのPCユーザはstage3-i686-2008.0.tar.bz2stage3アーカイブを使うでしょう。 最近のPCはすべてi686と見なされます。もし古いマシンを使っているなら、 WikiPediaのi686互換のプロセッサー一覧でチェックできます。 Pentium、K5、K6やVia C3のような古いプロセッサーはさらに一般的なx86 stage3が必要です。 i486より古いプロセッサーはサポートされていません。

コード表示 2.3: linksでミラーリストを見る

# links http://www.gentoo.org/main/en/mirrors.xml
(linkでproxyが必要な場合)
# links -http-proxy proxy.server.com:8080 http://www.gentoo.org/main/en/mirrors.xml

stage3のtarballをダウンロードするようにして下さい。今後stage1またはstage2を用いたインストールはサポートされません。

ダウンロードしたstage tarballの正当性を評価したいなら、 md5sumを使って、その出力とミラーで配布されているMD5チェックサムを比較してください。

コード表示 2.4: stage tarballの正当性のチェック

# md5sum -c stage3-i686-2008.0.tar.bz2.DIGESTS
stage3-i686-2008.0.tar.bz2: OK

stage tarballの展開

さぁ、それではダウンロードしたstageをシステムに展開しましょう。 もっとも簡単な方法として、tarを使います。

コード表示 2.5: stageの展開

# tar xvjpf stage3-*.tar.bz2

上記と同様のオプション(xvjpf)を必ず使うようにしてください。xアーカイブの展開v展開中に何が起こっているのかを表示(これは、任意です)、jbzip2の解凍pパーミッションの保存、そしてfは、標準入力からではなく、ファイルから展開することを表しています。

これでstageはインストールされました。Portageのインストールへ進みましょう。

5.c. Portageのインストール

Portageスナップショットの展開

ここでPortageスナップショット(これは、どのようなソフトウェアをインストールできるか、またどのようなprofileがあるのか、と言った情報が入った複数のファイルのことです)をインストールする必要があります。

Portageスナップショットをダウンロードし、インストール

あなたのファイルシステムにマウントした場所へ行ってください(多くの場合/mnt/gentoo)。

コード表示 3.1: マウントポイントへ移動

# cd /mnt/gentoo

links(またはlynx)を起動し、 Gentoo mirror listへ行ってください。 そしてあなたのいる場所に近いミラーを選択してから、snapshots/ディレクトリを開いてください。 そこで、最新のPortageスナップショット(portage-latest.tar.bz2)を選択して、Dキーを押してダウンロードしてください。

コード表示 3.2: Gentooミラーリストの参照

# links http://www.gentoo.org/main/en/mirrors.xml

次に、Qキーを押してブラウザを終了させます。 これで、Portageスナップショットが/mnt/gentooに保存されているでしょう。

ダウンロードしたスナップショットの完全性を確認したい時は、md5sumを使用し、 その出力と、ミラーから提供されているMD5チェックサムとを比較します。

コード表示 3.3: Portageスナップショットの完全性の確認

# md5sum -c portage-latest.tar.bz2.md5sum
portage-latest.tar.bz2: OK

次にこのPortageスナップショットをあなたのファイルシステム上で展開します。 次のコマンドを実行する際には、最後のオプションが小文字のcではなくて、 大文字のCであることに注意してください。

コード表示 3.4: Portageスナップショットの展開

# tar xvjf /mnt/gentoo/portage-latest.tar.bz2 -C /mnt/gentoo/usr

5.d. コンパイルオプションの設定

はじめに

Gentooを最適化するために、Portageの振る舞いに影響を与えるいくつかの変数を設定することができます。 これらの変数は、すべて(exportを使用して)環境変数として設定することも可能ですが、 環境変数は永続的なものではありません。設定を保存しておくために、Portageの設定ファイル/etc/make.confがあります。 これが今から編集するファイルです。

注意: 設定可能なすべての変数は、/mnt/gentoo/etc/make.conf.exampleにコメント付きで列挙されています。 Gentooのインストールを成功させるには、次に挙げられている変数を設定するだけでよいです。

あとで話題にする最適化のための変数を編集するために、 好みのエディタを立ち上げてください(このガイドではnanoを使います)。

コード表示 4.1: /etc/make.confを開く

# nano -w /mnt/gentoo/etc/make.conf

おそらく気づいていると思いますが、make.conf.exampleファイルは、 他の設定ファイル同様の構造をしています(訳注:bashスクリプトと同じ作法です)。 "#"で始まる行はコメントで、その他の行には、VARIABLE="content"という構文で変数を定義します。 いくつかの変数については、次の節で話題にします。

CHOST

CHOSTの値は、あなたのシステムがどのビルド対象かを表します。 この値は既に正しい値が設定されています。あなたのシステムを壊すかもしれないので、 編集しないで下さい。 もしCHOSTの値が正しくないようだったら、間違ったstage3 tarballを使用しているかもしれません。

CFLAGSとCXXFLAGS

CFLAGSCXXFLAGS変数には、それぞれ、CおよびC++コンパイラであるgccに対する最適化のためのフラグを定義します。 ここでは、一般的なものを定義しますが、それぞれのプログラムごとに最適なフラグを使うことで、 最高のパフォーマンスを出すことが可能となります。 これは、それぞれのプログラムが異なっていることによります(訳注:プログラムごと、 アーキテクチャごとにパフォーマンスへの考慮や設計が異なり、フラグによってどれだけ最適化されるかということは、プログラムによって異なると言うこと。)

make.confには、一般的にはシステム全体の動作を損なわない範囲で最善の最適化フラグを定義すべきです。 この変数に、実験的な設定をしないでください。 過剰な最適化はプログラムの動作をおかしくします(クラッシュや誤動作の元です)。

すべての最適化オプションを説明はしません。 そのすべてを知りたいなら、GNU Online Manual(s)gccのinfo(info gcc -- このコマンドは既に稼動しているLinuxシステムでのみ動作します)を読んでください。 make.conf.exampleファイルにもたくさんの例や情報が含まれています。 こちらも忘れずに読んでください。

始めに-march=-mtune=フラグを設定してください。 これには、ターゲットとするアーキテクチャの名前を指定します。 どんなオプションを設定できるかは、make.conf.exampleファイルに(コメントとして)書かれています。

次に、-Oフラグ(これは、大文字のOで、ゼロではありません)を設定します。 これは、gccの最適化クラスのフラグです。 s(サイズの最適化)、0(最適化なし)、そして、スピードの最適化フラグ12、さらに3までが指定できます(各クラスは、この順番により強い最適化を行います。より強い最適化をするクラスは、弱い最適化クラスと同様の効果を持ちつつ、追加の最適化を行います)。 -O2 が推奨されたデフォルト指定です。-O3をシステム全体で使用した場合には、問題が発生することが分かっていますので、-O2にとどめておくことをお勧めします。

他の人気がある最適化フラグとして-pipe(コンパイル時の様々な段階間の情報のやり取りに、テンポラリファイルではなくパイプを使うようにします)があります。これは生成されるコードには影響しません。

-fomit-frame-pointer(必要ない関数に対するレジスタ内のフレームポインタを保持しません)を使うと、 アプリケーションのデバッグが非常に困難になります。

CFLAGSCXXFLAGSを定義するとき、 それぞれの最適化オプションは同じものを使うべきです。 展開したstage3アーカイブに含まれるデフォルトの設定は十分に最適化されています。 下記の例は、あくまで例です。

コード表示 4.2: CFLAGS変数とCXXFLAGS変数の設定

CFLAGS="-O2 -march=i686 -pipe"
# 両方の変数に同じ値を使います
CXXFLAGS="${CFLAGS}"

注意: 様々なコンパイルオプションがどのようにシステムに影響を及ぼしうるかしるために、link="/doc/en/gcc-optimization.xml">Compilation Optimization Guide(未訳)を見てみるのもよいでしょう。

MAKEOPTS

MAKEOPTSには、パッケージをインストールするときに、 いくつ平行してコンパイルを走らせるかを定義します。 あなたのシステムのCPU数に1を加えた数を指定するのが賢明ですが、これは目安であり常にそれが最善であるというわけではありません。

コード表示 4.3: 一般的な、CPUが1個のシステムに対するMAKEOPTSの設定

MAKEOPTS="-j2"

さぁ準備ができました。次へ進みましょう!

/mnt/gentoo/etc/make.confをあなたの好みに応じて編集し、保存してください。 (nanoユーザは、Ctrl-Xを押します) それでは、Gentooベースシステムのインストールへ進んでください。

6. Gentooベースシステムのインストール

6.a. chrootする

自由選択: ミラーサイトの選択

すばやくソースコードをダウンロードするために、一番回線速度が速いミラーサイトを選択することをお勧めします。 Portageは、GENTOO_MIRRORS変数をmake.confファイルから参照し、その変数に羅列されいているミラーサイトを使用します。 Gentooサイトのmirror list (日本語訳)を参照し、(高確率で一番速いサイトとしての)一番近い一つのミラーサイト(もしくは複数のミラーサイト)を探すことができます。 しかし、お望みのミラーサイトを選択するのに使いやすいインターフェースを備えるmirrorselectというすばらしいツールを提供しています。

コード表示 1.1: GENTOO_MIRRORS変数用にmirrorselectを使用する

# mirrorselect -i -o >> /mnt/gentoo/etc/make.conf

警告: どのIPv6ミラーサイトも選択してはいけません。現在stageファイルは、IPv6をサポートしていません。

make.confでの2番目に重要な設定は、SYNC変数の設定です。 この変数には、Portageツリーを更新するときに使用したいrsyncサーバを設定します。 (Portageツリーとは、Portageがソフトウェアをダウンロードしてインストールのに必要な情報の全てが書かれているebuildや、スクリプトの集まりです。) 自分でSYNCサーバを手作業で指定できますが、mirrorselectはその作業を以下のように簡単にします。

コード表示 1.2: mirrorselectを使ってrsyncミラーを選択する

# mirrorselect -i -r -o >> /mnt/gentoo/etc/make.conf

mirrorselectを実行した後、/mnt/gentoo/etc/make.conf内の設定が重複していないかを確認したほうがよいでしょう。

DNS情報をコピーする

新しい環境に入る前にしなければならないことが、まだ一つ残っています。 それは、新しい環境でもネットワーク環境が確実に動くようにするために、 /etc/resolv.confにあるDNS情報を、新しい環境にコピーすることです。 /etc/resolv.confにはあなたのネットワーク環境における ネームサーバーの情報が含まれています。

コード表示 1.3: DNS情報をコピーする

("-L"オプションは、シンボリックリンクをコピーしないようにするために必要です)
# cp -L /etc/resolv.conf /mnt/gentoo/etc/

/procと/devファイルシステムのマウント

chroot後の環境でもカーネルが提供する情報を参照できるようにするために、 /mnt/gentoo/proc/procファイルシステムをマウントしてください。 それから、/devファイルシステムをbindマウントします。

コード表示 1.4: /procと/devのマウント

# mount -t proc none /mnt/gentoo/proc
# mount -o bind /dev /mnt/gentoo/dev

新しい環境に入る

さて、全てのパーティションは初期化され、ベース環境はインストールされました。 ついに、あなたはchrootにより新たにインストールされた環境に入ります。 これは、現在のインストーラの環境(インストールCDやその他のインストールメディア)から、 あなたのインストールした環境(すなわち初期化されたパーティション)に移行することを意味します。

このchrootの過程は3段階のステップからなります。 まず最初に、chrootによって、ルートディレクトリを(インストールメディア上の)/ から、(あなたのパーティション上にある)/mnt/gentooに変更します。次に、システムファイルの環境変数を更新するコマンドenv-updateを使って、新しい環境をつくります。最後に、sourceコマンドでこれらの変数をメモリ上に読み込みます。

コード表示 1.5: 新しい環境にchrootする

# chroot /mnt/gentoo /bin/bash
# env-update
>> Regenerating /etc/ld.so.cache...
# source /etc/profile
# export PS1="(chroot) $PS1"

おめでとうございます!あなたは自分のGentoo Linux環境に入ることができました。 もちろん、まだいくつかのセクションが残っており、完了までは程遠いのですが:-)

6.b. Portageシステムの設定

Portageツリーの更新

ここで、Portageツリーを最新状態に更新すべきです。 emerge --syncが、これを行います。

コード表示 2.1: Portageツリーの更新

# emerge --sync
(一部のフレームバッファやシリアルコンソールなどの低速な端末を使用している場合、この工程にかかる時間を短くするために、--quietオプションを以下のように追加してもよいです。)
# emerge --sync --quiet

rsync通信を遮断してしまうファイアウォールの環境内にいる場合は、代わりにemerge-webrsyncを使用します。それは、portageのスナップショットをダウンロードしてインストールします。

Portageの新しいバージョンが利用可能で、新しいものに更新すべきであることを警告されたら、emerge --oneshot portageを使用してすぐに更新すべきです。

適切なprofileの選択

まず、所定の位置にあるちょっとした定義について説明します。

profileは、すべてのGentooシステムにとって根幹を成すものです。 CHOST、CFLAGSやその他の重要な変数の初期設定値を指定しているだけでなく、 システムの状態を特定範囲内のパッケージバージョンに留めておく役目もあります。 これは、Gentoo開発者によってすべて整備されています。

以前は、ユーザがそういったprofileを触ることはありませんでした。 しかし、場合によってはprofileの変更が必要と判断される事もあるかもしれません。

以下のコマンドで、現在使用中のprofileが何であるかを確認することができます。

コード表示 2.2: システムprofileの確認

# ls -FGg /etc/make.profile
lrwxrwxrwx  1 48 Apr  8 18:51 /etc/make.profile -> ../usr/portage/profiles/default-linux/x86/2008.0

デフォルトのprofileでは、Linux 2.6系システムのものが提供されています。 これは推奨の設定ですが、別のprofileを使うという選択肢もあります。

アーキテクチャによっては、desktopserver subprofileを利用できる場合があります。 2008.0/profile以下を調べて、使用予定のアーキテクチャで利用可能なものがないかを確認してみて下さい。 自身の要件に合うかを決めるのに、desktop profileのmake.defaultsを確認したいと思うかもしれません。

使用予定のアーキテクチャで利用可能なprofileを、/usr/portage/profiles/で確認したら、 お好みで別のprofileを使用することもできます。

コード表示 2.3: profileの変更

# ln -snf /usr/portage/profiles/<profile name> /etc/make.profile

注意: developer subprofileは特にGentoo Linuxの開発作業のためにものです。 一般的な開発環境の設定を助けるものではありません

USE変数の設定

USEはGentooがユーザに提供する最もパワフルな変数の一つです。 プログラムの中には、特定のフラグを設定することによって、副次的なサポートを有効にしたり無効にしたりできるものがあります。 たとえばGTKサポートもしくはQtサポートを有効にしてコンパイルすることができるプログラムがあります。他には、SSLサポートを有効にするか無効にするか、 X11サポート(X-server)の替わりにフレームバッファサポート(svgalib) を有効にするか、などがあります。

多くのディストリビューションは、パッケージをありったけのサポートを有効にしてコンパイルしているため、依存関係が膨大になってしまっていることは言うまでもなく、 プログラムのサイズや起動時間までも増大させてしまっています。 Gentooならば、パッケージをコンパイルするときにつけるべきオプションを 自分で定義することができます。これにはUSEフラグが一役買っています。

USE変数には、コンパイルオプションに対応するキーワードを定義します。 たとえば、sslはプログラムに備わるSSLサポートをコンパイルします。 -XはXサーバのサポートを削除します。(キーワードの前にマイナス記号をつけます。)gnome gtk -kde -qt3 -qt4は、 GNOME(とGTK)サポートを有効にし、KDE(とQt)サポートを無効にしてプログラムをコンパイルします。システムを完全にGNOME向けに調整します。

初期のUSE設定は、使用しているprofileのmake.defaultsファイルにあります。 make.defaultsは、/etc/make.profileシンボリックリンクが指すディレクトリと、同じくすべてのその親ディレクトリで見つかります。 初期のUSE設定は、それらmake.defaultsファイルのすべてのUSE設定を組み合わせたものになります。 /etc/make.confに記述した内容は、これらの初期設定に反映されます。 もしUSE設定に何かを追加した場合、それは初期設定リストに追加されます。 もし何かを(マイナス記号を頭につけることで)USE設定から取り除いた場合、 それは(リストにあれば)初期設定リストから取り除かれます。 決して/etc/make.profileディレクトリ以下の内容を変更しないでください。Portageをアップデートするときに、上書きされてしまいます!

Gentooハンドブックの第二部にあるUSEフラグに、USEについての詳細な解説があります。また、システムにある/usr/portage/profiles/use.descに、使用可能なUSEフラグについての詳細な解説があります。

コード表示 2.4: 使用可能なUSEフラグの参照

# less /usr/portage/profiles/use.desc
(矢印キーを使用してスクロールし、'q'キーで終了します)

DVD、ALSA、CD-Rサポートを含むKDEベースのシステムのためのUSEフラグの例を以下に示します。

コード表示 2.5: /etc/make.confを開く

# nano -w /etc/make.conf

コード表示 2.6: USEフラグの設定

USE="-gtk -gnome qt3 qt4 kde dvd alsa cdr"

自由選択: glibcのロケール

あなたは、おそらくシステムで一つないし二つのロケールだけしか使用しないでしょう。 /etc/locale.genで必要なロケールを指定できます。

コード表示 2.7: /etc/locale.genを開く

# nano -w /etc/locale.gen

以下のロケール指定は、関連する文字符号(UTF-8のような)を含む、英語(アメリカ)とドイツ語(ドイツ)ロケールを生成する例です(訳注: 日本語訳には日本語に関するロケールも追加しています)。

コード表示 2.8: ロケールの指定

en_US ISO-8859-1
en_US.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15
ja_JP.EUC-JP/EUC-JP
ja_JP.UTF-8/UTF-8
ja_JP/EUC-JP

次のステップでは、locale-genを実行します。これにより、 /etc/locale.genファイルで指定した全てのロケールが生成されます。

では、カーネル設定へ進んでください。

7. カーネル設定

7.a. タイムゾーン

システムが、どの地域に設置されているかを把握するため、 まず初めにタイムゾーンを選択しなくてはいけません。 nn/usr/share/zoneinfoでタイムゾーンを確認し、 /etc/localtimeへコピーします。 なお、ファイル名が実際の地域を示しているわけではないので、 /usr/share/zoneinfo/Etc/GMT*タイムゾーンは避けて下さい。 例えば、GMT-8は実際にはGMT+8を示します。

コード表示 1.1: タイムゾーン情報の設定

# ls /usr/share/zoneinfo
(ここでは、GMTを使用することを想定しています)
# cp /usr/share/zoneinfo/GMT /etc/localtime

7.b. ソースをインストールする

カーネルを選択する

全のディストリビューションで中核となるのが、Linuxカーネルです。これは、 ユーザプログラムとシステムハードウェアを仲介します。Gentooでは、 使用可能なカーネルソースをユーザに複数提供しています。説明がついた詳細な一覧表が、 Gentoo Kernel Guide(日本語訳)から入手できます。

x86ベースのシステムでは、 gentoo-sources(追加機能のパッチを含んだカーネルソース)が提供されています。

カーネルソースを選択し、emergeを使ってインストールします。

コード表示 2.1: カーネルソースのインストール

# emerge gentoo-sources

/usr/srcを確認すると、 カーネルソースにリンクが張られたlinuxというシンボリックリンクがあるはずです。この場合、 インストールされたカーネルソースはgentoo-sources-2.6.24-r5にリンクが張られています。 なお、読者の環境によっては異なるかもしれませんので、注意して下さい。

コード表示 2.2: カーネルソースのシンボリックリンクを確認

# ls -l /usr/src/linux
lrwxrwxrwx    1 root   root    12 Oct 13 11:04 /usr/src/linux -> linux-2.6.24-r5

それでは、カーネルソースをコンフィギュレーションしコンパイルしていきます。なお、 genkernelを使用し、インストールCDで使用される標準カーネルをビルドすることもできます。 但し、ここではまず初めにに"マニュアル"コンフィギュレーションを説明します。というのも、 これは環境を最適化する上で最良の方法だからです。

マニュアルでカーネルをコンフィギュレーションするなら、デフォルト: マニュアルコンフィギュレーションへ進んで下さい。 genkernelを使用するなら、 代わりに代替案: genkernelを使用するを読み進んで下さい。

7.c. デフォルト: マニュアルコンフィギュレーション

はじめに

マニュアルでカーネルをコンフィギュレーションすることは、 Linuxユーザが行うべきオペレーションの中で、最難関と見なされることがあります。 これは、それほど真実ということでもありません。カーネルのコンフィギュレーションを数回こなせば、 難しかったことを思い出すことすらないでしょう。;)

しかし、一つだけ本当のことがあります。 カーネルをマニュアルでコンフィギュレーションし始める際には、 システムをよく把握しておかなくてはいけないということです。ほとんどの情報は、 lspciを含んだpciutils(emerge pciutils)をemergeすることで収集できます。 そうすれば、chrootされた環境で、lspciを実行できます。 なお、lspciによって出力されるpcilibに関する警告は、 無視して構いません(例えば、pcilib: cannot open/sys/bus/pci/devices)。あるいは、 chrootされていない環境からlspciを実行することも可能です。 実行結果は同じになります。または、lsmodを実行し、 インストールCDがどのカーネルモジュールを使用しているかを確認することもできます(有効にすべきモジュールを判断する上で、 良いヒントになるでしょう)。

それでは、カーネルソースのディレクトリに移動し、make menuconfigを実行します。 ncursesベースのコンフィギュレーションメニューが表示されます。

コード表示 3.1: menuconfigの呼び出し

# cd /usr/src/linux
# make menuconfig

コンフィギュレーション項目がいくつか表示されますので、まずは、 有効にすべきオプションをピックアップしていきましょう(そうしないと、 Gentooが機能しなかったり、あるいは追加調整なしで正常に機能しません)。

必須オプションを有効にする

システムをブートする上で必須のドライバ(例えば、SCSIコントローラ等)全てが、 モジュールとしてではなく、カーネル自身にコンパイルされるようにして下さい。 そうしないと、システムが完全にブートできるようになりません。

それでは、正確なプロセッサファミリを選択します。

コード表示 3.2: 正確なプロセッサファミリの選択

Processor type and features --->
  (システムに合わせ変更して下さい。)
  (Athlon/Duron/K7) Processor family

File Systemsに移動し、使用するファイルシステムのサポートを選択します。 但し、モジュールとしてコンパイルしてはいけません。そうしないと、 Gentooシステムはパーティションをマウントできません。また、Virtual memory/proc file systemを選択して下さい。

コード表示 3.3: 必要なファイルシステムを選択

File systems --->
  Pseudo Filesystems --->
    [*] /proc file system support
    [*] Virtual memory file system support (former shm fs)

(システムに合わせて下記オプションを1つ以上選択して下さい。)
  <*> Reiserfs support
  <*> Ext3 journalling file system support
  <*> JFS filesystem support
  <*> Second extended fs support
  <*> XFS filesystem support

PPPoEを使用してインターネット接続する、 あるいはダイアルアップモデムを使用しているのであれば、 下記のオプションがカーネルで必要になります。

コード表示 3.4: 必要なPPPoE用ドライバを選択

Device Drivers --->
  Networking Support --->
    <*> PPP (point-to-point protocol) support
    <*>   PPP support for async serial ports
    <*>   PPP support for sync tty ports

2つの圧縮オプションに害はありませんが、必須というわけでもありません。 同様に、PPP over Ethernetオプションも必須というわけではなく、 カーネルにPPPoE機能をコンフィギュレーションする際にpppで使用されるだけです。

また、必要に応じて、イーサネットカードに合わせカーネルサポートを有効にして下さい。

ハイパースレッディング(tm)をサポートするインテル製CPU、あるいはマルチCPUシステムなら、 "Symmetric multi-processing support"を有効にします。

コード表示 3.5: SMPサポートの有効化

Processor type and features  --->
  [*] Symmetric multi-processing support

注意: マルチコアシステムでは、各コアが1つのプロセッサとしてカウントされます。

4GB以上のRAMを搭載している場合、 "High Memory Support (64G)"を有効にする必要があります。

USB入力デバイス(キーボードやマウス等)を使用するなら、同様に下記も有効にして下さい。

コード表示 3.6: 入力デバイス用に、USBサポートの有効化

Device Drivers --->
  [*] HID Devices  --->
    <*>   USB Human Interface Device (full HID) support

PCMCIAサポートがノートPCで必要なら、 システムに合わせPCMCIAカードブリッジのサポートを有効にして下さい。

コード表示 3.7: PCMCIAサポートの有効化

Bus options (PCI, PCMCIA, EISA, MCA, ISA)  --->
  PCCARD (PCMCIA/CardBus) support  --->
    <*> PCCard (PCMCIA/CardBus) support
(古いPCMCIAカードのサポートが必要なら、16ビットを選択します。ほとんどのシステムで必要になります。)
    <*>   16-bit PCMCIA support
    [*]   32-bit CardBus support
(適切なブリッジを下記から選択します。)
    --- PC-card bridges
    <*> CardBus yenta-compatible bridge support (NEW)
    <*> Cirrus PD6729 compatible bridge support (NEW)
    <*> i82092 compatible bridge support (NEW)
    <*> i82365 compatible bridge support (NEW)
    <*> Databook TCIC host bridge support (NEW)

カーネルのコンフィギュレーションが終了したら、コンパイルとインストールへ進んで下さい。

コンパイルとインストール

カーネルのコンフィギュレーションが済みましたので、コンパイル・インストールしていきます。 コンフィギュレーションメニューを終了し、コンパイルに進みます。

コード表示 3.8: カーネルのコンパイル

# make && make modules_install

カーネルのコンパイルが終了したら、カーネルイメージを/bootへコピーします。 選択したカーネルにふさわしいと思うファイル名であれば、どんなものでも構いませんが、 ブートローダを設定する際に後ほど必要となりますので、ファイル名は覚えておいて下さい。 kernel-2.6.24-gentoo-r5をカーネルの名称とバージョンに置き換える必要があります。

コード表示 3.9: カーネルのインストール

# cp arch/i386/boot/bzImage /boot/kernel-2.6.24-gentoo-r5

では、カーネルモジュールへ進みましょう。

7.d. 代替案: genkernelを使用する

このセクションを読んでいるなら、genkernelスクリプトを使用し、 カーネルのコンフィギュレーションを行うことにしたということでしょう。

カーネルツリーはインストールされていますので、genkernelスクリプトを使用し、 カーネルを自動でビルドします。 genkernelは、コンフィギュレーションがインストールCDのそれとほぼ同じになるように動作します。 つまり、genkernelを使用しカーネルをビルドすると、インストールCD同様、 通常であれば起動時にシステムが全ハードウェアを検出してくれるということになります。 genkernelでは、マニュアルでカーネルをコンフィギュレーションする必要がないので、 カーネルをコンパイルするのが不安なユーザにとっては理想的なソリューションです。

では、genkernelの使用方法を見ていきます。初めに、genkernelをemergeします。

コード表示 4.1: genkernelのemerge

# emerge genkernel

次に、インストールCDで使用されたカーネルコンフィギュレーションを、 genkernelがデフォルトのカーネルコンフィギュレーションを検索する場所へコピーします。

コード表示 4.2: インストールCDのカーネルコンフィギュレーションをコピー

# zcat /proc/config.gz > /usr/share/genkernel/x86/kernel-config-2.6

では、genkernel allを実行しカーネルソースをコンパイルして下さい。genkernelでは、 ほとんど全てのハードウェアをサポートするカーネルをコンパイルするので、 コンパイルが終了するにはかなりの時間がかかります!

ブートパーティションが、ext2あるいはext3をファイルシステムとして使用していなければ、 マニュアルでカーネルをコンフィギュレーションしなくてはいけません。その際は、 genkernel --menuconfig allを実行しカーネル自身にファイルシステムのサポートを追加します(つまり、 モジュールとしてではありません)。同様に、EVMS2あるいはLVM2ユーザは、 --evms2あるいは--lvm2を引数に追加する必要があるかもしれません。

コード表示 4.3: genkernelの実行

# genkernel all

genkernelが完了したら、カーネル -- モジュール全一式と初期ルートディスク(initrd) -- が作成されます。本書では、後ほどブートローダを設定する際に、カーネルとinitrdを使用します。 ブートローダの設定ファイルを記述する際に必要となりますので、 カーネルとinitrdのファイル名を書き留めておいて下さい。電源ボタンを押し、 ハードウェアの自動検知(インストールCDで行われているように)が実行された後、 initrdはすぐに展開されます(但し、それは"実際の"システムが起動する前です)。

コード表示 4.4: 作成されたカーネルイメージとinitrdの確認

# ls /boot/kernel* /boot/initramfs*

7.e. カーネルモジュール

モジュールを設定する

自動的にロードさせる必要があるモジュールは、 /etc/modules.autoload.d/kernel-2.6で記述しておく必要があります。 また必要に応じて、モジュールに対し追加オプションを加えることもできます。

利用可能なモジュールを全て確認するには、以下のfindコマンドを実行します。 なお、コンパイルされたカーネルのバージョンに合わせ、 "<kernel version>"を置き換える必要があります。

コード表示 5.1: 利用可能なモジュールを全て確認

# find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko'

たとえば、3c59x.koモジュールを自動的にロードさせるには、 kernel-2.6ファイルを編集しモジュール名を入力します。

コード表示 5.2: /etc/modules.autoload.d/kernel-2.6の編集

# nano -w /etc/modules.autoload.d/kernel-2.6

コード表示 5.3: /etc/modules.autoload.d/kernel-2.6

3c59x

システムの設定に進み、インストールを続けてください.

8. システム設定

8.a. ファイルシステム情報

fstabって何

Linuxにおいて、システムに使用されている全パーティションは/etc/fstabに記述されていなければなりません。このファイルにはそれぞれのパーティションのマウントポイント(ファイルシステムの構築のときに出てきた)、どのように、どんな特別なオプションでマウントされるか(自動的にマウントするか否か、ユーザーがマウントできるかどうか等)の情報が含まれます。

/etc/fstabの作成

/etc/fstabは特別な構文を使います。各々のラインは6つのフィールドから成り、空白(スペース、タブもしくはその両方)で分けられています。各々のフィールドにはそれぞれの意味があります。

重要: Gentooが提供している元々の/etc/fstab有効なfstabではありません。 自分のシステムの/etc/fstabを作成しなければなりません。

コード表示 1.1: /etc/fstabを開く

# nano -w /etc/fstab

では/bootパーティションのオプションをどのように書くかを見てみましょう。 これは単なる例であり、/bootを作っていない、もしくは作ることができなかったのなら、そのままコピーしないでください。

ディフォルトのx86パーティションの例では、よくあるように/boot/dev/sda1パーティション、ファイルシステムがext2となっています。 ブート中にチェックされる必要があります。 そこでこう書きます。

コード表示 1.2: /etc/fstabでの/boot行の例

/dev/sda1   /boot     ext2    defaults        1 2

/boot自身のシステムのセキュリティを向上させるためにパーティションが自動的にマウントされたくないユーザーもいます。そういう方々はdefaultsの代わりにnoautoにしてください。これはこのパーティションを使いたいときは毎回手動でマウントする必要があるという事です。

パーティション分割の構成に合ったルールを追加し、CD-ROMドライブのためのルールを付け加えてください。 そして、その他のパーティションやドライブがあれば、当然それらも忘れないでください。

ここで/etc/fstabを作るために、以下のを使います。

コード表示 1.3: 完全な/etc/fstabの例

/dev/sda1   /boot        ext2    defaults,noatime     1 2
/dev/sda2   none         swap    sw                   0 0
/dev/sda3   /            ext3    noatime              0 1

/dev/cdrom  /mnt/cdrom   auto    noauto,user          0 0

automountにファイルシステムを推測させ(多数のファイルシステムの内の1つで作成され得るリムーバルメディアに推奨されます)、userは非rootユーザーがCDをマウントできるようにします。

パフォーマンスを改善するのに多くのユーザーはマウントオプションとして noatimeオプションを付け加えたいと考えることがあります。 アクセス時間が記録されないので、その結果はより高速なシステムになります(一般的にその記録はほとんど必要ありません)。

/etc/fstabを再チェックして、保存・終了して次に進んでください。

8.b. ネットワーク情報

ホスト名、ドメイン名等

ユーザーが決めなければならない選択の一つは自分のPCの名前です。至極簡単に思えますが多くのユーザーは自分のLinux-pcに適当な名前を見付けるのに苦労してます。事を早く進めるために、選んだ名前は後で変更できることを知っておいてください。判りやすいように、ここでは単にマシンをtux、ドメイン名をhomenetworkと呼ぶことにします。

コード表示 2.1: ホスト名を設定

# nano -w /etc/conf.d/hostname
   
(HOSTNAME変数に自分のホスト名を設定してください)
HOSTNAME="tux"

次に、もしドメイン名が必要なら、/etc/conf.d/netに設定します。 ISPやネットワーク管理者からそう言われているか、DHCPサーバは持っておらずDNSサーバを持っているときのみドメインが必要になります。 もしネットワークにつなげるときDHCPの設定を行っていれば、DNSやドメイン名に悩む必要はありません。

コード表示 2.2: domain名を設定

# nano -w /etc/conf.d/net
   
(dns_domain変数に自分のドメイン名を設定してください)
dns_domain_lo="homenetwork"

注意: ドメイン名を設定しないことを選択した場合、/etc/issueを編集することで、ログイン画面の"This is hostname.(none)"というメッセージを取り除くことができます。 そのファイルから文字列.\Oを削除するだけです。

もしNISドメインがあれば(これについてわからなければ、それが無いということです)、それも定義しなければなりません。

コード表示 2.3: NISドメイン名を設定

# nano -w /etc/conf.d/net
   
(nis_domain変数に自分のNISドメイン名を設定してください)
nis_domain_lo="my-nisdomain"

注意: DNSとNISの設定に関する情報がもっと欲しい場合は、/etc/conf.d/net.exampleに示されている例を読んでください。 DNS/NISの設定管理を楽にするため、openresolvをemergeしてもよいでしょう。

ネットワークを設定する

「ねえ、もうそれは済んでるんだけど」って気持ちになる前に、Gentooのインストールの初めに設定したネットワークは単にインストール用のものだったことを思い出してください。今ここで自分のGentooシステムに永続的なネットワーク設定をしていきましょう。

注意: bonding、ブリッジ、802.1Q VLANや無線ネットワークなどの高度な話題を含むもっと詳しい情報はGentooネットワーク設定セクションで扱っています。

全てのネットワーク情報は/etc/conf.d/netに集められます。このファイルでは単純な構文が使われているのですが、もしネットワークを手動で設定する方法を知らなれば一見しただけではわからないでしょう。でも恐がらなくてもいいですよ。全て説明しますから。様々な設定を扱った十分にコメントされた例がある/etc/conf.d/net.exampleを利用できます。

DHCPは標準で使用されています。 DHCPを動作させるためには、DHCPクライアントをインストールする必要があります。 これについては必要なシステムツールをインストールするに記述されています。 忘れずにDHCPクライアントのインストールしてください。

もし特定のDHCPのオプションが必要だったり、絶対にDHCPを使いたくなかったりして自分のネットワーク接続の設定が必要ならば、好みのエディターで/etc/conf.d/netを開いてください(この例ではnanoが使われています)。

コード表示 2.4: 編集のために/etc/conf.d/netを開く

# nano -w /etc/conf.d/net

下記のファイルを見て下さい。

コード表示 2.5: Default /etc/conf.d/net

# This blank configuration will automatically use DHCP for any net.*
# scripts in /etc/init.d.  To create a more complete configuration,
# please review /etc/conf.d/net.example and save your configuration
# in /etc/conf.d/net (this file :]!).

自身のIPアドレス、ネットマスク、ゲートウェイを入れるには、config_eth0routes_eth0の両方を設定する必要があります。

コード表示 2.6: eth0のIP情報を手動で設定する

config_eth0=( "192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255")
routes_eth0=( "default via 192.168.0.1" )

DHCPを使用するなら、config_eth0を設定してください。

コード表示 2.7: eth0のIPを自動で取得する

config_eth0=( "dhcp" )

全ての有効なオプション項目は/etc/conf.d/net.exampleを読んでください。 あなたの DHCP クライアントのmanページも読み、特別なDHCPオプションが必要かどうか確認してください。

もしいくつかのネットワークインターフェイスがあるなら、config_eth1config_eth2のように上記ステップを繰り返してください。

さあ設定を保存・終了して次に進みましょう。

ブート時に自動でネットワークを始動させる

ブート時にネットワークインターフェースを有効にさせるには、それぞれのスクリプトをdefaultのランレベルに追加する必要があります。

コード表示 2.8: defaultのランレベルにnet.eth0を追加

# rc-update add net.eth0 default

もしいくつかのネットワークインターフェイスがあるなら、適当なnet.eth1net.eth2等の為に起動スクリプトを作成する必要があります。これにはlnが使えます。

コード表示 2.9: 別の起動スクリプトを作成

# cd /etc/init.d
# ln -s net.lo net.eth1
# rc-update add net.eth1 default

ネットワーク情報を書き留める

さてネットワークの情報に関してLinuxシステムに知らせる必要があります。これは/etc/hostsに定義され、自分のネームサーバーでは解決されないホストの為のホスト名とIPアドレスの解決に役立ちます。 これを自分のシステムに定義する必要があります。 自分自身で内部ネットワーク向けのDNSを設定したくない場合は、 ネットワークに存在する、他のシステムも定義してもよいでしょう。

コード表示 2.10: /etc/hostsを開く

# nano -w /etc/hosts

コード表示 2.11: ネットワーク情報を書き込む

(これは現在のシステムを定義しています)
127.0.0.1     tux.homenetwork tux localhost

(自分のネットワークで、以下のように定義した固定IPを持つ必要がある、
別のシステムを定義します)
192.168.0.5   jenny.homenetwork jenny
192.168.0.6   benny.homenetwork benny

保存・終了して次へ進みましょう。

もしPCMCIAが無ければ、システム情報に進むことができます。 PCMCIAユーザーは続くPCMCIAの項目を読んでください。

自由選択:PCMCIAを作動させる

PCMCIAユーザーは最初にpcmciautilsパッケージをインストールしなければなりません。

コード表示 2.12: pcmciautilsのインストール

# emerge pcmciautils

pcmcia-csがインストールされたら、pcmciaスクリプトをdefaultのランレベルに追加します。

コード表示 2.13: pcmciaスクリプトをdefaultのランレベルに追加

# rc-update add pcmcia default

8.c. システム情報

rootのパスワード

最初にrootのパスワードを入力して設定します。

コード表示 3.1: rootのパスワードを設定

# passwd

システム情報

Gentooでは/etc/rc.confを一般的なシステム全般の設定として使用します。/etc/rc.confを開いて、その中のコメントを読んで楽しんでください。:)

コード表示 3.2: /etc/rc.confを開く

# nano -w /etc/rc.conf

/etc/rc.confの設定が終われば、保存・終了してください。

見て判るように、このファイルには必要な設定の値を決めるのに役立つ良いコメントがされてます。 ユニコードを使って自分のシステムを設定し、標準のエディターとディスプレイマネージャー(gdmやkdmのような)を決める事ができます。

Gentooではキーボード設定を扱うのには/etc/conf.d/keymapsを使います。自分のキーボードを設定するにはこのファイルを編集してください。

コード表示 3.3: /etc/conf.d/keymapsを開く

 # nano -w /etc/conf.d/keymaps

KEYMAPの設定には特に注意してください。もし間違ったKEYMAPを選ぶとキーボードをタイプするときにとんでもなく変な結果になるでしょう。

/etc/conf.d/keymapsの設定が終われば、保存・終了してください。

Gentooではクロックオプションの設定には/etc/conf.d/clockを使います。必要に応じてこのファイルを編集してください。

コード表示 3.4: /etc/conf.d/clockを開く

# nano -w /etc/conf.d/clock

ハードウェアクロックにUTCを使っていないのなら、CLOCK="local"をこのファイルに追加する必要があります。 さもなければ、いくらか時間がずれてしまうでしょう。

さらにsys-libs/timezone-dataパッケージを更新すると、自動的に/etc/localtimeがアップデートされるよう、先に/etc/localtimeへコピーしたタイムゾーンを定義すべきです。 例えば、もしタイムゾーンにGMTを使用しているとするなら、TIMEZONE="GMT"を追加します。

/etc/conf.d/clockの設定が終われば、保存・終了してください。

IBM PPC64のシステム上にGentooをインストールしていなければ 、必要なシステムツールをインストールするに進んでください。

9. 必要なシステムツールをインストールする

9.a. システムログツール

いくつかのパッケージは同じ機能を提供してるので、いくつかのツールはstage3アーカイブから無くなっています。今はどれをインストールしたいかを選ぶのは自分次第です。

最初に決める必要のあるツールは、システムにロギング機能を提供するものです。UnixとLinuxにはログ性能の素晴らしい歴史があります。-- もし望むならログファイルにシステムで起こった全てを記録できます。これはシステムログツールを通して行われます。

Gentooでは選択可能ないくつかのシステムログツールを提供しています。伝統的なシステムロギングデーモンのsysklogdがあります。syslog-ngは高機能なシステムログツールです。そしてmetalogは詳細な設定ができるシステムログツールです。他の選択もPortageを通じて可能でしょう。有効パッケージの数は日毎に増えていますから。

もしsysklogdsyslog-ngを使おうと思っているなら、これらのシステムログツールにはログファイルをローテーションする機構が無いので、後でlogrotateをインストールしましょう。

選択したシステムログツールをインストールするには、それをemergeして、rc-updateを使って通常にランレベルにスクリプトを追加してください。次の例ではsyslog-ngをインストールします。もちろん自分で選択したシステムログツールに置き換えても構いません。

コード表示 1.1: システムログツールをインストールする

# emerge syslog-ng
# rc-update add syslog-ng default

9.b. 自由選択:Cronデーモン

次はcronデーモンです。これは任意で、システムに必須ではありませんが、インストールするのは賢明なことです。しかしcronデーモンとは何でしょうか。cronデーモンは予定されたコマンドを実行します。定期的にあるコマンドを実行する必要があるならとても重宝します。(例えば日毎、週毎、月毎)。

Gentooでは3つのcronデーモンを提供しています。: dcronfcronそしてvixie-cronです。その内の1つをインストールするのはシステムログツールをインストールするのに似ています。しかし、dcronfcronでは特別な設定コマンドが必要とされます。すなわちcrontab /etc/crontabです。もし何を選んだら良いかわからなかったら、vixie-cronを使ってください。

ネットワーク無しのインストールではvixie-cronしか選択できません。もし他のcronデーモンが良ければ、後でインストールできるのでお待ちください。

コード表示 2.1: cronデーモンをインストールする

# emerge vixie-cron
# rc-update add vixie-cron default
(dcronかfcronを選んだときのみ) # crontab /etc/crontab

9.c. 自由選択: ファイルのインデックス

locateを使用して素早くファイルの検索をするために、システム中のファイルのインデックスを作成する場合には、sys-apps/slocateをインストールする必要があります。

コード表示 3.1: slocateをインストールする

# emerge slocate

9.d. ファイルシステムツール

使っているファイルシステムが何かに依りますが、必須のファイルシステムツールをインストールする必要があります。(ファイルシステムの整合性をチェックしたり、追加のファイルシステムを作成する等のために)。 ext2/ext3ファイルシステムを管理するためのツール(e2fsprogs)はシステムの一部としてインストール済みであることに注意してください。

次の表はどのファイルシステムを使っているかでどのツールをインストールする必要があるかを表しています。

ファイルシステム ツール インストールコマンド
XFS xfsprogs emerge xfsprogs
ReiserFS reiserfsprogs emerge reiserfsprogs
JFS jfsutils emerge jfsutils

もしEVMSユーザーなら、evmsもインストールする必要があります。

コード表示 4.1: EVMSユーティリティーをインストールする

# USE="-gtk" emerge evms

USE="-gtk"で依存関係のインストールを避ける事ができます。もしevmsのグラフィカルツールを有効にしたいなら、後でevmsを再コンパイルできます。

9.e. ネットワークツール

もし他の追加のネットワーク関連ツール(pppやdhcpクライアント等)を必要としなければ、ブートローダを設定するに進んでください。

自由選択:DHCPクライアントをインストールする

もしGentooが自動的にネットワークインターフェイスにIPアドレスを取得するようにしたいのなら、dhcpcd(もしくは他のDHCPクライアント -- 使用可能なDHCPクライアントのリストはネットワークモジュールを言らください)をシステムにインストールする必要があります。 今しなければ、インストール後にインターネットに接続できないでしょう。

コード表示 5.1: dhcpcdをインストールする

# emerge dhcpcd

自由選択:PPPoEクライアントをインストールする

もしインターネットに接続するのにpppが必要なら、インストールしなければなりません。

コード表示 5.2: pppをインストールする

# emerge ppp

さあブートローダを設定するに進みましょう。

10. ブートローダを設定する

10.a. ブートローダの選択

はじめに

さて、カーネルを設定し、コンパイルし、そして必要なシステムの設定ファイルも適切に編集したので、 システムを起動するときに、カーネルを立ち上げるプログラムをインストールするときが来ました。 そのようなプログラムは、ブートローダと呼ばれています。

x86向けに、Gentoo LinuxはGRUBLILOを提供しています。

しかし、ブートローダをインストールする前にフレームバッファの設定方法を提供します(当然それを知りたいでしょうから)。 フレームバッファを利用すれば、(限定的ながら)グラフィカルな機能(Gentooが提供する素敵なブートスプラッシュイメージを使用するなど)とともに、Linuxのコマンドラインを実行することができます。

自由選択: フレームバッファ

もし、カーネルの設定でフレームバッファサポートを有効にしている場合、 (あるいは、genkernelのデフォルトのカーネル設定を使用している場合) vga文またはvideo文(もしくは両方)をブートローダの設定ファイルに追加することによってフレームバッファを有効にすることができます。

どのフレームバッファデバイスを使用しているかを最初に知っておく必要があります。 Gentooのパッチが当たったカーネルツリー(gentoo-sourcesのような)を使用している場合には、VESA driverとしてuvesafbが選択されていることでしょう。 この場合、uvesafbを使用することになり、vga文を設定する必要はありません。 その他の場合はvesafbドライバを使用することになるので、vga文を設定する必要があります。

vga文は、フレームバッファのvesafb用に解像度や色深度(color depth)を指定します。 /usr/src/linux/Documentation/fb/vesafb.txt(これはカーネルソースのパッケージをインストールするとき、インストールされます)に従って、希望する解像度と色深度に一致するVESA番号を渡す必要があります。

下記の表は、指定可能な解像度と色深度と、vga文に渡す必要のある値との対応表です。

640x480 800x600 1024x768 1280x1024
256 0x301 0x303 0x305 0x307
32k 0x310 0x313 0x316 0x319
64k 0x311 0x314 0x317 0x31A
16M 0x312 0x315 0x318 0x31B

video文はフレームバッファの表示オプションをコントロールします。 フレームバッファドライバに続いて、有効にしたいコントロール文を記述しなければなりません。 指定できるすべての値は/usr/src/linux/Documentation/fb/vesafb.txtに記載されています。 もっともよく使われる3つのオプションを紹介します。

コントロール名 説明
ywrap グラフィックカードがメモリ上でwrap可能であると仮定します。 (つまり、メモリの最後に到達したときに最初から続けられる、ということです。)
mtrr:n MTRRレジスタを設定します。nには次のものを指定できます。
0-disabled
1-uncachable
2-write-back
3-write-combining
4-write-through
mode (uvesafbでだけ有効です)
解像度、色深度、リフレッシュレートを設定します。 例えば、1024x768-32@85は1024x768で32bitカラー、85Hzのリフレッシュレートであるということを示します。

上記の2つの文を記述した結果、vga=0x318 video=vesafb:mtrr:3,ywrapまたはvideo=uvesafb:mtrr:3,ywrap,1024x768-32@85のようになるでしょう。 この設定は書き留めておいてください。 あとですぐ必要になります。

それでは、続いてGRUB または LILOをインストールしましょう。

10.b. 一般的な選択: GRUBを使用する

GRUB特有の言葉を理解する

GRUBを理解する上で最も重要なことは、GRUBのハードディスクやパーティションの参照方法に慣れることです。 あなたのLinuxパーティション/dev/sda1は、GRUBの下ではほとんどの場合(hd0,0)になります。 hd0,0の両側の括弧に注意してください。 それらは必要なものです。

ハードディスクドライブは、"a"ではなく0から、パーティションは1ではなく0からカウントされます。 ハードディスクだけではなく、CD-ROMやCD-R/RW等のatapi-ideデバイスもhdデバイスになることにも注意してください。また、SCSIドライブに対しても同様の数え方をします。 (BIOSで 、SCSIデバイスから起動する設定になっている場合を除いて、 通常、SCSIに対してはIDEドライブより大きな数字が割り当てられます。) BIOSに他のハードディスク(例えばプライマリスレーブ)からブートするように設定した場合、そのハードディスクはhd0として参照されます。

ハードディスクが/dev/sda、2台め以降が/dev/sdb/dev/sdc上にあり、/dev/sdb7(hd1,6)として参照されると仮定します。 これはなんだかトリッキーな感じがしますし、実際、トリッキーです。 ただし、これから見るように、GRUBにはタブ補完機能が備わっているので、ハードディスクやパーティションがたくさんある場合や、GRUBのナンバリング方法をちょっと忘れてしまったときに便利です。

GRUBの雰囲気がつかめたところで、GRUBをインストールしましょう。

GRUBのインストール

GRUBをインストールするには、まずemergeしましょう。

コード表示 2.1: GRUBのインストール

# emerge grub

これでGRUBはインストールされましたが、あなたが新たに作成したカーネルをGRUBが自動的に起動するためには、 設定ファイルを書き、GRUBをMBRに書き込む必要があります。 nano(あるいは、他のエディタでも可能ですが)で/boot/grub/grub.confを作成してください。

コード表示 2.2: /boot/grub/grub.confの作成

# nano -w /boot/grub/grub.conf

それではgrub.confファイルを仕上げてしまいましょう。 このガイドで使用しているパーティションの場合のgrub.confの例を2つ示します。 最初のgrub.confに対してのみたくさんコメントを付けています。 カーネルイメージのファイル名、また、もし使っている場合は、initrdイメージのファイル名が、あなたの使用しているものであることを確認してください。

注意: GRUBはBIOSからデバイスの表示記号を割り当てます。 BIOSの設定を変更したら、デバイスの文字や番号も変わる可能性があります。 例えば、もし起動デバイスの順番を変更したら、GRUBの設定を変更する必要があるかもしれません。

注意: rootファイルシステムがJFSの場合には、 JFSでは、read-writeマウントを許可する前にログを再読み込みする必要があるので、" ro"をkernel加えなければなりません

コード表示 2.3: genkernelを使用していないユーザ向けのgrub.confの例

# どれをデフォルトでブートするかを指定する。リストの内、0は最初、1は2番目のものを表す。
default 0
# デフォルトが起動する前に何秒間待つかを指定します。
timeout 30
# 最高にカッコいいスプラッシュイメージ
# グラフィックカードが無い場合はコメントアウトしてください
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title Gentoo Linux 2.6.24-r5
# カーネルイメージ(あるいは、OS)があるパーティションの指定
root (hd0,0)
kernel /boot/kernel-2.6.24-gentoo-r5 root=/dev/sda3

title Gentoo Linux 2.6.24-r5 (rescue)
# カーネルイメージ(あるいは、OS)があるパーティションの指定
root (hd0,0)
kernel /boot/kernel-2.6.24-gentoo-r5 root=/dev/sda3 init=/bin/bb

# 次の4行は、Windowsとデュアルブートしたい場合に追加します。
# この例では、Windowsは/dev/sda6にインストールされているものとします。
title Windows XP
rootnoverify (hd0,5)
makeactive
chainloader +1

コード表示 2.4: genkernelユーザ向けのgrub.conf

default 0
timeout 30
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title Gentoo Linux 2.6.24-r5
root (hd0,0)
kernel /boot/kernel-genkernel-x86-2.6.24-gentoo-r5 root=/dev/ram0 init=/linuxrc ramdisk=8192 real_root=/dev/sda3
initrd /boot/initramfs-genkernel-x86-2.6.24-gentoo-r5

# デュアルブートしたい場合のみ
title Windows XP
rootnoverify (hd0,5)
makeactive
chainloader +1

もし、違うパーティション構成や、違うカーネルイメージ名を使用しているなら、適宜それにあわせてください。 (hd0,0)のようなGRUBに指定するデバイスは、ルートではなく、マウントポイントに関係します。 言い換えると、(hd0,0)/grub/splash.xpm.gzは、実際には、/boot/grub/splash.xpm.gzとなります。 これは、(hd0,0)/bootであることによります。

そのほかに、違うパーティション構成を使用することを選択し、/bootを別のパーティションにおいていなければ、上記のコード例で使用されている/bootは本当に必要です。 もし私たちが提案したパーティション構成に従っているのなら、/bootを前に置く必要はありませんが、bootシンボリックリンクが動作するようにします。 一言で言えば、上記のコード例は、/bootパーティションを分けているいないにかかわらず動作します。

もし、他にカーネルに渡したいオプションがあるなら、 単純にそれをkernelコマンドの最後に追加してください。 すでにひとつオプションを渡していますが(root=/dev/sda3、またはreal_root=/dev/sda3)、他のオプションも同様にカーネルに渡すことができます。 例えば、すでに話題に出たフレームバッファ用のvideovgaオプションのようにです。

もし2.6.7かそれ以降のカーネルを使用しており、BIOSが大容量のハードディスクを認識しないためにハードディスクにジャンパ設定しているなら、sda=strokeを指定する必要があります。 sdaはこのオプションが必要なデバイスと置き換えてください。

genkernelを使用している場合、その起動オプションはインストールCDで使われているものと同じになります。 例えば、SCSIデバイスを持っている場合、カーネルオプションとしてdoscsiを追加します。

それでは、grub.confファイルを保存してエディタを終了してください。 システム起動時にGRUBが自動的に実行されるようにするためには、MBR (Master Boot Record、マスターブートレコード)にGRUBをインストールする必要があります。

GRUBの開発者はgrub-installを使用することを奨めています。 しかし、なんらかの理由でgrub-installが正常動作しない場合、 GRUBを手動でインストールする方法もあります。

一般的な選択: grub-installを使用してGRUBをインストールするまたは、もう一つの選択: GRUBを手動でインストールするへ進みしょう。

一般的な選択: grub-installを使用してGRUBをインストールする

GRUBをインストールするためには、grub-installコマンドを実行する必要があります。 しかし、chroot環境にいるためgrub-installは簡単には使えません。 はじめに、すべてのマウント済みのファイルシステムのリストである/etc/mtabを作成する必要があります。 幸運なことにこれを簡単にやる方法があります。 単に、/proc/mounts/etc/mtabへ次のように上書きコピーしてください。 ブートパーティションを別に作成していなければ、rootfsの行を除外してください。 以下の例はどちらの場合でも動作します。

コード表示 2.5: /etc/mtabの作成

# grep -v rootfs /proc/mounts > /etc/mtab

これでgrub-installを使用してGRUBをインストールすることができます。

コード表示 2.6: grub-installの実行

# grub-install --no-floppy /dev/sda

もしGRUBに関してさらに疑問があるなら、GRUB FAQあるいはGRUB Manualを参照してください。

それでは、システムの再起動へ進みましょう。

もうひとつの選択肢: GRUBを手動でインストールする

GRUBの設定を始めるために、grubと打ち込んでください。 grub>というGRUBコマンドラインプロンプトが現れたでしょう。 ここで、ハードディスクのブートレコードにGRUBをインストールするためには、正しいコマンドを打ち込む必要があります。

コード表示 2.7: GRUBシェルの開始

# grub --no-floppy

注意: もしあなたのシステムにフロッピードライブがないなら、 GRUBが存在しないフロッピードライブを捜査しないように、 --no-floppyオプションを上記コマンドに追加してください。

次の例では、GRUBが/bootパーティションの/dev/sda1から情報を読むように、 そして、コンピュータの電源を入れた後、最初にGRUBプロンプトが出現するように、 ハードディスクのMBR(master boot record、マスターブートレコード)にGRUBをインストールしています。 もちろん、例に従って設定する必要はなく、必要に応じて変更してください。

GRUBのタブ補完機能は、GRUBシェルの中で使用できます。 例えば、"root ("と打ち込んで、続いてTABキーを押した場合、 hd0のようなデバイスの一覧を見ることができるでしょう。 "root (hd0,"に続いてTABキーを押した場合は、hd0,0のような撰択可能なパーティションの一覧を取得できます。

TAB補完を使うことによって、GRUBの設定はそれほど大変ではなくなるでしょう。 それでは、GRUBの設定をしましょう。

コード表示 2.8: GRUBをMBRにインストールする

grub> root (hd0,0)          (/bootパーティションの場所を指定します)
grub> setup (hd0)           (MBRにGRUBをインストールします)
grub> quit                  (GRUBシェルを終了します)

注意: GRUBをMBRではなく、特定のパーティションにインストールしたいなら、 setupコマンドの部分を編集して、それが正しいパーティションを指すようにします。 例えば、GRUBを/dev/sda3にインストールしたい場合、setup (hd0,2)というコマンドになります。しかしながら、こういうことをしたいユーザはあまりいません。

もしGRUBに関してさらに疑問があるなら、GRUB FAQあるいはGRUB Manualを参照してください。

それでは、システムの再起動へ進みましょう。

10.c. もう一つの選択: LILOを使う

LILOのインストール

LILO(LInuxLOader)は、実績があり、十分に機能するLinuxのブートローダです。 しかし、GRUBが持っている機能のうちLILOにはないものがいくつかあります。 そして、それが現在GRUBの人気が上昇している理由でもあります。 LILOがいまだに使われているのは、LILOは動作してもGRUBはうまく動かないシステムもあるからです。 また、もちろん、LILOに精通していて、LILOを使い続けたいというユーザもいます。 どちらにしても、Gentooはその両方をサポートしていて、この節を読んでいるということは、 あなたはLILOを使うことにしたわけです。

LILOをインストールするのは、とても簡単です。単に次のようにemergeを使うだけです。

コード表示 3.1: LILOのインストール

# emerge lilo

LILOの設定

LILOを設定するには、/etc/lilo.confを作成しなければなりません。 お好みのエディタ(このハンドブックでは、一貫してnanoを例として使用しています)を立ち上げ、これを作成してください。

コード表示 3.2: /etc/lilo.confファイルの作成

# nano -w /etc/lilo.conf

少し前に、作成したカーネルイメージの名前を覚えておくようにお願いしたと思います。 次のlilo.confの例でも、以前例示した構成と同じパーティション構成を使います。 2つの例を示します。

カーネルイメージのファイル名、また、もし使っている場合は、initrdイメージのファイル名が、あなたの使用しているものであることを確認してください。

注意: rootファイルシステムがJFSの場合には、 JFSでは、read-writeマウントを許可する前にログを再読み込みする必要があるので、append="ro"を各行に加えなければなりません

コード表示 3.3: /etc/lilo.confの例

boot=/dev/sda             # LILOをMBRにインストールする
prompt                    # ユーザに他の選択をする余地を残す
timeout=50                # デフォルトセクションを起動する前に、5秒間待つ
default=gentoo            # delayで設定した時間が経過したら、"gentoo"セクションを起動する

# genkernelを使用していないユーザ向け
image=/boot/kernel-2.6.24-gentoo-r5
  label=gentoo            # このセクションの名前
  read-only               # 読み取り専用のルートファイルシステムで起動する。これは編集しないように!
  root=/dev/sda3          # ルートファイルシステムの場所

image=/boot/kernel-2.6.24-gentoo-r5
  label=gentoo.rescue     # このセクションの名前
  read-only               # 読み取り専用のルートファイルシステムで起動する。これは編集しないように!
  root=/dev/sda3          # ルートファイルシステムの場所
  append="init=/bin/bb"   # Gentooの静的レスキューシェルを起動

# genkernelユーザ向け
image=/boot/kernel-genkernel-x86-2.6.24-gentoo-r5
  label=gentoo
  read-only
  root=/dev/ram0
  append="init=/linuxrc ramdisk=8192 real_root=/dev/sda3"
  initrd=/boot/initramfs-genkernel-x86-2.6.24-gentoo-r5

# 次の2行は、Windowsとデュアルブートさせたい場合に追加します。
# この場合、/dev/sda6にWindowsがインストールされているものとします。
other=/dev/sda6
  label=windows

注意: もし、違うパーティション構成や、違うカーネルイメージ名を使用しているなら、適宜それにあわせてください。

もし、追加でカーネルにオプションを渡す必要があるなら、append文をそのセクションに追加してください。 例のように、フレームバッファを有効にするためにvideoを追加しています。

コード表示 3.4: カーネルオプションを追加するためにappend文を使用する

image=/boot/kernel-2.6.24-gentoo-r5
  label=gentoo
  read-only
  root=/dev/sda3
  append="video=vesafb:mtrr,ywrap,1024x768-32@85"

もし2.6.7かそれ以降のカーネルを使用しており、BIOSが大容量のハードディスクを認識しないためにハードディスクにジャンパ設定しているなら、sda=strokeを指定する必要があります。 sdaはこのオプションが必要なデバイスと置き換えてください。

genkernelを使用している場合、その起動オプションはインストールCDで使われているものと同じになります。 例えば、SCSIデバイスを持っている場合、カーネルオプションとしてdoscsiを追加します。

それでは、ファイルを保存して、エディタを終了してください。 /etc/lilo.confの設定をシステムに反映するために、/sbin/liloを実行してください(lilo.confの内容をディスクにインストールします)。 新しいカーネルをインストールするたびに、あるいはメニューに変更を加えた場合は/sbin/liloを毎回実行しなければならないということを覚えておいてください。

コード表示 3.5: LILOインストールの仕上げ

# /sbin/lilo

もしLILOに関してさらに疑問があるなら、wikipedia pageを参考にしてください。

それでは、システムの再起動へ進みましょう。

10.d. システムの再起動

chroot環境を抜けて、マウントしたすべてのパーティションをアンマウントしてください。 そして、待ちに待った次のコマンドを入力しましょう: reboot

コード表示 4.1: すべてのパーティションをアンマウントし再起動する

# exit
cdimage ~# cd
cdimage ~# umount /mnt/gentoo/boot /mnt/gentoo/dev /mnt/gentoo/proc /mnt/gentoo
cdimage ~# reboot

もちろん、起動CDを抜くことを忘れずに。そうしないと新しいGentooシステムではなく、CDからまた起動してしまいます。

再起動したら、Gentooインストールの締めくくりへ進んでインストールを完了させましょう。

11. Gentooインストールの締めくくり

11.a. ユーザ管理

日常作業で使用するためのユーザを追加

Unix/Linux システム上で、rootユーザで作業するのは危険であり、できるだけ避けるべきです。 したがって、日常作業で使用するためのユーザを追加することが強く推奨されます。

グループはユーザがどのような行動を取ることができるかを定義したメンバーのことです。 以下の表に、利用すると考えられるいくつかの重要なグループを示します。

グループ 詳細
audio オーディオデバイスへのアクセスが可能
cdrom 光学デバイスへの直接アクセスが可能
floppy フロッピーデバイスへの直接アクセスが可能
games ゲームで遊ぶことが可能
portage 一般ユーザでemerge --pretendを使用可能
usb USBデバイスへのアクセスが可能
plugdev カメラやUSBメモリスティックといった接続デバイスをマウント可能
video ビデオキャプチャーデバイスへのアクセスとハードウェアアクセラレーションが可能
wheel suの使用が可能

例えば、wheelusersそしてaudioグループに所属するjohnというユーザを作るときには、まずrootでログインして(rootだけがユーザを作ることができます)useraddを実行します。

コード表示 1.1: 日常作業で使用するためのユーザを作成

Login: root
Password: (rootのパスワード)

# useradd -m -G users,wheel,audio -s /bin/bash john
# passwd john
Password: (johnのパスワードを入力)
Re-enter password: (確認のため再度パスワードを入力)

もしこのユーザがrootとして作業する必要があれば、一時的にroot権限を持つためにsu -を使うことができます。 また、sudoパッケージを使うこともできます。これは正しく設定されていればとても安全な方法です。

11.b. ディスクの片付け

tarball の削除

Gentooのインストールは終了し、再起動も行いました。 何も問題がなければダウンロードしたステージ3 tarballと Portage スナップショットをハードディスクから削除してかまいません。/ にダウンロードしたことを思い出してください。

コード表示 2.1: ステージ3 tarball の削除

# rm /stage3-*.tar.bz2*

コード表示 2.2: Portage スナップショットの削除

# rm /portage-latest.tar.bz2*

12. これからどうすればいいの?

12.a. ドキュメント

おめでとうございます!これであなたのGentooシステムは動くようになりました。 でも、次は何をすればいいのでしょう?何を選べばいいのでしょう? まず何を探ればいいのでしょう? Gentooにはたくさんの可能性と、たくさんの文書化された(そしてあまり文書化されていない)特徴があります。

Gentooハンドブックの次の部「Gentooを使いこなす」はぜひとも読んでください。 ソフトウェアを最新の状態に保つ方法、さらに多くのソフトウェアをインストールする方法、USEフラグとは何か、Gentooのinitシステムの動作について、などが書かれています。

もしあなたのシステムをデスクトップ用途に最適化したいか、完全にデスクトップシステムとして動作するように設定する方法が知りたいなら、広範囲にわたるデスクトップ構築ガイド(日本語訳)を読んでください。それに加えて、自分のシステムを使いやすくするために、 Gentoo Linuxローカライズガイド(日本語訳)を使いたいかもしれません。

Gentoo Security Handbook(訳注:古いドキュメントがGentoo Linux セキュリティ・ガイドにあります)には、読んでおく価値のある膨大なドキュメントがあります。

すべての参照可能なドキュメントの一覧は、Gentooドキュメント(日本語訳)のページを見てください。

12.b. ネット上のGentoo

当然のことながら、Gentoo Forums (訳注: ほとんどが英語です)やたくさんあるGentoo IRCのチャネルはいつでも大歓迎です。

さらに、Gentooにはユーザ向けに公開されたメーリングリスト (訳注: 英語メーリングリストの情報です)がいくつかあります。 加入方法については、メーリングリストのページを見てください。

注意: 訳注: 日本語での情報交換はGentooJP WikiGentooJPのIRCチャネルGentooJPのメーリングリストなどで行われています。

この辺りで終わりにしておきます。続きのインストールを楽しんでください :)

B. Gentooを使いこなす

1. Portageについて

1.a. Portageへようこそ

PortageはもしかするとGentooのソフトウェア管理における最も革新的な注目すべきものかもしれません。 その高い柔軟性と膨大な量の機能で、たびたびLinuxで利用できる最高のソフトウェア管理ツールと見られています。

Portageは全てPythonBashによって書かれており、 両方ともスクリプト言語であるため、ユーザーにとって全体的に見通しのよいものになっています。

ほとんどのユーザーがemergeツールを通してPortageを利用しています。 この章はemergeのmanページから利用可能な情報の複製を作るつもりはありません。 emergeのオプションについての完全な概要を得るために、manページを調べてください。

コード表示 1.1: emergeのmanページを読む

$ man emerge

1.b. Portageツリー

ebuild

パッケージについて話すとき、私たちはたびたびGentooユーザーがPortageツリーを通して利用可能なソフトウェアのタイトルを意味しています。 Portageツリーはebuildという、Portageがソフトウェアを維持する(インストール、検索など)ために必要な全ての情報を含んだファイルのコレクションです。 これらebuildはデフォルトでは/usr/portageに存在します。

Porgageにソフトウェアタイトルに関する行動を行うよう指示するときはいつでも、システムにあるebuildがベースに使われます。 故にPortageが新しいソフトウェアやセキュリティアップデートなどを知るために、定期的にebuildを更新することが重要です。

Portageツリーの更新

Portageツリーは一般にrsyncという高速ファイル転送ユーティリティで更新されます。 更新はrsyncのフロントエンドを提供するemergeコマンドを使うというとても簡単なものです。

コード表示 2.1: Portageツリーの更新

# emerge --sync

もしファイヤーウォールの制限などによりrsyncが実行できないときには、毎日作成されるPortageツリーのスナップショットを利用することによってPortageを更新することができます。 emerge-webrsyncツールは自動的に最新のスナップショットを取得し、システムにインストールしてくれます。

コード表示 2.2: emerge-webrsyncを実行

# emerge-webrsync

1.c. ソフトウェアのメンテナンス

ソフトウェアの検索

Portageツリーからソフトウェアタイトルを検索するには、emergeに内蔵された検索能力を利用することができます。 デフォルトでは、emerge --searchは検索用語に(完全もしくは部分)一致したパッケージ名を返します。

例えば、"pdf"を名前に持つパッケージを検索するにはこうします。

コード表示 3.1: pdfと名付けられたパッケージを検索

$ emerge --search pdf

もし詳細を検索したいのなら--searchdesc(もしくは -S)スイッチを使うことができます。

コード表示 3.2: pdfに関連したパッケージを検索

$ emerge --searchdesc pdf

出力を見ると、それがたくさんの情報を与えてくれることに気付くでしょう。 それらが意味するものと違うように取られないために、各フィールドにははっきりとラベル付けがされています。

コード表示 3.3: 'emerge --search'の結果の例

*  net-print/cups-pdf
      Latest version available: 1.5.2
      Latest version installed: [ Not Installed ]
      Size of downloaded files: 15 kB
      Homepage:    http://cip.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/
      Description: Provides a virtual printer for CUPS to produce PDF files.
      License:     GPL-2

ソフトウェアのインストール

一度好みのソフトウェアを見つけたら、emergeで簡単にインストールすることができます。ただパッケージの名前を追加するだけです。 例えば、gnumericをインストールするにはこうします。

コード表示 3.4: gnumericのインストール

# emerge gnumeric

たくさんのアプリケーションがお互いに依存し合っているため、あるソフトウェアを確実にインストールしようとすると、 結果的にいくつかの依存関係もインストールすることになるでしょう。 ご心配なく、Portageは依存関係をうまく扱ってくれます。 もしパッケージをインストールしたいときにPortageが何をインストールしようとしているか確かめたいときには、 --pretendスイッチを追加します。例えばこのようにします。

コード表示 3.5: gnumericをインストールするふりをする

# emerge --pretend gnumeric

Portageにパッケージをインストールするよう要求したときは、必要なソースコードをインターネットからダウンロードし、 デフォルトでは/usr/portage/distfilesに保持します。 この後、解凍し、パッケージをコンパイルしてインストールします。 Portageにソースをダウンロードするだけでインストールは行って欲しくないときには、emergeコマンドに--fetchonlyコマンドを追加します。

コード表示 3.6: gnumericのソースコードをダウンロード

# emerge --fetchonly gnumeric

インストール済みパッケージのドキュメントを検索

多くのパッケージはドキュメントと共にインストールされます。 時々、docUSEフラグはパッケージのドキュメントをインストールするかしないかを定義します。 現在のdocUSEフラグを確認するにはemerge -vp <package name>コマンドを使用します。

コード表示 3.7: 現在のdoc USEフラグを確認

(もちろんalsa-libはただの例です)
# emerge -vp alsa-lib
[ebuild  N    ] media-libs/alsa-lib-1.0.14_rc1  -debug +doc 698 kB

docUSEフラグを有効にするのに一番良い方法は、/etc/portage/package.useによってパッケージごとに行うやり方です。 そのため、興味のあるパッケージの分だけドキュメントを取得できるようになります。 このフラグを全体に有効にしてしまうと、循環依存の問題を起こす原因となることが知られています。 詳しくは、USEフラグの章を読んでください。

パッケージがインストールされると、ドキュメントは一般的には/usr/share/docディレクトリの下のパッケージ名のディレクトリの中にあります。 app-portage/gentoolkitパッケージ日本語訳)の一部であるequeryツールを利用すると、全てのインストールされたファイルの一覧を表示できます。

コード表示 3.8: パッケージドキュメントの位置

# ls -l /usr/share/doc/alsa-lib-1.0.14_rc1
total 28
-rw-r--r--  1 root root  669 May 17 21:54 ChangeLog.gz
-rw-r--r--  1 root root 9373 May 17 21:54 COPYING.gz
drwxr-xr-x  2 root root 8560 May 17 21:54 html
-rw-r--r--  1 root root  196 May 17 21:54 TODO.gz

(このほかにも、equeryを使用してファイルの位置を表示する方法もあります)
# equery files alsa-lib | less
media-libs/alsa-lib-1.0.14_rc1
* Contents of media-libs/alsa-lib-1.0.14_rc1:
/usr
/usr/bin
/usr/bin/alsalisp
(省略)

ソフトウェアの削除

システムからパッケージを削除したいときは、emerge --unmergeを利用します。 これはPortageにパッケージによってインストールされた設定ファイルをのぞく全てのファイルを削除するよう命令します。 設定ファイルを残しておくと、もう一度インストールしようと決めたときに作業を続けることが可能です。

しかし、大きな警告があります:Portageは削除したいパッケージが他から必要とされているかを確認しません。 とにかく、unmergeするとシステムを破壊する様な重要なパッケージを削除するときには気をつけろと言うことです。

コード表示 3.9: gnumericをシステムから削除

# emerge --unmerge gnumeric

システムからパッケージを削除するときには、インストール時に依存関係により自動的にインストールされたソフトウェアは残されます。 Portageにある削除可能な依存関係を削除するには、emerge--depclean機能を利用します。 これについては後で話します。

システムの更新

システムを完全な形に保つ(もちろん最新のセキュリティアップデートをインストールすることも)には、システムを定期的に更新する必要があります。 Portageはツリーの中のebuildsのみ確認するので、最初にPortageツリーを更新しなければなりません。 Portageツリーが更新されたら、emerge --update worldでシステムを更新できます。 次の例では--askスイッチを使用しています。 これは、更新するパッケージの一覧をPortageに表示させ、続行するかを尋ねます。

コード表示 3.10: システムを更新する

# emerge --update --ask world

Portageはインストールされているアプリケーションの新しいバージョンを検索します。 しかし、これは明示的にインストールされたものしか確かめません(そうしたアプリケーションは/var/lib/portage/worldにリストされています)。 つまり、それらの依存関係は確認しないということです。 システムの個々のパッケージすべてを更新したいときには--deep引数を与えてやります。

コード表示 3.11: システムの全てを更新する

# emerge --update --deep world

明示的にインストールしていない(だが他のプログラムの依存によりインストールされた)パッケージのセキュリティアップデートがあるかもしれないので、このコマンドを時々実行することが推奨されています。

もし最近USEフラグを変更したのなら、--newuseを追加したくなるでしょう。 そうするとPortageは新しいパッケージのインストールか既にあるものの再コンパイルが必要かを確認します。

コード表示 3.12: 完全な更新の実行

# emerge --update --deep --newuse world

メタパッケージ

Portageツリーのいくらかのパッケージは実際には何も含まれていませんが、パッケージのコレクションのインストールに利用されるものがあります。 例えば、kdeパッケージは様々なKDE関連のパッケージを依存関係に引き連れて、完全なKDE環境をシステムにインストールします。

このようなパッケージをシステムから削除したいときには、emerge --unmergeをパッケージに対して実行しても依存関係が残ってしまうのでたいした効果は得られないでしょう。

Portageは残された依存関係を削除する機能性を持っていますが、動的に依存関係を変更するソフトウェアが存在するので、 USEフラグに変更を加えたときも含めてまずシステムを完全に更新する必要があります。 その後残された依存関係を削除するためにemerge --depcleanを実行してください。 これが完了したら、今削除されたソフトウェアを動的にリンクしているが、もはやそれを必要としないアプリケーションを再ビルドします。

これら全ては以下の3つのコマンドで処理できます。

コード表示 3.13: 残された依存関係を削除する

# emerge --update --deep --newuse world
# emerge --depclean
# revdep-rebuild

revdep-rebuildgentoolkitによって提供されます;まず最初にemergeすることを忘れないでください。

コード表示 3.14: gentoolkitパッケージのインストール

# emerge gentoolkit

1.d. Portageが不満を言ったら

SLOT、Virtual、ブランチ、アーキテクチャ、そしてProfilesについて

既に述べたように、Portageはとても強力で他のソフトウェア管理ツールに無い多くの機能をサポートしています。 このことを理解するために、あまり細かくなり過ぎるのを避けて、もう少しPortageの特徴について説明します。

Portageでは、一つのパッケージで複数のバージョンをシステム上に共存させることができます。 他のディストリビューションがそれらの名前にバージョンを付けている(freetypefreetype2の様に)のに対し、 PortageはSLOTと呼ばれる技術を使っています。 ebuildはそのバージョンの確かなSLOTを宣言します。異なったSLOTのebuildはシステムに共存できます。 例えば、freetypeパッケージはSLOT="1"SLOT="2"のebuildを持っています。

同じ機能を提供しますが異なった実装のパッケージもまた存在します。 例えば、metalogdsysklogdsyslog-ngは全てシステムロガーです。 「システムロガー」の機能を必要とするアプリケーションは、例えばmetalogdに依存することはできません。他のシステムロガーも同様に問題のない選択だからです。 Portageはvirtualsを考慮に入れます:他のアプリケーションがvirtual/syslogに依存できるように、それぞれのシステムロガーはvirtual/syslogを規定します。

Portageツリーのソフトウェアは異なったブランチに所属することができます。 デフォルトではシステムはGentooがstableだと思うもののみ受け付けます。 ほとんどのコミットされた新しいソフトウェアのタイトルは、stableにされる前にもっとテストが必要だという意味のテストブランチに追加されます。 これらのソフトウェアのebuildをPortageツリーで見かけても、Portageはstableブランチに置かれるまでは更新しようとしないでしょう。

いくらかのソフトウェアは少しのアーキテクチャのみで利用可能です。 すなわちそのソフトウェアは他のアーキテクチャでは動作しないか、もっとテストが必要か、 Portageツリーにソフトウェアをコミットした開発者が異なったアーキテクチャで動作するかどうか確認できないかです。

各々のGentooのインストールはあるプロファイルと一緒になっています。 それには、他の情報と一緒に、システムが正常に動作するために必要なパッケージのリストが含まれています。

ブロックされたパッケージ

コード表示 4.1: ブロックされたパッケージに対するPortageの警告(--pretendを利用)

[blocks B     ] mail-mta/ssmtp (is blocking mail-mta/postfix-2.2.2-r1)

コード表示 4.2: ブロックされたパッケージに対するPortageの警告(--pretendを利用しない)

!!! Error: the mail-mta/postfix package conflicts with another package.
!!!        both can't be installed on the same system together.
!!!        Please use 'emerge --pretend' to determine blockers. 

ebuildはPortageの依存関係に関する特別なフィールドを含んでいます。 依存関係には2つの種類があります: DEPENDによって宣言されたビルド依存と、RDEPENDよって宣言された実行時依存です。 これらの依存関係が明確に互換性のないパッケージまたはvirtualを指している場合、ブロックを引き起します。

ブロックを解決するには、パッケージのインストールを行わないか、衝突しているパッケージを先にunmergeするかのどちらかを選べます。 上記の例では、postfixのインストールを諦めるか、先にssmtpを削除するかのどちらかです。

<media-video/mplayer-bin-1.0_rc1-r2のように特定のパッケージ識別子(atom)を伴いブロックしていることがあるかもしれません。 この場合、ブロックしているパッケージをより新しいバージョンに更新すれば、ブロックを取り除くことができかもしれません。

既にインストールされた2つのパッケージがお互いをブロックし合っていることもあります。 このまれな場合は、何故それらをインストールする必要があるのかを知るべきです。 ほとんどの場合、1つのパッケージのみで事足ります。 そうでなければ、Gentooのバグトラックシステムにバグを報告してください。

マスクされたパッケージ

コード表示 4.3: マスクされたパッケージに対するPortageの警告

!!! all ebuilds that could satisfy "bootsplash" have been masked. 

コード表示 4.4: マスクされたパッケージに対するPortageの警告に関する理由

!!! possible candidates are:

- gnome-base/gnome-2.8.0_pre1 (masked by: ~x86 keyword)
- lm-sensors/lm-sensors-2.8.7 (masked by: -sparc keyword)
- sys-libs/glibc-2.3.4.20040808 (masked by: -* keyword)
- dev-util/cvsd-1.0.2 (masked by: missing keyword)
- games-fps/unreal-tournament-451 (masked by: package.mask)
- sys-libs/glibc-2.3.2-r11 (masked by: profile)

システムで利用できないパッケージをインストールしようとしたときに、このマスクエラーを受け取るでしょう。 あなたはシステムで利用できる他のアプリケーションのインストールを試みるか、パッケージが利用可能になるまで待つかをするべきです。 パッケージがマスクされているのにはいつも理由があります。

依存関係の喪失

コード表示 4.5: 依存関係の喪失に対するPortageの警告

emerge: there are no ebuilds to satisfy ">=sys-devel/gcc-3.4.2-r4".

!!! Problem with ebuild sys-devel/gcc-3.4.2-r2
!!! Possibly a DEPEND/*DEPEND problem. 

インストールしようとしているアプリケーションはシステムで利用できない他のパッケージに依存しています。 bugzillaに既に報告されているか確認して、まだであれば報告してください。 ブランチを混ぜていない限りこれが起こることはありませんので、それはバグであると言えます。

曖昧なebuild名

コード表示 4.6: 曖昧なebuild名に対するPortageの警告

!!! The short ebuild name "aterm" is ambiguous.  Please specify
!!! one of the following fully-qualified ebuild names instead:

    dev-libs/aterm
    x11-terms/aterm

インストールしようとしているアプリケーション名が2つ以上と一致しています。 正しいカテゴリー名を追加する必要があります。 Portageは可能性のある一致した選択肢を知らせるでしょう。

循環依存

コード表示 4.7: 循環依存に対するPortageの警告

!!! Error: circular dependencies: 

ebuild / net-print/cups-1.1.15-r2 depends on ebuild / app-text/ghostscript-7.05.3-r1
ebuild / app-text/ghostscript-7.05.3-r1 depends on ebuild / net-print/cups-1.1.15-r2 

2つ(もしくはそれ以上)のインストールしたいパッケージがお互いに依存し合っているためにインストールすることができません。 これはほとんどはPortageツリーのバグです。 bugzillaに既に報告されているか確認して、まだであれば報告してください。

取得失敗

コード表示 4.8: 取得失敗に対するPortageのエラー

!!! Fetch failed for sys-libs/ncurses-5.4-r5, continuing...
(...)
!!! Some fetch errors were encountered.  Please see above for details.

Portageがアプリケーションのソースのダウンロードに失敗し、他のアプリケーションのインストールを続けようとしています。 この失敗はミラーが正しく同期されていないか、ebuildが正しくない場所を示しているからかもしれません。 ソースを置いているサーバーが何らかの理由でダウンしているのかもしれません。

この問題がいつまでも続くようであれば1時間後にもう一度試してください。

システムプロファイルの保護

コード表示 4.9: プロファイルによって保護されたパッケージに対するPortageの警告

!!! Trying to unmerge package(s) in system profile. 'sys-apps/portage'
!!! This could be damaging to your system.

あなたはシステムのコアの一部であるパッケージを削除しようとしました。 それはプロファイルに必要であると載っているのでシステムから削除できません。

ダイジェスト検証の失敗

ときどき、あるパッケージをemergeしようとして、次のようなメッセージと共に失敗することがあるかもしれません。

コード表示 4.10: ダイジェスト検証の失敗

>>> checking ebuild checksums
!!! Digest verification failed:

これはPortageツリーにどこかおかしい所がある兆候です。 よく、開発者がパッケージをツリーにコミットするとき失敗したことが原因で起こります。

Digestの検証に失敗するとき、そのパッケージをあなた自身で再度ダイジェスト作成しようとしてはいけません。 この問題はebuild foo manifestでは修正されない上に、ほぼ間違いなく悪化します。

かわりに、1時間か2時間ツリーが安定するのを待っていてください。 おそらくエラーはすぐに検知されると思いますが、修正がPortageツリーに流れるのに少し時間がかかります。 待っている間、Bugzillaをチェックし、誰かがこの問題をすでに報告しているか調べてください。 もし報告している人がいなければ、すぐ壊れているパッケージのバグ報告をしてください。

いったんバグが修正されたことを確認したら、再び同期し修正されたダイジェストを取得する必要があるでしょう。

重要: これは何度もツリーの同期をしてもよいという意味ではありません! rsycnポリシーの中で述べられているように(emerge --syncを走らせたとき)、 あまり頻繁に同期するユーザは接続を禁止されることになります! 実際には次の定期的な同期まで待ち、そしてrsyncサーバに負荷をかけないようにしてください。

2. USEフラグ

2.a. USEフラグとは

USEフラグの背景

Gentooをインストールするとき(または他のディストリビューション、 OSをインストールする場合も含めて)利用する環境により異なる選択をすることなります。 サーバー向けのセットアップはワークステーションのそれとはちがいます。 ゲーム用マシンと3Dレンダリングワークステーションも違いがあります。

このことは、インストールするパッケージの選択だけでなく、 パッケージがサポートする機能にも当てはまります。 もし、OpenGLが必要ないのであれば、面倒な思いをしながらOpenGLをインストールしたり、 他のほとんどのパッケージでOpenGLサポートをつけてビルドする必要はないのです。 もしKDEを使いたくない場合、KDEサポートがなくてもちゃんと動くパッケージ にわざわざKDEサポートつけてパッケージをコンパイル必要はありますか?

ユーザーが何をインストール/有効にして、何をそうしないのか決めやすいよう 簡単にユーザーの環境を指定する方法が必要となりました。 この方法によりユーザーは本当に必要なものを決めることになり、 またパッケージ管理システムであるPortageの判定処理が軽減されるのです。

USEフラグの定義

USEフラグについて話をはじめましょう。 フラグはあるコンセプトのサポートと依存関係をあらわしたものです。 もしあるUSEフラグを定義すると、Portageに選んだキーワードに対応するよう伝えられます。 もちろん、これによりパッケージに対する依存情報も変更されます。

一つkdeというキーワードの例を挙げてみましょう。 USE変数のなかにこのキーワードが設定されていなければ、 オプションでKDEサポートをもつパッケージはKDEサポートなしでコンパイルされます。 オプションでKDEへの依存関係があるパッケージの場合、 (依存関係のため)KDEライブラリーなしでインストールされます。 もし、kdeキーワードを指定している場合、 こうしたパッケージはKDEサポート付でインストールされ、 依存関係に従ってKDEライブラリーもインストールされます。

正しくキーワードを設定することで、必要に応じたシステムが得られるのです。

どんなUSEフラグがあるのか

USEフラグには二つのタイプがあります。グローバルローカルUSEフラグです。

使用可能なグローバルUSEフラグのリストは オンライン/usr/poratge/profiles/use.desc にあります。

使用可能なローカルUSEフラグは /usr/portage/profiles/use.local.desc にあります。

2.b. USEフラグを使いこなす

永続的なUSEフラグ宣言

USEフラグの重要性を認識してもらった、というところで、 USEフラグを宣言する方法についてお伝えしましょう。

すでに触れたように、すべてのUSEフラグはUSE変数のなかで宣言されています。 ユーザーがUSEフラグを調べたり、選んだりしやすいよう、 デフォルトのUSEセッティングが提供されています。 このセッティングはGentooユーザーが一般的に使用すると考えられるUSEフラグを集めたものです。 このデフォルトのセッティングはプロファイルの一部make.defaultsのファイルで宣言されています。

システムが参照しているプロファイルは/etc/make.profileのシンボリックリンクで指し示されます。 それぞれのプロファイルは別のより大きなプロファイルのもとに機能し、 結果としてすべてのプロファイルが足しあわされたものになります。 トッププロファイルはbaseプロファイル(/usr/portage/profiles/base)になります。

2004.3プロファイルのデフォルトのセッティングを見てみましょう。

コード表示 2.1: 2004.3プロファイルにたいして足し合わされたmake.defaults USE変数

(この例はbase, default-linux, default-linux/x86, default-linux/x86/2004.3が集まったものです)
USE="x86 oss apm arts avi berkdb bitmap-fonts crypt cups encode fortran f77
     foomaticdb gdbm gif gpm gtk imlib jpeg kde gnome libg++ libwww mad
     mikmod motif mpeg ncurses nls oggvorbis opengl pam pdflib png python qt
     quicktime readline sdl spell ssl svga tcpd truetype X xml2 xmms xv zlib"

今見たように、この変数はすでにかなり多くのキーワードが含まれています。 しかし、あなたが必要とするUSE変数にあわせるため make.defaults にあるどのファイルも変更していはいけません。 このファイルの変更はPoratgeアップデートの際に元に戻ってしまいます!

このデフォルトセッティングを変えるためには、 USE変数にキーワードを追加か削除をしなくてはなりません。 これはUSE変数を/etc/make.confに設定することでシステム全体に行われます。 この変数に必要な追加USEフラグを加えるか、必要のないUSEフラグを外せばよいだけです。 USEフラグを外すためにはキーワードの前に"-"(マイナス記号)をつけてください。

たとえば、KDEとQTサポートを外してLDAPサポートをつけるには、 次のようにUSEetc/make.confに宣言します。

コード表示 2.2: /etc/make.conf でのUSE設定例

USE="-kde -qt3 -qt4 ldap"

個々のパッケージに対するUSEフラグ宣言

一つか二つほどのアプリケーションに対しあるUSEフラグを宣言したいが システム全体には適用したくない、という場合です。 これには(存在しなければ) /etc/portage ディレクトリを作成します。そして /etc/portage/package.use を編集します。 これは普通一つのファイルですが、ディレクトリにすることもできます。 さらなる情報はman portageを見てください。 以下の例ではpackage.useが一つのファイルだと仮定しています。

たとえばberkdbはパッケージ全体的に適用したくないが、 mysqlだけには適用したい場合、次のように書き加えます。

コード表示 2.3: /etc/portage/package.use 例

dev-db/mysql berkdb

明示的にUSEフラグを無効にすることもできます。 たとえばPHPに対してjavaを無効にしたい場合です。

コード表示 2.4: /etc/portage/package.use 2番目の例

dev-php/php -java

一時的なUSEフラグ宣言

あるUSEの設定を一回だけ使いたいといったことが時にはあります。 /etc/make.confを二度(変更して元に戻す)編集する代わりに、 USE変数を環境変数として宣言することもできます。 ただし、再emergeしたりアップデートする場合(明示的に行うときとシステムアップデート両方の場合)、 は変更は破棄されてしまうのでご注意ください。

seamonkeyをインストールする際にUSEの設定から一時的にjavaを除く例です。

コード表示 2.5: 環境変数としてUSEを使う

# USE="-java" emerge seamonkey

優先順位

当然のことながら、USEの設定では どの設定が優先するのかという順位付けがあります。 また、javaが優先順位の関係で有効になってしまっているのを 確かめるためだけにUSE="-java"の設定もしたくないでしょう。 USE設定の優先順位は、下のような順番になっています (最初のものが低い優先度です)。

  1. プロファイルの中のmake.defaultsで宣言されているデフォルUSE設定
  2. /etc/make.conf でのユーザー設定
  3. /etc/portage/package.use でのユーザー設定
  4. ユーザーによる環境変数としてのUSE設定

最終的なPortageのUSE設定を確認するためにはemerge infoを実行してください。 これにより(USE設定を含んだ)Portageに関連するすべての変数のリストが表示されます。

コード表示 2.6: emerge --info の実行

# emerge info

システム全体を新しいUSEフラグに対応させるには

もしUSEフラグを新しくしシステム全体を新しいフラグに対応させたい場合、 emerge--newuseオプションを使用してください。

コード表示 2.7: システム全体を再構築する

# emerge --update --deep --newuse world

次に新しいUSEフラグにより不要になった、「古い」条件付き依存関係をPortageのdepclean により削除してください。

警告: emerge --depcleanは危険な動作をします。注意深く行わなければいけません。 「不要」なパッケージのリストは二重にチェックし予期しないパッケージ削除がないようにしてください。 次の例では削除を避けリストだけ表示されるよう-pスイッチを追加しています。

コード表示 2.8: 不要パッケージの削除

# emerge -p --depclean

depcleanが終了したならば、削除された可能性のあるパッケージから提供されている シェアードオブジェクトとの動的リンク再構築するためにrevdep-rebuildを実行してください。 revdep-rebuildgentoolkitパッケージの一部として提供されています。 まず、このパッケージをemergeすることを忘れないでください。

コード表示 2.9: revdep-rebuildの実行

# revdep-rebuild

すべておわると、システムは新しいUSEフラグの設定になっています。

2.c. パッケージ固有のUSEフラグ

使用可能なUSEフラグの表示

seamonkeyを例にとってみましょう。 どんなUSEフラグが利用できるのか、 調べるためにはemerge--pretend--verboseオプションをつけてください。

コード表示 3.1: USEフラグの表示

# emerge --pretend --verbose seamonkey
These are the packages that I would merge, in order:

Calculating dependencies ...done!
[ebuild   R   ] www-client/seamonkey-1.0.7  USE="crypt gnome java
-debug -ipv6 -ldap -mozcalendar -mozdevelop -moznocompose -moznoirc
-moznomail -moznopango -moznoroaming -postgres -xinerama  -xprint" 0 kB

こうしたことができるのはemregeだけではありません。 equeryと呼ばれる専用のツールがあります。 これはgentoolkitパッケージの一部です。 まずはgentoolkitをインストールしてください。

コード表示 3.2: gentoolkitのインストール

# emerge gentoolkit

USEフラグをみるためにequeryuses付で実行します。 gunumericの例です。

コード表示 3.3: equeryで使用されているUSEフラグを見る方法

# equery --nocolor uses =gnumeric-1.6.3 -a
[ Searching for packages matching =gnumeric-1.6.3... ]
[ Colour Code : set unset ]
[ Legend : Left column  (U) - USE flags from make.conf              ]
[        : Right column (I) - USE flags packages was installed with ]
[ Found these USE variables for app-office/gnumeric-1.6.3 ]
 U I
 - - debug  : Enable extra debug codepaths, like asserts and extra output.
               If you want to get meaningful backtraces see
               http://www.gentoo.org/proj/en/qa/backtraces.xml .
 + + gnome  : Adds GNOME support
 + + python : Adds support/bindings for the Python language
 - - static : !!do not set this during bootstrap!! Causes binaries to be
              statically linked instead of dynamically

3. Portageの機能

3.a. Portageの機能

PortageはあなたのGentoo環境をより良くしてくれるいくつかの追加の機能があります。 これらの機能の多くはパフォーマンス、信頼性、セキュリティなどを改良してくれるソフトウェアツールに頼っています。

Portageの機能を有効にしたり無効にするには、スペースで区切られた様々な機能のキーワードを含む/etc/make.confFEATURES変数を編集する必要があります。 いくつかのケースでは機能が依存している追加のツールをインストールする必要があります。

Portageがサポートしている機能が全てここで紹介されているわけではありません。 全てを知るには、make.confのmanページを調べてください。

コード表示 1.1: make.confのmanページを調べる

$ man make.conf

デフォルトでFEATURESに何が設定されているかを知るには、emerge --infoを実行してFEATURES変数を検索するかgrepを利用します。

コード表示 1.2: 既に設定されているFEATURESを知る

$ emerge --info | grep FEATURES

3.b. 分散コンパイル

distccを使う

distccはネットワーク上のそれぞれのマシン(同一である必要はない)にコンパイル作業を分散させるプログラムです。 distccクライアントは利用可能な(distccdが実行されている)distccサーバに必要な情報の全てを送信するので、 それらサーバはクライアントのためにソースコードの断片をコンパイルすることができます。 この結果、コンパイルの時間が高速化されます。

distccに関するより多くの情報(そしてどのようにしてGentooで動作するのか)についてはGentoo Distcc Documentation(日本語訳)を見てください。

distccのインストール

distccはコンピュータが送信したコンパイルタスクを監視するグラフィカルモニターを提供します。 もしGnomeを使っているのならUSEフラグに'gnome'を追加してください。 しかし、Gnomeを使っていないがモニターを利用したいときはUSEフラグに'gtk'を追加してください。

コード表示 2.1: distccのインストール

# emerge distcc

Portageのサポートを有効化する

/etc/make.conf内のFEATURES変数にdistccを追加してください。 次に、MAKEOPTS変数をあなたの好みに編集してください。 よく知られたガイドラインには"-jX"と埋めうるように指示されています。 Xはdistccdを実行している(現在のホストも含める)CPUの数+1ですが、他の数字の方が良い結果が得られるかもしれません。

ではdistcc-configを実行して利用可能なdistccサーバのリストを入力しましょう。 簡単な例ではdistccサーバが192.168.1.102(現在のホスト)、192.168.1.103、192.168.1.104(2つのリモートホスト)で利用可能であると仮定します。

コード表示 2.2: distccが3つのサーバを使うように設定

# distcc-config --set-hosts "192.168.1.102 192.168.1.103 192.168.1.104"

忘れずにdistccdデーモンを実行してください。

コード表示 2.3: distccdデーモンを起動

# rc-update add distccd default
# /etc/init.d/distccd start

3.c. キャッシングコンパイル

ccacheについて

ccacheは高速なコンパイラーキャッシュです。 プログラムをコンパイルすると、中間結果をキャッシュするので、同じプログラムを再コンパイルしたときはいつでも、コンパイル時間は大いに減少します。 この結果、普通のコンパイルでは5~10倍のコンパイル時間の高速化となります。

ccacheに関する特徴に興味があるなら、ccacheのホームページを訪れてください。

ccacheのインストール

ccacheをインストールするには、emerge ccacheを実行してください。

コード表示 3.1: ccacheのインストール

# emerge ccache

Portageのサポートを有効化する

/etc/make.confを開いてFEATURES変数にccacheを追加します。 次にCCACHE_SIZEという変数を追加して"2G"と設定します。

コード表示 3.2: /etc/make.confのCCACHE_SIZEを編集

CCACHE_SIZE="2G"

ccacheが動作しているかを確認するには、ccacheに統計を提供するよう問い合わせてください。 Portageは異なったccacheホームディレクトリを使用しているので、CCACHE_DIRも設定する必要があります。

コード表示 3.3: ccacheの統計を見る

# CCACHE_DIR="/var/tmp/ccache" ccache -s

/var/tmp/ccacheはPortageのデフォルトのccacheホームディレクトリです。 設定を変更したいのなら、/etc/make.confCCACHE_DIR変数を設定することができます。

ですが、ccacheを実行すれば、それはデフォルトの位置である${HOME}/.ccacheを使用するでしょう。 そのため、Portageのccache統計を見るときにはCCACHE_DIR変数を設定する必要があったのです。

ccacheをPortageのCのコンパイル以外に使用する

もしPortageでないコンパイルにccacheを使いたいのなら、PATH変数の最初(/usr/binより前)に/usr/lib/ccache/binを追加してください。 これは、ユーザのホームディレクトリの.bash_profileを編集することで完了します。 .bash_profileはPATH変数を定義する方法のひとつです。

コード表示 3.4: .bash_profileを編集

PATH="/usr/lib/ccache/bin:/opt/bin:${PATH}"

3.d. バイナリパッケージのサポート

予めビルドされたパッケージを作成する

Portageは予めビルドされたパッケージのインストールをサポートしています。 Gentoo自体は(GRPスナップショットを除いて)ビルドされたパッケージを提供しませんが、Portageはビルドされたパッケージを完全に認識することができます。

パッケージが既にインストールされているならquickpkgを使うことができますし、そうでなければemerge--buildpkgもしくは--buildpkgonlyオプションを付けることでビルドされたパッケージを作成することができます。

Portageにインストールするパッケージごとにビルドされたパッケージを作成して欲しいのなら、FEATURES変数にbuildpkgを追加します。

ビルド済みのパッケージ集を作成するためのより拡張されたサポートが、catalystによって取得できます。 catalystについての詳しい説明はCatalyst Frequently Asked Questionsを見てください。

予めビルドされたパッケージのインストール

Gentooは提供してくれませんが、ビルドされたパッケージを置いておく中央レポジトリを作ることができます。 このレポジトリを使いたいのなら、Portageが認識できるようPORTAGE_BINHOST変数にその場所を指定しなければなりません。 例えば、ビルドされたパッケージがftp://buildhost/gentooにあるならこうします。

コード表示 4.1: /etc/make.confにPORTAGE_BINHOSTを設定

PORTAGE_BINHOST="ftp://buildhost/gentoo"

ビルドされたパッケージをインストールしたいときには、emergeコマンドに--getbinpkgオプションを--usepkgと並べて記述します。 前者が前もって定義したサーバからビルドされたパッケージをダウンロードするようにemergeに伝えているのに対し、 後者はソースをダウンロードしてコンパイルする前にビルドされたパッケージのインストールを試すように言っています。

例えば、gnumericをビルドされたパッケージからインストールするにはこうします。

コード表示 4.2: ビルドされたgnumericパッケージをインストール

# emerge --usepkg --getbinpkg gnumeric

emergeの予めビルドされたパッケージに関するより多くの情報はemergeのmanページにあります。

コード表示 4.3: emergeのmanページを読む

$ man emerge

3.e. ファイルの取得

並行取得

複数のパッケージを連続してemergeするとき、Portageは、あるパッケージをコンパイルしている間に次のパッケージのソースファイルを取得してくることで、コンパイル時間を短縮することができます。 この機能を使うためには、FEATURESに"parallel-fetch"を追加してください。

Userfetch

Portageをrootで走らせるとき、FEATURES="userfetch"としておくと、パッケージのソースを取得しにいっている間、rootの権限を下げることができます。 これは小さなセキュリティの改善です。

4. initスクリプト

4.a. ランレベル

システムの起動

システムを起動したとき、多くのテキストが画面上を流れることに気がつくでしょう。 よく注意して見ると、このテキストは、システムをリブートするたびに、常に同じであることがわかるでしょう。これらすべてのアクションの進行は、ブートシーケンスと呼ばれ、(ほぼ)静的に定義されます。

最初に、ブートローダが、ブートローダの設定で指定されたカーネルイメージをメモリにロードし、その後、カーネルを実行するようにCPUに命じます。カーネルがロードされ、実行されるときに、カーネルは、カーネル固有の構造とタスク全てを初期化し、initプロセスを起動します。

その後、initプロセスは、(/etc/fstabで指定された)すべてのファイルシステムがマウントされて使用できる準備が整うことを確認します。 次に、/etc/init.dディレクトリにあるいくつかのスクリプトを実行します。それらのスクリプトは、うまくシステムが起動されるように必要なサービスを開始します。

最後に、すべてのスクリプトが実行されたら、initプロセスは、agettyという特別なプロセスを端末(ターミナル)にくっつけて、端末(ほとんどが、Alt-F1Alt-F2などの下に隠される仮想コンソール)を有効にします。 次に、agettyプロセスは、loginプロセスを実行することで、これらの端末を通してユーザがログインできるようにします。

initスクリプト

ここで、initプロセスは、/etc/init.dディレクトリにあるスクリプトをでたらめに実行するわけではありません。ましてや、/etc/init.dディレクトリにあるスクリプト全てを実行するわけでもありません。 /etc/runlevelsディレクトリを調べて、どのスクリプトを実行するべきかを決めます。

最初に、initプロセスは、/etc/runlevels/bootディレクトリにシンボリックリンクがある/etc/init.dの全てのスクリプトを実行します。通常は、アルファベット順にスクリプトを開始しますが、いくつかのスクリプトは、起動される前に別のスクリプトが実行されなければならないことをシステムに伝える依存情報を持っています。

/etc/runlevels/bootから参照されるすべてのスクリプトが実行されたら、initプロセスは、/etc/runlevels/defaultにシンボリックリンクがあるスクリプトの実行を続けます。 やはり、スクリプトが依存情報を持たない場合は、どのスクリプトを最初に実行するべきかを決めるためにアルファベット順を使用しますが、うまく動作するスタートアップシーケンスを提供するために順番が変更される場合があります。

initプロセスはどのように動作するか

もちろん、initプロセス自身が勝手に全てを決定するわけではありません。 どんなアクションを取ることが必要かを指定する設定ファイルが必要です。 この設定ファイルは、/etc/inittabです。

最初に説明したブートシーケンスを覚えているなら、initプロセスの最初のアクションは、すべてのファイルシステムをマウントすることであることを覚えているでしょう。これは、/etc/inittabに以下のような行で指定されています。

コード表示 1.1: /etc/inittabのシステム初期化を指示する行

si::sysinit:/sbin/rc sysinit

この行は、initプロセスに、システムを初期化するために/sbin/rc sysinitを実行しなければならないことを伝えています。/sbin/rcスクリプトが初期化を担当するので、initはあまり何もしないじゃないかと思うかもしれません。そうです、別のプロセスにシステムの初期化処理を委譲しています。

次に、initプロセスは、/etc/runlevels/bootにシンボリックリンクがあるスクリプトすべてを実行します。これは、以下の行で指定されます。

コード表示 1.2: システム初期化の続き

rc::bootwait:/sbin/rc boot

ここでもrcスクリプトが必要な処理を実行します。rcに与えられているオプション(boot)は、/etc/runlevelsのサブディレクトリと同じものが使用されていることを覚えておいてください。

ここで、initプロセスは、どのランレベルで実行されるべきかを知るために設定ファイルを調べます。これを決めるために、/etc/inittabの以下の行を読みます。

コード表示 1.3: initdefault行

id:3:initdefault:

この場合(Gentooユーザの大多数が使用する)、ランレベルidは3です。 この情報を使って、initランレベル3を開始するために、何を実行しなければならないかを調べます。

コード表示 1.4: ランレベルの定義

l0:0:wait:/sbin/rc shutdown
l1:S1:wait:/sbin/rc single
l2:2:wait:/sbin/rc nonetwork
l3:3:wait:/sbin/rc default
l4:4:wait:/sbin/rc default
l5:5:wait:/sbin/rc default
l6:6:wait:/sbin/rc reboot

レベル3を指定する行は、やはり、サービスを起動するためにrcスクリプトを使用します(ここでは、defaultの引数を渡す)。 ここでも、rcの引数が、/etc/runlevelsのサブディレクトリと同じであることを覚えておいてください。

rcが完了したら、initプロセスは、以下のように、どの仮想コンソールを有効にすべきで、何のコマンドがそれぞれのコンソールで実行されなければならないかを決定します。

コード表示 1.5: 仮想コンソールの定義

c1:12345:respawn:/sbin/agetty 38400 tty1 linux
c2:12345:respawn:/sbin/agetty 38400 tty2 linux
c3:12345:respawn:/sbin/agetty 38400 tty3 linux
c4:12345:respawn:/sbin/agetty 38400 tty4 linux
c5:12345:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux

ランレベルって何?

あなたは、initプロセスがどのランレベルを有効にすべきかを決めるために、番号付け体系を使用することを見ました。ランレベルは、システムの実行状態であり、ランレベルに入ったりランレベルから抜けたりするときに実行されるべきスクリプト(runlevel scriptsもしくは、initscripts)のコレクションを意味します。

Gentooでは、7つのランレベルが定義されています。そのうちの3つは、システム内部で使用されるランレベルで、あとの4つは、ユーザ定義のランレベルです。内部で使用されるランレベルは、sysinitshutdownrebootで、その名が示すとおりのことを適切に行います。sysinitは、システムを初期化し、shutdownは、システムを停止し、rebootは、システムのリブートを行います。

ユーザ定義のランレベルは、/etc/runlevelsに属するサブディレクトリを指します。そのサブディレクトリには、bootdefaultnonetworksingleがあります。bootランレベルは、他のすべてのランレベルが使用する、システムに必要なすべてのサービスを開始します。残りの3つのランレベルには、何のサービスを開始するかの違いがあります。 defaultは、日常の業務のために使用されます。nonetworkはネットワーク接続が必要でない場合に使用されます。singleは、システムを修復しなければならない場合に使用されます。

Initスクリプトを使いこなす

rcプロセスが起動するスクリプトは、initスクリプトと呼ばれます。 /etc/init.dディレクトリにある各スクリプトは、次の引数を伴って実行することができます。startstoprestartpausezapstatusineediuseneedsmeusesmebroken

サービス(とそれに依存するすべてのサービス)を開始、停止、再スタートするために、それぞれstartstoprestart引数が次のように使用されるでしょう。

コード表示 1.6: postfixの起動

# /etc/init.d/postfix start

注意: 指定されたサービスをneed(必要)するサービスだけが、停止されるか再スタートされます。別の依存(use(使用)であるが、need(必要)ではない)サービスは、何もされないままです。

サービスを停止したいが、それに依存するサービスは停止したくない場合、以下のようにpause引数を使用します。

コード表示 1.7: postfixを停止するが、依存するサービスは実行したままにする

# /etc/init.d/postfix pause

サービスの状態(started、stopped、paused、...)を見たいなら、以下のようにstatus引数を使用します。

コード表示 1.8: postfixの状態を見る

# /etc/init.d/postfix status

実際にはサービスが停止しているのが分かっているのに、起動中と表示される場合、以下のようにzap引数で"停止"状態に修正します。

コード表示 1.9: postfixの状態の修正

# /etc/init.d/postfix zap

サービスが持つ依存には何があるかを問い合わせるには、iuseineedを使用します。ineedでは、対象のサービスが正しく機能するために実際に必要なサービスを見ることができます。一方、iuseは、サービスが正しく機能するために必須ではないが、サービスによって使用される可能性のあるサービスを表示します。

コード表示 1.10: postfixが依存する必要なサービスのすべてを表示する要求

# /etc/init.d/postfix ineed

同様に、どのサービスが対象のサービスを要求するか(needsme)、もしくは、使用するか(usesme)を問い合わせることができます。

コード表示 1.11: postfixを必要とするすべてのサービスを表示する要求

# /etc/init.d/postfix needsme

最後に、サービスが必要としていても存在しないものを、以下のように問い合わせることができます。

コード表示 1.12: postfixの依存しているものの中で、存在しないものを表示する要求

# /etc/init.d/postfix broken

4.b. rc-updateを使いこなす

rc-updateって何?

Gentooのinitシステムは、最初に起動される必要があるサービスが何であるかを決定するために、依存性ツリーを使用します。依存性ツリーの管理作業は、ユーザに手動でさせたいとは思わない退屈なものなので、ランレベルとinitスクリプトの管理を簡単にするツールを作成しました。

rc-updateを使用して、ランレベルにinitスクリプトを追加したり、削除したりできます。rc-updateツールは、その後、依存性ツリーを再構築するためにdepscan.shスクリプトを自動で呼び出します。

サービスの追加と削除

Gentooをインストールする間に、既に"default"ランレベルにinitスクリプトを追加しています。そのときには"default"が何のためにあるかということを知らなかったかもしれませんが、今は知っておくべきです。rc-updateスクリプトは、何を実行するかを指定する別の引数を必要とします。それは、adddelshowです。

initスクリプトを追加または、削除するには、rc-updateaddまたは、del引数を渡し、initスクリプトとランレベルが後ろに続きます。例えば、以下のようにします。

コード表示 2.1: defaultランレベルからpostfixを削除する

# rc-update del postfix default

rc-update -v showコマンドは、すべての利用可能なinitスクリプトとそれがどのランレベルで実行されるかを表示します。

コード表示 2.2: initスクリプトの情報を参照する

# rc-update -v show

(-vなしで)rc-update showを実行し、有効なinitスクリプトとそれらのランレベルをみることができます。

4.c. サービスの設定

なぜ追加の設定が必要ですか?

initスクリプトは、極めて複雑になる可能性があります。そのため、initスクリプトをユーザーが直接編集することは、間違い起こしやすいので良くありません。しかし、そのようなサービスを設定できることは重要です。例えば、サービスに追加のオプションを足したいと思うかもしれません。

設定をinitスクリプトの外側に設ける別の理由として、変更した設定が無効になってしまうという心配をせずにinitスクリプトの上書きができるということがあります。

/etc/conf.dディレクトリ

Gentooはそのようなサービスを設定する簡単な方法を提供します。設定可能なinitスクリプトのすべてが、/etc/conf.dディレクトリにファイルを設けています。例えば、apache2のinitスクリプト(/etc/init.d/apache2)には、/etc/conf.d/apache2という設定ファイルがあります。設定ファイルには、起動されるときにApache 2サーバに与えたいオプションを含めることができます。

コード表示 3.1: /etc/conf.d/apache2に定義される変数

APACHE2_OPTS="-D PHP5"

このような設定ファイルには、サービスを非常に簡単に設定し易くする変数や変数単体(/etc/make.confのような)が記述されています。変数に関するより詳しい情報も(コメントとして)提供されます。

4.d. initスクリプトの記述

記述しなければならないですか?

いいえ。Gentooは、提供されるサービスすべてに対して、すぐに使用できるinitスクリプトを提供するので、通常は、initスクリプトを記述する必要はありません。しかし、あなたは、Portageを使用しないで、サービスをインストールしているかもしれません。その場合、おそらくinitスクリプトを作成しなければならないでしょう。

サービスによって提供されるinitスクリプトは、Gentoo用に適切に書かれていないなら、使用してはいけません。Gentooのinitスクリプトは、他のディストリビューションによって使用されるinitスクリプトとは、互換性がありません。

レイアウト

initスクリプトの基本レイアウトを、以下に示します。

コード表示 4.1: initスクリプトの基本レイアウト

#!/sbin/runscript

depend() {
  (依存情報)
}

start() {
  (サービスを起動するために必要なコマンド群)
}

stop() {
  (サービスを停止するために必要なコマンド群)
}

restart() {
  (サービスを再スタートするために必要なコマンド群)
}

initスクリプトではstart()関数が定義されていることが必須です。他のすべてのセクションは、定義してもしなくてもよいです。

依存関係

二つの依存関係が指定可能です。それは、useと、needです。 前に述べたように、need依存は、use依存より制約が強いです。 依存タイプ(needかuse)の後に、依存するサービスか、virtual依存を記述します。

virtual依存とは、あるサービスが提供する依存関係ですが、そのサービスだけが提供するものではありません。たとえば、あるinitスクリプトがシステムロガーに依存するとします。しかし、たくさんのシステムロガー(metalogd、syslog-ng、sysklogd等々)が存在しているので、その中の一つのシステムロガーだけにneed依存することはできません(また、すべてのシステムロガーをインストールして、実行することのもナンセンスです)。このような場合、すべてのシステムロガーがvirutal依存関係をprovide(提供)するようにします。

postfixサービスの依存情報を見てみましょう。

コード表示 4.2: postfixの依存情報

depend() {
  need net
  use logger dns
  provide mta
}

見たとおり、postfixサービスには以下のような依存情報があります。

順番の制御

場合によっては、別のサービスを要求はしないが、もしシステムに存在し(注意: この条件は依存ではありません)、かつ、同一ランレベルで実行する(注意:この条件は同一ランレベルのサービスだけが対象です)別のサービスのbefore(前に)(もしくは、after(後に))開始したいサービスがあるでしょう。

例として、portmapサービスの設定を見てみましょう。

コード表示 4.3: portmapサービスのdepend()関数

depend() {
  need net
  before inetd
  before xinetd
}

お勧めはしませんが、同一ランレベルのすべてのサービスにあてはまる"*"を使用することもできます。

コード表示 4.4: ランレベル内の最初のスクリプトとしてこのinitスクリプトを実行する

depend() {
  before *
}

もし、サービスがローカルディスクに書き込みをしなければならないものであれば、 localmountが必要となります。 もし、/var/run にpidファイルのように何か書き込むのであれば、 bootmiscのあとに開始されなければいけません。

コード表示 4.5: Example depend() function

depend() {
  need localmount
  after bootmisc
}

標準関数

depend()関数の次に、さらにstart()関数を定義する必要があります。 この関数には、あなたのサービスを初期化するために必要なすべてのコマンドを入れます。何がなされているかをユーザに知らせるために、以下のようにebegineend関数を使用することが望ましいです。

コード表示 4.6: start()関数の例

start() {
  ebegin "Starting my_service"
  start-stop-daemon --start --exec /path/to/my_service \
     --pidfile /path/to/my_pidfile

  eend $?
}

--exec--pidfile の両方がstart, stop関数のなかで必要です。 もしサービスがpidファイルを作らないならば、 できる限り--make-pidfileを使ってください。 ただし、テストをして確認してください。 そうでなければ、pidファイルを使用しないでください。 --quietstart-stop-daemonオプションに加えることもできますが、 これは、サービスがかなり冗長なメッセージを出さない限りおすすめできません。 --quietを使うことで、サービス開始に失敗した際のデバッグが困難になるかもしれません。

注意: --exec が、サービスを呼び出したり停止するシェルスクリプトではなく(これはinitスクリプトがサポートする事柄です)、実際にサービスを呼び出すようにしてください。

start()関数のより多くの例が必要なら、/etc/init.dディレクトリにある利用可能なinitスクリプトのソースコードを見てください。

定義可能な他の関数には、stop()restart()があります。 これらの関数を定義することは強制されません! Gentooのinitシステムは、start-stop-daemonを使用する場合には、自動的にinitシステム自身がこれらの関数を適切に処理します。

とはいうものの、stop()関数を作らなくてよい程度のものなので、 ここで、例を挙げます

コード表示 4.7: stop()関数の例

stop() {
  ebegin "Stopping my_service"
  start-stop-daemon --stop --exec /path/to/my_service \
    --pidfile /path/to/my_pidfile
  eend $?
}

もし、あなたのサービスが他のスクリプト(たとえば、bash, python または perl)を起動し、このスクリプトがその後名前が変わる(たとえばfoo.pyfooに)ならば、--namestart-stop-daemonに追加する必要があるでしょう。スクリプトの名前がどう変わるのか指定する必要があります。 この例では、サービスがfoo.pyを起動し、そしてこの名前がfooに変わります。

コード表示 4.8: fooスクリプトを起動するサービス

start() {
  ebegin "Starting my_script"
  start-stop-daemon --start --exec /path/to/my_script \
    --pidfile /path/to/my_pidfile --name foo
  eend $?
}

start-stop-daemonコマンドに関してより詳しい情報が必要なら、素晴らしいmanページが以下のようにして利用可能です。

コード表示 4.9: start-stop-daemonコマンドのmanページを参照する

$ man start-stop-daemon

Gentooのinitスクリプトの構文は、Bourne Again シェル(bash)準拠です。よって、initスクリプトでは、bash構文のスクリプトを自由に使用することができます。

特別なオプションの追加

initスクリプトに、既に説明したもの以外に追加のオプションをサポートさせたいなら、opts変数にオプションを追加して、オプションと同じ名前を持つ関数を作成しなければなりません。例えば、restartdelayというオプションをサポートするには、以下のようにします。

コード表示 4.10: restartdelayオプションのサポート

opts="${opts} restartdelay"

restartdelay() {
  stop
  sleep 3    # Wait 3 seconds before starting again
  start
}

サービス設定変数

/etc/conf.dの設定ファイルをサポートするのに必要なことは、何もありません。あなたのinitスクリプトが実行される場合、自動的に以下のファイルは読み込まれます。(すなわち、変数が利用可能です)

さらに、あなたのinitスクリプトが(netのような)virtual依存を提供するなら、その依存に関連するファイル(/etc/conf.d/netのような)もsourceされるでしょう。

4.e. ランレベルの動作を変更する

これをすることでどんな人が恩恵を受けますか?

多くのラップトップユーザは、"家ではnet.eth0を開始する必要があるが、外出先(ネットワークが利用可能な場所ではないので)ではnet.eth0を開始したくない。"という状況を理解できるでしょう。 Gentooではあなたのしたいようにランレベルの動作を変更できます。

例えば、別のinitスクリプトが割り当てられてブートする、2つ目の"default"ランレベルを作成できます。その後、使用したいdefaultランレベルがどれかをブート時に選択できます。

softlevelの使用

何はさておき、別の"default"ランレベルのためのランレベルディレクトリを作成してください。例として、offlineランレベルを以下のように作成します。

コード表示 5.1: ランレベルディレクトリの作成

# mkdir /etc/runlevels/offline

新しく作成したランレベルに必要なinitスクリプトを追加してください。例えば、net.eth0を除いた現在のdefaultランレベルの完全なコピーをしたいなら、以下のようにしてください。

コード表示 5.2: 必要なinitスクリプトの追加

(offlineランレベルにdefaultランレベルからすべてのサービスをコピーします)
# cd /etc/runlevels/default
# for service in *; do rc-update add $service offline; done
(offlineランベルから不必要なサービスを削除します)
# rc-update del net.eth0 offline
(offlineランレベルで有効なサービスを表示します)
# rc-update show offline
(出力結果例、抜粋)
               acpid | offline
          domainname | offline
               local | offline
            net.eth0 |

たとえばnet.eth0をofflineランレベルから削除した場合でも、 udevは適当なサービスを検知、開始しするすべてのデバイスを起動しようとします。 そのため、開始する必要のないネットワークサービスを(udevによって開始される他デバイスに対するサービスも同様に)/etc/conf.dに付け加える必要があります。

コード表示 5.3: /etc/conf.d/rc内でサービスを開始するデバイスを無効にする

RC_COLDPLUG="yes"
(つぎに、自動的に開始する必要のないサービスを指定します。)
RC_PLUG_SERVICES="!net.eth0"

注意: For more information on device initiated services, please see the comments inside /etc/conf.d/rc.

ここで、ブートローダの設定を編集して、offlineランレベルのための新しいエントリを追加してください。例えば、/boot/grub/grub.confでは、以下のようになります。

コード表示 5.4: offlineランレベルのためのエントリ追加

title Gentoo Linux Offline Usage
  root (hd0,0)
  kernel (hd0,0)/kernel-2.4.25 root=/dev/hda3 softlevel=offline

ほら、もう全てが設定されました。システムをブートしてブート時に新しく追加されたエントリを選択すれば、offlineランレベルは、defaultランレベルの代わりに使用されます。

bootlevelの使用

bootlevelの使用は、まったくもってsoftlevelに類似しています。ここでのただ一つの違いは、別の"default"ランレベルを定義する代わりに、別の"boot"ランレベルを定義するということです。

5. 環境変数

5.a. 環境変数とは

環境変数とは何か

環境変数とは、さまざまなアプリケーションから使用される情報を保持した名前付きオブジェクトです。 という説明をされても、多くのユーザー(特にあまりLinuxに慣れていない人)にとっては、 意味不明だったり、使いどころがないように思われるかもしれません。でも、それは違います。 環境変数を使うことで、さまざまなアプリケーションの設定を簡単に変更することができるのです。

例(重要)

以下の表は、Linuxシステムで使用されるいろいろな環境変数とその説明です。 具体的な環境変数の値については表の後でお見せします。

変数名 説明
PATH この変数には、システムが実行ファイルを検索する際に用いられるディレクトリがコロン区切りで格納されています。 入力した実行ファイル名(たとえばlsrc-updateemergeなど)がこの変数で設定された場所に見つからない場合、 そのファイルを実行することはできません(ただし、 たとえば/bin/lsのようにコマンドをフルパスで入力した場合はその限りではありません)。
ROOTPATH 機能としてはPATHとほぼ同じですが、この変数の場合、 rootユーザーがコマンドを入力するときのみ調べる必要があるディレクトリだけがリストされています。
LDPATH この変数には、ダイナミックリンカがライブラリを検索する際に使用するディレクトリが、 コロン区切りで格納されています。
MANPATH この変数には、manコマンドがマニュアルページを検索する際に使用するディレクトリが、 コロン区切りで格納されています。
INFODIR この変数には、infoコマンドがinfoページを検索する際に使用するディレクトリが、 コロン区切りで格納されています。
PAGER この変数には、ファイルの内容を表示するときに使うプログラム(たとえばlessmore)のパスが格納されています。
EDITOR この変数には、ファイルの内容を編集する際に使われるプログラム(たとえばnanovi)のパスが格納されています。
KDEDIRS この変数には、KDEに特化したファイルを収めたディレクトリが、 コロン区切りで格納されています。
CONFIG_PROTECT この変数には、Portageがパッケージのアップデートを行う際に保護する必要のあるディレクトリが、 スペース区切りで格納されています。
CONFIG_PROTECT_MASK この変数には、Portageがパッケージのアップデートを行う際に保護してはいけないディレクトリが、 スペース区切りで格納されています。

以下、これまでに説明したすべての変数の定義例を示します。

コード表示 1.1: 定義例

PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin"
ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
LDPATH="/lib:/usr/lib:/usr/local/lib:/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
MANPATH="/usr/share/man:/usr/local/share/man"
INFODIR="/usr/share/info:/usr/local/share/info"
PAGER="/usr/bin/less"
EDITOR="/usr/bin/vim"
KDEDIRS="/usr"
CONFIG_PROTECT="/usr/X11R6/lib/X11/xkb /opt/tomcat/conf \
                /usr/kde/3.1/share/config /usr/share/texmf/tex/generic/config/ \
                /usr/share/texmf/tex/platex/config/ /usr/share/config"
CONFIG_PROTECT_MASK="/etc/gconf"

5.b. グローバルな環境変数を設定する

/etc/env.dディレクトリ

各環境変数を一ヶ所で定義できるようにするため、Gentooは/etc/env.dディレクトリを導入しました。 このディレクトリの中には、たとえば00basic05gccなど、 いろいろなファイルが入っていると思います。それぞれのファイルには、 そのファイル名が表すアプリケーションに必要な環境変数が格納されています。

たとえばgccをインストールすると、 05gccという以下のような変数を定義したファイルが、 ebuildにより生成されます。

コード表示 2.1: /etc/env.d/05gcc

PATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man"
INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info"
CC="gcc"
CXX="g++"
LDPATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"

他のディストリビューションの場合は、/etc/profileなどのファイルに書かれた環境変数を変更したり新たに環境変数を定義したり、といったことを求められます。 Gentooの場合、環境変数の維持や管理がユーザーにとって(そしてPortageにとっても)簡単に行えるようになっており、 環境変数が格納される可能性のあるいくつものファイルそれぞれに、 注意を払う必要がありません。

たとえばgccが更新された場合は、 ユーザーが指一本動かすことなく、/etc/env.d/05gccも同時に更新されます。

これはPortageにとって便利であるばかりでなく、ユーザーであるあなたにとっても便利です。 場合によっては、システム全体に特定の環境変数を設定する必要に迫られることがあるでしょう。 たとえばhttp_proxyを例に取りましょうか。 /etc/profileをぐちゃぐちゃにしてしまう代わりに、 以下のように独自の定義を用意したファイル(/etc/env.d/99local)を作成すれば良いだけなのです。

コード表示 2.2: /etc/env.d/99local

http_proxy="proxy.server.com:8080"

このファイルを使って自分用の環境変数を設定するようにしておけば、 独自に設定した環境変数も一目瞭然です。

env-updateスクリプト

/etc/env.dには、PATH変数を定義した複数のファイルが存在します。 これは間違いではありません。env-updateを実行すると環境変数が更新される前にそれぞれの定義が順番に追加されます。 このためパッケージは(そしてユーザーも)既存の変数に影響を与えることなく、 自分自身の環境変数を簡単に追加できるのです。

env-updateスクリプトは/etc/env.d以下のファイルをアルファベット順に並べ、 その中で定義された変数をつなげていきます。ファイル名は、2つの数字で始まる必要があります。

コード表示 2.3: env-updateが変数を並べる順番

         00basic        99kde-env       99local
     +-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"

環境変数の連結はいつも起こるわけではなく、以下の環境変数のみで発生します。 KDEDIRSPATHLDPATHMANPATHINFODIRINFOPATHROOTPATHCONFIG_PROTECTCONFIG_PROTECT_MASKPRELINK_PATHそして PRELINK_PATH_MASK 他の全ての環境変数は、最後に指定された値が(/etc/env.d内のファイルのアルファベット順で) 使用されます。

env-updateを実行すると、 このスクリプトは全環境変数を生成し/etc/profile.envに記録します(このファイルは/etc/profileから利用されます)。 また同時にLDPATHから情報を抽出し、その情報を用いて/etc/ld.so.confを生成します。 それからldconfigを呼び出し、 ダイナミックリンカが使用する/etc/ld.so.cacheを再生成します。

env-update実行後すぐにその効果を確認したい場合は、 以下のコマンドで環境を更新します。 自分でGentooをインストールした方は、 インストールガイドでも以下のコマンドが紹介されていたことを覚えているかもしれません。

コード表示 2.4: 環境を更新

# env-update && source /etc/profile

注意: 上記のコマンドは現在使用中のターミナル、新しい コンソールやそれらから起動されたプロセス上の環境変数のみを更新します。 ですので、もしX11上で作業する場合は、全ての新しく開くターミナル上で source /etc/profile を実行する必要があります。 もしくは X を再起動し、全ての新しいターミナルが新たな環境変数に基づくようにします。 もし、ログインマネージャーを使用している場合は、root になり、/etc/init.d/xdm restart を実行します。 ログインマネージャを使用していない場合は、、ログアウトし、X が新しい環境変数でプロセスを起動できるように、ログインし直す必要があります。

重要: 他の変数を定義しているときにシェル変数は使うことができません。 つまり、FOO="$BAR" (ここで $BAR は他の変数)というようにはできないということです。

5.c. ローカルな環境変数を設定する

ユーザー限定の設定

グローバルな形で環境変数を設定したくない場合もあります。 たとえば、/home/my_user/binと、 現在の作業ディレクトリ(現在あなたがいるディレクトリ)をPATH変数に設定したいけれども、 同じシステムにいる他のユーザーのPATHには追加させたくない、 という場合です。 このように環境変数をローカルに定義したい場合は、 ~/.bashrc~/.bash_profileを編集してください。

コード表示 3.1: ローカルな利用のために~/.bashrcのPATHを拡張

 (コロンの後にディレクトリを指定しない場合は、現在の作業ディレクトリとして扱われます。)
PATH="${PATH}:/home/my_user/bin:"

ログインするとPATHが更新されているはずです。

セッション限定の設定

時には、もっと限定された形で環境変数を使いたい場合もあります。 たとえばテンポラリディレクトリにバイナリを作成したのだけど、 フルパスを入力するのも面倒だし、 ちょっとの間そのバイナリを使うためだけのために~/.bashrcを編集したりしたくない、 というような場合です。

このような場合は、exportコマンドを使って現在のセッションのみ有効なPATH変数を設定することができます。 ログアウトしない限りPATH変数に設定した仮の定義が有効になります。

コード表示 3.2: セッション限定の環境変数を設定

# export PATH="${PATH}:/home/my_user/tmp/usr/bin"

C. Portageを使いこなす

1. ファイルとディレクトリ

1.a. Portageファイル

設定指示子

Portageの初期設定は/etc/make.globalsにあります。 その初期設定を見ると、Portageの全ての設定が変数を通して制御されることがわかるでしょう。 Portageがどのような変数を受け付け、それらが何を意味するのかは後述します。

多くの設定指示子がアーキテクチャ間で異なるため、Portageにはプロファイルの一部としての初期設定ファイルもあります。 プロファイルの位置は、/etc/make.profileシンボリックリンクのリンク先です。 Portageの設定は、プロファイルとその親ディレクトリにあるすべてのプロファイルにあるmake.defaultsファイルで設定されます。 プロファイルや/etc/make.profileディレクトリについては後でより詳しく説明します。

もし設定変数を変更しようとしているのなら、/etc/make.globalsmake.defaultsを改変してはいけません。 代わりに、これらのファイルより優先される/etc/make.confを使用してください また、/usr/share/portage/config/make.conf.exampleというファイルも見つけるでしょう。 その名前が示すように、これは単なるサンプルファイルで、Portageはこのファイルを読み込みません。

Portage設定変数を環境変数で定義することもできますが、私たちはお勧めしません。

プロファイルの詳細な情報

/etc/make.profileディレクトリについては既に触れています。 そうです。正確にはディレクトリではなく、プロファイルへのシンボリックリンクで、初期設定とは別の場所に独自のプロファイルを作成して、そこをリンクが指すようにすることもできますが、初期設定では、/usr/portage/profilesの下のプロファイルを指しています。 このシンボリックリンクが指すプロファイルは、システムに適したプロファイルです。

プロファイルには、Portage用のアーキテクチャ固有の情報が含まれています。 例えば、プロファイルに一致するシステムに含まれるパッケージのリストや、動作しない(もしくはマスクされた)パッケージのリストなどといったものです。

ユーザ指定の設定

ソフトウェアのインストールに関するPortageの振舞いを変更したいときには、/etc/portageにあるファイルを編集することになります。 /etc/portage内のファイルを利用することが強く推奨されており、環境変数によって上書きすることは全く推奨されていません

/etc/portageディレクトリ内には以下のファイルを作成することができます。

これらはファイルである必要はありません。 パッケージごとにひとつのファイルを持つディレクトリであっても大丈夫です。 /etc/portageディレクトリに関するより多くの情報と作成できるファイルの完全なリストはPortageのmanページで見つけることができます。

コード表示 1.1: Portageのmanページを読む

$ man portage

Portageファイルとディレクトリの場所を変更する

前に説明したように設定ファイルはどこにでも置けるわけではありません。 Portageはいつも決まった位置から設定ファイルを探すからです。 しかし、Portageには、その他多くの様々な用途向けに決まった位置があります。 ビルド用ディレクトリ、ソースコードの保管場所、Portageツリーの位置などです。

これら全ての用途向けに、よく知られた初期設定の位置がありますが、/etc/make.confを通して、好みに合わせて変更することができます。 この章の残りで、Portageが使用する特定用途の位置は何があるかと、ファイルシステム上でのその位置の変更方法を説明します。

ですが、リファレンスとして使用されるようには意図されていません。 もし100%網羅した文書が必要なら、Portageとmake.confのmanページを調べてください。

コード表示 1.2: Portageとmake.confのmanページを読む

$ man portage
$ man make.conf

1.b. ファイルを保管する

Portageツリー

Portageツリーの初期設定位置は、/usr/portageです。 これはPORTDIR変数で定義されています。 もしPortageツリーを(この変数を変更することで)どこか別の位置に保管するときは、それに応じて、/etc/make.profileのシンボリックリンクを変更することを忘れないでください。

もしPORTDIR変数を変更したなら、PORTDIRの変更に関する影響を気にしなくてもいいように、以下の変数も同様に変更した方がいいでしょう。 このPORTDIRの変更によって、PortageのPKGDIR、DISTDIR、RPMDIR変数の扱い方に影響を与えます。

ビルド済みのバイナリ

Portageは初期設定ではビルド済みバイナリを利用しないにもかかわらず、ビルド済みバイナリ用の広範なサポート機能を持っています。 Portageにビルド済みパッケージで作業するよう指示したときは、/usr/portage/packagesから探そうとします。 この位置はPKGDIR変数で定義されます。

ソースコード

アプリケーションのソースコードは初期設定では/usr/portage/distfilesに保持されます。 この位置はDISTDIR変数で定義されます。

Portageデータベース

Portageはシステムの状態(どんなパッケージがインストールされているか、どのパッケージに何のファイルが含まれているか、など)を/var/db/pkgに保存します。 これらのファイルを手動で変更してはいけません。 Portageのシステムに関する情報を破壊することになるでしょう。

Portageキャッシュ

Portageキャッシュ(修正を加えた時間、仮想、依存ツリー情報の修正)は/var/cache/edbに保存されます。 この位置は本当にキャッシュであり、Portage関連のアプリケーションを実行していないのなら削除することが出来ます。

1.c. ソフトウェアのビルド

一時的なPortageファイル

Portageの一時ファイルは初期設定では/var/tmpに保持されます。 これはPORTAGE_TMPDIR変数で定義されます。

PORTAGE_TMPDIR変数を変更するなら、PORTAGE_TMPDIRの変更に関する影響を気にしなくてもいいように、次の変数も変更した方がいいでしょう。 これは、PortageのBUILD_PREFIX変数の扱い方に影響を及ぼします。

ビルドに使用するディレクトリ

Portageは、各々のパッケージがemergeされるごとに専用のビルドディレクトリを/var/tmp/portage内に作ります。 この位置はBUILD_PREFIX変数で定義されます。

有効なファイルシステム名前空間

初期設定ではPortageは、すべてのファイルをルート(/)を基点するファイルシステム名前空間にインストールしますが、ROOT環境変数を設定することで変更することができます。 これは、新規のビルドイメージを作成するときに役に立ちます。(訳注: ROOT環境変数を変更して、仮の名前空間にインストールして確認してみる場合など)

1.d. ロギング機能

ebuildロギング

Portageはebuildごとのログファイルを作成することができます。 しかし、この機能は、PORT_LOGDIR変数にPortage(portageユーザ)が書き込み可能な位置を設定しているときだけ有効になります。 初期設定ではこの変数は設定されていません。 もしPORT_LOGDIRが設定されていないならば、現在のロギングシステムではまったくビルドログを受け取れないでしょう。 ですが、新しいelogから何らかのログを受け取っているかもしれません。 PORT_LOGDIRをきちんと定義しelogを使用する場合、以下で説明されるように、ビルドログやelogによって保存されるログを取得することができます。

Portageはelogの利用による、きめ細かなロギングの管理方法を提供します。

重要: Portage-2.0.*でenoticeを使用している場合、elogとは互換性がないため、完全にenoticeを削除しなければなりません。

2. 変数による設定

2.a. Portage設定

前述したとおり、Portageは、/etc/make.confで定義すべき多くの変数を通して調整可能です。より詳細で完全な情報は、以下のようにしてmake.confのmanページを参照してください。

コード表示 1.1: make.confのmanページを読む

$ man make.conf

2.b. ビルドに関するオプション

configureスクリプトとコンパイラのオプション

Portageはアプリケーションをビルドする際に、コンパイラとconfigureスクリプトに以下の変数の内容を渡します。

USE変数は、configureやコンパイルの実行中にも使用されますが、前の章で懇切丁寧に説明されているので、ここでは説明しません。

マージオプション

Portageは、特定のソフトウェアタイトルの新しいバージョンのマージが完了したとき、もう使用されない古いバージョンをシステムから削除します。Portageは、古いバージョンをアンマージする前に、5秒間だけユーザのアクションを待ちます。この5秒は、CLEAN_DELAY変数によって定義されます。

EMERGE_DEFAULT_OPTSを設定することで、emergeが実行されるとき、常に特定のオプションを使用するようにできます。 いくつかの有用なオプションとしては、--ask、--verbose、--treeなどでしょう。

2.c. ファイルの保護設定

Portageの保護対象ディレクトリ

Portageは、ファイルが保護対象ディレクトリにない場合、ソフトウェアタイトルの新しいバージョンによって提供されるファイルで上書きします。これらの保護対象ディレクトリは、CONFIG_PROTECT変数によって定義され、通常は設定ファイルがあるディレクトリです。複数のディレクトリが、スペースで区切られて指定されます。

保護対象ディレクトリに書き込まれるファイルは、名前が変更され、ユーザには(推定可能な)設定ファイルの新しいバージョンがあることが警告されます。

以下のようにして、emerge --infoの出力結果から、現在のCONFIG_PROTECT設定を見つけることができます。

コード表示 3.1: CONFIG_PROTECT設定の確認

$ emerge --info | grep 'CONFIG_PROTECT='

Portageの設定ファイル保護機能に関するより詳細な情報は、emergeのmanpageのCONFIGURATION FILESの章で見ることができます。

コード表示 3.2: 設定ファイル保護機能に関するより詳細な情報の参照

$ man emerge

排他ディレクトリ

保護対象ディレクトリのサブディレクトリの一部を'保護対象から除外'するには、CONFIG_PROTECT_MASK変数を使用します。

2.d. ダウンロードオプション

サーバの位置情報

必要な情報またはデータが、システムで利用できない場合、Portageは、インターネットから取得しようとします。各種情報およびデータ取得元のサーバ位置情報は、以下の変数によって定義されます。

三つ目の変数は、Portageツリーを更新するときに使用するrsyncサーバの位置情報に関係します。

GENTOO_MIRRORS変数とSYNC変数は、mirrorselectアプリケーションを通して自動的に設定される可能性があります。mirrorselectを使用する前に、始めにemerge mirrorselectをする必要があります。より詳細な情報は、mirrorselectのオンラインヘルプを以下のようにして参照してください。

コード表示 4.1: mirrorselectに関する詳細な情報の参照

# mirrorselect --help

あなたの環境が、proxyサーバを使用する必要があるなら、プロキシサーバを定義するために、http_proxy変数とftp_proxy変数とRSYNC_PROXY変数を使用できます。

ソースコード取得用コマンド

Portageはソースコードを取得する必要がある場合、デフォルトでwgetコマンドを使用します。FETCHCOMMAND変数によって、このコマンドを変更することができます。

Portageは、既に一部分がダウンロード済みのソースコードを、中断したところから再開することができます。その用途のためのコマンドは、デフォルトでは、wgetコマンドを使用しますが、RESUMECOMMAND変数によって変更することができます。

FETCHCOMMAND変数やRESUMECOMMAND変数に設定したコマンドが、適切な位置にソースコードを保存していることを確認してください。変数内には、ソースコードの位置とdistfilesの位置をそれぞれ正確に示すために、\${URI}と\${DISTDIR}を使用すべきです。

プロトコル別のハンドラもFETCHCOMMAND_HTTP変数、FETCHCOMMAND_FTP変数、RESUMECOMMAND_HTTP変数、RESUMECOMMAND_FTP変数などで定義できます。

rsync設定

Portageツリーを更新する目的で、Portageによって使用されるrsyncコマンドを変更することはできませんが、rsyncコマンドに関連するいくつかの変数を設定することはできます。

これらのオプションのさらに詳細な情報や他のオプションについては、man rysncを読んでください。

2.e. Gentoo設定

ブランチの選択

ACCEPT_KEYWORDS変数によってデフォルトブランチを変更できます。デフォルトは、あなたのアーキテクチャの安定版ブランチです。Gentooのブランチのより詳細な情報は、次の章にあります。

Portageの機能

FEATURES変数を通してPortageの特定の機能を有効にできます。Portageの機能は、前の章(Portageの機能)で説明されています。

2.f. Portageの振舞い

リソースの管理

PORTAGE_NICENESS変数によって、Portageが実行される優先順位(nice値)を増減できます。PORTAGE_NICENESS変数の値は、デフォルトのnice値に追加されます

nice値に関するより詳細な情報は、以下のようにして、niceコマンドのmanページを参照してください。

コード表示 6.1: nice値に関するより詳細な情報の参照

$ man nice

出力形式

デフォルトが"false"であるNOCOLOR変数は、カラー出力を止めるべきかどうかを定義します。

3. ソフトウェアのブランチを併用する

3.a. 1つのブランチを利用する

Stableブランチ

ACCEPT_KEYWORDS変数はシステムが利用するソフトウェアブランチを定義します。 デフォルトではあなたのアーキテクチャ、例えばx86のstableソフトウェアブランチとなっています。

stableブランチのみ利用することを推奨しています。 しかし、安定性にそれほどこだわらず、http://bugs.gentoo.orgへバグレポートをすることによってGentooに手を貸したいのなら、読み続けてください。

Testingブランチ

より新しいソフトウェアを利用したいなら、testingブランチを代わりに利用することを考えてください。 Portageにtestingブランチを利用させるには、アーキテクチャの前に~を追加してください。

testingブランチは、その名が示すとおりテスト中です。 もしパッケージがテスト中なら、開発者は機能はするがテストが完全でないと思っていることを意味します。 バグをいち早く発見し、開発者が知ることが出来るようにバグレポートを提出することが望ましいです。

不完全なパッケージを扱ったり(例えば依存関係の間違いや消失など)、過度の更新(多くのビルドを行うことになる)や壊れたパッケージは安定性の問題があると言うことに注意してください。 Gentooの動作や問題の解決方法を知らないのなら、安定でテスト済みのブランチを使用することが推奨されています。

例えば、x86アーキテクチャのtestingブランチを選択するには、/etc/make.confを編集してこのように設定します。

コード表示 1.1: ACCEPT_KEYWORDS変数の設定

ACCEPT_KEYWORDS="~x86"

今システムを更新すれば、たくさんのパッケージが更新されることを知るでしょう。 注意してください: testingブランチを利用してシステムを更新したら、オフィシャルブランチであるstableに戻すのはたいてい優しい方法はありません(もちろんバックアップを取っている場合は除きます)。

3.b. StableとTestingの混在

package.keywords

特定のパッケージに対してtestingブランチの利用を許可するがシステムにはstableブランチを利用するようにPortageに指示することができます。 これを有効にするには、/etc/portage/package.keywordsにtestingブランチを利用したいパッケージのカテゴリと名前と記述します。 同名のディレクトリを作成し、ディレクトリ下のファイルにパッケージを記述することも出来ます。 例えば、gnumericでtestingブランチを利用するにはこうします。

コード表示 2.1: gnumericの /etc/portage/package.keywords 設定(完全な行)

app-office/gnumeric ~x86

特定のバージョンをテスト

特定のバージョンをtestingブランチから利用したいがその後はPortageに利用して欲しくないときには、package.keywordsにバージョンを追加することができます。 このときには = 演算子を利用しなければなりません。 この他にも <=、<、>そして>= 演算子を利用してバージョンの範囲を入力することができます。

どの場合でも、バージョン情報を追加するなら、演算子を使わなければなりません。 バージョン情報を入力しないのなら、演算子は利用できません

以下の例ではgnumeric-1.2.13を受け入れるようPortageに指示しています。

コード表示 2.2: 特定のテストバージョンのgnumericを有効にする

=app-office/gnumeric-1.2.13 ~x86

3.c. マスクされたパッケージを利用する

package.unmask

Gentoo開発者達はこれらの位置の使用をサポートしていません。 これを行うときには注意してください。 package.unmaskpackage.maskに関するサポート要求には応えられません。 警告済みという前提で話を進めます。

パッケージがGentoo開発者によってマスクされているが、それでもpackage.maskファイル(デフォルトでは/usr/portage/profilesにあります)に書かれている理由にかかわらず利用したいときには、/etc/portage/package.unmask(もしくは、ディレクトリであればその中のファイル)に正確な同じ行を追加します。

例えば、=net-mail/hotwayd-0.8がマスクされているなら、同じ行をpackage.unmaskに追加することによってマスクを解除できます。

コード表示 3.1: /etc/portage/package.unmask

=net-mail/hotwayd-0.8

package.mask

Portageにあるパッケージや特定のバージョンのパッケージを利用して欲しくないときには、/etc/portage/package.mask(ファイルもしくはディレクトリ内のファイルかのどちらか)に適当な行を追加してやることによってあなた自身でマスクすることができます。

例えば、gentoo-sources-2.6.8.1より新しいカーネルソースをインストールして欲しくないときには、以下の行をpackage.maskに追加します。

コード表示 3.2: /etc/portage/package.mask 記入例

>sys-kernel/gentoo-sources-2.6.8.1

4. 追加のPortageツール

4.a. dispatch-conf

dispatch-conf._cfg0000_<name>ファイルをマージするための補助ツールです。 ._cfg0000_<name>ファイルは、PortageがCONFIG_PROTECT変数によって保護されているディレクトリ内のファイルを上書きしたいとき、Portageによって生成されます。

dispatch-confを使うと、変更履歴をすべて残しながら、設定ファイルに対する更新をマージすることができます。 dispatch-confはその設定ファイルの間の差分を、パッチとして、あるいはRCSリビジョンを使うことで、保存します。 これは、もし設定ファイルの更新で失敗したら、いつでも前のバージョンの設定ファイルを復元できることを意味します。

dispatch-confを使用する際、設定ファイルをそのまま保持するか、新しい設定ファイルを使うか、既存のものを編集するか、もしくは変更を対話的にマージするかを指示できます。 またdispatch-confはいくつかの役立つ追加機能を持っています。

必ず/etc/dispatch-conf.confを最初に編集し、archive-dir変数によって参照されるディレクトリを作成してください。

コード表示 1.1: dispatch-conf を実行する

# dispatch-conf

dispatch-confを走らせると、変更された各設定ファイルが一つずつ提示されます。 既存の設定ファイルを新しいもので更新して(置き換えて)次のファイルへ進むときは、uを押してください。 新しい設定ファイルを消去(削除)して次のファイルへ進むときは、zを押してください。 すべての設定ファイルが処理されたら、dispatch-confは終了します。 またqを押せば、いつでも終了することができます。

さらに詳細な情報はdispatch-confのmanを確認してください。 そこには、既存の設定ファイルと新しい設定ファイルの対話的なマージや、新しい設定ファイルの編集方法や、ファイル間の差異を調べる方法などが書かれています。

コード表示 1.2: dispatch-conf man ページを読む

$ man dispatch-conf

4.b. etc-update

設定ファイルのマージを行うために、etc-updateを使うこともできます。 etc-updatedispatch-confのように簡単ではありませんし、先進的でもありません。 しかし、対話的なマージ機能一揃いを提供し、些細な変更を自動でマージすることができます。

しかしながら、dispatch-confとは違い、etc-updateは旧バージョンの設定ファイルを保存しません。 一度設定ファイルを更新したら、旧バージョンの設定ファイルは永遠に失われてしまいます! etc-updateの使用は、dispatch-confの使用と比べて著しく安全性が低いので、十分に注意してください。

コード表示 2.1: etc-updateを実行

# etc-update

分かり易い変更点をマージした後、更新を待っている保護されたファイルのリストが表示されるでしょう。 その下には利用可能なオプションが表示されています。

コード表示 2.2: etc-updateオプション

Please select a file to edit by entering the corresponding number.
              (-1 to exit) (-3 to auto merge all remaining files)
                           (-5 to auto-merge AND not use 'mv -i'):

-1を入力すると、etc-updateは終了し、以降の全ての変更を中止します。 -3-5を入力すると、表示された全ての設定ファイルが新しいものに置き換えられます。 ゆえに、まず自動的に更新されるべきでない設定ファイルを選択することがとても重要です。 これは設定ファイルの左に常時されている数字を入力することによって簡単に行えます。

例えば、/etc/pear.confという設定ファイルを選択します。

コード表示 2.3: 特定の設定ファイルを更新

Beginning of differences between /etc/pear.conf and /etc/._cfg0000_pear.conf
[...]
End of differences between /etc/pear.conf and /etc/._cfg0000_pear.conf
1) Replace original with update
2) Delete update, keeping original as is
3) Interactively merge original with update
4) Show differences again

今あなたは2つのファイルの違いを見ています。 もし設定ファイルの更新が問題なく行えると信じるならば、1を入力します。 更新された設定ファイルが必要でない、もしくは新しい有用なものを何も提供してくれないと思うなら、2を入力します。 現在の設定ファイルを相互的に更新したいのなら、3を入力します。

相互マージについてのより詳しい情報をここで記述することには意味がありません。 完全にするためには、2つのファイルを相互マージしているときに利用できるコマンドのリストを提示します。 2行(オリジナルと、推奨される新しいもの)と以下のコマンドのうち1つを入力することができるプロンプトが表示されています。

コード表示 2.4: 相互マージで利用可能なコマンド

ed:     両方のバージョンをヘッダーで装飾して利用して編集
eb:     両方のバージョンを利用して編集
el:     左のバーションを利用して編集
er:     右のバーションを利用して編集
e:      新しいバージョンを編集
l:      左のバージョンを利用
r:      右のバージョンを利用
s:      結果を表示せず共通の行を含む
v:      結果を表示して共通の行を含む
q:      終了

重量な設定ファイルの更新が終了したら、その他の設定ファイルを自動更新します。 更新できる設定ファイルが見つからないときにはetc-updateは終了します。

4.c. quickpkg

quickpkgを使えばシステムに既にマージされたパッケージのアーカイブを作成することができます。 これらのアーカイブは既にビルドされたパッケージとして利用できます。 quickpkgの実行は簡単です: アーカイブにしたいパッケージ名を追加するだけです。

例えば、curlartsそしてprocpsをアーカイブするならこうします。

コード表示 3.1: quickpkg利用例

# quickpkg curl arts procps

ビルドされたパッケージは$PKGDIR/All(デフォルトでは/usr/portage/packages/All )に保管されます。 これらパッケージへのシンボリックリンクは$PKGDIR/<category>にあります。

5. オフィシャルツリーの活用

5.a. Portageツリーの一部を使う

パッケージ/カテゴリーを除外する

あるカテゴリー/パッケージのみを選択的にアップデートし、その他のものを除外することができます。 これはrsyncemerge --syncを行っているときにカテゴリー/パッケージを除外することによって行うことができます

除外パターンを含むファイル名を/etc/make.conf--exclude-from変数で定義する必要があります。

コード表示 1.1: /etc/make.confで除外ファイルを定義

PORTAGE_RSYNC_EXTRA_OPTS="--exclude-from=/etc/portage/rsync_excludes"

コード表示 1.2: /etc/portage/rsync_excludesでgameのすべてを除外

games-*/*

注意して欲しいのはこれにより依存関係の問題を引き起こすかもしれないと言うことです。 許可されたパッケージが除外されたものに依存しているかもしれないからです。

5.b. 非公式のebuildを追加する

Portageオーバーレイディレクトリを定義する

Portageツリーを通して公式に利用できないebuildを利用するようにPortageに命令することができます。 サードパーティのebuildを保存しておく新しいディレクトリ(例えば/usr/local/portage)を作成します。 公式のPortageツリーと同じディレクトリ構造を使うようにしてください。

そして/etc/make.confのPORTDIR_OVERLAYが先ほど作成したディレクトリを示すように定義します。 これでPortageを使うときには、これらのebuildが次回emerge --syncを実行したときに削除/上書きされることなく利用できるようになります。

いくつかのOverlayで作業する

いくつかのoverlayで開発を行ったり、Portageツリーを破壊する前にパッケージをテストしたり、または単に様々なソースのunofficialなebuildを使用したりしたいパワーユーザ向けに、app-portage/gentoolkit-devgensyncを提供します。これは、overlayリポジトリを最新状態に保つ手助けをしてくれるツールです。

gensyncを使えば、全てのリポジトリを一度に更新することができ、またそれらのうちのいくつかだけを選択することもできます。 それぞれのリポジトリは/etc/gensync/の設定ディレクトリに.syncsourceファイルがある必要があり、そこにはリポジトリの位置や名前、IDなどを記載します。

java(開発中のjava ebuild用)とentapps(あなたの会社のために社内開発されたアプリケーション用)という2つの追加リポジトリを所有していると仮定します。 この場合には、以下のコマンドを利用してこれらのリポジトリを更新することができます。

コード表示 2.1: リポジトリの更新にgensyncを使用する

# gensync java entapps

5.c. Portageによって保守されていないソフトウェア

自分で保守されたソフトウェアをPortageで使う

場合によっては、Portageが自動処理を提供しているにもかかわらず、あなた自身でソフトウェアを設定、インストール、そして保守を行いたいことがあるでしょう。 有名なものにはカーネルソールやnvidiaドライバがあります。 あるパッケージがシステムに手動インストールされたことをPortageが知るように設定することができます。 この仕組みはinjectingと呼ばれ、/etc/portage/profile/package.providedファイルを通してPortageにサポートされています。

例えば、gentoo-sources-2.6.11.6が手動でインストールされたと言うことをPortageに知らせたいときには、以下の行を/etc/portage/profile/package.providedに追加します。

コード表示 3.1: package.provided の例

sys-kernel/gentoo-sources-2.6.11.6

D. Gentooネットワーク設定

1. はじめに

1.a. はじめに

注意: この文書は、読者がカーネルと使用しているハードウェアに対するモジュールを正確に設定してあることと、ハードウェアのインターフェース名を把握していることを想定しています。 さらに、eth0、またはeth1wlan0やその他を設定している最中であることも想定しています。

注意: この文書は、baselayout-1.11.11以降を使用していることを前提としています。

ネットワークカードの設定を始めるために、GentooのRCシステムにその旨を示す必要があります。 これは、/etc/init.dの下にnet.loからnet.eth0へのシンボリックリンクを作成することで行います。

コード表示 1.1: net.loからnet.eth0にシンボリックリンクする

# cd /etc/init.d
# ln -s net.lo net.eth0

こうすることでGentooのRCシステムは、そのインターフェースについて情報を得ることができます。 さらに新しいインターフェースの設定方法もわからなければなりません。 すべてのネットワークインターフェースが、/etc/conf.d/netで設定されます。 以下はDHCPの場合と固定アドレスの場合の例です。

コード表示 1.2: /etc/conf.d/netの例

# DHCPの例
config_eth0=( "dhcp" )

# CIDR表記を使用した固定IPの例
config_eth0=( "192.168.0.7/24" )
routes_eth0=( "default via 192.168.0.1" )

# ネットマスク表記を使用した固定IPの例
config_eth0=( "192.168.0.7 netmask 255.255.255.0" )
routes_eth0=( "default via 192.168.0.1" )

注意: インターフェースの設定を指定しない場合、DHCPであると想定されます。

注意: CIDRは、Classless InterDomain Routingの略です。 もともと、IPv4アドレスはA、B、Cにクラス分けされていました。 初期のクラス分けの仕組みには、インターネットの今のような大規模な大衆化が想定されておらず、新規のユニークアドレスを使い果たす恐れがあります。 CIDRは、一つのアドレスが複数のIPアドレスを指すことが可能なアドレス割当て体系です。 CIDRのIPアドレスは、例えば、192.168.0.0/16のように、スラッシュの後に続く数字があることを除いて普通のIPアドレスのように見えます。 CIDRは、RFC 1519に記述されています。

インターフェースを設定したら、次のコマンドを使用して開始および停止することができます。

コード表示 1.3: ネットワークスクリプトの開始と停止

# /etc/init.d/net.eth0 start
# /etc/init.d/net.eth0 stop

重要: ネットワーク接続に関する問題を解決するときは、何が起こっているかについてより多くの情報を得るために、/etc/conf.d/rcRC_VERBOSE="yes"を設定することをお薦めします。

ネットワークインターフェースの開始と停止に成功したら、Gentooの起動時に開始したいと思うでしょう。 ここにそれをする方法があります。 最後の行の"rc"コマンドは、現在のrunlevelでまだ開始されていないスクリプトを開始するためにGentooに指示します。

コード表示 1.4: 起動時にネットワークインターフェースを設定する

# rc-update add net.eth0 default
# rc

2. 高度な設定

2.a. 高度な設定

config_eth0変数が、インターフェースの設定の要です。 config_eth0は、インターフェース(この場合はeth0)設定用の高度な設定値のリストです。 設定値のリストに含まれる各コマンドは、順に実行されます。 一つでもコマンドが動作すれば、そのインターフェースは正常であると判断されます。

以下は、あらかじめ備わっている設定値のリストです。

コマンド 説明
null 何もしません
noop インターフェースが有効になっていてアドレスが割り当てられていたならば、 その時はこの設定を無視します
IPv4かIPv6のアドレス インターフェースに指定されたアドレスを追加します
dhcpadslapipa(もしくはサードパーティのモジュールが要求するカスタムコマンド) コマンドを供給するモジュールを実行します。例えばdhcpは、dhcpcddhclientpumpのうちのどれか一つである、DHCP機能を提供するモジュールを実行します。

一つのコマンドが失敗した場合に備えて、一つの予備のコマンドを指定することができます。 予備のコマンド(fallback)も、これらの設定の形式に正確に適合している必要があります。

これらのコマンドを繋げて同時に指定できます。実際に使用されるいくつかの例を示します。

コード表示 1.1: 設定例

# 以下のIPv4アドレスを追加します
config_eth0=(
	"192.168.0.2/24"
	"192.168.0.3/24"
	"192.168.0.4/24"
)

# 一つのIPv4アドレスと二つのIPv6アドレスを追加します
config_eth0=(
	"192.168.0.2/24"
	"4321:0:1:2:3:4:567:89ab"
	"4321:0:1:2:3:4:567:89ac"
)

# 既にインターフェースが有効になっていて、アドレスが割り当ててある場合は、何もしません。
# インターフェースが無効になってしまっている場合、DHCP経由の新たなアドレスを割当てます。
config_eth0=(
	"noop"
	"dhcp"
)
fallback_eth0=(
	"null"
	"apipa"
)

注意: ifconfigモジュールを使用して一つ以上のアドレスを追加する場合、二つ目以降のアドレスの各々に対しインターフェースの別名が生成されます。 よって上二つの例では、インターフェースeth0eth0:1eth0:2が得られます。 カーネルとその他プログラムがeth0としてeht0:1eth0:2を扱う場合、これらのインターフェースでは何も特別なことはできません。

重要: fallback順は重要です! nullオプションを指定していないと、apipaコマンドは、noopコマンドが失敗したときだけ実行されます。

注意: APIPADHCPについては後で記述します。

2.b. ネットワーク依存設定

/etc/init.dにあるinitスクリプトは、特定のネットワークインターフェース、もしくはただ単にnetに依存することがあります。 netサービスの意味を、RC_NET_STRICT_CHECKING変数を使用して異なる状況を示すように/etc/conf.d/rcで定義することができます。

説明
none netサービスは常に起動されていると見なされます
no net.loに加えて少なくとも一つのnet.*サービスが起動していなければなりません。 WIFIと有線NICを持っていて、netサービスが起動しているように状況に応じて一つだけを起動させたいと思うノートブックのユーザによって利用されるでしょう。
lo noオプションと同じですが、net.loも数に含まれます。 起動時にどのインターフェースが起動するか気にしないユーザに便利です。
yes netサービスが起動していると見なされるためには、すべてのネットワークインターフェースが起動していなければならない場合です。

ですが、net.eth0net.eth1に依存しているnet.br0の場合はどうでしょうか。 net.eth1は、ブリッジに追加する前に設定される必要がある無線もしくはPPPデバイスかもしれません。 その場合、net.loへのシンボリックリンクとしての/etc/init.d/net.br0では実現できません。

この状況への答えは、/etc/conf.d/netdepend()関数を書くことです。

コード表示 2.1: /etc/conf.d/netでのnet.br0の依存設定

# 現行のスクリプトに則って、すべての依存関係(use、after、before)が使用できます
depend_br0() {
	need net.eth0 net.eth1
}

依存関係についての詳しい解説は、GentooハンドブックのWriting Init Scriptsを参照してください。

2.c. 変数名と値

変数名は可変です。 通常はvariable_${interface|mac|essid|apmac}の形式に従っています。 例えば、変数dhcpcd_eth0は、eth0のdhcpcdオプションの値を保持しますし、dhcpcd_essidは、どれかのインターフェースがESSIDアクセスポイント"essid"に接続したときのdhcpcdオプションの値を保持します。

しかし、インターフェースの名前が必ずethxでなければならないといっているわけではありません。 実際、多くの無線インターフェースは、ethxと同じようにwlanx、raxのような名前です。 さらに、ブリッジのようなユーザ定義のインターフェースは、fooなどのように任意の名前を付けることもできます。 よりわかりやすいように、無線アクセスポイントは、アルファベットや数字以外の文字を使った名前にできます。このことはESSID毎にネットワークパラメータの設定を可能にするために、とても重要です。

このことに関して何より弱点なのは、Gentooはネットワーク接続に関してbash変数を使うことです。 そしてbashは英字のアルファベットと数字以外は使用できません。 この制限を回避するために、英字のアルファベットと数字ではない全ての文字を_(アンダースコア)に変換します。

もう一つのbashの弱点は、変数の内容に関してです。 一部の文字はエスケープされてしまいます。 これは、エスケープされる必要がある文字の前に\(バックスラッシュまたは円記号)を置くことで回避できます。次の文字は、この方法でエスケープする必要があります。"'\

この例では、特殊な文字を使用する無線ESSIDを使用しています。 この場合、以下のようにESSID My "\ NETを使用することになります。

コード表示 3.1: 変数名の例

(これは機能しますが、ドメイン名としては不正です)
dns_domain_My____NET="My "\\ NET"

(上記は、無線LANカードがMy "\ NETのESSIDを持つアクセスポイン
トに接続した場合、dnsドメインをMy "\ NETに設定します)

3. 個別ネットワーク

3.a. ネットワークモジュール

現在、モジュール構造のネットワーク接続スクリプトをサポートしています。 これにより、既存のものと互換性を保ちながら、新しいインタフェースの種類や設定モジュールのサポートを簡単に追加できます。

モジュールが必要とするパッケージがインストールされていれば、モジュールはデフォルトでロードされます。 ここでまだインストールされていないパッケージのモジュールを指定すると、インストールする必要があるパッケージがあることを示すエラーとなります。 理想は、同一サービスを提供する二つ以上のパッケージをインストール済みで、その中の一つを選ぶ必要があるときにだけモジュール設定を使用することです。

注意: ここで紹介したすべての設定は、他に規定がなければ、/etc/conf.d/netに書かれています。

コード表示 1.1: モジュール選択

# ifconfigではなくiproute2を選択
modules=( "iproute2" )

# 特定のインタフェースに対し別のモジュールも指定できます
# ここではdhcpcdではなくpumpを選択しています
modules_eth0=( "pump" )

# 使用しないモジュールの指定もできます - 例えば無線LANの設定を制御するために、
# supplicantもしくはlinux-wlan-ngを使用しているかもしれません。
# にもかかわらず、接続するESSIDごとにネットワーク設定を指定したい場合

modules=( "!iwconfig" )

3.b. インタフェースハンドラ

現在、ifconfigiproute2の二つのインタフェースハンドラを提供しています。 ネットワークの設定のどんなことをするのにも、これらのうちの一つが必要です。

ifconfigは、今のGentooのデフォルトであり、システムプロファイルに含まれています。iproute2は、より強力で柔軟なパッケージですが、デフォルトでは含まれていません。

コード表示 2.1: iproute2をインストールする

# emerge sys-apps/iproute2

# 両方がインストールされている場合、ifconfigではなくiproute2を選択する
modules=( "iproute2" )

ifconfigiproute2もどちらもよく似たことをするので、基本設定を相互に動作するようにできます。 例えば、以下の抜粋コードのどちらも、どちらを使用しているかに関係なく動作します。

コード表示 2.2: ifconfigとiproute2の例

config_eth0=( "192.168.0.2/24" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0" )

# broadcastの指定も可能
config_eth0=( "192.168.0.2/24 brd 192.168.0.255" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255" )

3.c. DHCP

DHCPは、DHCPサーバからネットワーク情報(IPアドレス、DNSサーバ、ゲートウェイ、その他)を取得する手段です。 これは、ネットワーク上で稼動中のDHCPサーバが存在する場合、DHCPを使うことを各クライアントに指示する必要があり、それが自動的にネットワークを設定するということを意味します。 もちろん、DHCPを使えるようになる前に、必要なら無線やPPPなど、他の設定をする必要はあります。

DHCPの機能は、dhclientdhcpcd または pumpによって提供されます。 各DHCPモジュールには、長所と短所があります。以下にざっと紹介します。

DHCPモジュール パッケージ 長所 短所
dhclient net-misc/dhcp BIND DNSソフトウェアを作成しているISCによって作成されています。 設定項目が豊富 設定が極めて複雑で、ソフトウェアは非常に大きくなり過ぎており、DHCPからNTPサーバの情報を得ることはできず、デフォルト設定ではホスト名を送信しません
dhcpcd net-misc/dhcpcd 長い間Gentooではデフォルトであり、外部のツールに依存せず、Gentooで積極的に開発されています たまに遅くなることがあり、与えられたIPアドレスなどの貸与期間に制限がない場合は、今のところデーモン化されません
pump net-misc/pump 軽量、外部ツールへの依存なし 性能向上のためには維持されておらず、信頼性が低く、特にモデム経由の場合に信頼性が低く、DHCPからNISサーバの情報を取得できません

二つ以上のDHCPクライアントがインストールされている場合、どれを使用するかを指定する必要があります - そうしないと可能ならdhcpcdをデフォルトにします。

DHCPモジュールに特定のオプションを与えるために、module_eth0="..."を使用してください。 (使用中のDHCPモジュールにmoduleを付け替えてください - たとえばdhcpcd_eth0)

DHCPの相互運用性の向上に勤めています - その一環としてdhcp_eth0変数を使用して以下のコマンドをサポートします。デフォルト設定ではこれらのどれも設定されていません。

コード表示 3.1: /etc/conf.d/netでのDHCP設定の例

# 二つ以上のDHCPモジュールがインストールされている場合にだけ必要です
modules=( "dhcpcd" ) 

config_eth0=( "dhcp" )
dhcpcd_eth0="-t 10" # 10秒後にタイムアウトします
dhcp_eth0="release nodns nontp nonis" # アドレスのみ取得します

注意: dhcpcdpumpは、デフォルトで現在のホスト名をDHCPサーバに送信します。 よって、これに関して何も指定する必要はありません。

3.d. PPPoE/PPPoAによるADSL

最初に、ADSLソフトウェアをインストールする必要があります。

コード表示 4.1: pppパッケージのインストール

# emerge net-dialup/ppp

注意: もしPPPoAが必要なら、必ず>=baselayout-1.12.xを使用してください。

次に、PPPで使われるPPPネットスクリプトとイーサネットインタフェースのためのネットスクリプトを生成します。

コード表示 4.2: PPPとイーサネットのスクリプトの生成

# ln -s /etc/init.d/net.lo /etc/init.d/net.ppp0
# ln -s /etc/init.d/net.lo /etc/init.d/net.eth0

必ず/etc/conf.d/rcでRC_NET_STRICT_CHECKING="yes"を設定してください。

ここで、/etc/conf.d/netの設定をする必要があります。

コード表示 4.3: 基本的なPPPoEの設定

config_eth0=( null ) (あなたのイーサネットインタフェースを記述してください)
config_ppp0=( "ppp" )
link_ppp0="eth0" (あなたのイーサネットインタフェースを記述してください)
plugins_ppp0=( "pppoe" )
username_ppp0='user'
password_ppp0='password'
pppd_ppp0=(
       "noauth"
       "defaultroute"
       "usepeerdns"
       "holdoff 3"
       "child-timeout 60"
       "lcp-echo-interval 15"
       "lcp-echo-failure 3"
       noaccomp noccp nobsdcomp nodeflate nopcomp novj novjccomp
)

depend_ppp0() {
    need net.eth0
}

コード表示 4.4: /etc/ppp/pap-secretsの例

# *(アスタリスク)は重要です
"username"  *  "password"

もしUSBモデムによるPPPoEを使用しているなら、br2684ctlをemergeする必要があるでしょう。 これについての適切な設定方法は、/usr/portage/net-dialup/speedtouch-usb/files/READMEを読んでください。

重要: /etc/conf.d/net.exampleのADSLとPPPの章を注意深く読んでください。 個々のPPPの設定で必要になりそうなすべての設定方法について、より詳細な説明が多く含まれています。

3.e. APIPA (Automatic Private IP Addressing)~自動プライベートIPアドレス割当て機能

APIPAは、インタフェースに169.254.0.0-169.254.255.255の範囲のアドレスに無作為にARPメッセージを送信することによって、空きアドレスを探します。 応答のないものがあった場合、そのアドレスをインタフェースに割り当てます。

DHCPサーバが存在せず、かつ直接インターネットに接続せず、かつ他の全てのコンピュータがAPIPAを使用しているプライベートネットワークにだけ役に立ちます。

APIPAをサポートするために、emerge net-misc/iputilsまたは、net-analyzer/arpingをしてください。

コード表示 5.1: /etc/conf.d/netでのAPIPA設定

# 最初にDHCPを試します - 失敗したら代替手段としてAPIPAを使用
config_eth0=( "dhcp" )
fallback_eth0=( "apipa" )

# APIPAだけを使用
config_eth0=( "apipa" )

3.f. Bonding(インタフェースを束ねる)

bonding/trunkingをする(インタフェースを束ねる)には、emerge net-misc/ifenslaveをします。

bondingは、ネットワーク帯域を増やすために使われます。 もし一つのネットワークにしたい二つのネットワークカードがあるなら、それらを束ねることができます。 そうすると、アプリケーションには一つのインタフェースとして見えますが、実際は両方のネットワークカードが使用されます。

コード表示 6.1: /etc/conf.d/netでのbonding設定

# 二つのインタフェースを束ねる
slaves_bond0="eth0 eth1 eth2"

# 束ねられたインタフェースにIPアドレスを割り当てたくない場合もあります
config_bond0=( "null" )

# 別の設定が必要かもしれないのでeth0、eth1、eth2に依存します
depend_bond0() {
  need net.eth0 net.eth1 net.eth2
}

3.g. ブリッジ (802.1dのサポート)

ブリッジをサポートするには、emerge net-misc/bridge-utilsをします。

ブリッジは、異なるネットワーク同士を繋げるために使用されます。 例えば、ADSLモデム経由でインターネットに接続していて、他のコンピュータをADSLモデム経由でインターネットに接続できるようにするための無線接続カードを持っているサーバがあるとします。 この場合、二つのインタフェースを相互に繋げるために、ブリッジを作成できます。

コード表示 7.1: /etc/conf.d/netでのブリッジ設定

# ブリッジ設定 - 詳細は"man brctl"を参照してください
brctl_br0=( "setfd 0" "sethello 0" "stp off" )

# ブリッジbr0にポートを追加します
bridge_br0="eth0 eth1"

# dhcpが開始しないようにするために、そのポートにはnullを設定する必要があります
config_eth0=( "null" )
config_eth1=( "null" )

# 最後にブリッジにアドレスを設定します - DHCPも使用できます
config_br0=( "192.168.0.1/24" )

# 別の設定が必要かもしれないのでeth0、eth1に依存します
depend_br0() {
  need net.eth0 net.eth1
}

重要: 複数のブリッジ設定を行う場合、変数名を参照してください。

3.h. MACアドレス

sys-apps/baselayout-1.11.14かそれ以上を使用していて、特定のアドレスに変更したいなら、インタフェースのMACアドレスを変更するために何もemergeする必要はありません。 しかし、ランダムなMACアドレスに変更する必要があるか、上記のバージョンよりも古いbaselayoutを使用しているなら、この機能が有効になるにはemerge net-analyzer/macchangerをする必要があります。

コード表示 8.1: MACアドレスを変更する例

# インタフェースのMACアドレスを設定します
mac_eth0="00:11:22:33:44:55"

# 最後の3バイトだけランダムに設定します
mac_eth0="random-ending"

# ベンダ毎に、物理的に同じ種類別にランダムに設定します
# (例 ファイバ、銅線、無線)
mac_eth0="random-samekind"

# ベンダ毎に、物理的な種類を問わずランダムに設定します
# (例 ファイバ、銅線、無線)
mac_eth0="random-anykind"

# 完全にランダムに設定します - 警告: これによって生成される一部のMACアドレスには
# 期待したように動作しないものがあります
mac_eth0="random-full"

3.i. トンネリング

トンネリングをするには、インタフェースハンドラで実現できるので、何もemergeする必要はありません。

コード表示 9.1: /etc/conf.d/netでのトンネリング設定

# GREトンネリング向け
iptunnel_vpn0="mode gre remote 207.170.82.1 key 0xffffffff ttl 255"

# IPIPトンネリング向け
iptunnel_vpn0="mode ipip remote 207.170.82.2 ttl 255"

# 該当するインタフェースの設定
config_vpn0=( "192.168.0.2 peer 192.168.1.1" ) 

3.j. VLAN (802.1qのサポート)

VLANをサポートするには、emerge net-misc/vconfigをします。

仮想LANは、たとえ別のセグメントであっても、あたかも単一のネットワークセグメントに接続されているように振舞うネットワークデバイスの集合です。 VLANに接続している機器には、たとえ物理的に同じネットワークを共有していても、同一のVLAN上の機器しか見えません。

コード表示 10.1: /etc/conf.d/netでのVLAN設定

# 次のようにインタフェースのVLAN番号を指定します
# VLANのIDは、前に0を付加しない形式です
vlans_eth0="1 2"

# もちろんVLANを設定することもできます
# 詳細はvconfigのmanページを参照してください
vconfig_eth0=( "set_name_type VLAN_PLUS_VID_NO_PAD" )
vconfig_vlan1=( "set_flag 1" "set_egress_map 2 6" )

# 通常のようにVLANインタフェースを設定します
config_vlan1=( "172.16.3.1 netmask 255.255.254.0" )
config_vlan2=( "172.16.2.1 netmask 255.255.254.0" )

重要: 複数のVLAN設定を行う場合、変数名を参照してください。

4. 無線ネットワーク

4.a. はじめに

現在、wireless-toolswpa_supplicantによって無線のセットアップがサポートされています。 覚えておくべき重要なことは、無線ネットワークの設定をインターフェース毎ではなく、全体的に行うと言うことです。

wpa_suppliantは最良の選択ですが、全てのドライバをサポートしている訳ではありません。 サポート済みのドライバリストはread the wpa_supplicant siteで確認することが出来ます。 また、現在wpa_supplicantは設定されたSSIDにのみ接続することが出来ます。

wireless-toolsはほぼ全てのカードとドライバをサポートしていますが、WPAのみのアクセスポイントには接続することは出来ません。

警告: 現時点ではlinux-wlan-ngはbaselayoutではサポートされていません。 これは、linux-wlan-ngは人それぞれによって全く異なる独自のセットアップと設定を行うからです。 linux-wlan-ng開発者達はセットアップをwireless-toolsへと変更するのではと噂されています。 これが実現した場合、baselayoutでlinux-wlan-ngが使えるかもしれません。

4.b. WPA Supplicant

WPA Supplicantとは、 WPAが有効なアクセスポイントへの接続を可能にするパッケージです。 これはまだベータ版なのでセットアップはかなり変わりやすいですが、ほとんどの部分でうまく動作します。

コード表示 2.1: wpa_supplicantのインストール

# emerge net-wireless/wpa_supplicant

重要: wpa_supplicantを動作させるにはカーネルでCONFIG_PACKETを有効にしなければなりません。

では、wpa_supplicantwireless-toolsより優先させるために/etc/conf.d/netを設定しましょう。(両方がインストールされているのなら、wireless-toolsがデフォルトとなります)

コード表示 2.2: wpa_supplicant向けに/etc/conf.d/netを設定

# wpa_supplicantをwireless-toolsよりも優先させる
modules=( "wpa_supplicant" )

# どのドライバを使用すべきかwpa_supplicantに教えることが重要です。
# まだ自動識別はうまく動作しません
wpa_supplicant_eth0="-Dmadwifi"

注意: host-apドライバを使用しているのなら、wpa_suppliacnatで正しく使用するために、 カードをManagedモードにする必要があります。 /etc/conf.d/netiwconfig_eth0="mode managed" を記述することによりこれを行うことが出来ます。

簡単でしょう? ですが、まだwpa_supplicant自身の設定をしなければいけません。 これは、接続しようとするアクセスポイントがどれくらいセキュアかによって、 設定の複雑さも変わってきます。 以下はwpa_supplicantと共にインストールされる /usr/share/doc/wpa_supplicant-<version>/wpa_supplicant.conf.gz からの抜粋です。

コード表示 2.3: /etc/wpa_supplicant/wpa_supplicant.confの例

# 以下の行は変更しないでください。動作しなくなります。
ctrl_interface=/var/run/wpa_supplicant

# rootのみがWPA設定を読めることを確実にします
ctrl_interface_group=0

# wpa_supplicantにスキャンとアクセスポイントの選択を行わせます
ap_scan=1

# 単純な例。PSKをASCIIパスフレーズで指定し、WPA-PSKはすべての有効な暗号方式を許可します。
network={
  ssid="simple"
  psk="very secret passphrase"
  # 優先度を上げれば上げるほどより早くに照合されます
  priority=5
}

# 上と同じですが、特定のSSIDの検出を要求します。
# (ブロードキャストSSIDを拒否するアクセスポイント向け)
network={
  ssid="second ssid"
  scan_ssid=1
  psk="very secret passphrase"
  priority=2
}

# WPA-PSKのみが使用されます。どんな暗号の組み合わせでも認めます。
network={
  ssid="example"
  proto=WPA
  key_mgmt=WPA-PSK
  pairwise=CCMP TKIP
  group=CCMP TKIP WEP104 WEP40
  psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
  priority=2
}

# 平文接続 (WPA、IEEE 802.1X無し)
network={
  ssid="plaintext-test"
  key_mgmt=NONE
}

# 共有WEPキー接続 (WPA、IEEE 802.1X無し)
network={
  ssid="static-wep-test"
  key_mgmt=NONE
  # Keys in quotes are ASCII keys
  wep_key0="abcde"
  # Keys specified without quotes are hex keys
  wep_key1=0102030405
  wep_key2="1234567890123"
  wep_tx_keyidx=0
  priority=5
}

# 共有キーIEEE 802.11認証を使った共有WEPキー接続 (WPA、IEEE 802.1X無し)
network={
  ssid="static-wep-test2"
  key_mgmt=NONE
  wep_key0="abcde"
  wep_key1=0102030405
  wep_key2="1234567890123"
  wep_tx_keyidx=0
  priority=5
  auth_alg=SHARED
}

# WPA-None/TKIPを使ったIBSS/ad-hocネットワーク
network={
  ssid="test adhoc"
  mode=1
  proto=WPA
  key_mgmt=WPA-NONE
  pairwise=NONE
  group=TKIP
  psk="secret passphrase"
}

4.c. Wireless Tools

最初の設定とmanagedモード

Wireless Toolsは、 基本的な無線インターフェースを起動することからWEPセキュリティレベルまでを設定する一般的な方法です。 WEPはセキュリティの手段としては弱いですが、最も普及しています。

Wireless Toolsの設定は少数の要となる変数によって制御されます。 以下の設定ファイルの例は必要となる全てを記述しています。 何も設定しないと「最も信号が強く暗号化されていないアクセスポイントへ接続する」事になり、 いつも何かに接続しようとしていることを心に留めておいてください。

コード表示 3.1: wireless-toolsのインストール

# emerge net-wireless/wireless-tools

注意: 無線の設定を/etc/conf.d/wirelessに保存することも出来ますが、このガイドでは/etc/conf.d/netに保存することを推奨します。

重要: 変数名ドキュメントを参照する必要があるでしょう

コード表示 3.2: /etc/conf.d/netでのiwconfig設定例

# iwconfigをwpa_supplicantより優先させる
modules=( "iwconfig" )

# ESSID1やESSID2と呼ばれるアクセスポイント向けのWEPキーを設定します
# WEPキーは4つまで設定することが出来ますが、いかなる場合においても有効となるのは1つだけです
# そのため、デフォルトのインデックスである[1]をkey [1]に適用し、アクティブなキーを[1]へと変更します
# 1以外のWEPキーを使用するために他のESSIDを定義する場合にこれを行います
#
# キーの前にs:を付けるとASCIIキーとなり、付けなければHEXキーになります
#
# enc openはオープンセキュリティを指定します(最も安全)
# enc restrictedは制限セキュリティを指定します(最小限の安全)
key_ESSID1="[1] s:yourkeyhere key [1] enc open"
key_ESSID2="[1] aaaa-bbbb-cccc-dd key [1] enc restricted"

# 以下は利用可能なアクセスポイントをスキャンしたときにのみ動作します

# 時々2つ以上のアクセスポイントが利用可能となるので、接続優先順位を定義する必要があります
preferred_aps=( "ESSID1" "ESSID2" )

アクセスポイントの選択を微調整する

アクセスポイントの選択を微調整するために、いくつかの特別なオプションを追加することが出来ます。 ですが、これらは通常では必要ではありません。

優先されたアクセスポイントのみに接続するかどうかを選択することが出来ます。 デフォルトでは、設定された全てが失敗したのなら、暗号化されていないアクセスポイントへ接続します。 これはassociate_order変数で制御することが出来ます。 以下に値と詳細を示します。

詳細
any デフォルトの振る舞い
preferredonly 優先リストにある接続可能なアクセスポイントのみ接続する
forcepreferred スキャンで見つからなければ優先リストにあるアクセスポイントへ強制接続を試みる
forcepreferredonly アクセスポイントのスキャンを行わず、リストにある物に接続を試みる
forceany forcepreferredと同じで、それに加えて利用可能なアクセスポイントへ接続する

最後にblacklist_apsunique_apの選択を行います。 blacklist_apspreferred_apsと同じような動作を行います。 unique_apにはyesnoが設定され、 2番目の無線インターフェースが1番目と同じアクセスポイントへ接続できるかを決定します。

コード表示 3.3: blacklist_apsとunique_apの例

# 決して接続したくないアクセスポイントを記述します
blacklist_aps=( "ESSID3" "ESSID4" )

# 2つ以上の無線カードを持っているのなら、それぞれのカードが
# 同じアクセスポイントと接続することを許可するかしないかを決定します
# 値は"yes"と"no"です
# デフォルトは"yes"です
unique_ap="yes"

Ad-HocとMasterモード

managedモードになっているアクセスポイント全てで接続失敗した場合に、 Ad-Hocノードに設定を切り替えたいのなら、 以下のように設定することでこれを行うことが出来ます。

コード表示 3.4: Ad-Hocモードへのフォールバック

adhoc_essid_eth0="This Adhoc Node"

Ad-Hocネットワークへ接続したり、アクセスポイントとなるためにMasterモードで起動してはどうですか? そのためには以下のように設定します。上で述べたようにしてWEPキーを指定する必要があるかもしれません。

コード表示 3.5: Ad-Hoc/Master設定の例

# モードを設定します。managed (デフォルト)、ad-hoc、masterから選びます。
# 全てのドライバが全てのモードをサポートしているわけではありません
mode_eth0="ad-hoc"

# インターフェースのESSIDを設定します
# managedモードでは、インターフェースに特定のESSIDへ強制的に接続させ、それ以外は何も行いません
essid_eth0="This Adhoc Node"

# 何も設定しなければチャンネル3を使用します
channel_eth0="9"

重要: 以下はthe NetBSD documentationにあるBSD wavelanドキュメントを丸写ししたものです。 14のチャンネルが利用可能であり、北アメリカではチャンネル1-11が合法で、 ヨーロッパの多くではチャンネル1-13、フランスではチャンネル10-13、そして日本ではチャンネル14のみです。 疑うのであれば、カードやアクセスポイントに付属するドキュメントを参照してください。 選択したチャンネルがアクセスポイントのチャンネル(もしくはAd-Hocネットワークの他のカード) と一致するようにしてください。 北アメリカやヨーロッパの多くで売られているカードのデフォルトは3で、 フランスで売られているカードのデフォルトは11、そして日本で売られているカードのデフォルトは14です。

無線ツールのトラブルシューティング

ドライバや環境の問題で、無線を接続し稼働の手助けになる変数がいくつかあります。 以下に一覧を示します。

変数 初期値 詳細
iwconfig_eth0 iwconfigに何を送るかについての詳細はiwconfigのマニュアルを参照してください
iwpriv_eth0 iwprivに何を送るかについての詳細はiwprivのマニュアルを参照してください
sleep_scan_eth0 0 スキャンを試みる前にスリープを行う秒数です。ドライバやファームウェアが利用可能になるまでにより長い時間がかかるのであればこれが必要です。
sleep_associate_eth0 5 接続先のアクセスポイントを次へと変更するためにインターフェースを待機させる秒数です
associate_test_eth0 MAC いくつかのドライバでは接続の解放やテスト時に無効なMACアドレスをリセットしません。いくらかのドライバでは接続の解放やテスト時に品質レベルをリセットしません。MACqualityallが設定可能です。
scan_mode_eth0 いくつかのドライバではad-hocモードでスキャンを行うため、スキャンが失敗したらここでad-hocの設定を試みます
iwpriv_scan_pre_eth0 スキャン前にいくつかのiwprivコマンドをインターフェースへ送信します。詳細はiwprivのマニュアルを参照してください。
iwpriv_scan_post_eth0 スキャン後にいくつかのiwprivコマンドをインターフェースへ送信します。詳細はiwprivのマニュアルを参照してください。

4.d. ESSIDごとにネットワーク設定を定義する

ESSID1に接続するときには固定IPが必要で、ESSID2に接続するときにはDHCPが必要なことがあります。 実際、ほとんどのモジュール変数はESSIDごとに変更可能です。 以下に例を示します。

注意: WPA Supplicantや無線ツールを使用しているのならこれらは動作します。

重要: 変数名ドキュメントを参照する必要があるでしょう

コード表示 4.1: ESSIDごとにネットワーク設定を上書きする

config_ESSID1=( "192.168.0.3/24 brd 192.168.0.255" )
routes_ESSID1=( "default via 192.168.0.1" )

config_ESSID2=( "dhcp" )
fallback_ESSID2=( "192.168.3.4/24" )
fallback_route_ESSID2=( "default via 192.168.3.1" )

# ネームサーバやその他も設定することが出来ます
# 注意: 禁止されていなければDHCPはこれらを上書きします
dns_servers_ESSID1=( "192.168.0.1" "192.168.0.2" )
dns_domain_ESSID1="some.domain"
dns_search_domains_ESSID1="search.this.domain search.that.domain"

# アクセスポイントのMACアドレスで上書きします
# 同じESSIDを持つ異なった場所へ移動するのならこれは便利です
config_001122334455=( "dhcp" )
dhcpcd_001122334455="-t 10"
dns_servers_001122334455=( "192.168.0.1" "192.168.0.2" )

5. 機能の追加

5.a. 標準フック関数

start/stop操作に関連して呼び出される4つの関数が定義できます。 それらの関数は、一つの関数で複数のアダプタを制御できるように、インターフェース名が最初に渡されて呼び出されます。

対象のインターフェースの有効化処理や無効化処理が続行可能であることを示すには、preup()predown()関数の戻り値は、0 (成功)でなければなりません。 preup()がゼロ以外の値を返すと、インターフェースの有効化処理は中断されます。 predown()がゼロ以外の値を返すと、インターフェースの無効化処理の続行は認められません。

postup()postdown()関数の戻り値は無視されます。失敗を示す場合は何もすることがないからです。

${IFACE}には起動/停止しようとしているインターフェースが設定されます。 ${IFVAR}はbashが許容する変数名に変換された${IFACE}です。

コード表示 1.1: pre/post up/down関数の例

preup() {
  # 起動前のインターフェースの物理接続テスト。一部のネットワークアダプタ
  # にのみ有効です。ethtoolパッケージがインストールされている
  # 必要があります。
  if ethtool ${IFACE} | grep -q 'Link detected: no'; then
    ewarn "No link on ${IFACE}, aborting configuration"
    return 1
  fi

  # 成功時は0を忘れずに返します
  return 0
}

predown() {
  # このスクリプトのデフォルトの処理は、NFSルートのテストをして
  # その場合にインターフェースの停止処理を中断することです。predown()関数を
  # 定義するとこの処理を上書きしてしまうことに注意してください。やはり
  # その処理を必要とするなら、このような感じ...
  if is_net_fs /; then
    eerror "root filesystem is network mounted -- can't stop ${IFACE}"
    return 1
  fi

  # 成功時は0を忘れずに返します
  return 0
}

postup() {
  # この関数は、例えばダイナミックDNSサービスに登録するとき
  # 使えます。他にはインターフェースが起動したときにメールの送受信を
  # することにも使えます。
       return 0
}

postdown() {
  # この関数はほとんど一貫性のためにあります... まだこの関数を
  # 使用して行うのに何かふさわしいものを考え付いたことはありません ;-)
  return 0
}

5.b. Wireless Toolsのフック関数

注意: WPA Supplicantとの組み合わせでは動作しません。- ですが${ESSID}${ESSIDVAR}変数はpostup()関数で利用可能です。

associate関数に関連して呼び出される2つの関数が定義できます。 それらの関数は、一つの関数で複数のアダプタを制御できるように、インターフェース名が最初に渡されて呼び出されます。

対象のインターフェースの有効化や無効化処理が続行可能であることを示すには、preassociate()関数の戻り値は、0 (成功)でなければなりません。 preassociate()ゼロ以外の値を返すと、インターフェースの有効化処理は中断されます。

postassociate()関数の戻り値は無視されます。失敗を示す場合は何もすることがないからです。

${ESSID}は接続しようしているAPの正確なESSIDが設定されます。 ${ESSIDVAR}はbashが許容する変数名に変換された${ESSID}です。

コード表示 2.1: pre/post associate関数

preassociate() {
  # 以下の処理は、leap_user_ESSIDとleap_pass_ESSIDの2つの設定変数
  # を追加します。接続されようとしているESSID向けに両方が設定されたら、
  # CISCO LEAPスクリプトを実行します。

  local user pass
  eval user="\$\{leap_user_${ESSIDVAR}\}"
  eval pass="\$\{leap_pass_${ESSIDVAR}\}"

  if [[ -n ${user} && -n ${pass} ]]; then
    if [[ ! -x /opt/cisco/bin/leapscript ]]; then
      eend "For LEAP support, please emerge net-misc/cisco-aironet-client-utils"
      return 1
    fi
    einfo "Waiting for LEAP Authentication on "${ESSID//\\\\//}""
    if /opt/cisco/bin/leapscript ${user} ${pass} | grep -q 'Login incorrect'; then
      ewarn "Login Failed for ${user}"
      return 1
    fi
  fi

  return 0
}

postassociate() {
  # この関数はほとんど一貫性のためにあります... まだこの関数を
  # 使用して行うのに何かふさわしいものを考え付いたことはありません ;-)

  return 0
}

注意: ${ESSID}${ESSIDVAR}predown()postdown()関数では利用できません。

6. ネットワーク管理

6.a. ネットワーク管理

コンピュータを持って常に移動する場合、いつもイーサネットケーブルがあるわけでも、ケーブルが繋がっているわけでも、アクセスポイントが利用可能なわけでもないかもしれません。 さらにイーサネットケーブルが接続されたりアクセスポイントを発見したりしたときに、自動でネットワークが使えるようにしたほうがいいかもしれません。

ここには、このようなネットワーク管理をしやすくするいくつかのツールがあります。

注意: この文書ではifplugdに関連したことだけ説明しますが、 netplugのような代替もあります。 netplugifplugdを代替する軽量版で、カーネル上のネットワークドライバが正しく動作することを期待しますが、 多くのドライバは正しく動かないことがあります。

6.b. ifplugd

ifplugdはイーサネットケーブルの挿抜時にインターフェースを起動停止するデーモンです。 アクセスポイントとの接続や新しいアクセスポイントの範囲内に入ったことの検知も扱います。

コード表示 2.1: ifplugdのインストール

# emerge sys-apps/ifplugd

ifplugdの設定も難しいことはなにもありません。 設定ファイルは/etc/conf.d/netにあります。 設定可能な変数についてはman ifplugdを実行してください。

コード表示 2.2: ifplug設定例

(eth0を監視するインターフェースに置き換えてください)
ifplugd_eth0="..."

(無線インタフェースを監視する)
ifplugd_eth0="--api-mode=wlan"

複数のネットワーク接続を管理する場合には、 複数のDNSサーバーとの通信と設定が簡単になるツールを導入した方がいいでしょう。 これは、DHCPからIPアドレスを取得する場合にはとても便利です。 単純にopenresolvをemergeするだけです。

コード表示 2.3: openresolvのインストール

# emerge openresolv

この点について知りたい場合は、man resolvconf を見てください。