(作成: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でアドレスが割り振られてるなら、 ifconfig
、 ping
なんかでネットワーク確立されてるか確認。出来てたら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ソースのインストール。 -doc
は xorg
だの他パッケージの依存関連をインストールしないためのフラグ。 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
kernel
、 initrd
で指定するものについては、それぞれ /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でパッケージをごりごりインスコしてサーバを組み上げよう。
乙華麗。