Gentoo Linux

(作成:2006/05)

新しく組んだPenM PCでDebianが動かない。悲しいのでちょっとGentooに浮気してみたら、サクッと動作しよった。こりゃぁ良いや、ってんで、今回はGentooでサーバを立ててみようという話。
Gentoo Linuxでは、Portageてやつでパッケージ管理をしている。こいつはPythonとBashで管理されたもので、必要/不要な機能を事前に設定してソースからコンパイルしてくれる、らしい。なもんだから、所持するサーバに特化したシステムを構築することができる。 良いねぇ。Debianの頃は出来上がったバイナリを管理してたから、いくら強力な内部システムを持ったCPUだのChipSetでPCを構築しても、そこまで特化されてなかったからねぇ。ちょっと気に入ったかも。

さて、そんな感じで導入までの流れをまとめてみる。

インストール(CD bootから最低限の環境整備まで)

結構細かな作業が多くて最初は面倒だけど、やってると中々楽しい。

Live CD boot

日本ユーザグループからisoファイルを入手。 最新のものがいい。 releases/x86/2006.0/livecd/ 以下から入手すれば良いんじゃないかな。 .DIGESTS ファイルでMD5チェックサムのチェックが出来る。そういやチェックしてないや。まぁ良いや。

Windowsなりで焼き込んだらそこからboot。ウチとこの場合はVGA出力しか出来んので、以下のようにしてコンソールを立ち上げる。

boot: gentoo-nofb nox

心配なんで古いNICを挿してネットワークに繋げようと思ったけど、OnBoardEtherも問題無く認識したんで要らないかも。どうにも認識しなくて、他にモジュールが必要な場合はログイン後に modprobe すればOK。
DHCPでアドレスが割り振られてるなら、 ifconfigpingなんかでネットワーク確立されてるか確認。出来てたらOK。そうでなければモジュールだのネットワーク設定だの色々とどうぞ。
てのもちょっと薄情なんで、ネットワークの設定だけ。まーサーバだし、固定アドレス振るだろうし。 インストール時の一時的な設定なので、コマンドライン上で以下のように。

# ifconfig eth0 192.168.1.1 broadcast 192.168.1.255 netmask 255.255.255.0 up
# route add default gw 192.168.1.100

あとは /etc/resolv.conf の設定。この時点では nano くらいしか使えない。

#### /etc/resolv.conf

nameserver 192.168.1.100

事前準備

HDDの性能を見てみる。

# hdparm -tT /dev/sda

/dev/sda:
 Timing cached reads:   3592 MB in  2.00 seconds = 1795.05 MB/sec
 Timing buffered disk reads:  200 MB in  3.02 seconds =  66.24 MB/sec
#

ウチとこのはSATA HDDなんで、SCSIディスクとして認識されるみたい。 SATA用に何か調整できるのかな。ちょっと調べてないので、取り敢えず保留。

次、rootパスワードとユーザの作成。インストール時の一時的なものとはいえ、まぁ一応。

# passwd
New password:
Re-enter password:

# useradd -m -G users riyo
# passwd riyo
New password:
Re-enter password:

さて、サーバ監視用の7.1インチディスプレイだと目が疲れてきた、つーか何故か垂直同期が取れてない気がするのでsshでリモート接続してインストールを続行することに。

# /etc/init.d/sshd start
...

したらクライアントPCからSSHでリモート接続できるんで、それで。

ファイルシステム設定

いつも通り。パーティションをさくっとちょん切ろう。

# fdisk /dev/sda
...

今回は200Gあるんで、以下のようにちょん切ってみた。 ルートパーティションをBootableにするのを忘れずに。

Device Mount Size Filesystem
/dev/sda1 / 10G ext3
/dev/sda2 swap 0.5M swap
/dev/sda3 /var 3.95G ReiserFS
/dev/sda4 /opt 150G ReiserFS

上記の通りFilesystemも設定するので、以下のように初期化する。

# mke2fs -j /dev/sda1
...
# mkswap /dev/sda2
...
# swapon /dev/sda2
# mkreiserfs /dev/sda3
...
# mkreiserfs /dev/sda4
...

さてマウント。インストール段階では /mnt/gentoo/ 以下に構築するので、こんな風に。

# mount /dev/sda1 /mnt/gentoo
# mkdir /mnt/gentoo/var
# mount /dev/sda3 /mnt/gentoo/var
# mkdir /mnt/gentoo/opt
# mount /dev/sda4 /mnt/gentoo/opt

で、 /mnt/gentoo/ 以下にシステムを構築していくわけだけど、昔はstage1~stage3までよく判らん作業が続いたような気がするんだけど。ドキュメントによると、stage3からの構築で良いみたい。
Gentoo Linux Document

昔のインストーラとの対応なんだろうけど、stage切り分けする必要がなくなったなら名称変えれば良いのに。さておき。 まずはstagetarballのダウンロード。 wget でDLする。先刻と同じく日本ユーザグループから。今度は releases/x86/2006.0/stages/ 以下の、 stage3-*** なるファイル。
Gentoo Linux Users Group Japan

# cd /mnt/gentoo/
# wget http://mirror.gentoo.gr.jp/releases/x86/2006.0/stages/stage3-i686-2006.0.tar.bz2
...
# wget http://mirror.gentoo.gr.jp/releases/x86/2006.0/stages/stage3-i686-2006.0.tar.bz2.DIGEST
...
# md5sum -c stage3-i686-2006.0.tar.bz2.DIGESTS
stage3-i686-2006.0.tar.bz2: OK

今度はMD5チェックサムでチェックしてみた。 OKだったら解凍。

# tar xvfjp stage3-i686-2006.0.tar.bz2
...

Portageインストール

次、Gentooのパッケージ管理であるPortageをインストール。しかしこれ、ウチはインストールし忘れた気がするんだけど。。。? 一先ずDL。

# wget http://mirror.gentoo.gr.jp/snapshots/portage-latest.tar.bz2
...
# wget http://mirror.gentoo.gr.jp/snapshots/portage-latest.tar.bz2.md5sum
...
# md5sum -c portage-latest.tar.bz2.md5sum
portage-latest.tar.bz2: OK

OKだったら解凍。

# tar xvfj portage-latest.tar.bz2
...

コンパイルオプションも設定する。 大事なのは CFLAGS MAKEOPTS USE の設定。 gcc3.4からはPenM用のフラグが出来たみたい。そんなもんで、ちょっと変更してみた。
MAKEOPTS は平行コンパイルの数を指定する。CPUコア + 1 が無難、らしい。
USE はちょいと面倒。手抜きも出来るけど。要は必要/不要な機能を指定する。頭に - を付ければ不要な機能。多分そんなに細かく設定する必要は無いけど、判るモノについては付けてあげれば良いんじゃないかな。

#### /mnt/gentoo/etc/make.cfg

CFLAGS="-O2 -march=pentium-m -pipe"
CHOST="i686-pc-linux-gnu"
CXXFLAGS="${CFLAGS}"
MAKEOPTS="-j2"

USE="-X -alsa apache2 -apm acpi -arts berkdb -bonobo -canna cdr cjk -dga -directfb \
-dri dvd dvdr -esd -freewnn -gb gd gif -glut -gnome -gpm -gtk -gtk2 -gtkhtml -joystick \
jpeg jpeg2k -kde -kdeenablefinal -kdexdeltas -ldap libwww mmx mng -motif -mozilla \
-mule mysql -nas -netboot nls -nsplugin pam -pcmcia perl php png python -qt -quicktime \
ruby samba sasl spl sse sse2 ssl -tcltk tcpd tiff tokenizer unicode usb -v4l -wxwindows \
-xine -xinerama -xmms -xosd xpm -xv "

続いてMirror siteの選択。日本のサイトを選択しとけばOK。

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

Portage更新用rsyncサーバも選択する。

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

インストール(マシン環境での環境構築からGrub bootまで)

ここまで構築したら、以降は実際にその環境で作業をしていく。

chroot

まずはマシン環境でのrootパスワード設定。

# passwd
New password:
Re-enter password:

CD bootで取得できている環境を引き継ぐため、一先ずリゾルバをコピーしとく。

# cp -L /etc/resolv.conf /mnt/gentoo/etc/

/proc//dev/ をマウント。

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

chroot

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

最後のは、まぁ判り易いようにしてるだけなんであんまし気にしない。

Portage設定

Portageの更新。

# emerge --rsync
...

かなり時間掛かるので一服して待つ。
終わったらまずはprofileの確認。今回はx86環境でkernel 2.6を使うつもりなので、以下のようになってればOK。

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

Localeの設定。大して設定する必要は無い筈だけど。日本語が含まれてりゃ良いんじゃないかな。

#### /etc/locales.build

en_US/ISO-8859-1
en_US.UTF-8/UTF-8
ja_JP.EUC-JP/EUC-JP
ja_JP.UTF-8/UTF-8
ja_JP/EUC-JP
en_HK/ISO-8859-1
en_PH/ISO-8859-1
...

カーネル設定

タイムゾーン設定。JST使おう。

# cp /usr/share/zoneinfo/Japan /etc/localtime

kernelソースのインストール。 -docxorg だの他パッケージの依存関連をインストールしないためのフラグ。 symlink/usr/src/linux リンクを生成してくれる。大して必要無いかも。

# USE="-doc symlink" emerge gentoo-sources

kernelの構築。今回はSATAだのMarvel Ethernetだの新環境が多いんで、 CD boot 時の環境を引き継いで構築できる genkernel を使って楽することに。

# emerge genkernel
...

設定を引き継ぐ。

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

今回はext3とReiserFSをファイルシステムとして用いる。見たところ設定ではこれらはデフォルトで有効になってたけど、確認のために一度 makeconfig を介して実行しよう。

# genkernel --menuconfig all
...

更に各種デバイスをサポートさせるために、 coldplug てのを導入。

# emerge coldplug
...
# rc-update add coldplug boot

モジュールの設定。今読み込んでるモジュール類を全て読み込ませればOKなのは間違い無い。よく判らなんだら、そうすれば良いんじゃないかな。以下のコマンドで表示されるものを /etc/modules.autoload.d/kernel-2.6 に記述しちゃえ。

# lsmod
...

システム設定

そろそろ面倒臭くなってきたかも。。。おっと失礼。コマンドラインで自分で設定していくのは、充実感はあるものの冗長やね。
キーマップ設定。日本語106キーボードが一般的かな。

#### /etc/conf.d/keymaps

KEYMAP="jp106"

...

ハードウェアクロック設定。ローカル設定にした方が良いと思われ。

#### /etc/conf.d/clock

#CLOCK="UTC"
CLOCK="local"

マウントポイントの設定。ウチとこじゃこんな感じになった。

#### /etc/fstab

/dev/sda1               /               ext3            defaults,noatime        0 1
/dev/sda2               none            swap            sw                      0 0
/dev/sda3               /var            reiserfs        defaults                0 2
/dev/sda4               /opt            reiserfs        defaults                0 2

/dev/cdroms/cdrom0      /mnt/cdrom      iso9660         noauto,ro               0 0

proc                    /proc           proc            defaults                0 0

shm                     /dev/shm        tmpfs           nodev,nosuid,noexec     0 0

ネットワーク情報の設定。サーバなんで、この辺しっかりと付けてあげよう。

####  /etc/conf.d/hostname

HOSTNAME="oni"
#### /etc/conf.d/domainname

DNSDOMAIN="hyakki.local"
NISDOMAIN=""
#### /etc/conf.d/net

config_eth0=("192.168.1.1 netmask 255.255.255.0 brd 192.168.1.255")
routes_eth0=("default gw 192.168.1.100")
## 因みにDHCPだとこんな感じらしい。
#config_eth0=("dhcp")
#dhcp_eth0=("nodns nontp nonis")
#### /etc/hosts

127.0.0.1       localhost       oni

サービス化。ついでだから sshd も。

# rc-update add net.eth0 default
...
# rc-update add sshd default
...

システム設定。この時点では変えなくて良いけど、後でvim導入したら EDITOR は変えたいね。

#### /etc/rc.conf

EDITOR="/bin/nano"
#EDITOR="/usr/bin/vim"

各種パッケージの導入

ここではシステムに関わる最低限のものだけ。emerge で導入。

  • syslog-ng
  • vixie-cron
  • slocate
  • reiserfsprogs

うち syslog-ng, vixie-cron はdefaultランレベルでサービス化しとくこと。

grub導入

さくっと導入。

# emerge grub
...

grubメニュー設定。以下、ウチとこの環境での設定。

#### /boot/grub/grub/conf

timeout 30

default 0

fallback 1

title=Gentoo Linux
root   (hd0,0)
kernel /boot/kernel-genkernel-x86-2.6.16-gentoo-r7 \
root=/dev/ram0 init=/linuxrc ramdisk=8192 \
real_root=/dev/sda1 udev
initrd /boot/initramfs-genkernel-x86-2.6.16-gentoo-r7

kernelinitrd で指定するものについては、それぞれ /boot/ 以下を参照のこと。

grub-install の前に、現在 chroot して作業をしているため、マウント済ファイルシステムのリストを作ってgrubに教えてやる必要がある。

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

grub-install 。これがまた矢鱈と時間が掛かるので再び一服。

# grub-install /dev/sda
...

ここまできたら再起動。

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

順調に再起動出来れば、後は普通のLinuxと殆ど変わらない。Portageでパッケージをごりごりインスコしてサーバを組み上げよう。

乙華麗。