Gentoo Linux Alpha ハンドブック(一部未訳)

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年 8月 5日
このドキュメントのオリジナルバージョン の更新日は2009年 10月 19日

目次:

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. Hardware Requirements

Introduction

Before we start, we first list what hardware requirements you need to successfully install Gentoo on your box.

Hardware Requirements

CPU Please check with the Alpha/Linux FAQ
Memory 64 MB
Diskspace 1.5 GB (excluding swap space)
Swap space At least 256 MB

2.b. The Gentoo Installation CD

Introduction

The Gentoo Installation CDs are bootable CDs which contain a self-sustained Gentoo environment. They allow you to boot Linux from the CD. During the boot process your hardware is detected and the appropriate drivers are loaded. They are maintained by Gentoo developers.

Gentoo's Minimal Installation CD

The Minimal Installation CD is called ${min-cd-name} and takes up only 47 MB of diskspace. You must use this Installation CD to install Gentoo, and you need a working Internet connection.

The Stage3 Tarball

A stage3 tarball is an archive containing a minimal Gentoo environment, suitable to continue the Gentoo installation using the instructions in this manual. Previously, the Gentoo Handbook described the installation using one of three stage tarballs. While Gentoo still offers stage1 and stage2 tarballs, the official installation method uses the stage3 tarball. If you are interested in performing a Gentoo installation using a stage1 or stage2 tarball, please read the Gentoo FAQ on How do I Install Gentoo Using a Stage1 or Stage2 Tarball?

2.c. Download, Burn and Boot a Gentoo Installation CD

Downloading and Burning the Installation CDs

You have chosen to use a Gentoo Installation CD. We'll first start by downloading and burning the chosen Installation CD. We previously discussed the several available Installation CDs, but where can you find them?

You can download any of the Installation CDs (and, if you want to, a Packages CD as well) from one of our mirrors. The Installation CDs are located in the ${release-dir}installcd directory.

Inside that directory you'll find ISO files. Those are full CD images which you can write on a CD-R.

In case you wonder if your downloaded file is corrupted or not, you can check its MD5 checksum and compare it with the MD5 checksum we provide (such as ${min-cd-name}.DIGESTS). You can check the MD5 checksum with the md5sum tool under Linux/Unix or md5sum for Windows.

Another way to check the validity of the downloaded file is to use GnuPG to verify the cryptographic signature that we provide (the file ending with .asc). Download the signature file and obtain the public key:

コード表示 3.1: Obtaining the public key

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

Now verify the signature:

コード表示 3.2: Verify the cryptographic signature

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

To burn the downloaded ISO(s), you have to select raw-burning. How you do this is highly program-dependent. We will discuss cdrecord and K3B here; more information can be found in our Gentoo FAQ.

Booting the Installation CD

When your Alpha is powered on, the first thing that gets started is the firmware. It is loosely synonymous with the BIOS software on PC systems. There are two types of firmware on Alpha systems: SRM (Systems Reference Manual) and ARC (Advanced Risc Console).

SRM is based on the Alpha Console Subsystem specification, which provides an operating environment for OpenVMS, Tru64 UNIX, and Linux operating systems. ARC is based on the Advanced RISC Computing (ARC) specification, which provides an operating environment for Windows NT. You can find a detailed guide on using SRM over at the Alpha Linux website.

If your Alpha system supports both SRM and ARCs (ARC, AlphaBIOS, ARCSBIOS) you should follow these instructions for switching to SRM. If your system already uses SRM, you are all set. If your system can only use ARCs (Ruffian, nautilus, xl, etc.) you will need to choose MILO later on when we are talking about bootloaders.

Now to boot an Alpha Installation CD, put the CD-ROM in the tray and reboot the system. You can use SRM to boot the Installation CD. If you cannot do that, you will have to use MILO.

コード表示 3.3: Booting a CD-ROM using SRM

(List available hardware drives)
>>> show device
dkb0.0.1.4.0        DKB0       TOSHIBA CDROM
(...)
(Substitute dkb0 with your CD-ROM drive device)
>>> boot dkb0 -flags 0
(If you need serial console support)
>>> boot dkb0 -flags 2

コード表示 3.4: Booting a CD-ROM using MILO

(Substitute sdb with your CD-ROM drive device)
MILO> boot sdb:/boot/gentoo_2.6 initrd=/boot/gentoo_2_6.igz root=/dev/ram0 init=/linuxrc looptype=zisofs loop=/zisofs cdroot
(If you need serial console support)
MILO> boot sdb:/boot/gentoo_2.6 initrd=/boot/gentoo_2_6.igz root=/dev/ram0 init=/linuxrc looptype=zisofs loop=/zisofs console=ttyS0 cdroot

You should have a root ("#") prompt on the current console and can also switch to other consoles by pressing Alt-F2, Alt-F3 and Alt-F4. Get back to the one you started on by pressing Alt-F1.

Now continue with Extra Hardware Configuration.

Extra Hardware Configuration

When the Installation CD boots, it tries to detect all your hardware devices and loads the appropriate kernel modules to support your hardware. In the vast majority of cases, it does a very good job. However, in some cases it may not auto-load the kernel modules you need. If the PCI auto-detection missed some of your system's hardware, you will have to load the appropriate kernel modules manually.

In the next example we try to load the 8139too module (support for certain kinds of network interfaces):

コード表示 3.5: Loading kernel modules

# modprobe 8139too

Optional: User Accounts

If you plan on giving other people access to your installation environment or you want to chat using irssi without root privileges (for security reasons), you need to create the necessary user accounts and change the root password.

To change the root password, use the passwd utility:

コード表示 3.6: Changing the root password

# passwd
New password: (Enter your new password)
Re-enter password: (Re-enter your password)

To create a user account, we first enter their credentials, followed by its password. We use useradd and passwd for these tasks. In the next example, we create a user called "john".

コード表示 3.7: Creating a user account

# useradd -m -G users john
# passwd john
New password: (Enter john's password)
Re-enter password: (Re-enter john's password)

You can change your user id from root to the newly created user by using su:

コード表示 3.8: Changing user id

# su - john

Optional: Viewing Documentation while Installing

If you want to view the Gentoo Handbook (either from the CD or online) during the installation, make sure you have created a user account (see Optional: User Accounts). Then press Alt-F2 to go to a new terminal and log in.

If you want to view the documentation on the CD you can immediately run links to read it:

コード表示 3.9: Viewing the on-CD documentation

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

However, it is preferred that you use the online Gentoo Handbook as it will be more recent than the one provided on the CD. You can view it using links as well, but only after having completed the Configuring your Network chapter (otherwise you won't be able to go on the Internet to view the document):

コード表示 3.10: Viewing the Online Documentation

# links http://www.gentoo.org/doc/en/handbook/${online-book}

You can go back to your original terminal by pressing Alt-F1.

Optional: Starting the SSH Daemon

If you want to allow other users to access your computer during the Gentoo installation (perhaps because those users are going to help you install Gentoo, or even do it for you), you need to create a user account for them and perhaps even provide them with your root password (only do that if you fully trust that user).

To fire up the SSH daemon, execute the following command:

コード表示 3.11: Starting the SSH daemon

# /etc/init.d/sshd start

To be able to use sshd, you first need to set up your networking. Continue with the chapter on Configuring your Network.

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. Introduction to Block Devices

Block Devices

We'll take a good look at disk-oriented aspects of Gentoo Linux and Linux in general, including Linux filesystems, partitions and block devices. Then, once you're familiar with the ins and outs of disks and filesystems, you'll be guided through the process of setting up partitions and filesystems for your Gentoo Linux installation.

To begin, we'll introduce block devices. The most famous block device is probably the one that represents the first drive in a Linux system, namely /dev/sda. SCSI and Serial ATA drives are both labeled /dev/sd*; even IDE drives are labeled /dev/sd* with the new libata framework in the kernel. If you're using the old device framework, then your first IDE drive is /dev/hda.

The block devices above represent an abstract interface to the disk. User programs can use these block devices to interact with your disk without worrying about whether your drives are IDE, SCSI or something else. The program can simply address the storage on the disk as a bunch of contiguous, randomly-accessible 512-byte blocks.

Slices

Although it is theoretically possible to use a full disk to house your Linux system, this is almost never done in practice. Instead, full disk block devices are split up in smaller, more manageable block devices. On Alpha systems, these are called slices.

4.b. Designing a Partitioning Scheme

Default Partitioning Scheme

As an example we use the following slice layout:

Slice Description
/dev/sda1 Swap slice
/dev/sda2 Root slice
/dev/sda3 Full disk (required)

If you are interested in knowing how big a partition should be, or even how many partitions (or volumes) you need, read on. Otherwise continue now with Using fdisk to Partition your Disk (SRM only) or Using fdisk to Partition your Disk (ARC/AlphaBIOS only).

How Many and How Big?

The number of partitions is highly dependent on your environment. For instance, if you have lots of users, you will most likely want to have your /home separate as it increases security and makes backups easier. If you are installing Gentoo to perform as a mailserver, your /var should be separate as all mails are stored inside /var. A good choice of filesystem will then maximise your performance. Gameservers will have a separate /opt as most gaming servers are installed there. The reason is similar for /home: security and backups. You will definitely want to keep /usr big: not only will it contain the majority of applications, the Portage tree alone takes around 500 Mbyte excluding the various sources that are stored in it.

As you can see, it very much depends on what you want to achieve. Separate partitions or volumes have the following advantages:

However, multiple partitions have one big disadvantage: if not configured properly, you might result in having a system with lots of free space on one partition and none on another.

4.c. Using fdisk to Partition your Disk (SRM only)

The following parts explain how to create the example slice layout described previously, namely:

Slice Description
/dev/sda1 Swap slice
/dev/sda2 Root slice
/dev/sda3 Full disk (required)

Change your slice layout according to your own preference.

Identifying Available Disks

To figure out what disks you have running, use the following commands:

コード表示 3.1: Identifying available disks

# dmesg | grep 'drive$'        (For IDE disks)
# dmesg | grep 'scsi'          (For SCSI disks)

From this output you should be able to see what disks were detected and their respective /dev entry. In the following parts we assume that the disk is a SCSI disk on /dev/sda.

Now fire up fdisk:

コード表示 3.2: Starting fdisk

# fdisk /dev/sda

Deleting All Slices

If your hard drive is completely blank, then you'll have to first create a BSD disklabel.

コード表示 3.3: Creating a BSD disklabel

Command (m for help): b
/dev/sda contains no disklabel.
Do you want to create a disklabel? (y/n) y
A bunch of drive-specific info will show here
3 partitions:
#       start       end      size     fstype   [fsize bsize   cpg]                                    
  c:        1      5290*     5289*    unused        0     0

We start with deleting all slices except the 'c'-slice (a requirement for using BSD disklabels). The following shows how to delete a slice (in the example we use 'a'). Repeat the process to delete all other slices (again, except the 'c'-slice).

Use p to view all existing slices. d is used to delete a slice.

コード表示 3.4: Deleting a slice

BSD disklabel command (m for help): p

8 partitions:
#       start       end      size     fstype   [fsize bsize   cpg]                                    
  a:        1       235*      234*    4.2BSD     1024  8192    16
  b:      235*      469*      234*      swap
  c:        1      5290*     5289*    unused        0     0
  d:      469*     2076*     1607*    unused        0     0
  e:     2076*     3683*     1607*    unused        0     0
  f:     3683*     5290*     1607*    unused        0     0
  g:      469*     1749*     1280     4.2BSD     1024  8192    16
  h:     1749*     5290*     3541*    unused        0     0

BSD disklabel command (m for help): d
Partition (a-h): a

After repeating this process for all slices, a listing should show you something similar to this:

コード表示 3.5: Viewing an empty scheme

BSD disklabel command (m for help): p

3 partitions:
#       start       end      size     fstype   [fsize bsize   cpg]                                    
  c:        1      5290*     5289*    unused        0     0

Creating the Swap Slice

On Alpha based systems you don't need a separate boot slice. However, the first cylinder cannot be used as the aboot image will be placed there.

We will create a swap slice starting at the third cylinder, with a total size of 1 GB. Use n to create a new slice. After creating the slice, we will change its type to 1 (one), meaning swap.

コード表示 3.6: Creating the swap slice

BSD disklabel command (m for help): n
Partition (a-p): a
First cylinder (1-5290, default 1): 3
Last cylinder or +size or +sizeM or +sizeK (3-5290, default 5290): +1024M

BSD disklabel command (m for help): t
Partition (a-c): a
Hex code (type L to list codes): 1

After these steps you should see a layout similar to the following:

コード表示 3.7: Slice layout after creating the swap slice

BSD disklabel command (m for help): p

3 partitions:
#       start       end      size     fstype   [fsize bsize   cpg]                                    
  a:        3      1003      1001       swap
  c:        1      5290*     5289*    unused        0     0

Create the Root Slice

We will now create the root slice, starting from the first cylinder after the swap slice. Use the p command to view where the swap slice ends. In our example, this is at 1003, making the root slice start at 1004.

Another problem is that there is currently a bug in fdisk making it think the number of available cylinders is one above the real number of cylinders. In other words, when you are asked for the last cylinder, decrease the cylinder number (in this example: 5290) with one.

When the slice is created, we change the type to 8, for ext2.

コード表示 3.8: Creating the root slice

D disklabel command (m for help): n
Partition (a-p): b
First cylinder (1-5290, default 1): 1004
Last cylinder or +size or +sizeM or +sizeK (1004-5290, default 5290): 5289

BSD disklabel command (m for help): t
Partition (a-c): b
Hex code (type L to list codes): 8

Your slice layout should now be similar to this:

コード表示 3.9: Viewing the slice layout

BSD disklabel command (m for help): p

3 partitions:
#       start       end      size     fstype   [fsize bsize   cpg]                                    
  a:        3      1003      1001       swap
  b:     1004      5289      4286       ext2
  c:        1      5290*     5289*    unused        0     0

Save the Slice Layout and Exit

Save fdisk by typing w. This will also save your slice layout.

コード表示 3.10: Save and exit fdisk

Command (m for help): w

Now that your slices are created, you can continue with Creating Filesystems.

4.d. Using fdisk to Partition your Disk (ARC/AlphaBIOS only)

The following parts explain how to partition the disk with a layout similar to the one described previously, namely:

Partition Description
/dev/sda1 Boot partition
/dev/sda2 Swap partition
/dev/sda3 Root partition

Change your partition layout according to your own preference.

Identifying Available Disks

To figure out what disks you have running, use the following commands:

コード表示 4.1: Identifying available disks

# dmesg | grep 'drive$'        (For IDE disks)
# dmesg | grep 'scsi'          (For SCSI disks)

From this output you should be able to see what disks were detected and their respective /dev entry. In the following parts we assume that the disk is a SCSI disk on /dev/sda.

Now fire up fdisk:

コード表示 4.2: Starting fdisk

# fdisk /dev/sda

Deleting All Partitions

If your hard drive is completely blank, then you'll have to first create a DOS disklabel.

コード表示 4.3: Creating a DOS disklabel

Command (m for help): o
Building a new DOS disklabel.

We start with deleting all partitions. The following shows how to delete a partition (in the example we use '1'). Repeat the process to delete all other partitions.

Use p to view all existing partitions. d is used to delete a partition.

コード表示 4.4: Deleting a partition

command (m for help): p

Disk /dev/sda: 9150 MB, 9150996480 bytes
64 heads, 32 sectors/track, 8727 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1         478      489456   83  Linux
/dev/sda2             479        8727     8446976    5  Extended
/dev/sda5             479        1433      977904   83  Linux Swap
/dev/sda6            1434        8727     7469040   83  Linux

command (m for help): d
Partition number (1-6): 1

Creating the Boot Partition

On Alpha systems which use MILO to boot, we have to create a small vfat boot partition.

コード表示 4.5: Creating the boot partition

Command (m for help): n
Command action
  e   extended
  p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-8727, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-8727, default 8727): +16M

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 6
Changed system type of partition 1 to 6 (FAT16)

Creating the Swap Partition

We will create a swap partition with a total size of 1 GB. Use n to create a new partition.

コード表示 4.6: Creating the swap partition

Command (m for help): n
Command action
  e   extended
  p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (17-8727, default 17): 17
Last cylinder or +size or +sizeM or +sizeK (17-8727, default 8727): +1000M

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 82
Changed system type of partition 2 to 82 (Linux swap)

After these steps you should see a layout similar to the following:

コード表示 4.7: Partition listing after creating a swap partition

Command (m for help): p

Disk /dev/sda: 9150 MB, 9150996480 bytes
64 heads, 32 sectors/track, 8727 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1          16       16368    6  FAT16
/dev/sda2              17         971      977920   82  Linux swap

Creating the Root Partition

We will now create the root partition. Again, just use the n command.

コード表示 4.8: Creating the root partition

Command (m for help): n
Command action
  e   extended
  p   primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (972-8727, default 972): 972
Last cylinder or +size or +sizeM or +sizeK (972-8727, default 8727): 8727

After these steps you should see a layout similar to the following:

コード表示 4.9: Partition listing after creating the root partition

Command (m for help): p

Disk /dev/sda: 9150 MB, 9150996480 bytes
64 heads, 32 sectors/track, 8727 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1          16       16368    6  FAT16
/dev/sda2              17         971      977920   82  Linux swap
/dev/sda3             972        8727     7942144   83  Linux

Save the Partition Layout and Exit

Save fdisk by typing w. This will also save your partition layout.

コード表示 4.10: Save and exit fdisk

Command (m for help): w

Now that your partitions are created, you can continue with Creating Filesystems.

4.e. Creating Filesystems

Introduction

Now that your partitions are created, it is time to place a filesystem on them. If you don't care about what filesystem to choose and are happy with what we use as default in this handbook, continue with Applying a Filesystem to a Partition. Otherwise read on to learn about the available filesystems...

Filesystems

The Linux kernel supports various filesystems. We'll explain ext2, ext3, ReiserFS, XFS and JFS as these are the most commonly used filesystems on Linux systems.

ext2 is the tried and true Linux filesystem but doesn't have metadata journaling, which means that routine ext2 filesystem checks at startup time can be quite time-consuming. There is now quite a selection of newer-generation journaled filesystems that can be checked for consistency very quickly and are thus generally preferred over their non-journaled counterparts. Journaled filesystems prevent long delays when you boot your system and your filesystem happens to be in an inconsistent state. If you intend to install Gentoo on a very small disk (less than 4GB), then you'll need to tell ext2 to reserve enough inodes when you create the filesystem by running mke2fs -T small /dev/<device>.

ext3 is the journaled version of the ext2 filesystem, providing metadata journaling for fast recovery in addition to other enhanced journaling modes like full data and ordered data journaling. It uses an HTree index that enables high performance in almost all situations. In short, ext3 is a very good and reliable filesystem. Ext3 is the recommended all-purpose all-platform filesystem. If you intend to install Gentoo on a very small disk (less than 4GB), then you'll need to tell ext3 to reserve enough inodes when you create the filesystem by running mke2fs -j -T small /dev/<device>.

JFS is IBM's high-performance journaling filesystem. JFS is a light, fast and reliable B+tree-based filesystem with good performance in various conditions.

ReiserFS is a B+tree-based journaled filesystem that has good overall performance, especially when dealing with many tiny files at the cost of more CPU cycles. ReiserFS appears to be less maintained than other filesystems.

XFS is a filesystem with metadata journaling which comes with a robust feature-set and is optimized for scalability. XFS seems to be less forgiving to various hardware problems.

Applying a Filesystem to a Partition

To create a filesystem on a partition or volume, there are tools available for each possible filesystem:

Filesystem Creation Command
ext2 mke2fs
ext3 mke2fs -j
reiserfs mkreiserfs
xfs mkfs.xfs
jfs mkfs.jfs

For instance, to have the root partition (/dev/sda2 in our example) in ext3, you would use:

コード表示 5.1: Applying a filesystem on a partition

# mke2fs -j /dev/sda2

Now create the filesystems on your newly created partitions (or logical volumes).

Activating the Swap Partition

mkswap is the command that is used to initialize swap partitions:

コード表示 5.2: Creating a Swap signature

# mkswap /dev/sda1

To activate the swap partition, use swapon:

コード表示 5.3: Activating the swap partition

# swapon /dev/sda1

Create and activate the swap with the commands mentioned above.

4.f. Mounting

Now that your partitions are initialized and are housing a filesystem, it is time to mount those partitions. Use the mount command. Don't forget to create the necessary mount directories for every partition you created. As an example we mount the root partition:

コード表示 6.1: Mounting partitions

# mount /dev/sda2 /mnt/gentoo

注意: If you want your /tmp to reside on a separate partition, be sure to change its permissions after mounting: chmod 1777 /mnt/gentoo/tmp. This also holds for /var/tmp.

We will also have to mount the proc filesystem (a virtual interface with the kernel) on /proc. But first we will need to place our files on the partitions.

Continue with Installing the Gentoo Installation Files.

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が使用できると仮定して説明してきます。

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

コード表示 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}.DIGESTS
${stage3}: 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="${CFLAGS}"
# 両方の変数に同じ値を使います
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/${profile}

デフォルトの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. Timezone

You first need to select your timezone so that your system knows where it is located. Look for your timezone in /usr/share/zoneinfo, then copy it to /etc/localtime. Please avoid the /usr/share/zoneinfo/Etc/GMT* timezones as their names do not indicate the expected zones. For instance, GMT-8 is in fact GMT+8.

コード表示 1.1: Setting the timezone information

# ls /usr/share/zoneinfo
(Suppose you want to use GMT)
# cp /usr/share/zoneinfo/GMT /etc/localtime

7.b. Installing the Sources

Choosing a Kernel

The core around which all distributions are built is the Linux kernel. It is the layer between the user programs and your system hardware. Gentoo provides its users several possible kernel sources. A full listing with description is available at the Gentoo Kernel Guide.

For alpha-based systems we have gentoo-sources (the default 2.6 kernel source).

コード表示 2.1: Installing a kernel source

# emerge gentoo-sources

When you take a look in /usr/src you should see a symlink called linux pointing to your kernel source. In this case, the installed kernel source points to gentoo-sources-${kernel-version}. Your version may be different, so keep this in mind.

コード表示 2.2: Viewing the kernel source symlink

# ls -l /usr/src/linux
lrwxrwxrwx    1 root     root           12 Oct 13 11:04 /usr/src/linux -> linux-${kernel-version}

Now it is time to configure and compile your kernel source. You can use genkernel for this, which will build a generic kernel as used by the Installation CD. We explain the "manual" configuration first though, as it is the best way to optimize your environment.

If you want to manually configure your kernel, continue now with Default: Manual Configuration. If you want to use genkernel you should read Alternative: Using genkernel instead.

7.c. Default: Manual Configuration

Introduction

Manually configuring a kernel is often seen as the most difficult procedure a Linux user ever has to perform. Nothing is less true -- after configuring a couple of kernels you don't even remember that it was difficult ;)

However, one thing is true: you must know your system when you start configuring a kernel manually. Most information can be gathered by emerging pciutils (emerge pciutils) which contains lspci. You will now be able to use lspci within the chrooted environment. You may safely ignore any pcilib warnings (like pcilib: cannot open /sys/bus/pci/devices) that lspci throws out. Alternatively, you can run lspci from a non-chrooted environment. The results are the same. You can also run lsmod to see what kernel modules the Installation CD uses (it might provide you with a nice hint on what to enable).

Now go to your kernel source directory and execute make menuconfig. This will fire up an ncurses-based configuration menu.

コード表示 3.1: Invoking menuconfig

# cd /usr/src/linux
# make menuconfig

You will be greeted with several configuration sections. We'll first list some options you must activate (otherwise Gentoo will not function, or not function properly without additional tweaks).

Activating Required Options

First go to File Systems and select support for the filesystems you use. Don't compile them as modules, otherwise your Gentoo system will not be able to mount your partitions. Also select Virtual memory and /proc file system.

コード表示 3.2: Selecting necessary file systems

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

(Select one or more of the following options as needed by your system)
  <*> Reiserfs support
  <*> Ext3 journalling file system support
  <*> JFS filesystem support
  <*> Second extended fs support
  <*> XFS filesystem support

If you are using PPPoE to connect to the Internet or you are using a dial-up modem, you will need the following options in the kernel:

コード表示 3.3: Selecting PPPoE necessary drivers

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

The two compression options won't harm but are not definitely needed, neither does the PPP over Ethernet option, that might only be used by ppp when configured to do kernel mode PPPoE.

If you require it, don't forget to include support in the kernel for your ethernet card.

The following options are recommended as well:

コード表示 3.4: Recommended Alpha options

General setup --->
  <*> SRM environment through procfs
  <*> Configure uac policy via sysctl

Plug and Play configuration --->
  <*> Plug and Play support
  <M>   ISA Plug and Play support

SCSI support --->
  SCSI low-level drivers --->
    <*> SYM53C8XX Version 2 SCSI support (NEW)
    <*> Qlogic ISP SCSI support

Network device support --->
  Ethernet (10 or 100 Mbit) --->
    <M> DECchip Tulip (dc21x4x) PCI support
    <M> Generic DECchip & DIGITAL EtherWORKS PCI/EISA
    <M> EtherExpressPro/100 support (eepro100)
    <M> EtherExpressPro/100 support (e100)
  Ethernet (1000 Mbit) --->
    <M> Alteon AceNIC
      [*] Omit support for old Tigon I
    <M> Broadcom Tigon3
  [*] FDDI driver support
  <M> Digital DEFEA and DEFPA
  <*> PPP support
    <*> PPP Deflate compression

Character devices --->
  [*] Support for console on serial port
  [*] Direct Rendering Manager

File systems --->
  <*> Kernel automounter version 4 support
  Network File Systems --->
    <*> NFS
      [*] NFSv3 client
      <*> NFS server
      [*] NFSv3 server
  Partition Types --->
    [*] Advanced partition selection
    [*] Alpha OSF partition support
  Native Language Support
    <*> NLS ISO 8859-1

Sound --->
  <M> Sound card support
    <M> OSS sound modules
      [*] Verbose initialisation
      [*] Persistent DMA buffers
      <M> 100% Sound Blaster compatibles

When you've finished configuring the kernel, continue with Compiling and Installing.

Compiling and Installing

Now that your kernel is configured, it is time to compile and install it. Exit the configuration and start the compilation process:

コード表示 3.5: Compiling the kernel

# make && make modules_install
# make boot

When the kernel has finished compiling, copy the kernel image to /boot. Recent kernels might create vmlinux instead of vmlinux.gz. Keep this in mind when you copy your kernel image.

コード表示 3.6: Installing the kernel

# cp arch/alpha/boot/vmlinux.gz /boot/

Now continue with Kernel Modules.

7.d. Alternative: Using genkernel

If you are reading this section, you have chosen to use our genkernel script to configure your kernel for you.

Now that your kernel source tree is installed, it's now time to compile your kernel by using our genkernel script to automatically build a kernel for you. genkernel works by configuring a kernel nearly identically to the way our Installation CD kernel is configured. This means that when you use genkernel to build your kernel, your system will generally detect all your hardware at boot-time, just like our Installation CD does. Because genkernel doesn't require any manual kernel configuration, it is an ideal solution for those users who may not be comfortable compiling their own kernels.

Now, let's see how to use genkernel. First, emerge the genkernel ebuild:

コード表示 4.1: Emerging genkernel

# emerge genkernel

Now, compile your kernel sources by running genkernel all. Be aware though, as genkernel compiles a kernel that supports almost all hardware, this compilation will take quite a while to finish!

Note that, if your boot partition doesn't use ext2 or ext3 as filesystem you need to manually configure your kernel using genkernel --menuconfig all and add support for your filesystem in the kernel (i.e. not as a module).

コード表示 4.2: Running genkernel

# genkernel all

Once genkernel completes, a kernel, full set of modules and initial root disk (initrd) will be created. We will use the kernel and initrd when configuring a boot loader later in this document. Write down the names of the kernel and initrd as you will need it when writing the bootloader configuration file. The initrd will be started immediately after booting to perform hardware autodetection (just like on the Installation CD) before your "real" system starts up.

コード表示 4.3: Checking the created kernel image name and initrd

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

7.e. Kernel Modules

Configuring the Modules

You should list the modules you want automatically loaded in /etc/modules.autoload.d/kernel-2.6. You can add extra options to the modules too if you want.

To view all available modules, run the following find command. Don't forget to substitute "<kernel version>" with the version of the kernel you just compiled:

コード表示 5.1: Viewing all available modules

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

For instance, to automatically load the 3c59x.ko module, edit the kernel-2.6 file and enter the module name in it.

コード表示 5.2: Editing /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

Continue the installation with Configuring your System.

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

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

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

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

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

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を再コンパイルできます。

自由選択: IBM ハードウェア用 RAID ユーティリティ

もしPOWER5ベースのシステム上でSCSI RAIDを使っているなら、RAIDディスクアレイを扱えて、アレイ上の状況を取得したり、色々な機能の中のマイクロコードを更新できるiprutilsのインストールを考慮すべきです。

コード表示 4.2: iprutils のインストール

# emerge iprutils

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. Making your Choice

Introduction

Now that your kernel is configured and compiled and the necessary system configuration files are filled in correctly, it is time to install a program that will fire up your kernel when you start the system. Such a program is called a bootloader.

Several bootloaders exist for Linux/Alpha. You must choose one of the supported bootloaders, not all. You have the choice between aBoot and MILO.

10.b. Default: Using aboot

注意: aboot only supports booting from ext2 and ext3 partitions.

We first install aboot on our system. Of course we use emerge to do so:

コード表示 2.1: Installing aboot

# emerge aboot

The next step is to make our bootdisk bootable. This will start aboot when you boot your system. We make our bootdisk bootable by writing the aboot bootloader to the start of the disk.

コード表示 2.2: Making your bootdisk bootable

# swriteboot -f3 /dev/sda /boot/bootlx 
# abootconf /dev/sda 2

注意: If you use a different partitioning scheme than the one we use throughout this chapter, you have to change the commands accordingly. Please read the appropriate manual pages (man 8 swriteboot and man 8 abootconf). Also, if your root filesystem is ran using the JFS filesystem, make sure it gets mounted read-only at first by adding ro as a kernel option.

Additionally, you can make Gentoo boot automatically by setting up the aboot configuration file and some SRM variables. You can try setting these variables from Linux, but it may be easier to do so from the SRM console itself.

コード表示 2.3: Automatically booting Gentoo

# echo '0:2/boot/vmlinux.gz root=/dev/sda2' > /etc/aboot.conf
# cd /proc/srm_environment/named_variables
# echo -n 0 > boot_osflags
# echo -n '' > boot_file
# echo -n 'BOOT' > auto_action
# echo -n 'dkc100' > bootdef_dev
(Substitute dkc100 with whatever your boot device is)

If you need to get into the SRM console again in the future (to recover your Gentoo install, play with some variables, or whatever), just hit CTRL+C to abort the automatic loading process.

If you're installing using a serial console, don't forget to include the serial console boot flag in aboot.conf. See /etc/aboot.conf.example for some further information.

Aboot is now configured and ready to use. Continue with Rebooting the System.

10.c. Alternative: Using MILO

Before continuing, you should decide on how to use MILO. In this section, we will assume that you want to make a MILO boot floppy. If you are going to boot from an MS-DOS partition on your hard disk, you should amend the commands appropriately.

To install MILO, we use emerge.

コード表示 3.1: Installing MILO

# emerge milo

After MILO has been installed, the MILO images should be in /opt/milo. The commands below make a bootfloppy for use with MILO. Remember to use the correct image for your Alpha-system.

コード表示 3.2: Installing MILO on a floppy

(First insert a blank floppy)
# fdformat /dev/fd0
# mformat a:
# mcopy /opt/milo/milo-2.2-18-gentoo-ruffian a:\milo
# mcopy /opt/milo/linload.exe a:\linload.exe
(Only if you have a Ruffian:     
  # mcopy /opt/milo/ldmilo.exe a:\ldmilo.exe
)
# echo -ne '\125\252' | dd of=/dev/fd0 bs=1 seek=510 count=2

Your MILO boot floppy is now ready to boot Gentoo Linux. You may need to set environment variables in your ARCS Firmware to get MILO to start; this is all explained in the MILO-HOWTO with some examples on common systems, and examples of the commands to use in interactive mode.

Not reading the MILO-HOWTO is a bad idea.

Now continue with Rebooting the System.

10.d. Rebooting the System

Exit the chrooted environment and unmount all mounted partitions. Then type in that one magical command you have been waiting for: reboot.

コード表示 4.1: Exiting the chroot, unmounting all partitions and rebooting

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

Of course, don't forget to remove the bootable CD, otherwise the CD will be booted again instead of your new Gentoo system.

Once rebooted in your Gentoo installation, finish up with Finalizing your Gentoo Installation.

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

6. ebuildアプリケーション

6.a. EmergeとEbuild

ebuildアプリケーションはPortageシステムの下層レベルインターフェースです。 このアプリケーションを使うと、与えられたebuildに反して特定の行動を実行することができます。 例えば、あなた自身によって個々のマージステップを実行することができます。

ebuildの利用はより開発目的です。 その為ebuildに関するより多くの情報はDevelopers Handbookにあります。 しかし、ここでは、あるソフトウェアをマージしているときにどんなebuildインスタンスがPortageによって呼び出されているのか、 そして実行を許可したいくつかのebuildを設定後の過程でどのようにして呼びだすのかについて説明します。

6.b. ソフトウェアの手動インストール

ソースの取得とチェックサム

与えられたebuildファイルと共にebuildが呼び出されたときはいつでも、全てのファイルのチェックサムが付属するManifestfiles/digest-<name>-<version>から提供される値と一致しているか確認します。 これはソースが取得された後も行われます。

ebuildを使ってソースを取得するには、次のように実行します。

コード表示 2.1: ソースの取得

# ebuild path/to/ebuild fetch

ebuildのmd5sumがManifestファイルのものと一致しなかったり、ダウンロードされたソースがfiles/digest-<package>ファイルのものと一致しないときには、このようなエラーが表示されます。

コード表示 2.2: ebuildのチェックサム失敗

!!! File is corrupt or incomplete. (Digests do not match)
>>> our recorded digest: db20421ce35e8e54346e3ef19e60e4ee
>>>  your file's digest: f10392b7c0b2bbc463ad09642606a7d6

この後にエラーが起きたファイルが表示されます。

もし取得したソースとebuild自身が正しいことが確実ならば、ebuildのダイジェスト機能を使ってManifestdigest-<package>を再生成することができます。

コード表示 2.3: Manifestとdigestの再生成

# ebuild path/to/ebuild digest

ソースの解凍

ソースを/var/tmp/portage (もしくは/etc/make.confで定義したその他のディレクトリ)に解凍するには、ebuildの解凍機能を実行します。

コード表示 2.4: ソースの解凍

# ebuild path/to/ebuild unpack

これはebuildのsrc_unpack()機能(src_unpack()機能が何も定義されていないときには単に抽出するだけ)によって実行されます。 このステップでは必要なパッチも適用されます。

ソースのコンパイル

マージ行程の次のステップはソースのコンパイルです。 ebuildのコンパイル機能はebuildのsrc_compile()機能を実行することによってこのステップを引き受けます。 これは適当であれば設定ステップも含みます。

コード表示 2.5: ソースのコンパイル

# ebuild path/to/ebuild compile

コンパイルの命令を変更したいのならebuildのsrc_compile()機能を編集すると良いでしょう。 しかし、ebuildアプリケーションがコンパイルステップを完了したとPortageをだまして信じ込ませることもできます。 全ての必要なコマンドを実行して作業ディレクトリに.compiledという空のファイルを作成します。

コード表示 2.6: コンパイルジョブが完了したとPortageに通達する

# touch .compiled

ファイルを一時的な場所にインストール

次のステップでは、Portageは全ての必要なファイルを一時的な場所にインストールします。 このディレクトリは現在のファイルシステムにマージするべき全てのファイルを含みます。 src_install()機能を実行するebuildのインストール機能を実行することでこれを行うことができます。

コード表示 2.7: ファイルのインストール

# ebuild path/to/ebuild install

現在のファイルシステムにファイルをマージ

最終ステップでは全てのファイルを現在のファイルシステムにマージし、Portageに登録します。 ebuildはこのステップを"qmerge"と呼び、以下のステップによって呼び出されます。

ebuildのqmergeを実行してこれらのステップを実行します。

コード表示 2.8: 現在のファイルシステムにファイルをマージ

# ebuild path/to/ebuild qmerge

一時的なディレクトリの削除

最後にebuildのclean機能を使って一時ディレクトリを掃除します。

コード表示 2.9: 一時的なディレクトリの削除

# ebuild path/to/ebuild clean

6.c. 追加のEbuild機能

全てのマージ関連のコマンドを実行する

ebuildのmerge機能を使うと取得、解凍、コンパイル、インストール、そしてqmergeコマンドを一度に実行できます。

コード表示 3.1: ソフトウェアのインストール

# ebuild path/to/ebuild merge

設定動作を実行

いくらかのパッケージにはシステムにより適合させるためにパッケージを設定する指示が含まれています。 これらの指示は対話方式なので自動的には実行されません。 ebuildのconfig()機能を利用して設定ステップを実行するには、ebuildの設定機能を使います。

コード表示 3.2: パッケージの設定

# ebuild path/to/ebuild config

(RPM)パッケージのビルド

ebuildのバイナリパッケージや、RPMファイルでさえもPortageに作成するよう指示することができます。 ebuildのpackageかrpm機能を使ってこれらアーカイブを作成します。 これら2つの機能の間には少し違いがあります。

コード表示 3.3: パッケージの作成

(Portage互換のバイナリパッケージ)
# ebuild path/to/ebuild package

(RPMパッケージ)
# ebuild path/to/ebuild rpm

作成されたRPMファイルにはebuildの依存関係情報は含まれていません。

6.d. より詳しい情報

Portageやebuildアプリケーション、そしてebuildファイルについてのより詳しい情報については以下のmanページを調べてください。

コード表示 4.1: manページ

$ man portage    (Portage自身)
$ man emerge     (emergeコマンド)
$ man ebuild     (ebuildコマンド)
$ man 5 ebuild   (ebuildファイル構文)

開発者関連の情報がDevelopers Handbookで取得できます。

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 を見てください。