目次:
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常駐フリークです :-)
Before we start, we first list what hardware requirements you need to successfully install Gentoo on your box.
| 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.
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.
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?
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
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";
}
}
|
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.
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) |
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. |
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
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. |
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.
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
|
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";
}
}
|
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.
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. |
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:
もしあなたのシステムがDHCPサーバを備えたEthernetネットワークに接続されているなら、おそらく、既にネットワーク設定は自動的に完了しているでしょう。 その場合には、LiveCD内のネットーワークが必要な各種コマンド( ssh、scp、 ping、 irssi、 wget、links など)を使うことができるでしょう。
また、ネットワークが設定されている場合には、/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.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
|
この時点でネットワークを使えているならば、残りのセクションを飛ばしてディスクの準備から続けることができます。 もし使えていないなら、この次へ進んでください。
ネットワークが動いていない場合には、 いくつかのインストールメディアではnet-setup(通常のネットワーク用)や、 pppoe-setup(ADSLユーザー用)、pptp (PPTPユーザー用-x86、amd64、 alpha、ppc、そしてppc64で利用可能)が使用できます。
もしインストールメディアにそのツールが含まれていなかったり、 ネットワークがそれでも動かなかったら、 手動でのネットワークの設定 から続けてください。
もし自動でネットワークが設定されなかった場合に、 一番単純に設定を行なう方法はnet-setupスクリプトを実行することです。
コード表示 2.1: net-setupスクリプトの起動 |
# net-setup eth0
|
net-setupはネットワーク環境に対するいくつかの質問をします。 すべての質問が終わったときに、ネットワーク接続ができているはずです。 確認のために上に書いたネットワークのテストを行なってください。 もしそのテストがいい結果なら、おめでとう! Gentooをインストールする準備ができました。 残りのセクションを飛ばして ディスクの準備 へ行ってください。
まだネットワークが接続されていないのなら、手動でのネットワークの設定から続けてください。
インターネットに接続するために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サポートが必要なら、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>
|
次は、ディスクの準備へ行ってください。
インストールCDは、ブートするときにすべてのハードウェアデバイスを検出、 ハードウェアをサポートするための適切なカーネルモジュール(ドライバー)を読み込もうとします。 大部分のケースでは、これはとても良く機能します。 ただ、いくつかのケースでは、必要なカーネルモジュールが自動的に読み込まれません。
net-setupやpppoe-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
|
もし、あなたのシステムに複数のネットワークカードが存在する場合には、 その名前はeth0、eth1など、となります。 動かしたいネットワークカードを確認してください。 そして、このドキュメントを通してその名前を使用してください。 このドキュメントでは、ネットワークカードはeth0を想定しています。
ネットワークが検出された場合には、 net-setupまたはpppoe-setupをやり直してください(今は動くはずです)。 また、パワーユーザーの方々のために、 マニュアルでのネットワークの設定の方法を説明します。
ネットワークセットアップのベースになる次のセクションを一つ選択してください。
DHCP (Dynamic Host Configuration Protocol)を使用すると、 自動的にネットワーク情報 (IPアドレス、ネットマスク、ブロードキャストアドレス、ゲートウェイ、 ネームサーバーなど)を受けとることが可能になります。 これはDHCPサーバーがネットワーク内に存在する場合にのみ動きます (または、プロバイダがDHCPサービスを提供している場合)。 自動的にこのネットワークインタフェース情報を受け取るためには、 dhcpcdを使用します。
コード表示 3.5: dhcpcdを使用する |
# dhcpcd eth0 ネットワーク管理者によっては、hostnameとdomainnameは DHCPサーバーが提供するものを使うように、と要求するかもしれません。 このような場合には、下のコマンドを使ってください。 # dhcpcd -HD eth0 |
もしこれが動いたら(Googleのように、 いくつかのインターネットサーバーにpingしてみてくてください)、 先に進む用意ができたことになります。 残りのセクションを飛ばして、ディスクの準備から続けてください。
注意: 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の代わりにwlan0やra0となるワイヤレスのカードがあります。 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 |
ネットワークの設定は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.a. Introduction to 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.
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
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.
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...
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. |
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.
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.
先に進める前に、日時をチェックして、更新しておく必要があります。 狂った時計は後でおかしな結果が起きる元になります。
現在の日時を確認するには、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
|
次のステップとして、stage3tarballをシステムにインストールする必要があります。 必要なtarballをインターネットからダウンロードするか、一般的なGentoo UniversalCDやLiveDVDから起動しているなら、ディスクからコピーすることができます。もしUniversal CDやLiveDVDを持っていて使用したいstageがディスクにあるのなら、インターネットからダウンロースするのは全くネットワーク帯域の浪費でしかありません。それらのstageは全く同一なのですから。 多くの場合、どのstageファイルをダウンロードすればいいのかを判断するのには、uname -mコマンドの結果が役に立つでしょう。
Minimal CDや LiveCDs はstage3アーカイブを含みませんが、LiveDVDは含みます。
5.b. 一般的な選択: インターネットからダウンロードしたstageを使う
Gentooをインストールしようとしているファイルシステムのマウントポイントに移動してください。 (大概は、次の場所です。/mnt/gentoo)
コード表示 2.1: インストール先のマウントポイントに移動 |
# cd /mnt/gentoo
|
インストールに使用している媒体によりますが、stageをダウンロードするツールが2、3用意されています。 もしlinksが使用可能なら、すぐにでもthe Gentoo mirrorlistにアクセスして、最寄のミラーを選択することができます。
もしlinksが使えない場合には、lynxを一時的に使用できるでしょう。 proxyを使う必要がある場合には、http_proxyとftp_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をシステムに展開しましょう。 もっとも簡単な方法として、tarを使います。
コード表示 2.5: stageの展開 |
# tar xvjpf stage3-*.tar.bz2
|
上記と同様のオプション(xvjpf)を必ず使うようにしてください。xはアーカイブの展開、 vは展開中に何が起こっているのかを表示(これは、任意です)、jはbzip2の解凍、 pはパーミッションの保存、そしてfは、標準入力からではなく、ファイルから展開することを表しています。
これでstageはインストールされました。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
|
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の値が正しくないようだったら、間違ったstage3 tarballを使用しているかもしれません。
CFLAGSとCXXFLAGS変数には、それぞれ、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(最適化なし)、そして、スピードの最適化フラグ1、2、さらに3までが指定できます(各クラスは、この順番により強い最適化を行います。より強い最適化をするクラスは、弱い最適化クラスと同様の効果を持ちつつ、追加の最適化を行います)。 -O2 が推奨されたデフォルト指定です。-O3をシステム全体で使用した場合には、問題が発生することが分かっていますので、-O2にとどめておくことをお勧めします。
他の人気がある最適化フラグとして-pipe(コンパイル時の様々な段階間の情報のやり取りに、テンポラリファイルではなくパイプを使うようにします)があります。これは生成されるコードには影響しません。
-fomit-frame-pointer(必要ない関数に対するレジスタ内のフレームポインタを保持しません)を使うと、 アプリケーションのデバッグが非常に困難になります。
CFLAGSとCXXFLAGSを定義するとき、 それぞれの最適化オプションは同じものを使うべきです。 展開したstage3アーカイブに含まれるデフォルトの設定は十分に最適化されています。 下記の例は、あくまで例です。
コード表示 4.2: CFLAGS変数とCXXFLAGS変数の設定 |
CFLAGS="${CFLAGS}" # 両方の変数に同じ値を使います CXXFLAGS="${CFLAGS}" |
注意: 様々なコンパイルオプションがどのようにシステムに影響を及ぼしうるかしるために、link="/doc/en/gcc-optimization.xml">Compilation Optimization Guide(未訳)を見てみるのもよいでしょう。 |
MAKEOPTSには、パッケージをインストールするときに、 いくつ平行してコンパイルを走らせるかを定義します。 あなたのシステムのCPU数に1を加えた数を指定するのが賢明ですが、これは目安であり常にそれが最善であるというわけではありません。
コード表示 4.3: 一般的な、CPUが1個のシステムに対するMAKEOPTSの設定 |
MAKEOPTS="-j2" |
/mnt/gentoo/etc/make.confをあなたの好みに応じて編集し、保存してください。 (nanoユーザは、Ctrl-Xを押します) それでは、Gentooベースシステムのインストールへ進んでください。
すばやくソースコードをダウンロードするために、一番回線速度が速いミラーサイトを選択することをお勧めします。 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内の設定が重複していないかを確認したほうがよいでしょう。
新しい環境に入る前にしなければならないことが、まだ一つ残っています。 それは、新しい環境でもネットワーク環境が確実に動くようにするために、 /etc/resolv.confにあるDNS情報を、新しい環境にコピーすることです。 /etc/resolv.confにはあなたのネットワーク環境における ネームサーバーの情報が含まれています。
コード表示 1.3: DNS情報をコピーする |
("-L"オプションは、シンボリックリンクをコピーしないようにするために必要です) # cp -L /etc/resolv.conf /mnt/gentoo/etc/ |
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環境に入ることができました。 もちろん、まだいくつかのセクションが残っており、完了までは程遠いのですが:-)
ここで、Portageツリーを最新状態に更新すべきです。 emerge --syncが、これを行います。
コード表示 2.1: Portageツリーの更新 |
# emerge --sync (一部のフレームバッファやシリアルコンソールなどの低速な端末を使用している場合、この工程にかかる時間を短くするために、--quietオプションを以下のように追加してもよいです。) # emerge --sync --quiet |
rsync通信を遮断してしまうファイアウォールの環境内にいる場合は、代わりにemerge-webrsyncを使用します。それは、portageのスナップショットをダウンロードしてインストールします。
Portageの新しいバージョンが利用可能で、新しいものに更新すべきであることを警告されたら、emerge --oneshot portageを使用してすぐに更新すべきです。
まず、所定の位置にあるちょっとした定義について説明します。
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を使うという選択肢もあります。
アーキテクチャによっては、desktopとserver 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は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" |
あなたは、おそらくシステムで一つないし二つのロケールだけしか使用しないでしょう。 /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ファイルで指定した全てのロケールが生成されます。
では、カーネル設定へ進んでください。
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 |
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
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. |
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} |
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.
Linuxにおいて、システムに使用されている全パーティションは/etc/fstabに記述されていなければなりません。このファイルにはそれぞれのパーティションのマウントポイント(ファイルシステムの構築のときに出てきた)、どのように、どんな特別なオプションでマウントされるか(自動的にマウントするか否か、ユーザーがマウントできるかどうか等)の情報が含まれます。
/etc/fstabは特別な構文を使います。各々のラインは6つのフィールドから成り、空白(スペース、タブもしくはその両方)で分けられています。各々のフィールドにはそれぞれの意味があります。
重要: Gentooが提供している元々の/etc/fstab有効なfstabではありません。 自分のシステムの/etc/fstabを作成しなければなりません。 |
コード表示 1.1: /etc/fstabを開く |
# nano -w /etc/fstab
|
パーティション分割の構成に合ったルールを追加し、CD-ROMドライブのためのルールを付け加えてください。 そして、その他のパーティションやドライブがあれば、当然それらも忘れないでください。
ここで/etc/fstabを作るために、以下の例を使います。
autoはmountにファイルシステムを推測させ(多数のファイルシステムの内の1つで作成され得るリムーバルメディアに推奨されます)、userは非rootユーザーがCDをマウントできるようにします。
パフォーマンスを改善するのに多くのユーザーはマウントオプションとして noatimeオプションを付け加えたいと考えることがあります。 アクセス時間が記録されないので、その結果はより高速なシステムになります(一般的にその記録はほとんど必要ありません)。
/etc/fstabを再チェックして、保存・終了して次に進んでください。
ユーザーが決めなければならない選択の一つは自分の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_eth0とroutes_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_eth1、config_eth2のように上記ステップを繰り返してください。
さあ設定を保存・終了して次に進みましょう。
ブート時にネットワークインターフェースを有効にさせるには、それぞれのスクリプトをdefaultのランレベルに追加する必要があります。
コード表示 2.8: defaultのランレベルにnet.eth0を追加 |
# rc-update add net.eth0 default
|
もしいくつかのネットワークインターフェイスがあるなら、適当なnet.eth1、net.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 |
保存・終了して次へ進みましょう。
最初に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をインストールしていなければ 、必要なシステムツールをインストールするに進んでください。
いくつかのパッケージは同じ機能を提供してるので、いくつかのツールはstage3アーカイブから無くなっています。今はどれをインストールしたいかを選ぶのは自分次第です。
最初に決める必要のあるツールは、システムにロギング機能を提供するものです。UnixとLinuxにはログ性能の素晴らしい歴史があります。-- もし望むならログファイルにシステムで起こった全てを記録できます。これはシステムログツールを通して行われます。
Gentooでは選択可能ないくつかのシステムログツールを提供しています。伝統的なシステムロギングデーモンのsysklogdがあります。syslog-ngは高機能なシステムログツールです。そしてmetalogは詳細な設定ができるシステムログツールです。他の選択もPortageを通じて可能でしょう。有効パッケージの数は日毎に増えていますから。
もしsysklogdかsyslog-ngを使おうと思っているなら、これらのシステムログツールにはログファイルをローテーションする機構が無いので、後でlogrotateをインストールしましょう。
選択したシステムログツールをインストールするには、それをemergeして、rc-updateを使って通常にランレベルにスクリプトを追加してください。次の例ではsyslog-ngをインストールします。もちろん自分で選択したシステムログツールに置き換えても構いません。
コード表示 1.1: システムログツールをインストールする |
# emerge syslog-ng # rc-update add syslog-ng default |
次はcronデーモンです。これは任意で、システムに必須ではありませんが、インストールするのは賢明なことです。しかしcronデーモンとは何でしょうか。cronデーモンは予定されたコマンドを実行します。定期的にあるコマンドを実行する必要があるならとても重宝します。(例えば日毎、週毎、月毎)。
Gentooでは3つのcronデーモンを提供しています。: dcron、fcronそしてvixie-cronです。その内の1つをインストールするのはシステムログツールをインストールするのに似ています。しかし、dcronとfcronでは特別な設定コマンドが必要とされます。すなわち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 |
locateを使用して素早くファイルの検索をするために、システム中のファイルのインデックスを作成する場合には、sys-apps/slocateをインストールする必要があります。
コード表示 3.1: slocateをインストールする |
# emerge slocate
|
使っているファイルシステムが何かに依りますが、必須のファイルシステムツールをインストールする必要があります。(ファイルシステムの整合性をチェックしたり、追加のファイルシステムを作成する等のために)。 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
|
もし他の追加のネットワーク関連ツール(pppやdhcpクライアント等)を必要としなければ、ブートローダを設定するに進んでください。
もしGentooが自動的にネットワークインターフェイスにIPアドレスを取得するようにしたいのなら、dhcpcd(もしくは他のDHCPクライアント -- 使用可能なDHCPクライアントのリストはネットワークモジュールを言らください)をシステムにインストールする必要があります。 今しなければ、インストール後にインターネットに接続できないでしょう。
コード表示 5.1: dhcpcdをインストールする |
# emerge dhcpcd
|
もしインターネットに接続するのにpppが必要なら、インストールしなければなりません。
コード表示 5.2: pppをインストールする |
# emerge ppp
|
さあブートローダを設定するに進みましょう。
10.a. Silicon Graphics Machines -- Setting Up arcload
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. |
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
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
|
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 |
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 |
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 |
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] |
Now you're ready to enjoy Gentoo! Boot in your Gentoo installation and finish up with Finalizing your Gentoo Installation.
Unix/Linux システム上で、rootユーザで作業するのは危険であり、できるだけ避けるべきです。 したがって、日常作業で使用するためのユーザを追加することが強く推奨されます。
グループはユーザがどのような行動を取ることができるかを定義したメンバーのことです。 以下の表に、利用すると考えられるいくつかの重要なグループを示します。
| グループ | 詳細 |
| audio | オーディオデバイスへのアクセスが可能 |
| cdrom | 光学デバイスへの直接アクセスが可能 |
| floppy | フロッピーデバイスへの直接アクセスが可能 |
| games | ゲームで遊ぶことが可能 |
| portage | 一般ユーザでemerge --pretendを使用可能 |
| usb | USBデバイスへのアクセスが可能 |
| plugdev | カメラやUSBメモリスティックといった接続デバイスをマウント可能 |
| video | ビデオキャプチャーデバイスへのアクセスとハードウェアアクセラレーションが可能 |
| wheel | suの使用が可能 |
例えば、wheel、usersそして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パッケージを使うこともできます。これは正しく設定されていればとても安全な方法です。
Gentooのインストールは終了し、再起動も行いました。 何も問題がなければダウンロードしたステージ3 tarballと Portage スナップショットをハードディスクから削除してかまいません。/ にダウンロードしたことを思い出してください。
コード表示 2.1: ステージ3 tarball の削除 |
# rm /stage3-*.tar.bz2*
|
コード表示 2.2: Portage スナップショットの削除 |
# rm /portage-latest.tar.bz2*
|
おめでとうございます!これであなたのGentooシステムは動くようになりました。 でも、次は何をすればいいのでしょう?何を選べばいいのでしょう? まず何を探ればいいのでしょう? Gentooにはたくさんの可能性と、たくさんの文書化された(そしてあまり文書化されていない)特徴があります。
Gentooハンドブックの次の部「Gentooを使いこなす」はぜひとも読んでください。 ソフトウェアを最新の状態に保つ方法、さらに多くのソフトウェアをインストールする方法、USEフラグとは何か、Gentooのinitシステムの動作について、などが書かれています。
もしあなたのシステムをデスクトップ用途に最適化したいか、完全にデスクトップシステムとして動作するように設定する方法が知りたいなら、広範囲にわたるデスクトップ構築ガイド(日本語訳)を読んでください。それに加えて、自分のシステムを使いやすくするために、 Gentoo Linuxローカライズガイド(日本語訳)を使いたいかもしれません。
Gentoo Security Handbook(訳注:古いドキュメントがGentoo Linux セキュリティ・ガイドにあります)には、読んでおく価値のある膨大なドキュメントがあります。
すべての参照可能なドキュメントの一覧は、Gentooドキュメント(日本語訳)のページを見てください。
当然のことながら、Gentoo Forums (訳注: ほとんどが英語です)やたくさんあるGentoo IRCのチャネルはいつでも大歓迎です。
さらに、Gentooにはユーザ向けに公開されたメーリングリスト (訳注: 英語メーリングリストの情報です)がいくつかあります。 加入方法については、メーリングリストのページを見てください。
注意: 訳注: 日本語での情報交換はGentooJP Wiki、GentooJPのIRCチャネル、GentooJPのメーリングリストなどで行われています。 |
この辺りで終わりにしておきます。続きのインストールを楽しんでください :)
PortageはもしかするとGentooのソフトウェア管理における最も革新的な注目すべきものかもしれません。 その高い柔軟性と膨大な量の機能で、たびたびLinuxで利用できる最高のソフトウェア管理ツールと見られています。
Portageは全てPythonとBashによって書かれており、 両方ともスクリプト言語であるため、ユーザーにとって全体的に見通しのよいものになっています。
ほとんどのユーザーがemergeツールを通してPortageを利用しています。 この章はemergeのmanページから利用可能な情報の複製を作るつもりはありません。 emergeのオプションについての完全な概要を得るために、manページを調べてください。
コード表示 1.1: emergeのmanページを読む |
$ man emerge
|
パッケージについて話すとき、私たちはたびたびGentooユーザーがPortageツリーを通して利用可能なソフトウェアのタイトルを意味しています。 Portageツリーはebuildという、Portageがソフトウェアを維持する(インストール、検索など)ために必要な全ての情報を含んだファイルのコレクションです。 これらebuildはデフォルトでは/usr/portageに存在します。
Porgageにソフトウェアタイトルに関する行動を行うよう指示するときはいつでも、システムにあるebuildがベースに使われます。 故にPortageが新しいソフトウェアやセキュリティアップデートなどを知るために、定期的にebuildを更新することが重要です。
Portageツリーは一般にrsyncという高速ファイル転送ユーティリティで更新されます。 更新はrsyncのフロントエンドを提供するemergeコマンドを使うというとても簡単なものです。
コード表示 2.1: Portageツリーの更新 |
# emerge --sync
|
もしファイヤーウォールの制限などによりrsyncが実行できないときには、毎日作成されるPortageツリーのスナップショットを利用することによってPortageを更新することができます。 emerge-webrsyncツールは自動的に最新のスナップショットを取得し、システムにインストールしてくれます。
コード表示 2.2: emerge-webrsyncを実行 |
# emerge-webrsync
|
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-rebuildはgentoolkitによって提供されます;まず最初にemergeすることを忘れないでください。
コード表示 3.14: gentoolkitパッケージのインストール |
# emerge gentoolkit
|
SLOT、Virtual、ブランチ、アーキテクチャ、そしてProfilesについて
既に述べたように、Portageはとても強力で他のソフトウェア管理ツールに無い多くの機能をサポートしています。 このことを理解するために、あまり細かくなり過ぎるのを避けて、もう少しPortageの特徴について説明します。
Portageでは、一つのパッケージで複数のバージョンをシステム上に共存させることができます。 他のディストリビューションがそれらの名前にバージョンを付けている(freetypeとfreetype2の様に)のに対し、 PortageはSLOTと呼ばれる技術を使っています。 ebuildはそのバージョンの確かなSLOTを宣言します。異なったSLOTのebuildはシステムに共存できます。 例えば、freetypeパッケージはSLOT="1"とSLOT="2"のebuildを持っています。
同じ機能を提供しますが異なった実装のパッケージもまた存在します。 例えば、metalogd、sysklogd、syslog-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に既に報告されているか確認して、まだであれば報告してください。 ブランチを混ぜていない限りこれが起こることはありませんので、それはバグであると言えます。
コード表示 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サーバに負荷をかけないようにしてください。 |
Gentooをインストールするとき(または他のディストリビューション、 OSをインストールする場合も含めて)利用する環境により異なる選択をすることなります。 サーバー向けのセットアップはワークステーションのそれとはちがいます。 ゲーム用マシンと3Dレンダリングワークステーションも違いがあります。
このことは、インストールするパッケージの選択だけでなく、 パッケージがサポートする機能にも当てはまります。 もし、OpenGLが必要ないのであれば、面倒な思いをしながらOpenGLをインストールしたり、 他のほとんどのパッケージでOpenGLサポートをつけてビルドする必要はないのです。 もしKDEを使いたくない場合、KDEサポートがなくてもちゃんと動くパッケージ にわざわざKDEサポートつけてパッケージをコンパイル必要はありますか?
ユーザーが何をインストール/有効にして、何をそうしないのか決めやすいよう 簡単にユーザーの環境を指定する方法が必要となりました。 この方法によりユーザーは本当に必要なものを決めることになり、 またパッケージ管理システムであるPortageの判定処理が軽減されるのです。
USEフラグについて話をはじめましょう。 フラグはあるコンセプトのサポートと依存関係をあらわしたものです。 もしあるUSEフラグを定義すると、Portageに選んだキーワードに対応するよう伝えられます。 もちろん、これによりパッケージに対する依存情報も変更されます。
一つkdeというキーワードの例を挙げてみましょう。 USE変数のなかにこのキーワードが設定されていなければ、 オプションでKDEサポートをもつパッケージはKDEサポートなしでコンパイルされます。 オプションでKDEへの依存関係があるパッケージの場合、 (依存関係のため)KDEライブラリーなしでインストールされます。 もし、kdeキーワードを指定している場合、 こうしたパッケージはKDEサポート付でインストールされ、 依存関係に従ってKDEライブラリーもインストールされます。
正しくキーワードを設定することで、必要に応じたシステムが得られるのです。
USEフラグには二つのタイプがあります。グローバルとローカルUSEフラグです。
使用可能なグローバルUSEフラグのリストは オンライン か /usr/poratge/profiles/use.desc にあります。
使用可能なローカルUSEフラグは /usr/portage/profiles/use.local.desc にあります。
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サポートをつけるには、 次のようにUSEをetc/make.confに宣言します。
コード表示 2.2: /etc/make.conf でのUSE設定例 |
USE="-kde -qt3 -qt4 ldap" |
一つか二つほどのアプリケーションに対しある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の設定を一回だけ使いたいといったことが時にはあります。 /etc/make.confを二度(変更して元に戻す)編集する代わりに、 USE変数を環境変数として宣言することもできます。 ただし、再emergeしたりアップデートする場合(明示的に行うときとシステムアップデート両方の場合)、 は変更は破棄されてしまうのでご注意ください。
seamonkeyをインストールする際にUSEの設定から一時的にjavaを除く例です。
コード表示 2.5: 環境変数としてUSEを使う |
# USE="-java" emerge seamonkey
|
当然のことながら、USEの設定では どの設定が優先するのかという順位付けがあります。 また、javaが優先順位の関係で有効になってしまっているのを 確かめるためだけにUSE="-java"の設定もしたくないでしょう。 USE設定の優先順位は、下のような順番になっています (最初のものが低い優先度です)。
最終的なPortageのUSE設定を確認するためにはemerge infoを実行してください。 これにより(USE設定を含んだ)Portageに関連するすべての変数のリストが表示されます。
コード表示 2.6: emerge --info の実行 |
# emerge info
|
もし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-rebuildはgentoolkitパッケージの一部として提供されています。 まず、このパッケージをemergeすることを忘れないでください。
コード表示 2.9: revdep-rebuildの実行 |
# revdep-rebuild
|
すべておわると、システムは新しい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フラグをみるためにequeryをuses付で実行します。 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
|
PortageはあなたのGentoo環境をより良くしてくれるいくつかの追加の機能があります。 これらの機能の多くはパフォーマンス、信頼性、セキュリティなどを改良してくれるソフトウェアツールに頼っています。
Portageの機能を有効にしたり無効にするには、スペースで区切られた様々な機能のキーワードを含む/etc/make.confのFEATURES変数を編集する必要があります。 いくつかのケースでは機能が依存している追加のツールをインストールする必要があります。
Portageがサポートしている機能が全てここで紹介されているわけではありません。 全てを知るには、make.confのmanページを調べてください。
コード表示 1.1: make.confのmanページを調べる |
$ man make.conf
|
デフォルトでFEATURESに何が設定されているかを知るには、emerge --infoを実行してFEATURES変数を検索するかgrepを利用します。
コード表示 1.2: 既に設定されているFEATURESを知る |
$ emerge --info | grep FEATURES
|
distccはネットワーク上のそれぞれのマシン(同一である必要はない)にコンパイル作業を分散させるプログラムです。 distccクライアントは利用可能な(distccdが実行されている)distccサーバに必要な情報の全てを送信するので、 それらサーバはクライアントのためにソースコードの断片をコンパイルすることができます。 この結果、コンパイルの時間が高速化されます。
distccに関するより多くの情報(そしてどのようにしてGentooで動作するのか)についてはGentoo Distcc Documentation(日本語訳)を見てください。
distccはコンピュータが送信したコンパイルタスクを監視するグラフィカルモニターを提供します。 もしGnomeを使っているのならUSEフラグに'gnome'を追加してください。 しかし、Gnomeを使っていないがモニターを利用したいときはUSEフラグに'gtk'を追加してください。
コード表示 2.1: distccのインストール |
# emerge distcc
|
/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 |
ccacheは高速なコンパイラーキャッシュです。 プログラムをコンパイルすると、中間結果をキャッシュするので、同じプログラムを再コンパイルしたときはいつでも、コンパイル時間は大いに減少します。 この結果、普通のコンパイルでは5~10倍のコンパイル時間の高速化となります。
ccacheに関する特徴に興味があるなら、ccacheのホームページを訪れてください。
ccacheをインストールするには、emerge ccacheを実行してください。
コード表示 3.1: ccacheのインストール |
# emerge ccache
|
/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.confでCCACHE_DIR変数を設定することができます。
ですが、ccacheを実行すれば、それはデフォルトの位置である${HOME}/.ccacheを使用するでしょう。 そのため、Portageのccache統計を見るときにはCCACHE_DIR変数を設定する必要があったのです。
もし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}"
|
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
|
複数のパッケージを連続してemergeするとき、Portageは、あるパッケージをコンパイルしている間に次のパッケージのソースファイルを取得してくることで、コンパイル時間を短縮することができます。 この機能を使うためには、FEATURESに"parallel-fetch"を追加してください。
Portageをrootで走らせるとき、FEATURES="userfetch"としておくと、パッケージのソースを取得しにいっている間、rootの権限を下げることができます。 これは小さなセキュリティの改善です。
システムを起動したとき、多くのテキストが画面上を流れることに気がつくでしょう。 よく注意して見ると、このテキストは、システムをリブートするたびに、常に同じであることがわかるでしょう。これらすべてのアクションの進行は、ブートシーケンスと呼ばれ、(ほぼ)静的に定義されます。
最初に、ブートローダが、ブートローダの設定で指定されたカーネルイメージをメモリにロードし、その後、カーネルを実行するようにCPUに命じます。カーネルがロードされ、実行されるときに、カーネルは、カーネル固有の構造とタスク全てを初期化し、initプロセスを起動します。
その後、initプロセスは、(/etc/fstabで指定された)すべてのファイルシステムがマウントされて使用できる準備が整うことを確認します。 次に、/etc/init.dディレクトリにあるいくつかのスクリプトを実行します。それらのスクリプトは、うまくシステムが起動されるように必要なサービスを開始します。
最後に、すべてのスクリプトが実行されたら、initプロセスは、agettyという特別なプロセスを端末(ターミナル)にくっつけて、端末(ほとんどが、Alt-F1、Alt-F2などの下に隠される仮想コンソール)を有効にします。 次に、agettyプロセスは、loginプロセスを実行することで、これらの端末を通してユーザがログインできるようにします。
ここで、initプロセスは、/etc/init.dディレクトリにあるスクリプトをでたらめに実行するわけではありません。ましてや、/etc/init.dディレクトリにあるスクリプト全てを実行するわけでもありません。 /etc/runlevelsディレクトリを調べて、どのスクリプトを実行するべきかを決めます。
最初に、initプロセスは、/etc/runlevels/bootディレクトリにシンボリックリンクがある/etc/init.dの全てのスクリプトを実行します。通常は、アルファベット順にスクリプトを開始しますが、いくつかのスクリプトは、起動される前に別のスクリプトが実行されなければならないことをシステムに伝える依存情報を持っています。
/etc/runlevels/bootから参照されるすべてのスクリプトが実行されたら、initプロセスは、/etc/runlevels/defaultにシンボリックリンクがあるスクリプトの実行を続けます。 やはり、スクリプトが依存情報を持たない場合は、どのスクリプトを最初に実行するべきかを決めるためにアルファベット順を使用しますが、うまく動作するスタートアップシーケンスを提供するために順番が変更される場合があります。
もちろん、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つは、ユーザ定義のランレベルです。内部で使用されるランレベルは、sysinitとshutdownとrebootで、その名が示すとおりのことを適切に行います。sysinitは、システムを初期化し、shutdownは、システムを停止し、rebootは、システムのリブートを行います。
ユーザ定義のランレベルは、/etc/runlevelsに属するサブディレクトリを指します。そのサブディレクトリには、bootとdefaultとnonetworkとsingleがあります。bootランレベルは、他のすべてのランレベルが使用する、システムに必要なすべてのサービスを開始します。残りの3つのランレベルには、何のサービスを開始するかの違いがあります。 defaultは、日常の業務のために使用されます。nonetworkはネットワーク接続が必要でない場合に使用されます。singleは、システムを修復しなければならない場合に使用されます。
rcプロセスが起動するスクリプトは、initスクリプトと呼ばれます。 /etc/init.dディレクトリにある各スクリプトは、次の引数を伴って実行することができます。start、stop、restart、pause、zap、status、ineed、iuse、needsme、usesme、broken。
サービス(とそれに依存するすべてのサービス)を開始、停止、再スタートするために、それぞれstart、stop、restart引数が次のように使用されるでしょう。
コード表示 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
|
サービスが持つ依存には何があるかを問い合わせるには、iuseかineedを使用します。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
|
Gentooのinitシステムは、最初に起動される必要があるサービスが何であるかを決定するために、依存性ツリーを使用します。依存性ツリーの管理作業は、ユーザに手動でさせたいとは思わない退屈なものなので、ランレベルとinitスクリプトの管理を簡単にするツールを作成しました。
rc-updateを使用して、ランレベルにinitスクリプトを追加したり、削除したりできます。rc-updateツールは、その後、依存性ツリーを再構築するためにdepscan.shスクリプトを自動で呼び出します。
Gentooをインストールする間に、既に"default"ランレベルにinitスクリプトを追加しています。そのときには"default"が何のためにあるかということを知らなかったかもしれませんが、今は知っておくべきです。rc-updateスクリプトは、何を実行するかを指定する別の引数を必要とします。それは、addかdelかshowです。
initスクリプトを追加または、削除するには、rc-updateにaddまたは、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スクリプトとそれらのランレベルをみることができます。
initスクリプトは、極めて複雑になる可能性があります。そのため、initスクリプトをユーザーが直接編集することは、間違い起こしやすいので良くありません。しかし、そのようなサービスを設定できることは重要です。例えば、サービスに追加のオプションを足したいと思うかもしれません。
設定をinitスクリプトの外側に設ける別の理由として、変更した設定が無効になってしまうという心配をせずにinitスクリプトの上書きができるということがあります。
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のような)が記述されています。変数に関するより詳しい情報も(コメントとして)提供されます。
いいえ。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()関数を定義する必要があります。 この関数には、あなたのサービスを初期化するために必要なすべてのコマンドを入れます。何がなされているかをユーザに知らせるために、以下のようにebeginとeend関数を使用することが望ましいです。
コード表示 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ファイルを使用しないでください。 --quietをstart-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.pyがfooに)ならば、--nameをstart-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されるでしょう。
多くのラップトップユーザは、"家ではnet.eth0を開始する必要があるが、外出先(ネットワークが利用可能な場所ではないので)ではnet.eth0を開始したくない。"という状況を理解できるでしょう。 Gentooではあなたのしたいようにランレベルの動作を変更できます。
例えば、別のinitスクリプトが割り当てられてブートする、2つ目の"default"ランレベルを作成できます。その後、使用したいdefaultランレベルがどれかをブート時に選択できます。
何はさておき、別の"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の使用は、まったくもってsoftlevelに類似しています。ここでのただ一つの違いは、別の"default"ランレベルを定義する代わりに、別の"boot"ランレベルを定義するということです。
環境変数とは、さまざまなアプリケーションから使用される情報を保持した名前付きオブジェクトです。 という説明をされても、多くのユーザー(特にあまりLinuxに慣れていない人)にとっては、 意味不明だったり、使いどころがないように思われるかもしれません。でも、それは違います。 環境変数を使うことで、さまざまなアプリケーションの設定を簡単に変更することができるのです。
以下の表は、Linuxシステムで使用されるいろいろな環境変数とその説明です。 具体的な環境変数の値については表の後でお見せします。
| 変数名 | 説明 |
| PATH | この変数には、システムが実行ファイルを検索する際に用いられるディレクトリがコロン区切りで格納されています。 入力した実行ファイル名(たとえばls、rc-update、emergeなど)がこの変数で設定された場所に見つからない場合、 そのファイルを実行することはできません(ただし、 たとえば/bin/lsのようにコマンドをフルパスで入力した場合はその限りではありません)。 |
| ROOTPATH | 機能としてはPATHとほぼ同じですが、この変数の場合、 rootユーザーがコマンドを入力するときのみ調べる必要があるディレクトリだけがリストされています。 |
| LDPATH | この変数には、ダイナミックリンカがライブラリを検索する際に使用するディレクトリが、 コロン区切りで格納されています。 |
| MANPATH | この変数には、manコマンドがマニュアルページを検索する際に使用するディレクトリが、 コロン区切りで格納されています。 |
| INFODIR | この変数には、infoコマンドがinfoページを検索する際に使用するディレクトリが、 コロン区切りで格納されています。 |
| PAGER | この変数には、ファイルの内容を表示するときに使うプログラム(たとえばlessやmore)のパスが格納されています。 |
| EDITOR | この変数には、ファイルの内容を編集する際に使われるプログラム(たとえばnanoやvi)のパスが格納されています。 |
| 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"
|
各環境変数を一ヶ所で定義できるようにするため、Gentooは/etc/env.dディレクトリを導入しました。 このディレクトリの中には、たとえば00basicや05gccなど、 いろいろなファイルが入っていると思います。それぞれのファイルには、 そのファイル名が表すアプリケーションに必要な環境変数が格納されています。
たとえば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" |
このファイルを使って自分用の環境変数を設定するようにしておけば、 独自に設定した環境変数も一目瞭然です。
/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"
|
環境変数の連結はいつも起こるわけではなく、以下の環境変数のみで発生します。 KDEDIRS、PATH、LDPATH、 MANPATH、INFODIR、INFOPATH、ROOTPATH、 CONFIG_PROTECT、CONFIG_PROTECT_MASK、PRELINK_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 は他の変数)というようにはできないということです。 |
グローバルな形で環境変数を設定したくない場合もあります。 たとえば、/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"
|
Portageの初期設定は/etc/make.globalsにあります。 その初期設定を見ると、Portageの全ての設定が変数を通して制御されることがわかるでしょう。 Portageがどのような変数を受け付け、それらが何を意味するのかは後述します。
多くの設定指示子がアーキテクチャ間で異なるため、Portageにはプロファイルの一部としての初期設定ファイルもあります。 プロファイルの位置は、/etc/make.profileシンボリックリンクのリンク先です。 Portageの設定は、プロファイルとその親ディレクトリにあるすべてのプロファイルにあるmake.defaultsファイルで設定されます。 プロファイルや/etc/make.profileディレクトリについては後でより詳しく説明します。
もし設定変数を変更しようとしているのなら、/etc/make.globalsやmake.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ツリーの位置などです。
これら全ての用途向けに、よく知られた初期設定の位置がありますが、/etc/make.confを通して、好みに合わせて変更することができます。 この章の残りで、Portageが使用する特定用途の位置は何があるかと、ファイルシステム上でのその位置の変更方法を説明します。
ですが、リファレンスとして使用されるようには意図されていません。 もし100%網羅した文書が必要なら、Portageとmake.confのmanページを調べてください。
コード表示 1.2: Portageとmake.confのmanページを読む |
$ man portage $ man make.conf |
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はシステムの状態(どんなパッケージがインストールされているか、どのパッケージに何のファイルが含まれているか、など)を/var/db/pkgに保存します。 これらのファイルを手動で変更してはいけません。 Portageのシステムに関する情報を破壊することになるでしょう。
Portageキャッシュ(修正を加えた時間、仮想、依存ツリー情報の修正)は/var/cache/edbに保存されます。 この位置は本当にキャッシュであり、Portage関連のアプリケーションを実行していないのなら削除することが出来ます。
Portageの一時ファイルは初期設定では/var/tmpに保持されます。 これはPORTAGE_TMPDIR変数で定義されます。
PORTAGE_TMPDIR変数を変更するなら、PORTAGE_TMPDIRの変更に関する影響を気にしなくてもいいように、次の変数も変更した方がいいでしょう。 これは、PortageのBUILD_PREFIX変数の扱い方に影響を及ぼします。
Portageは、各々のパッケージがemergeされるごとに専用のビルドディレクトリを/var/tmp/portage内に作ります。 この位置はBUILD_PREFIX変数で定義されます。
初期設定ではPortageは、すべてのファイルをルート(/)を基点するファイルシステム名前空間にインストールしますが、ROOT環境変数を設定することで変更することができます。 これは、新規のビルドイメージを作成するときに役に立ちます。(訳注: ROOT環境変数を変更して、仮の名前空間にインストールして確認してみる場合など)
Portageはebuildごとのログファイルを作成することができます。 しかし、この機能は、PORT_LOGDIR変数にPortage(portageユーザ)が書き込み可能な位置を設定しているときだけ有効になります。 初期設定ではこの変数は設定されていません。 もしPORT_LOGDIRが設定されていないならば、現在のロギングシステムではまったくビルドログを受け取れないでしょう。 ですが、新しいelogから何らかのログを受け取っているかもしれません。 PORT_LOGDIRをきちんと定義しelogを使用する場合、以下で説明されるように、ビルドログやelogによって保存されるログを取得することができます。
Portageはelogの利用による、きめ細かなロギングの管理方法を提供します。
重要: Portage-2.0.*でenoticeを使用している場合、elogとは互換性がないため、完全にenoticeを削除しなければなりません。 |
前述したとおり、Portageは、/etc/make.confで定義すべき多くの変数を通して調整可能です。より詳細で完全な情報は、以下のようにしてmake.confのmanページを参照してください。
コード表示 1.1: make.confのmanページを読む |
$ man make.conf
|
Portageはアプリケーションをビルドする際に、コンパイラとconfigureスクリプトに以下の変数の内容を渡します。
USE変数は、configureやコンパイルの実行中にも使用されますが、前の章で懇切丁寧に説明されているので、ここでは説明しません。
Portageは、特定のソフトウェアタイトルの新しいバージョンのマージが完了したとき、もう使用されない古いバージョンをシステムから削除します。Portageは、古いバージョンをアンマージする前に、5秒間だけユーザのアクションを待ちます。この5秒は、CLEAN_DELAY変数によって定義されます。
EMERGE_DEFAULT_OPTSを設定することで、emergeが実行されるとき、常に特定のオプションを使用するようにできます。 いくつかの有用なオプションとしては、--ask、--verbose、--treeなどでしょう。
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変数を使用します。
必要な情報またはデータが、システムで利用できない場合、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変数などで定義できます。
Portageツリーを更新する目的で、Portageによって使用されるrsyncコマンドを変更することはできませんが、rsyncコマンドに関連するいくつかの変数を設定することはできます。
これらのオプションのさらに詳細な情報や他のオプションについては、man rysncを読んでください。
ACCEPT_KEYWORDS変数によってデフォルトブランチを変更できます。デフォルトは、あなたのアーキテクチャの安定版ブランチです。Gentooのブランチのより詳細な情報は、次の章にあります。
FEATURES変数を通してPortageの特定の機能を有効にできます。Portageの機能は、前の章(Portageの機能)で説明されています。
PORTAGE_NICENESS変数によって、Portageが実行される優先順位(nice値)を増減できます。PORTAGE_NICENESS変数の値は、デフォルトのnice値に追加されます。
nice値に関するより詳細な情報は、以下のようにして、niceコマンドのmanページを参照してください。
コード表示 6.1: nice値に関するより詳細な情報の参照 |
$ man nice
|
デフォルトが"false"であるNOCOLOR変数は、カラー出力を止めるべきかどうかを定義します。
ACCEPT_KEYWORDS変数はシステムが利用するソフトウェアブランチを定義します。 デフォルトではあなたのアーキテクチャ、例えばx86のstableソフトウェアブランチとなっています。
stableブランチのみ利用することを推奨しています。 しかし、安定性にそれほどこだわらず、http://bugs.gentoo.orgへバグレポートをすることによってGentooに手を貸したいのなら、読み続けてください。
より新しいソフトウェアを利用したいなら、testingブランチを代わりに利用することを考えてください。 Portageにtestingブランチを利用させるには、アーキテクチャの前に~を追加してください。
testingブランチは、その名が示すとおりテスト中です。 もしパッケージがテスト中なら、開発者は機能はするがテストが完全でないと思っていることを意味します。 バグをいち早く発見し、開発者が知ることが出来るようにバグレポートを提出することが望ましいです。
不完全なパッケージを扱ったり(例えば依存関係の間違いや消失など)、過度の更新(多くのビルドを行うことになる)や壊れたパッケージは安定性の問題があると言うことに注意してください。 Gentooの動作や問題の解決方法を知らないのなら、安定でテスト済みのブランチを使用することが推奨されています。
例えば、x86アーキテクチャのtestingブランチを選択するには、/etc/make.confを編集してこのように設定します。
コード表示 1.1: ACCEPT_KEYWORDS変数の設定 |
ACCEPT_KEYWORDS="~x86" |
今システムを更新すれば、たくさんのパッケージが更新されることを知るでしょう。 注意してください: testingブランチを利用してシステムを更新したら、オフィシャルブランチであるstableに戻すのはたいてい優しい方法はありません(もちろんバックアップを取っている場合は除きます)。
特定のパッケージに対して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 |
Gentoo開発者達はこれらの位置の使用をサポートしていません。 これを行うときには注意してください。 package.unmaskやpackage.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 |
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 |
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
|
設定ファイルのマージを行うために、etc-updateを使うこともできます。 etc-updateはdispatch-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は終了します。
quickpkgを使えばシステムに既にマージされたパッケージのアーカイブを作成することができます。 これらのアーカイブは既にビルドされたパッケージとして利用できます。 quickpkgの実行は簡単です: アーカイブにしたいパッケージ名を追加するだけです。
例えば、curl、artsそしてprocpsをアーカイブするならこうします。
コード表示 3.1: quickpkg利用例 |
# quickpkg curl arts procps
|
ビルドされたパッケージは$PKGDIR/All(デフォルトでは/usr/portage/packages/All )に保管されます。 これらパッケージへのシンボリックリンクは$PKGDIR/<category>にあります。
あるカテゴリー/パッケージのみを選択的にアップデートし、その他のものを除外することができます。 これはrsyncがemerge --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-*/* |
注意して欲しいのはこれにより依存関係の問題を引き起こすかもしれないと言うことです。 許可されたパッケージが除外されたものに依存しているかもしれないからです。
Portageツリーを通して公式に利用できないebuildを利用するようにPortageに命令することができます。 サードパーティのebuildを保存しておく新しいディレクトリ(例えば/usr/local/portage)を作成します。 公式のPortageツリーと同じディレクトリ構造を使うようにしてください。
そして/etc/make.confのPORTDIR_OVERLAYが先ほど作成したディレクトリを示すように定義します。 これでPortageを使うときには、これらのebuildが次回emerge --syncを実行したときに削除/上書きされることなく利用できるようになります。
いくつかのoverlayで開発を行ったり、Portageツリーを破壊する前にパッケージをテストしたり、または単に様々なソースのunofficialなebuildを使用したりしたいパワーユーザ向けに、app-portage/gentoolkit-devはgensyncを提供します。これは、overlayリポジトリを最新状態に保つ手助けをしてくれるツールです。
gensyncを使えば、全てのリポジトリを一度に更新することができ、またそれらのうちのいくつかだけを選択することもできます。 それぞれのリポジトリは/etc/gensync/の設定ディレクトリに.syncsourceファイルがある必要があり、そこにはリポジトリの位置や名前、IDなどを記載します。
java(開発中のjava ebuild用)とentapps(あなたの会社のために社内開発されたアプリケーション用)という2つの追加リポジトリを所有していると仮定します。 この場合には、以下のコマンドを利用してこれらのリポジトリを更新することができます。
コード表示 2.1: リポジトリの更新にgensyncを使用する |
# gensync java entapps
|
5.c. 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 |
ebuildアプリケーションはPortageシステムの下層レベルインターフェースです。 このアプリケーションを使うと、与えられたebuildに反して特定の行動を実行することができます。 例えば、あなた自身によって個々のマージステップを実行することができます。
ebuildの利用はより開発目的です。 その為ebuildに関するより多くの情報はDevelopers Handbookにあります。 しかし、ここでは、あるソフトウェアをマージしているときにどんなebuildインスタンスがPortageによって呼び出されているのか、 そして実行を許可したいくつかのebuildを設定後の過程でどのようにして呼びだすのかについて説明します。
与えられたebuildファイルと共にebuildが呼び出されたときはいつでも、全てのファイルのチェックサムが付属するManifestかfiles/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のダイジェスト機能を使ってManifestとdigest-<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
|
ebuildのmerge機能を使うと取得、解凍、コンパイル、インストール、そしてqmergeコマンドを一度に実行できます。
コード表示 3.1: ソフトウェアのインストール |
# ebuild path/to/ebuild merge
|
いくらかのパッケージにはシステムにより適合させるためにパッケージを設定する指示が含まれています。 これらの指示は対話方式なので自動的には実行されません。 ebuildのconfig()機能を利用して設定ステップを実行するには、ebuildの設定機能を使います。
コード表示 3.2: パッケージの設定 |
# ebuild path/to/ebuild config
|
ebuildのバイナリパッケージや、RPMファイルでさえもPortageに作成するよう指示することができます。 ebuildのpackageかrpm機能を使ってこれらアーカイブを作成します。 これら2つの機能の間には少し違いがあります。
コード表示 3.3: パッケージの作成 |
(Portage互換のバイナリパッケージ) # ebuild path/to/ebuild package (RPMパッケージ) # ebuild path/to/ebuild rpm |
作成されたRPMファイルにはebuildの依存関係情報は含まれていません。
Portageやebuildアプリケーション、そしてebuildファイルについてのより詳しい情報については以下のmanページを調べてください。
コード表示 4.1: manページ |
$ man portage (Portage自身) $ man emerge (emergeコマンド) $ man ebuild (ebuildコマンド) $ man 5 ebuild (ebuildファイル構文) |
開発者関連の情報がDevelopers Handbookで取得できます。
注意: この文書は、読者がカーネルと使用しているハードウェアに対するモジュールを正確に設定してあることと、ハードウェアのインターフェース名を把握していることを想定しています。 さらに、eth0、またはeth1やwlan0やその他を設定している最中であることも想定しています。 |
注意: この文書は、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/rcでRC_VERBOSE="yes"を設定することをお薦めします。 |
ネットワークインターフェースの開始と停止に成功したら、Gentooの起動時に開始したいと思うでしょう。 ここにそれをする方法があります。 最後の行の"rc"コマンドは、現在のrunlevelでまだ開始されていないスクリプトを開始するためにGentooに指示します。
コード表示 1.4: 起動時にネットワークインターフェースを設定する |
# rc-update add net.eth0 default # rc |
config_eth0変数が、インターフェースの設定の要です。 config_eth0は、インターフェース(この場合はeth0)設定用の高度な設定値のリストです。 設定値のリストに含まれる各コマンドは、順に実行されます。 一つでもコマンドが動作すれば、そのインターフェースは正常であると判断されます。
以下は、あらかじめ備わっている設定値のリストです。
| コマンド | 説明 |
| null | 何もしません |
| noop | インターフェースが有効になっていてアドレスが割り当てられていたならば、 その時はこの設定を無視します |
| IPv4かIPv6のアドレス | インターフェースに指定されたアドレスを追加します |
| dhcp、adsl、apipa(もしくはサードパーティのモジュールが要求するカスタムコマンド) | コマンドを供給するモジュールを実行します。例えばdhcpは、dhcpcd、dhclient、pumpのうちのどれか一つである、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モジュールを使用して一つ以上のアドレスを追加する場合、二つ目以降のアドレスの各々に対しインターフェースの別名が生成されます。 よって上二つの例では、インターフェースeth0、eth0:1、eth0:2が得られます。 カーネルとその他プログラムがeth0としてeht0:1とeth0:2を扱う場合、これらのインターフェースでは何も特別なことはできません。 |
重要: fallback順は重要です! nullオプションを指定していないと、apipaコマンドは、noopコマンドが失敗したときだけ実行されます。 |
/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.eth0とnet.eth1に依存しているnet.br0の場合はどうでしょうか。 net.eth1は、ブリッジに追加する前に設定される必要がある無線もしくはPPPデバイスかもしれません。 その場合、net.loへのシンボリックリンクとしての/etc/init.d/net.br0では実現できません。
この状況への答えは、/etc/conf.d/netにdepend()関数を書くことです。
コード表示 2.1: /etc/conf.d/netでのnet.br0の依存設定 |
# 現行のスクリプトに則って、すべての依存関係(use、after、before)が使用できます
depend_br0() {
need net.eth0 net.eth1
}
|
依存関係についての詳しい解説は、GentooハンドブックのWriting Init Scriptsを参照してください。
変数名は可変です。 通常は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に設定します) |
現在、モジュール構造のネットワーク接続スクリプトをサポートしています。 これにより、既存のものと互換性を保ちながら、新しいインタフェースの種類や設定モジュールのサポートを簡単に追加できます。
モジュールが必要とするパッケージがインストールされていれば、モジュールはデフォルトでロードされます。 ここでまだインストールされていないパッケージのモジュールを指定すると、インストールする必要があるパッケージがあることを示すエラーとなります。 理想は、同一サービスを提供する二つ以上のパッケージをインストール済みで、その中の一つを選ぶ必要があるときにだけモジュール設定を使用することです。
注意: ここで紹介したすべての設定は、他に規定がなければ、/etc/conf.d/netに書かれています。 |
コード表示 1.1: モジュール選択 |
# ifconfigではなくiproute2を選択 modules=( "iproute2" ) # 特定のインタフェースに対し別のモジュールも指定できます # ここではdhcpcdではなくpumpを選択しています modules_eth0=( "pump" ) # 使用しないモジュールの指定もできます - 例えば無線LANの設定を制御するために、 # supplicantもしくはlinux-wlan-ngを使用しているかもしれません。 # にもかかわらず、接続するESSIDごとにネットワーク設定を指定したい場合 modules=( "!iwconfig" ) |
現在、ifconfigとiproute2の二つのインタフェースハンドラを提供しています。 ネットワークの設定のどんなことをするのにも、これらのうちの一つが必要です。
ifconfigは、今のGentooのデフォルトであり、システムプロファイルに含まれています。iproute2は、より強力で柔軟なパッケージですが、デフォルトでは含まれていません。
コード表示 2.1: iproute2をインストールする |
# emerge sys-apps/iproute2 # 両方がインストールされている場合、ifconfigではなくiproute2を選択する modules=( "iproute2" ) |
ifconfigもiproute2もどちらもよく似たことをするので、基本設定を相互に動作するようにできます。 例えば、以下の抜粋コードのどちらも、どちらを使用しているかに関係なく動作します。
コード表示 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" )
|
DHCPは、DHCPサーバからネットワーク情報(IPアドレス、DNSサーバ、ゲートウェイ、その他)を取得する手段です。 これは、ネットワーク上で稼動中のDHCPサーバが存在する場合、DHCPを使うことを各クライアントに指示する必要があり、それが自動的にネットワークを設定するということを意味します。 もちろん、DHCPを使えるようになる前に、必要なら無線やPPPなど、他の設定をする必要はあります。
DHCPの機能は、dhclient、dhcpcd または 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" # アドレスのみ取得します |
注意: dhcpcdとpumpは、デフォルトで現在のホスト名をDHCPサーバに送信します。 よって、これに関して何も指定する必要はありません。 |
最初に、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" ) |
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 } |
ブリッジをサポートするには、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 } |
重要: 複数のブリッジ設定を行う場合、変数名を参照してください。 |
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" |
トンネリングをするには、インタフェースハンドラで実現できるので、何も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" ) |
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設定を行う場合、変数名を参照してください。 |
現在、wireless-toolsやwpa_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が使えるかもしれません。 |
WPA Supplicantとは、 WPAが有効なアクセスポイントへの接続を可能にするパッケージです。 これはまだベータ版なのでセットアップはかなり変わりやすいですが、ほとんどの部分でうまく動作します。
コード表示 2.1: wpa_supplicantのインストール |
# emerge net-wireless/wpa_supplicant
|
重要: wpa_supplicantを動作させるにはカーネルでCONFIG_PACKETを有効にしなければなりません。 |
では、wpa_supplicantをwireless-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/netにiwconfig_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" } |
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_apsとunique_apの選択を行います。 blacklist_apsはpreferred_apsと同じような動作を行います。 unique_apにはyesかnoが設定され、 2番目の無線インターフェースが1番目と同じアクセスポイントへ接続できるかを決定します。
コード表示 3.3: blacklist_apsとunique_apの例 |
# 決して接続したくないアクセスポイントを記述します blacklist_aps=( "ESSID3" "ESSID4" ) # 2つ以上の無線カードを持っているのなら、それぞれのカードが # 同じアクセスポイントと接続することを許可するかしないかを決定します # 値は"yes"と"no"です # デフォルトは"yes"です unique_ap="yes" |
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アドレスをリセットしません。いくらかのドライバでは接続の解放やテスト時に品質レベルをリセットしません。MAC、qualityとallが設定可能です。 |
| scan_mode_eth0 | いくつかのドライバではad-hocモードでスキャンを行うため、スキャンが失敗したらここでad-hocの設定を試みます | |
| iwpriv_scan_pre_eth0 | スキャン前にいくつかのiwprivコマンドをインターフェースへ送信します。詳細はiwprivのマニュアルを参照してください。 | |
| iwpriv_scan_post_eth0 | スキャン後にいくつかのiwprivコマンドをインターフェースへ送信します。詳細はiwprivのマニュアルを参照してください。 |
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" ) |
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
}
|
注意: 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()関数では利用できません。 |
コンピュータを持って常に移動する場合、いつもイーサネットケーブルがあるわけでも、ケーブルが繋がっているわけでも、アクセスポイントが利用可能なわけでもないかもしれません。 さらにイーサネットケーブルが接続されたりアクセスポイントを発見したりしたときに、自動でネットワークが使えるようにしたほうがいいかもしれません。
ここには、このようなネットワーク管理をしやすくするいくつかのツールがあります。
注意: この文書ではifplugdに関連したことだけ説明しますが、 netplugのような代替もあります。 netplugは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 を見てください。
このドキュメントの内容は Creative Commons - Attribution / Share Alikeライセンスです。