USE="mysql"でemerge --newuse worldしたので、apache2、php、mysqlによるxoopsが使える環境になりました。 Webサーバを公開するにあたり、ダイナミックDNSを使うことにします。
メジャーなところで、dyndns.comに登録しました。homelinux.comというサブドメインを使ってmomomo.homelinux.comとしました。(現在は利用していません)apacheの設定を少しばかり変更します。
/etc/apache2/httpd.conf
#AddDefaultCharset ISO-8859-1
AddDefaultCharset EUC-JP
バーチャルホストの機能を使い、外からのmomomo.homelinux.comでアクセスされた時のドキュメントを/var/www/momomo下に、LANからプライベートドキュメントとしてアクセスするドキュメントをデフォルトの/var/www/localhost/htdocs下に置くことにします。
/etc/apache2/vhosts.d/00_default_vhostを編集して
NameVirtualHost *:80
ServerAdmin webmaster@momomo.homelinux.com
DocumentRoot /var/www/momomo
ServerName momomo.homelinux.com
ErrorLog /var/log/apache2/momomo-error.log
CustomLog /var/log/apache2/momomo-access.log common
ServerName kuro
DocumentRoot "/var/www/localhost/htdocs"
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from 192.168.11.0/24
これで、LAN内からhttp://kuro/でアクセスした時はプライベートなドキュメントに、http://momomo.homelinux.com/でアクセスされた時は公開用のドキュメントにと、振り分けられるわけです。
名前ベースのバーチャルホストを使用するには、注意が必要です。 Allow from 192.168.11.0/24とLAN内からのみのアクセスに限定しないと、ちょっとしたおまじないで、プライベートなはずのhttp://kuro/にアクセスされてしまうからです。デフォルトランレベルに登録して
# rc-update add apache2 default
apacheを起動します。
# /etc/init.d/apache2 start
次に、ルータの設定で、ポート80を玄箱に向けて、外からアクセスできるようにします。 DDNSクライアントを立ち上げるところですが、ルータにその機能があったのでDDSNの設定もルータにて行いました。 まだコンテンツまったくなしでつまらないですが、良かったら試しにアクセスしてみて下さい。(現在稼働していません)
http://momomo.homelinux.com/
パワー不足の玄箱でGentooを運用して行くには、少しでもコンパイルの速度を上げないとGentooが生きて来ないだろう、ということで・・・
ボロPC(とは言え、Pentium III 800MHz)に、コンパイルをお手伝いさせようと、前回は、PowerPC(玄箱)のコンパイル環境をPentiumeIII上に構築したわけです。
今回は、分散コンパイルさせるために、distccの導入です。
既に、玄箱には、distccは導入してあるので、ボロPCにも入れます。ついでに、ccacheも入れてしまいます。
ボロPCで:
# emerge distcc ccache
色々と試行錯誤がありましたが、最終的に次のようになりました。
玄箱側の設定:
/etc/make.confの内容:
CFLAGS="-O2 -mcpu=603e -fno-strict-aliasing -pipe -fsigned-char"
CHOST="powerpc-unknown-linux-gnu"
CXXFLAGS="${CFLAGS}"
PORTDIR=/var/portage
DISTDIR=/var/portage/distfiles
PKGDIR=/var/portage/packages
RPMDIR=/var/portage/rpm
PORTDIR_OVERLAY="/var/overlays/kurobox"
RSYNC_EXCLUDEFROM=/etc/portage/rsync_excludes
GENTOO_MIRRORS="http://mirror.gentoo.gr.jp/"
SYNC="rsync://192.168.11.101/gentoo-portage"
PORTAGE_TMPDIR=/var/tmp
MAKEOPTS="-j6"
FEATURES="ccache distcc"
DISTCC_DIR="${PORTAGE_TMPDIR}/.distcc"
CCACHE_SIZE="2G"
CCACHE_DIR="/var/tmp/ccache"
ホストの指定:
# distcc-config --set-hosts 192.168.11.101
/usr/lib/distcc/powerpc-unknown-linux-gnu-wrapperを次の内容で新規に作成する。
#!/bin/bash exec /usr/lib/distcc/bin/powerpc-unknown-linux-gnu-g${0:$[-2]} "$@"
これは、powerpc-unknown-linux-gnu-gccのようにフルネームではなく、gccと短い名前で呼ばれたときに、フルネームで呼ばれたかのように見せかけるラッパーです。
コンパイラが起動されたときにdistccを実行するように、シンボリックリンクをはります。
# cd /usr/lib/distcc/bin
# chmod a+x powerpc-unknown-linux-gnu-wrapper
# ln -s powerpc-unknown-linux-gnu-wrapper c++
# ln -s powerpc-unknown-linux-gnu-wrapper cc
# ln -s powerpc-unknown-linux-gnu-wrapper g++
# ln -s powerpc-unknown-linux-gnu-wrapper gcc
# ln -s /usr/bin/distcc powerpc-unknown-linux-gnu-c++
# ln -s /usr/bin/distcc powerpc-unknown-linux-gnu-g++
# ln -s /usr/bin/distcc powerpc-unknown-linux-gnu-gcc
デフォルトランレベルにdistccとccacheを登録しておきます。
# rc-update add distcc default
# rc-update add ccache default
ボロPC側の設定:
/etc/make.confの内容:
CFLAGS="-Os -march=pentium4 -pipe"
CHOST="i686-pc-linux-gnu"
CXXFLAGS="${CFLAGS}"
GENTOO_MIRRORS="http://mirror.gentoo.gr.jp"
SYNC="rsync://rsync.jp.gentoo.org/gentoo-portage"
PORTDIR_OVERLAY="/usr/local/portage"
PORTAGE_TMPDIR=/var/tmp
MAKEOPTS="-j2"
FEATURES="ccache"
CCACHE_SIZE="2G"
CCACHE_DIR="/var/tmp/ccache"
こちらは、お手伝いをするだけなので、設定はこれだけです。
玄箱と同じくデフォルトランレベルに登録しておきます。
# rc-update add distcc default
# rc-update add ccache default
以上で、設定は終わりです。
それぞれのマシンでdistccとccacheを起動した後、玄箱側で何かをemergeしてボロPC側で、powerpc-~、cc1・・・などのプロセスが実行されれば、導入は成功です。
コンパイル環境は、ひとまず整ったので、これからは、必要なパッケージを導入して行きます。 まずは、軽いところから、ntpを。
# emerge ntp
(多少は速くなっているのかな・・・) /etc/ntpd.confの編集:
server [ntpサーバの指定] (一番近いであろうプロバイダのNTPサーバを指定しました)
driftfile /var/lib/ntp/ntp.drift
restrict default nomodify nopeer
restrict 127.0.0.1 # LAN内からアクセスできるようにして、サービスを公開
restrict 192.168.11.0 mask 255.255.255.0
nomodify
nopeer
notrap
/etc/conf.d/ntp-clientの編集:
NTPCLIENT_CMD="ntpdate"
NTPCLIENT_OPTS=" -b -u [NTPサーバの指定]"
NTPCLIENT_TIMEOUT=30
デフォルトランレベルに登録しておきます。
# rc-update add ntpd default
# rc-update add ntp-client default
ボロPC側でも、同様の手順でntpを導入し、[NTPサーバ]指定の箇所には、玄箱のアドレスを指定して、LAN内を同期させるようにしました。
ひさびさのGentooいじりの投稿です。Gentoo玄箱は、立ち上がったものの、パッケージ導入の時間のかかること。
少しでも、このボトルネックを解消しようと、ボロPCにクロスコンパイル環境を構築して、distccを使った分散コンパイルを使用するという計画です。
なかなかうまくいかなかったのですが、なんとか動きだしたので、ご報告させていただきます。
ツールチェーンの構築は、何度か経験はあるのですが、「なんか面倒だった」という記憶だけ残っていて、すっかり忘れていました。 いろいろ調べていると、crossdevというツールがあるらしい。今回はこれを試してみることにしました。
# emerge crossdev
このツールは、コマンド一発で、ツールチェーンを構築してくれる優れものです。 まず、最初にやらなければならないのが、ターゲットマシン(すなわち玄箱)のツールチェーン環境のバージョンを調べることから。現在の玄箱にインストールされているバージョンは、次のとおりです。
gcc 3.4.4-r1
binutils 2.16.1
kernel(header) 2.4.26-r1
glibc 2.3.5-r3
次に、crossdevを使って
# crossdev -t powerpc --g 3.4.4-r --b 2.16.1 --k 2.4.26-r1 --l 2.3.5-r3
で後は、待つだけ。 のハズなのですが、configure中にエラーが出てしまうのです。ソースを見たり、検索でこんな事例はないか調べたり、まったく検討違いのことばかりの3日間。 結局、ボロPC(ホスト側)のビルドチェーンが玄箱のバージョンに対応できなかったのです。分かってしまえば、こんなもの、とほほ・・・
# emerge -uD system
を実行して、再度crossdevして、無事クロス環境の構築は完了。 crossdev、偉い! 次は、クロスでの、分散コンパイル環境の構築。
・・・(To be continued)
もしも、うまく起動しなかったら、どうしましょ?
私の場合は、起動はうまくいったのですが、先にも述べたとおり、rootパスワードの設定を忘れて、ログインできないことになってしまいました 。
えっ?!インストールのやり直し?
いえ、インストールCDを使って、復旧できます 。
インストールCDから、ブートして、ログインプロンプトが出るまで待ちます。
次に、ディスクをマウントして、chrootでGentoo環境に入ります。私の場合は、
# mount /dev/hda4 /mnt/gentoo
# cd /mnt/gentoo
# mkdir var boot
# mount /dev/hda1 boot
# mount /dev/hda3 var
procファイルシステムもマウントして、
# mount -t proc none /mnt/gentoo/proc
chrootして、Gentoo環境に入ります。
# chroot /mnt/gentoo /bin/bash
# env-update && source /etc/profile
ここで、必要な作業を実行します。
後は、chrootから抜けて、再度リブートします。
# exit
# umount /mnt/gentoo/boot /mnt/gentoo/var /mnt/gentoo/proc /mnt/gentoo
# reboot
この方法は、カーネルの作成失敗、GRUBの設定ミスなどにも、応用がききますね。
ブートローダは、GRUBを使う。長い間、LILOに慣れてきたのですが、最近は、GRUBが趨勢のようです。
例によって、エマージして、インストール。
# emerge grub
/boot/grub/grub.confを編集して、
timeout 5
default 0
title Gentoo Linux 2.6.14-r5
root (hd0,0)
kernel /kernel-2.6.14-gentoo-r5 root=/dev/hda4
としました。
grubを起動して、MBRに書き込みます。
# grub --no-floppy
grub> root (hd0,0)
grub> setup (hd0)
grub> quit
これで、ようやく再起動できる状態になりました。
chrootから抜けて、ディスクをアンマウトしてリブートです。
# exit
# cd
# umount /mnt/gentoo/boot /mnt/gentoo/var /mnt/gentoo/proc /mnt/gentoo
# reboot
ほい!っと。
ブート前に、必要なシステムツールをインストールしておきます。
まずは、ログツール。sysklogd、sysklogd-ng、metalogの中から、metalogを使うことにします。
# emerge metalog
cronは、dcron、fcron、vixie-cronから、vixie-cronを選びました。
# emerge vixie-cron
slocateも、ここでインストールします。
# emerge slocate
次は、ブートローダをインストールします。
必要なシステム設定をします。
まずは、/etc/fstabを編集。
/dev/hda1 /boot ext2 noauto,noatime 1 2
/dev/hda4 / ext3 noatime 0 1
/dev/hda3 /var ext3 noatime 0 1
/dev/hda2 none swap sw 0 0
次は、ネットワークまわりを設定していきます。
/etc/conf.d/hostnameを編集。
HOSTNAME="xxxx"
/etc/conf.d/domainnameの編集。
DNSDOMAIN="example.com"
domainnameを自動実行スクリプトとして登録します。
# rc-update add domainname default
/etc/conf.d/netを編集して、ネットワークの設定します。
config_eth0=( "192.168.11.101 netmask 255.255.255.0" )
routes_eth0=( "default gw 192.168.11.1" )
ブート時にネットワークを有効にさせます。
rc-update add net.eth0 default
/etc/hostsは、とりあえずこのPCだけ、記述しておきます。
127.0.0.1 localhost
192.168.11.101 xxxx.example.com xxxx
ここらで、忘れずにrootパスワードを変更してきます(実は、これを忘れて、ログインできなかったのだ。
# passwd
New UNIX password:
Retype new UNIX password:
passwd: password updated successfully
デフォルトでは、使いにくいので、KEYMAPを設定しておく。/etc/conf.d/keymapsを編集して、
...
KEYMAP="jp106"
...
としておきます。
最後に、UTCは使用していないので、clockをlocalに設定します。
...
CLOCK="local"
...
やっと、カーネルの構築です。
その前に(準備が長いな・・・)タイムゾーンの設定か。
# ln -sf /usr/share/zoneinfo/Japan /etc/localtime
カーネルソースを持ってきます。
# emerge gentoo-sources
カーネルソースのバージョンの確認。
# ls -l /usr/src/linux
linux-2.6.14-gentoo-r5となっています。
# make menuconfig
で、カーネルのオプションを指定していくわけですが、よくわからないものは、デフォルトのままにして、以下のものだけを変更しました。
Processor family –> Pentium IIIに
Device Driver
–>Network device
–>Ethernet (10 or 100Mbit)
–><M>Inter(R) PRO/100M+ support
カーネルコンパイルだ、ふぅ。
# make && modules_install
/etc/modules.autoload.d/kernel-2.6を編集して、NICインターフェースのe100を追加しておきます。
さて、いよいよchrootするわけですが、その前にDNS情報のコピーと、procファイルシステムをマウントしておきます。
cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf
mount -t proc none /mnt/gentoo/proc
chrootの準備は整った(ハズ)。
# chroot /mnt/gentoo /bin/bash
環境を引き継ぐ。
# env-update
# source /etc/profile
次は、Portageの更新とやら・・・
# emerge --sync
必要なロケールだけ使用するように設定します。
echo "sys-libs/glibc userlocales" >> /etc/portage/package.use
/etc/locales.buildを編集して、以下のように設定します。
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