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

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
Stuart Longland  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月 4日

目次:

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 (Big Endian port) MIPS3, MIPS4, MIPS5 or MIPS64-class CPU
CPU (Little Endian port) MIPS4, MIPS5 or MIPS64-class CPU
Memory 128 MB
Diskspace 3.0 GB (excluding swap space)
Swap space At least 256 MB

You should also check the MIPS Hardware Requirements document available from our website.

2.b. Installation Notes

A note about Processor Architectures

On many architectures, the processor has gone through several generations, each newer generation builds on the foundation of the previous one. MIPS is no exception. There are several generations of CPU covered under the MIPS architecture. In order to choose your netboot image stage tarball and CFLAGS appropriately, you need to be aware of which family your system's CPU belongs in. These families are referred to as the Instruction Set Architecture.

MIPS ISA 32/64-bit CPUs Covered
MIPS 1 32-bit R2000, R3000
MIPS 2 32-bit R6000
MIPS 3 64-bit R4000, R4400, R4600, R4700
MIPS 4 64-bit R5000, RM5000, RM7000 R8000, R9000, R10000, R12000, R14000, R16000
MIPS 5 64-bit None As Yet
MIPS32 32-bit AMD Alchemy series, 4kc, 4km, many others... There are a few revisions in the MIPS32 ISA.
MIPS64 64-bit Broadcom SiByte SB1, 5kc ... etc... There are a few revisions in the MIPS64 ISA.

注意: The MIPS5 ISA level was designed by Silicon Graphics back in 1994, but never actually got used in a real life CPU. It lives on as part of the MIPS64 ISA.

注意: The MIPS32 and MIPS64 ISAs are a common source of confusion. The MIPS64 ISA level is actually a superset of the MIPS5 ISA, so it includes all instructions from MIPS5 and earlier ISAs. MIPS32 is the 32-bit subset of MIPS64, it exists because most applications only require 32-bit processing.

Also, another important concept to grasp is the concept of endianness. Endianness refers to the way that a CPU reads words from main memory. A word can be read as either big endian (most significant byte first), or little endian (least significant byte first). Intel x86 machines are generally Little endian, whilst Apple and Sparc machines are Big Endian. On MIPS, they can be either. To separate them apart, we append el to the architecture name to denote little endian.

Architecture 32/64-bit Endianness Machines covered
mips 32-bit Big Endian Silicon Graphics
mipsel 32-bit Little Endian Cobalt Servers
mips64 64-bit Big Endian Silicon Graphics
mips64el 64-bit Little Endian Cobalt Servers

For those willing to learn more about ISAs, the following websites may be of assistance.

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. Netbooting Overview

In this section, we'll cover what you need in order to successfully network boot a Silicon Graphics workstation or Cobalt Server appliance. This is just a brief guide, it is not intended to be thorough, for more information, it is recommended that you read the Diskless HOWTO.

What You Need: Depending on the machine, there is a certain amount of hardware that you'll need in order to successfully netboot and install Linux.

注意: SGI machines use a MiniDIN 8 connector for the serial ports. Apparently Apple modem cables work just fine as serial cables, but with Apple machines being equipped with USB & internal modems, these are getting harder to find. One wiring diagram is available from the Linux/MIPS Wiki, and most electronics stores should stock the plugs required.

注意: For the terminal, this could be a real VT100/ANSI terminal, or it could be a PC running terminal emulation software (such as HyperTerminal, Minicom, seyon, Telex, xc, screen -- whatever your preference). It doesn't matter what platform this machine runs -- just so long as it has one RS-232 serial port you can use, and appropriate software.

注意: Note that this guide does NOT cover the original Qube. The original Qube server appliance lacks a serial port in its default configuration, and therefore it is not possible to install Gentoo onto it without the aid of a screwdriver and a surrogate machine to do the installation. The following site has a guide for installing Gentoo on these machines. http://www.metzner.org/projects/qube/

Setting up TFTP and DHCP -- a brief guide

Okay, so you've got your bits and pieces together, now to set everything up. As mentioned earlier -- this is not a complete guide, this is a bare-bones config that will just get things rolling. You can either use this when starting a setup from scratch, or use the suggestions to amend your existing setup to support netbooting.

It is worth noting that the servers used need not be running Gentoo Linux, you could quite reasonably use FreeBSD or any Unix-like platform. However, this guide will assume you are running Gentoo Linux. You also may run TFTP/NFS on a separate machine to the DHCP server if desired.

警告: The Gentoo/MIPS Team cannot help you with setting up other operating systems as netboot servers. If you choose a different OS, it is assumed you know what you're doing.

First Step -- configuring DHCP. In order for the ISC DHCP daemon to respond to BOOTP requests (as required by the SGI & Cobalt BOOTROM) you need to first enable dynamic BOOTP on the address range in use; then set up an entry for each client with pointers to the boot image.

コード表示 3.1: Installing ISCs DHCP

# emerge dhcp

Once installed you need to create the /etc/dhcp/dhcpd.conf. Here's a bare-bones config to get you started.

コード表示 3.2: Bare Bones dhcpd.conf

# Tell dhcpd to disable dynamic DNS.
# dhcpd will refuse to start without this.
ddns-update-style none;

# Create a subnet:
subnet 192.168.10.0 netmask 255.255.255.0 {
  # Address pool for our booting clients. Don't forget the 'dynamic-bootp' bit!
  pool {
    range dynamic-bootp 192.168.10.1 192.168.10.254;
  }

  # DNS servers and default gateway -- substitute as appropriate
  option domain-name-servers 203.1.72.96, 202.47.56.17;
  option routers 192.168.10.1;

  # Tell the DHCP server it's authoritative for this subnet.
  authoritative;

  # Allow BOOTP to be used on this subnet.
  allow bootp;
}

With that setup, one can then add any number of clients within the subnet clause. We will cover what you need to put in later in this guide.

Next Step -- Setting up TFTP server. It is recommended that you use tftp-hpa as it is the only TFTP daemon known to work correctly. Proceed by installing it as shown below.

コード表示 3.3: Installing tftp-hpa

# emerge net-ftp/tftp-hpa

This will create /tftproot for you to store the netboot images. You may move this elsewhere if you wish. For the purposes of this guide, it is assumed that you have left it in the default location.

2.d. Netbooting on SGI Workstations

Downloading a Netboot image

Depending on the system you're installing for, there are several possible images available for download. These are all labelled according to the system type and CPU they are compiled for. The machine types are as follows:

Codename Machines
IP22 Indy, *Indigo 2, Challenge S
IP26 *Indigo 2 Power
IP27 Origin 200, Origin 2000
IP28 *Indigo 2 Impact
IP30 Octane
IP32 O2

注意: * It is a common mistake to mix up the IRIS Indigo (IP12 w/ R3000 CPU or IP20 w/ R4000 CPU, neither of which run Linux), the Indigo 2 (IP22, which runs Linux fine), the R8000-based Indigo 2 Power (which doesn't run Linux at all) and the R10000-based Indigo 2 Impact (IP28, which is highly experimental). Please bear in mind that these are different machines.

Also in the filename, r4k refers to R4000-series processors, r5k for R5000, rm5k for the RM5200 and r10k for R10000. You will find the images available on the Gentoo mirrors.

DHCP Configuration for an SGI Client

Once you have downloaded the file, place the decompressed image file in your /tftproot directory. (Use bzip2 -d to decompress) Then edit your /etc/dhcp/dhcpd.conf and add the entry for your SGI client.

コード表示 4.1: dhcpd.conf snippet for SGI Workstation

subnet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx {
  # ... usual stuff here ...

  # SGI Workstation... change 'sgi' to your SGI machine's hostname.
  host sgi {
  
    # MAC Address of SGI Machine. Normally this is written on the back
    # or base of the machine.
    hardware ethernet 08:00:69:08:db:77;

    # TFTP Server to download from (by default, same as DHCP server)
    next-server 192.168.10.1;

    # IP address to give to the SGI machine
    fixed-address 192.168.10.3;

    # Filename for the PROM to download and boot
    filename "/gentoo-r4k.img";
  }
}

Kernel Options

We're almost done, but there's a couple of little tweaks still to be done. Pull up a console with root privileges, and enter the following commands.

コード表示 4.2: Some fixes to SGI machines to have TFTP work properly

(Disable "Path Maximum Transfer Unit", otherwise SGI Prom won't find the kernel)
# echo 1 > /proc/sys/net/ipv4/ip_no_pmtu_disc

(Set the port range usable by the SGI PROM)
# echo "2048 32767" > /proc/sys/net/ipv4/ip_local_port_range

This should be sufficient to allow the Linux server to play nice with SGI's PROM.

Start Your Daemons...

At this point, you should be ready to start the daemons. Enter the following:

コード表示 4.3: Starting the DHCP and TFTP daemons

# /etc/init.d/dhcp start
# /etc/init.d/in.tftpd start

If nothing went wrong in that last step you should be all set to power on the workstation and proceed with the guide. If the DHCP server isn't firing up for whatever reason, try running 'dhcpd' on the command line and see what it tells you -- if all is well, it should just fork into the background, otherwise you'll see 'exiting.' just below its complaint.

An easy way to verify if the tftp daemon is running is to type the following command -- if you see something like the output mentioned below -- everything is fine.

コード表示 4.4: Checking TFTPd is running

# netstat -al | grep ^udp
udp        0      0 *:bootpc                *:*
udp        0      0 *:631                   *:*
udp        0      0 *:xdmcp                 *:*
udp        0      0 *:tftp                  *:* <-- (look for this line)

Netbooting the SGI machine

Okay, everything is set, DHCP is running as is TFTP. Now it is time to fire up the SGI machine. Power the unit on -- when you see "Running power-on diagnostics" on the screen, either click "Stop For Maintenance" or press ESCAPE. You'll be presented with a menu like the following. Enter the commands as shown below.

コード表示 4.5: SGI PROM Maintenance Menu

        Running power-on diagnostics

System Maintenance Menu

1) Start System
2) Install System Software
3) Run Diagnostics
4) Recover System
5) Enter Command Monitor

Option? 5
Command Monitor. Type "exit" to return to the menu.
>> bootp(): root=/dev/ram0

From this point, the machine should start downloading the image, then, roughly 20 seconds later, start booting Linux. If all is well, you should be dropped at the Busybox ash shell as shown below, where you can move on to Configuring Your Network.

コード表示 4.6: When things are going right...

init started:  BusyBox v1.00-pre10 (2004.04.27-02:55+0000) multi-call binary

Gentoo Linux; http://www.gentoo.org/
 Copyright 2001-2004 Gentoo Technologies, Inc.; Distributed under the GPL

 Gentoo/MIPS Netboot for Silicon Graphics Machines
 Build Date: April 26th, 2004

 * To configure networking, do the following:

 * For Static IP:
 * /bin/net-setup <IP Address> <Gateway Address> [telnet]

 * For Dynamic IP:
 * /bin/net-setup dhcp [telnet]

 * If you would like a telnetd daemon loaded as well, pass "telnet"
 * As the final argument to /bin/net-setup.

Please press Enter to activate this console.

Troubleshooting.

If the machine is being stubborn and refusing to download its image, it can be one of two things, (1) you've made a blunder somewhere, or (2) it needs a little gentle persuasion. (No, put that sledge hammer down!) Here's a list of things you can check:

If you've checked everything on the server, and you're getting timeouts, etc on the SGI machine, try typing this into the console.

コード表示 4.7: Coaxing the SGI PROM to work

>> resetenv
>> unsetenv netaddr
>> unsetenv dlserver
>> init
>> bootp(): root=/dev/ram0

2.e. Alternative Method: Gentoo/MIPS SGI LiveCD

Overview

On Silicon Graphics machines, it is possible to boot from a CD in order to install operating systems. (This is how one installs IRIX for instance) Recently, images for such bootable CDs to install Gentoo have been made possible. These CDs are designed to work in the same way.

At the moment the Gentoo/MIPS Live CD will only work on the SGI Indy, Indigo 2 and O2 workstations equipped with R4000 and R5000-series CPUs, however other platforms may be possible in future.

You can find the Live CD images for download on your favourite Gentoo Mirror under the experimental/mips/livecd directory.

警告: These CDs are highly experimental at this time. They may or may not work at this time. You can report success or failures either on Bugzilla, this forum thread or in the #gentoo-mips IRC channel. We would love to hear from you.

Burning a Live CD

An important thing to note, the SGI PROM does not understand the ISO9660 format, nor does it know anything about the El Torito boot standard. These CD images are constructed as a SGI disklabel with the boot image in the volume header like a hard drive. Therefore, care must be taken when burning the CD image.

Below is an example command that assumes 24x burning speed on an IDE burner. If you have a SCSI burner for instance, you may want to adjust the dev statement as appropriate. Likewise with the speed option - if you strike troubles, you might want to try dropping the speed.

コード表示 5.1: Burning using cdrecord

# bzip2 -d mips-livecd-prototype-rc2-20041027.img.bz2
# cdrecord -vv -pad speed=24 dev=ATAPI:0,0,0 -tao mips-livecd-prototype-rc2-20041027.img

注意: It may be possible to burn these CDs under Windows, assuming your burning program just blindly burns the image as is. However, no one has succeeded in making a working CD this way to date.

注意: If you don't know what to put as your dev argument, run cdrecord -scanbus as root - this will tell you where your burner is located.

2.f. Netbooting on Cobalt Servers

Overview of the netboot procedure

Unlike the SGI machines, Cobalt servers use NFS to transfer their kernel for booting. You boot the machine by holding down the left & right arrow buttons whilst powering the unit on. The machine will then attempt to obtain an IP number via BOOTP, mount the /nfsroot directory from the server via NFS, then try to download and boot the file vmlinux_raq-2800.gz (depending on the model) which it assumes to be a standard ELF binary.

Downloading a Netboot image

Inside http://dev.gentoo.org/~redhatter/mips/cobalt/netboots/ you'll find the necessary boot images for getting a Cobalt up and running. The files you need will have the name nfsroot-KERNEL-COLO-DATE-cobalt.tar -- select the most recent one and unpack it to / as shown below:

コード表示 6.1: Unpacking the nfsroot image

# tar -C / -xvf nfsroot-2.6.13.4-1.19-20051122-cobalt.tar

NFS Server configuration

Since this machine uses NFS to download its image, you need to export /nfsroot on your server. If you have not already done so, you'll need to install the net-fs/nfs-utils package.

コード表示 6.2: Installing nfs-utils

# emerge net-fs/nfs-utils

Once that is done, place the following in your /etc/exports file. You may set tighter restrictions if you wish.

コード表示 6.3: Exporting the /nfsroot directory

/nfsroot      *(ro,sync)

Now, once that is done, you may start the NFS server:

コード表示 6.4: Starting the NFS server

# /etc/init.d/nfs start

If the NFS server was already running at the time, you can tell it to take another look at its exports file using exportfs.

コード表示 6.5: Exporting a new filesystem

# exportfs -av

DHCP Configuration for a Cobalt machine

Now, the DHCP side of things is relatively straightforward. Add the following to your /etc/dhcp/dhcpd.conf file.

コード表示 6.6: dhcpd.conf snippet for Cobalt server

subnet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx {
  # ... usual stuff here ...

  # Configuration for a Cobalt Server
  # Set the hostname here:
  host qube {
    # Path to the nfsroot directory.
    # This is mainly for when using the TFTP boot option on CoLo
    # You shouldn't need to change this.
    option root-path "/nfsroot";

    # Cobalt server's ethernet MAC address
    hardware ethernet 00:10:e0:00:86:3d;

    # Server to download image from
    next-server 192.168.10.1;

    # IP address of cobalt server
    fixed-address 192.168.10.2;

    # Location of the default.colo file relative to /nfsroot
    # You shouldn't need to change this.
    filename "default.colo";
  }
}

Start Your Daemons...

At this point, you should be ready to start the daemons. Enter the following:

コード表示 6.7: Starting the DHCP and NFS daemons

# /etc/init.d/dhcp start
# /etc/init.d/nfs start

If nothing went wrong in that last step you should be all set to power on the workstation and proceed with the guide. If the DHCP server isn't firing up for whatever reason, try running 'dhcpd' on the command line and see what it tells you -- if all is well, it should just fork into the background, otherwise you'll see 'exiting.' just below its complaint.

Netbooting the Cobalt machine

Okay, everything is set, DHCP is running as is NFS. Now it is time to fire up the Cobalt machine. Hook up your null modem cable, and set the serial terminal to use 115200 baud, 8 bits, no parity, 1 stop bit, VT100 emulation. Once that is done, hold down the left & right arrow buttons whilst powering the unit on.

If all is well, the back panel should display "Net Booting", you should see some network activity, closely followed by CoLo kicking in. On the rear panel, scroll down the menu until you see "Network (NFS)" then press ENTER. You should notice the machine starts booting on the serial console.

コード表示 6.8: Booting the kernel

elf: 80080000 <-- 00001000 6586368t + 192624t
elf: entry 80328040
net: interface down
CPU revision is: 000028a0
FPU revision is: 000028a0
Primary instruction cache 32kB, physically tagged, 2-way, linesize 32 bytes.
Primary data cache 32kB 2-way, linesize 32 bytes.
Linux version 2.4.26-mipscvs-20040415 (root@khazad-dum) (gcc version 3.3.3...
Determined physical RAM map:
 memory: 08000000 @ 00000000 (usable)
Initial ramdisk at: 0x80392000 (3366912 bytes)
On node 0 totalpages: 32768
zone(0): 32768 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: console=ttyS0,115200 root=/dev/ram0
Calibrating delay loop... 249.85 BogoMIPS
Memory: 122512k/131072k available (2708k kernel code, 8560k reserved, 3424k dat)

If all is well, you should be dropped at the Busybox ash shell as shown below, where you can go onto Configuring Your Network.

コード表示 6.9: When things are going right...

VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 280k freed
init started:  BusyBox v1.00-pre10 (2004.04.27-02:55+0000) multi-call binary

Gentoo Linux; http://www.gentoo.org/
 Copyright 2001-2004 Gentoo Technologies, Inc.; Distributed under the GPL

 Gentoo/MIPS Netboot for Cobalt Microserver Machines
 Build Date: April 26th, 2004

 * To configure networking, do the following:

 * For Static IP:
 * /bin/net-setup <IP Address> <Gateway Address> [telnet]

 * For Dynamic IP:
 * /bin/net-setup dhcp [telnet]

 * If you would like a telnetd daemon loaded as well, pass "telnet"
 * As the final argument to /bin/net-setup.

Please press Enter to activate this console.

Troubleshooting.

If the machine is being stubborn and refusing to download its image, it can be one of two things, (1) you've made a blunder somewhere, or (2) it needs a little gentle persuasion. (No, put that sledge hammer down!) Here's a list of things you can check:

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.

Partitions

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. These are called partitions.

4.b. Designing a Partitioning Scheme

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. There is also a 15-partition limit for SCSI and SATA.

4.c. Using fdisk on MIPS to Partition your Disk

SGI Machines: Creating an SGI Disk Label

All disks in an SGI System require an SGI Disk Label, which serves a similar function as Sun & MS-DOS disklabels -- It stores information about the disk partitions. Creating a new SGI Disk Label will create two special partitions on the disk:

警告: The SGI Volume Header must begin at cylinder 0. Failure to do so means you won't be able to boot from the disk.

The following is an example excerpt from an fdisk session. Read and tailor it to your needs...

コード表示 3.1: Creating an SGI Disklabel

# fdisk /dev/sda

Command (m for help): x

Expert command (m for help): m
Command action
   b   move beginning of data in a partition
   c   change number of cylinders
   d   print the raw data in the partition table
   e   list extended partitions
   f   fix partition order
   g   create an IRIX (SGI) partition table
   h   change number of heads
   m   print this menu
   p   print the partition table
   q   quit without saving changes
   r   return to main menu
   s   change number of sectors/track
   v   verify the partition table
   w   write table to disk and exit

Expert command (m for help): g
Building a new SGI disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content will be irrecoverably lost.

Expert command (m for help): r

Command (m for help): p

Disk /dev/sda (SGI disk label): 64 heads, 32 sectors, 17482 cylinders
Units = cylinders of 2048 * 512 bytes

----- partitions -----
Pt#     Device  Info     Start       End   Sectors  Id  System
 9:  /dev/sda1               0         4     10240   0  SGI volhdr
11:  /dev/sda2               0     17481  35803136   6  SGI volume
----- Bootinfo -----
Bootfile: /unix
----- Directory Entries -----

Command (m for help):

注意: If your disk already has an existing SGI Disklabel, then fdisk will not allow the creation of a new label. There are two ways around this. One is to create a Sun or MS-DOS disklabel, write the changes to disk, and restart fdisk. The second is to overwrite the partition table with null data via the following command: dd if=/dev/zero of=/dev/sda bs=512 count=1.

Getting the SGI Volume Header to just the right size

重要: This step is often needed, due to a bug in fdisk. For some reason, the volume header isn't created correctly, the end result being it starts and ends on cylinder 0. This prevents multiple partitions from being created. To get around this issue... read on.

Now that an SGI Disklabel is created, partitions may now be defined. In the above example, there are already two partitions defined for you. These are the special partitions mentioned above and should not normally be altered. However, for installing Gentoo, we'll need to load a bootloader, and possibly multiple kernel images (depending on system type) directly into the volume header. The volume header itself can hold up to eight images of any size, with each image allowed eight-character names.

The process of making the volume header larger isn't exactly straight-forward; there's a bit of a trick to it. One cannot simply delete and re-add the volume header due to odd fdisk behavior. In the example provided below, we'll create a 50MB Volume header in conjunction with a 50MB /boot partition. The actual layout of your disk may vary, but this is for illustrative purposes only.

コード表示 3.2: Resizing the SGI Volume Header correctly

Command (m for help): n
Partition number (1-16): 1
First cylinder (5-8682, default 5): 51
 Last cylinder (51-8682, default 8682): 101

(Notice how fdisk only allows Partition #1 to be re-created starting at a     )
(minimum of cylinder 5?  Had you attempted to delete & re-create the SGI      )
(Volume Header this way, this is the same issue you would have encountered.   )
(In our example, we want /boot to be 50MB, so we start it at cylinder 51 (the )
(Volume Header needs to start at cylinder 0, remember?), and set its ending   )
(cylinder to 101, which will roughly be 50MB (+/- 1-5MB).                     )

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

(Delete Partition #9 (SGI Volume Header))

Command (m for help): n
Partition number (1-16): 9
First cylinder (0-50, default 0): 0
 Last cylinder (0-50, default 50): 50

(Re-Create Partition #9, ending just before Partition #1)

If you're unsure how to use fdisk have a look down further at the instructions for partitioning on Cobalts. The concepts are exactly the same -- just remember to leave the volume header and whole disk partitions alone.

Once this is done, you are safe to create the rest of your partitions as you see fit. After all your partitions are laid out, make sure you set the partition ID of your swap partition to 82, which is Linux Swap. By default, it will be 83, Linux Native.

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

Cobalt Machines: Partitioning your drive

On Cobalt machines, the BOOTROM expects to see a MS-DOS MBR, so partitioning the drive is relatively straightforward -- in fact, it's done the same way as you'd do for an Intel x86 machine. However there are some things you need to bear in mind.

For that reason, I recommend creating a ~20MB /boot partition formatted EXT2r0 upon which you can install CoLo & your kernels. This allows you to run a modern filesystem (EXT3 or ReiserFS) for your root filesystem.

I will assume you have created /dev/sda1 to mount later as a /boot partition. If you wish to make this /, you'll need to keep the PROM's expectations in mind.

So, continuing on... To create the partitions you type fdisk /dev/sda at the prompt. The main commands you need to know are these:

コード表示 3.3: Partitioning the disk

# fdisk /dev/sda

The number of cylinders for this disk is set to 19870.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

(Start by clearing out any existing partitions)
Command (m for help): o
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.


The number of cylinders for this disk is set to 19870.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

(You can now verify the partition table is empty using the 'p' command)

Command (m for help): p

Disk /dev/sda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot      Start         End      Blocks   Id  System

(Create the /boot partition)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1

(Just press ENTER here to accept the default)

First cylinder (1-19870, default 1):
Last cylinder or +size or +sizeM or +sizeK (1-19870, default 19870): +20M

(and now if we type 'p' again, we should see the new partition)
Command (m for help): p

Disk /dev/sda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1          40       20128+  83  Linux

(The rest, I prefer to put in an extended partition, so I'll create that)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Partition number (1-4): 2

(Again, the default is fine, just press ENTER.)

First cylinder (41-19870, default 41):
Using default value 41

(We want to use the whole disk here, so just press ENTER again)
Last cylinder or +size or +sizeM or +sizeK (41-19870, default 19870):
Using default value 19870

(Now, the / partition -- I use separate partitions for /usr, /var,
etc... so / can be small. Adjust as per your preference.)

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (41-19870, default 41):<Press ENTER>
Using default value 41
Last cylinder or +size or +sizeM or +sizeK (41-19870, default 19870): +500M

(... and similar for any other partitions ...)

(Last but not least, the swap space. I recommend at least 250MB swap,
preferrably 1GB)

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (17294-19870, default 17294): <Press ENTER>
Using default value 17294
Last cylinder or +size or +sizeM or +sizeK (1011-19870, default 19870): <Press ENTER>
Using default value 19870

(Now, if we check our partition table, everything should mostly be ship
shape except for one thing...)

Command (m for help): p

Disk /dev/sda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

Device Boot      Start         End      Blocks      ID  System
/dev/sda1               1          21       10552+  83  Linux
/dev/sda2              22       19870    10003896    5  Extended
/dev/sda5              22        1037      512032+  83  Linux
/dev/sda6            1038        5101     2048224+  83  Linux
/dev/sda7            5102        9165     2048224+  83  Linux
/dev/sda8            9166       13229     2048224+  83  Linux
/dev/sda9           13230       17293     2048224+  83  Linux
/dev/sda10          17294       19870     1298776+  83  Linux

(Notice how #10, our swap partition is still type 83?)

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

(That should fix it... just to verify...)

Command (m for help): p

Disk /dev/sda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

Device Boot      Start         End      Blocks      ID  System
/dev/sda1               1          21       10552+  83  Linux
/dev/sda2              22       19870    10003896    5  Extended
/dev/sda5              22        1037      512032+  83  Linux
/dev/sda6            1038        5101     2048224+  83  Linux
/dev/sda7            5102        9165     2048224+  83  Linux
/dev/sda8            9166       13229     2048224+  83  Linux
/dev/sda9           13230       17293     2048224+  83  Linux
/dev/sda10          17294       19870     1298776+  82  Linux Swap

(Now, we write out the new partition table.)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

#

And that's all there is to it. You should now be right to proceed onto the next stage: Creating Filesystems.

4.d. 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 boot partition (/dev/sda1 in our example) in ext2 and the root partition (/dev/sda3 in our example) in ext3, you would use:

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

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

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

警告: If you're installing on a Cobalt server, remember /dev/sda1 MUST be of type EXT2 revision 0; Anything else (e.g. EXT2 revision 1, EXT3, ReiserFS, XFS, JFS and others) WILL NOT WORK! You can format the partition using the command: mke2fs -r 0 /dev/sda1.

Activating the Swap Partition

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

コード表示 4.2: Creating a Swap signature

# mkswap /dev/sda2

To activate the swap partition, use swapon:

コード表示 4.3: Activating the swap partition

# swapon /dev/sda2

Create and activate the swap with the commands mentioned above.

4.e. 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 and boot partition:

コード表示 5.1: Mounting partitions

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

注意: 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.

MIPS-based systems have just the one kernel tree to choose from, mips-sources. This patchset differs from the ones available for other architectures, in that it has lots of patches specific to the MIPS architecture.

コード表示 2.1: Merging kernel sources...

# emerge mips-sources

重要: On the Origin 200/2000, Indigo2 Impact (R10000), Octane/Octane2 and O2, a 64-bit kernel is required to boot these systems. For these machines, you should emerge kgcc64 to create a cross-compiler for building 64-bit kernels.

コード表示 2.2: Installing kgcc64...

# emerge kgcc64

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 mips-sources-${kernel-version}. Your version may be different, so keep this in mind.

コード表示 2.3: 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.

7.c. Kernel Compilation & Installation

Introduction

Previously, we went through the manual configuration of how to set up the kernel sources. This has become impractical with the number of systems we now support. This section details various sources for sample kernel configurations.

Using sample configurations in the kernel source

Many of the systems supported have sample .configs hiding in amongst the kernel source. Not all systems have configs distributed in this way. Those that do, can be configured using the commands mentioned in the table below.

System Configure command
Cobalt Servers make cobalt_defconfig
Indy, Indigo2 (R4k), Challenge S make ip22_defconfig
Origin 200/2000 make ip27_defconfig
Indigo2 Impact (R10k) make ip28_defconfig
O2 make ip32_defconfig

Using the running kernel config from the installation media

All of the Gentoo installation images provide a kernel config option as part of the image itself, accessible as /proc/config.gz. This may be used in many cases. It is best though if your kernel source matches closely, the kernel that is currently running. To extract it, simply run it through zcat as shown below.

コード表示 3.1: Extracting .config from /proc/config.gz

# zcat /proc/config.gz > .config

重要: This kernel config is set up for a netboot image. That is, it will expect to find a root filesystem image somewhere nearby, either as a directory for initramfs, or a loopback device for initrd. When you run make menuconfig below, don't forget to go into General Setup and disable the options for initramfs.

The Hardware Compatability Database

As an aid to users in finding working settings, a hardware compatability database was set up. This database lists the support for various MIPS devices, and allows users to contribute kernel configurations that are known to work. The address for this site is http://stuartl.longlandclan.hopto.org/gentoo/mips.

If you find this service useful, you're welcome to contribute your notes and .config files so that others may benefit from your experience. It should be noted however that there is no guarantee that any of the configuration files downloaded from this site will work.

Customising the configuration for your needs

Once you have found a configuration, download it into your kernel source directory, and rename it to .config. From there, you can run make oldconfig to bring everything up to date, and allow you to customise the configuration before compiling.

コード表示 3.2: Configuring the kernel

# cd /usr/src/linux
# cp /path/to/example-config .config
# make oldconfig
(Just press ENTER at each prompt to accept the defaults... we'll customise later)
# make menuconfig

重要: In the Kernel Hacking section, there is an option named "Are You Using A Cross Compiler?". This tells the kernel Makefiles to prepend "mips-linux-" (or mipsel-linux ... etc) to gcc and as commands when compiling the kernel. This should be turned off, even if cross-compiling. Instead, if you do need to call a cross-compiler, specify the prefix using the CROSS_COMPILE variable as shown in the next section.

重要: There is a known issue with JFS and ALSA on Octane systems where the ALSA fails to work. Given the experimental nature of JFS on MIPS, it is recommended that people avoid using JFS for the time being.

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:

注意: On 64-bit machines, you need to specify CROSS_COMPILE=mips64-unknown-linux-gnu- (or mips64el-... if on a little-endian system) to use the 64-bit compiler.

コード表示 3.3: Compiling the kernel

(Compiling natively)
# make vmlinux modules modules_install

(Cross-compiling on target machine)
(Adjust the mips64-unknown-linux-gnu- accordingly)
# make vmlinux modules modules_install CROSS_COMPILE=mips64-unknown-linux-gnu-

(When compiling on another machine, such as an x86 box, use the)
(following commands to compile the kernel & install modules into)
(a specific directory to be transferred to the target machine.)
# make vmlinux modules CROSS_COMPILE=mips64-unknown-linux-gnu-
# make modules_install INSTALL_MOD_PATH=/somewhere

重要: When compiling a 64-bit kernel for the Indy, Indigo2 (R4k), Challenge S and O2, use the vmlinux.32 target instead of vmlinux. Otherwise, your machine will not be able to boot. This is to work around the PROM not understanding the ELF64 format.

コード表示 3.4: Using the vmlinux.32 target

# make vmlinux.32
(This will create vmlinux.32 -- which is your final kernel)

When the kernel has finished compiling, copy the kernel image to /boot.

注意: On Cobalt servers, the bootloader will expect to see a compressed kernel image. Remember to gzip -9 the file once it is in /boot.

コード表示 3.5: Installing the kernel

# cp vmlinux /boot/kernel-${kernel-version}

(Cobalt Servers -- Compressing the kernel image)
# gzip -9v /boot/kernel-${kernel-version}

7.d. 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:

コード表示 4.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.

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

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

コード表示 4.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. Silicon Graphics Machines -- Setting Up arcload

Which one?

On SGI machines, we use the arcload boot loader. In previous releases, we also provided arcboot, however it has been officially declared obsolete, in favour of arcload.

注意: The SGI volume header filenames are limited to 8 characters, and there may be no more than 16 files contained in a single volume header.

Installing arcload

arcload was written for machines that require 64-bit kernels, and therefore can't use arcboot (which can't easily be compiled as a 64-bit binary). It also works around peculiarities that arise when loading kernels directly from the volume header. So, now you know what this is about, we can proceed with the installation:

コード表示 1.1: Merging arcload and dvhtool

# emerge arcload dvhtool

Once this has finished, you should find the arcload binary in /usr/lib/arcload. Now, two files exist:

Use dvhtool to install the appropriate binary for your system into the volume header:

コード表示 1.2: Placing arcload in the volume header

(Indy/Indigo2/Challenge S/O2 users)
# dvhtool --unix-to-vh /usr/lib/arcload/sashARCS sashARCS

(Indigo2 Impact/Octane/Octane2/Origin 200/Origin 2000 users)
# dvhtool --unix-to-vh /usr/lib/arcload/sash64 sash64

注意: You don't have to use the name sashARCS or sash64, unless you are installing to the volume header of a bootable CD. For normal boot from hard-disk, you may name them something else if you wish.

Now just use dvhtool to verify they are in the volume header.

コード表示 1.3: Checking arcload is present in the volume header

# dvhtool --print-volume-directory
----- directory entries -----
Entry #0, name "sash64", start 4, bytes 55859
#

Now, the arc.cf file has a C-like syntax. For the full detail on how one configures it, see the arcload page on the Linux/MIPS wiki. In short, you define a number of options, which you enable and disable at boot time using the OSLoadFilename variable.

コード表示 1.4: An example arc.cf

# ARCLoad Configuration

# Some default settings...
append  "root=/dev/sda3";
append  "ro";
append  "console=ttyS0,9600";

# Our main definition. ip28 may be changed if you wish.
ip28 {
        # Definition for a "working" kernel
        # Select this by setting OSLoadFilename="ip28(working)"
        working {
                description     "SGI Indigo2 Impact R10000\n\r";
                image system    "/working";
        }

        # Definition for a "new" kernel
        # Select this by setting OSLoadFilename="ip28(new)"
        new {
                description     "SGI Indigo2 Impact R10000 - Testing Kernel\n\r";
                image system    "/new";
        }

        # For debugging a kernel
        # Select this by setting OSLoadFilename="ip28(working,debug)"
        # or OSLoadFilename="ip28(new,debug)"
        debug {
                description     "Debug console";
                append          "init=/bin/bash";
        }
}

Starting with arcload-0.5, arc.cf and kernels may reside either in the volume header, or on a partition. If you wish to utilise this newer feature, you may instead place the files in your /boot partition (or / if your boot partition is not separate). arcload uses the filesystem driver code from the popular grub bootloader, and thus supports the same range of filesystems.

コード表示 1.5: Placing arc.cf and kernel in the volume header

# dvhtool --unix-to-vh arc.cf arc.cf
# dvhtool --unix-to-vh /usr/src/linux/vmlinux new

With this done, now all that's left is to set some options in the PROM. See the section on Rebooting the System.

10.b. Cobalt MicroServers -- Setting Up CoLo

Installing CoLo

On Cobalt servers, these machines have a much less capable firmware installed on chip. The Cobalt BOOTROM is primitive, by comparison to the SGI PROM, and has a number of serious limitations.

To overcome these limitations, an alternative firmware, called CoLo (Cobalt Loader) was developed. This is a BOOTROM image that can either be flashed into the chip inside the Cobalt server, or loaded from the existing firmware.

注意: This guide will take you through setting up CoLo so that it is loaded by the stock firmware. This is the only truly safe, and recommended way to set up CoLo.

警告: You may, if you wish, flash it into the server, and totally replace the original firmware -- however, you are entirely on your own in that endeavour. Should anything go wrong, you will need to physically remove the BOOTROM and reprogram it yourself with the stock firmware. If you are not sure how to do this -- then DO NOT flash your machine. We take no responsibility for whatever happens if you ignore this advice.

Okay, with the warnings over now, we'll get on with installing CoLo. First, start by emerging the package.

コード表示 2.1: Emerging colo

# emerge colo

With that installed (I hope you read those messages ;-) you should be able to look inside the /usr/lib/colo directory to find two files, colo-chain.elf: the "kernel" for the stock firmware to load, and colo-rom-image.bin: a ROM image for flashing into the BOOTROM. We start by mounting /boot and dumping a compressed copy of colo-chain.elf in /boot where the system expects it.

コード表示 2.2: Putting CoLo in its place

# gzip -9vc /usr/lib/colo/colo-chain.elf > /boot/vmlinux.gz

Configuring CoLo

Now, when the system first boots up, it'll load CoLo which will spit up a menu on the back LCD. The first option (and default that is assumed after roughly 5 seconds) is to boot to the hard disk. The system would then attempt to mount the first Linux partition it finds, and run the script default.colo. The syntax is fully documented in the CoLo documentation (have a peek at /usr/share/doc/colo-X.YY/README.shell.gz -- where X.YY is the version installed), and is very simple.

注意: Just a tip: when installing kernels, I usually create two kernel images, kernel.gz.working -- a known working kernel, and kernel.gz.new -- a kernel that's just been compiled. You can either use symlinks to point to the curent "new" and "working" kernels, or just rename the kernel images.

コード表示 2.3: A basic default.colo

#:CoLo:#
mount sda1
load /kernel.gz.working
execute root=/dev/sda3 ro console=ttyS0,115200

注意: CoLo will refuse to load a script that does not begin with the #:CoLo:# line. Think of it as the equivalent of saying #!/bin/sh in shell scripts.

It is also possible to ask a question, such as which kernel & configuration you'd like to boot, with a default timeout. This configuration does exactly this, asks the user which kernel they wish to use, and executes the chosen image. vmlinux.gz.new and vmlinux.gz.working may be actual kernel images, or just symlinks pointing to the kernel images on that disk. The 50 argument to select specifies that it should proceed with the first option ("Working") after 50/10 seconds.

コード表示 2.4: Menu-based configuration

#:CoLo:#

lcd "Mounting sda1"
mount sda1
select "Which Kernel?" 50 Working New

goto {menu-option}
var image-name vmlinux.gz.working
goto 3f
@var image-name vmlinux.gz.working
goto 2f
@var image-name vmlinux.gz.new

@lcd "Loading Linux" {image-name}
load /{image-name}
lcd "Booting..."
execute root=/dev/sda5 ro console=ttyS0,115200
boot

See the documentation in /usr/share/doc/colo-VERSION for more details.

10.c. Setting up for Serial Console

Okay, the Linux installation as it stands now, would boot fine, but assumes you're going to be logged in at a physical terminal. On Cobalt machines, this is particularly bad -- there's no such thing as a physical terminal.

注意: Those who do have the luxury of a supported video chipset may skip this section if they wish.

First, pull up an editor and hack away at /etc/inittab. Further down in the file, you'll see something like this:

コード表示 3.1: inittab Configuration

# SERIAL CONSOLE
#c0:12345:respawn:/sbin/agetty 9600 ttyS0 vt102

# TERMINALS
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

# What to do at the "Three Finger Salute".
ca:12345:ctrlaltdel:/sbin/shutdown -r now

First, uncomment the c0 line. By default, it's set to use a terminal baud rate of 9600 bps. On Cobalt servers, you may want to change this to 115200 to match the baud rate decided by the BOOT ROM. This is how that section looks on my machine. On a headless machine (e.g. Cobalt servers), I'll also recommend commenting out the local terminal lines (c1 through to c6) as these have a habit of misbehaving when they can't open /dev/ttyX.

コード表示 3.2: Example snippet from inittab

# SERIAL CONSOLE
c0:12345:respawn:/sbin/agetty 115200 ttyS0 vt102

# TERMINALS -- These are useless on a headless qube
#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

Now, lastly... we have to tell the system, that the local serial port can be trusted as a secure terminal. The file we need to poke at is /etc/securetty. It contains a list of terminals that the system trusts. We simply stick in two more lines, permitting the serial line to be used for root logins.

コード表示 3.3: Enabling root logins on serial console

(/dev/ttyS0 -- the traditional name for the first serial port)
# echo 'ttyS0' >> /etc/securetty

(Lately, Linux also calls this /dev/tts/0 -- so we add this
too)
# echo 'tts/0' >> /etc/securetty

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

注意: Cobalt Users: The rest of this section covers the setting up of the SGI PROM so that it boots arcload off disk and loads Linux. This is not applicable to the setup of Cobalt servers. In fact, all your work is done -- there is no configuration needed for the first boot up, you can skip to the next section: Finalising your Gentoo Installation

10.e. Tweaking the SGI PROM

Setting generic PROM settings

Now that you've installed the bootloader, you're ready to reboot the machine.

コード表示 5.1: Rebooting

(Exit the chroot environment)
# exit

(Unmount the drives)
# umount /mnt/gentoo/boot
# umount /mnt/gentoo

(Reboot)
# reboot

When you are rebooted, go to the System Maintenance Menu and select Enter Command Monitor (5) like you did when you netbooted the machine.

コード表示 5.2: Configuring the PROM to Boot Gentoo

1) Start System
2) Install System Software
3) Run Diagnostics
4) Recover System
5) Enter Command Monitor

Option? 5
Command Monitor. Type "exit" to return to the menu.

(Set some options for arcload)

(Provide the location of the Volume Header)
>> setenv SystemPartition scsi(0)disk(1)rdisk(0)partition(8)

(Automatically boot Gentoo)
>> setenv AutoLoad Yes

(Set the timezone)
>> setenv TimeZone EST5EDT

(Use the serial console - graphic adapter users should have "g" instead of "d1" (one))
>> setenv console d1

(Setting the serial console baud rate. This is optional, 9600 is the          )
(default setting, although one may use rates up to 38400 if that is desired.  )
>> setenv dbaud 9600

Now, the next settings depend on how you are booting the system.

Settings for direct volume-header booting

This is covered here for completeness. It's recommended that users look into installing arcload instead.

注意: This only works on the Indy, Indigo2 (R4k) and Challenge S.

コード表示 5.3: PROM settings for booting off the volume header

(<root device> = Gentoo's root partition, e.g. /dev/sda3)
>> setenv OSLoadPartition <root device>

(To list the available kernels, type "ls")
>> setenv OSLoader <kernel name>
>> setenv OSLoadFilename <kernel name>

(Declare the kernel parameters you want to pass)
>> setenv OSLoadOptions <kernel parameters>

If you wish to try a kernel without messing with kernel parameters, you may do so using the boot -f PROM command:

コード表示 5.4: Booting without changing environment variables

(Booting a kernel, "new", with additional options)
# boot -f new root=/dev/sda3 ro

Settings for arcload

arcload uses the OSLoadFilename option to specify which options to set from arc.cf. The configuration file is essentially a script, with the top-level blocks defining boot images for different systems, and inside that, optional settings. Thus, setting OSLoadFilename=mysys(serial) pulls in the settings for the mysys block, then sets further options overridden in serial.

In the example file above, we have one system block defined, ip28 with working, new and debug options available. We define our PROM variables as so:

コード表示 5.5: PROM settings for using arcload

(Select arcload as the bootloader:- sash64 or sashARCS)
>> setenv OSLoader sash64

(Use the "working" kernel image, defined in "ip28" section of arc.cf)
>> setenv OSLoadFilename ip28(working)

Starting with arcload-0.5, files no longer need to be placed in the volume header -- they may be placed in a partition instead. To tell arcload where to look for its configuration file and kernels, one must set the OSLoadPartition PROM variable. The exact value here will depend on where your disk resides on the SCSI bus. Use the SystemPartition PROM variable as a guide -- only the partition number should need to change.

注意: Partitions are numbered starting at 0, not 1 as is the case in Linux.

コード表示 5.6: Telling arcload where to find arc.cf

(If you wish to load from the volume header -- use partition 8)
>> setenv OSLoadPartition scsi(0)disk(1)rdisk(0)partition(8)

(Otherwise, specify the partition and filesystem type)
>> setenv OSLoadPartition scsi(0)disk(1)rdisk(0)partition(0)[ext2]

All Done

Now you're ready to enjoy Gentoo! Boot in your Gentoo installation and 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 を見てください。