Debian化

結局以下の手順のページにしたがってやり直した

armの場合重要なのは、OABIとEABIがあるということ。
この場合レジスタの使われ方などが異なるため、同じCPUでコンパイルしても、同じコードにはならず、互換性もない。よってさまざまな部分で問題が生じる。それだけでなくEABIのカーネルでフォーマットしたファイルシステムをOABIのカーネルでマウントしるとファイルシステムを壊したりするらしい。ハックツールキットのDebianはEABIだが通常のDebianのパッケージはOABI、そういうわけでいろいろ問題があるらしい。

カーネルコンパイル再び

懲りずもせずカーネルコンパイルを行うことにする。今回は下調べを入念に行う。
今回参考にするのは以下のページ

手順は多少異なるがそこには目をつむることにする。

# apt-get install linux-source-2.6.18
# apt-get build-dep linux-source-2.6.18
# apt-get install libncurses5-dev
# cd /usr/src
# tar jxpf linux-source-2.6.18.tar.bz2
# cd /usr/src/linux-source-2.6.18

このあと上記URLで取得した.configをコピーし

# make oldconfig

これですべてエンターキーを押す。

# make menuconfig

Networking Support->Network Options->Network Packet Filteringにチェックを入れる
その下はNetwork Packet Filtering Debugging以外すべてモジュール、モジュール化できないものはデフォルトでコンパイルする。セーブしてmenuconfigを終了

# make-kpkg clean
# make-kpkg --initrd --revision=20071117-01 kernel_image

はたしてうまくゆくだろうか……

うまくいかない

コンパイルは無事終了。/usr/srcの下にパッケージが作成される

# ls ../linux-image-*.deb
linux-image-2.6.18_20071117-01_arm.deb

ただしこのままではuImageが作成されていないのでmake uImageでU-Boot用のブートイメージを作成しておく

# make uImage

これも無事終了。次に作成されたパッケージのインストール

# apt-get install \
initramfs-tools udev yaird libvolume-id0 klibc-utils \
busybox libhtml-template-perl dash libparse-recdescent-perl \
libklibc
# dpkg -i linux-image-2.6.18_20071117-01_arm.deb
# mv /boot/uImage.buffalo /boot/uImage.buffalo.org
# cp linux-source-2.6.18/arch/arm/boot/uImage \
/boot/uImage.buffalo
# make modules_install
# reboot

結果は……ブートしない。どうやら2.6.18ではうまくゆかない。リンク先にしたがって、おとなしく2.6.12でコンパイルしたほうがいいみたいだ。

仮想マシンの物理HDDをイメージに変更

ここ数カ月セカンドマシンがやたらとうるさい。電源を入れてしばらくするとブーン、ブーンと三秒くらいの周期で音がなる。原因を調べるため、蓋をあけて触診する。どうやら原因はMaxtorSeagateの2台のHDDらしい。どうやらこの2台は早々に外したほうがよさそう。実はこの2台のHDDは、Xen仮想マシン用に割り当てている。そこで仮想マシンに割り当てているHDDをイメージ化することにした。参考にしたURLはここ
Domain-Uとして割り当てている仮想マシンはdb1、db2、webの3台。このうちdb1、db2については、それぞれ物理HDDを用いている。物理HDDをイメージに落とし込み仮想化後、仮想マシンのディスクを物理ディスクからイメージに変更することとする。
/etc/xen/db1によると

disk=['phy:/dev/hdb1,xvda,w', ]

/etc/xen/db2によると

disk=['phy:/dev/hdc1,xvda,w', ]

/var/xen以下にdb1.img, db2.imgという名前でHDDイメージをファイルに書き込む

# cd /var/xen
# dd if=/dev/hdb1 of=db1.img
# dd if=/dev/hdc1 of=db2.img

終了後/etc/xen/db1を以下のように変更

disk=['tap:aio:/var/xen/db1.img,xvda,w', ]

/etc/xen/db2を以下のように変更

disk=['tap:aio:/var/xen/db2.img,xvda,w', ]

仮想マシンの再起動

# xm create db1
# xm create db2

あとはxm consoleで接続を確認して作業完了。

CentOS4.5にApacheをインストールする。またPHPに関しては、PHP5.2.5をインストールする。
以下でパッケージを調べる

# yum list | grep httpd
httpd.i386 2.0.52-32.3.ent.centos update
httpd-devel.i386 2.0.52-32.3.ent.centos update
httpd-manual.i386 2.0.52-32.3.ent.centos update
httpd-suexec.i386 2.0.52-32.3.ent.centos update
system-config-httpd.noarch 5:1.3.1-1 base

どうやら、2.0系がベースらしい。同様にPHPも調べる。こちらは4.3系がベース。
PHPに関してはとある事情で5系をインストールすることにする。

# yum -y install httpd

apr,httpd-suexec,apr-util,httpdがインストールされる。
一応インストールされたパッケージを調べる

# yum list installed | grep httpd'

開発者パッケージはインストールされていないようなのでインストールする。

# yum -y install httpd-devel

依存関係によりapr-devel,apr-util-devel, pcre-develが同時にインストールされる。
細かい設定などは以下が参考になる。

PHPのインストール
前準備
今回GD,mysql,pgclusterへの接続環境が必要なのでそれを用意しておく必要がある。ただし、pgclusterに関してはすでにインストール済みとする。GDに関してのみrpmでインストールする。

# yum -y install gd-devel

まずはphp4のパッケージをインストールしてphp --infoで標準の構成を調べる。

# yum -y install php

phpphp-pearがインストールされた。ここでphp --infoでphpのconfigureオプションを調べてみる。すると以下のようになっていた。

./configur \
--build=i686-redhat-linux-gnu \
--host=i686-redhat-linux-gnu \
--target=i386-redhat-linux-gnu \
--program-prefix= \
--prefix=/usr \
--exec-prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--sysconfdir=/etc \
--datadir=/usr/share \
--includedir=/usr/include \
--libdir=/usr/lib \
--libexecdir=/usr/libexec \
--localstatedir=/var \
--sharedstatedir=/usr/com \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--cache-file=../config.cache \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--enable-force-cgi-redirect \
--disable-debug \
--enable-pic \
--disable-rpath \
--enable-inline-optimization \
--with-bz2 \
--with-db4=/usr \
--with-curl \
--with-exec-dir=/usr/bin \
--with-freetype-dir=/usr \
--with-png-dir=/usr \
--with-gd=shared \
--enable-gd-native-ttf \
--without-gdbm \
--with-gettext \
--with-ncurses=shared \
--with-gmp \
--with-iconv \
--with-jpeg-dir=/usr \
--with-openssl \
--with-png \
--with-pspell \
--with-xml \
--with-expat-dir=/usr \
--with-dom=shared,/usr \
--with-dom-xslt=/usr \
--with-dom-exslt=/usr \
--with-xmlrpc=shared \
--with-pcre-regex=/usr \
--with-zlib \
--with-layout=GNU \
--enable-bcmath \
--enable-exif \
--enable-ftp \
--enable-magic-quotes \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-track-vars \
--enable-trans-sid \
--enable-yp \
--enable-wddx \
--with-pear=/usr/share/pear \
--with-imap=shared \
--with-imap-ssl \
--with-kerberos \
--with-ldap=shared \
--with-mysql=shared,/usr \
--with-pgsql=shared \
--with-snmp=shared,/usr \
--with-snmp=shared \
--enable-ucd-snmp-hack \
--with-unixODBC=shared,/usr \
--enable-memory-limit \
--enable-shmop \
--enable-calendar \
--enable-dbx \
--enable-dio \
--enable-mbstring=shared \
--enable-mbstr-enc-trans \
--enable-mbregex \
--with-mime-magic=/usr/share/file/magic.mime \
--enable-force-cgi-redirect \
--enable-pcntl

このうち必要なのは、mbstring、pgsql、mysql関係そのことを考えてコンパイルオプションを決める。コンパイルオプションを決めたら、phpを削除しておく。

# yum remove php

PHPに関しては以下からソースをダウンロード

# wget http://jp.php.net/get/php-5.2.5.tar.bz2/from/jp2.php.net/mirror
# tar jxf php-5.2.5.tar.bz2

configure --helpでconfigureオプションを調べる。関係ありそうなものは以下の通り
とりあえず今日はここまで。

玄箱ProをDebian化の初期状態に戻す…TT

カーネルコンパイルがうまくいかず元のバージョンに戻そうとしたがうまくゆかない。仕方なく初期状態に戻すことにした。
玄箱Proをハックしよう」の通りにU-Bootの画面で元に戻す

Marvell>> setenv bootargs_root root=/dev/mtdblock2 rw panic=5
Marvell>> setenv bootcmd 'nboot $(default_kernel_addr) 0
 $(nand_uImage_offset); bootm $(default_kernel_addr)'
Marvell>> setenv nand_boot yes
Marvell>> setenv bootargs $(bootargs_base) $(bootargs_root)
 $(bufflo_ver)
Marvell>> save
Marvell>> boot

これでうまくbootできた。次に内臓HDDを消去する。

# df -k
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/mtd2                65536     15968     49568  24% /
/dev/ram1                 8192       144      8048   2% /mnt/ram
/dev/sda4            309304924      1200 309303724   0% /mnt/disk1
/dev/mtd3               192512     69108    123404  36% /mnt/mtd
# umount /mnt/disk1
# dd if=/dev/zero of=/dev/sda1 bs=1 count=3
# dd if=/dev/zero of=/dev/sda2 bs=1 count=3
# dd if=/dev/zero of=/dev/sda3 bs=1 count=3
# dd if=/dev/zero of=/dev/sda4 bs=1 count=3
# fdisk /dev/sda

The number of cylinders for this disk is set to 38913.
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)

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

Command (m for help): d
Partition number (1-4): 2

Command (m for help): d
Partition number (1-4): 3

Command (m for help): d
Selected partition 4

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

Calling ioctl() to re-read partition table.
SCSI device sda: 625142448 512-byte hdwr sectors (320073 MB)
SCSI device sda: drive cache: write back
 sda:
SCSI device sda: 625142448 512-byte hdwr sectors (320073 MB)
SCSI device sda: drive cache: write back
 sda:
Syncing disks.

次に/mnt/mtdにDebian化で用いたファイルが残っているかどうか確認する。

# cd /mnt/mtd
# ls
ChangeMeDevHDD    ChangeMyUbootEnv  hddrootfs.tar.gz  uImage.buffalo

どうやら残っているようだ。
念のためreboot

# reboot

起動してきたら。背面にあるリセットボタンを長押しする。音がなってオレンジ色のランプが点滅を始める。
あとは数分まつ。もし10分近くまってもオレンジの点滅が消えない場合、/mnt/mtdの内容が壊れているか、HDDをうまく初期化できていない可能性がある。その場合には/mnt/mtdの内容をすべて消し、そのあとハックキットと玄人志向のCDからファイルをコピーしなおしてやり直す。

不要なサービスの停止

うちのセカンドマシンはXenがインストールされていて以下のような構成になっています。

一応基本的なモジュールと開発者用のツール&Xenのみをインストールしたのですが、メモリ1Gのマシンに3台のDomain-Uは厳しいので余計なサービスを停止することにします。以下のページを参考にしました

Domain-0(CentOS5.0)

  • xfs X用のフォントサーバ
  • rpcidmapd RPCを使う場合に必要。使用しないので停止。
  • rpcgssd RPCを使う場合に必要。使用しないので停止。
  • readahead_early キャッシュ内のファイルを前もって読みだす。メモリを考えると必要なし。
  • portmap PRC向けのダイナミックなポート指定デーモン。必要なし。
  • pcscd スマートカード用のデーモン。必要なし。
  • nfslock NFSを使わないので必要なし。
  • netfs NFSのマウントアンマウントを行う。必要なし。
  • hidd BlueToothを使わないので必要なし。
  • gpm コンソール用マウスサーバ。うざいだけなので停止しておく。
  • cups 印刷関連。必要なし。
  • bluetooth 名前のとおり。必要なし。
  • avahi-dnsconfd mDNS DNS-SDで用いる。通常は必要なし。IP-Phoneなどでは必要かもしれない。停止しておく
  • avahi-daemon 上記と同じ、必要なし。

Domain-U(CentOS4.5)
上記のDomain-0に加え

  • smartd
  • pcmcia
  • kudzu(脱着したハードの検出)
  • openibd(InfiniBand:グリッドコンピューティングなどのスパコンで使うバス)
  • autofs(自動的にマウントを行う)

を停止する。またpcscd,avahi-dnsconfd,avahi-daemonはインストールされていないのでoffの必要なし。

# chkconfig サービス名 off

を入力して、上記すべてをoffにしたのちrebootで再起動。無事終了。