2007-11-22
2007-11-17 玄箱Proのカーネルコンパイル
■[玄箱Pro][Debian]カーネルコンパイル再び
懲りずもせずカーネルコンパイルを行うことにする。今回は下調べを入念に行う。
今回参考にするのは以下のページ
- http://kbpro-server.homelinux.org/blog/archives/2007/08/09-194736.php
- http://w3.quake3.jp/sushi-k/pool/kuropro/self/config_self
手順は多少異なるがそこには目をつむることにする。
# 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
はたしてうまくゆくだろうか……
■[玄箱Pro][Debian]うまくいかない
コンパイルは無事終了。/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でコンパイルしたほうがいいみたいだ。
2007-11-13
■[CentOS5][Xen]仮想マシンの物理HDDをイメージに変更
ここ数カ月セカンドマシンがやたらとうるさい。電源を入れてしばらくするとブーン、ブーンと三秒くらいの周期で音がなる。原因を調べるため、蓋をあけて触診する。どうやら原因はMaxtorとSeagateの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][PHP5]
CentOS4.5にApacheをインストールする。またPHPに関しては、PHP5.2.5をインストールする。
以下でパッケージを調べる
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
phpとphp-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オプションを調べる。関係ありそうなものは以下の通り
とりあえず今日はここまで。
2007-11-12
■[玄箱Pro][Debian]玄箱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からファイルをコピーしなおしてやり直す。
2007-11-11
■[玄箱Pro][Debian][カーネルコンパイル]
参考にしたのは以下のページ
- http://www.debian.org/releases/stable/i386/ch08s06.html.ja
- http://park15.wakwak.com/~unixlife/linux/de-kernel.html
- http://park15.wakwak.com/~unixlife/linux/de-kernel-pkg.html
# apt-get install kernel-package
# apt-get install libc6-dev
# apt-get install libncurses5-dev
# apt-get install module-init-tools
libc6-devを入れると自動的にlinux-kernel-headersもインストールされた。以下からソースを落としてくる。
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.1.tar.gz
$ tar zxvf linux-2.6.23.1.tar.gz
$ cd linux-2.6.23.1
$ make oldconfig
いろいろと聞いてくる。とりあえず全部エンター
$ make menuconfig
iptables関連を有効にしておく
$ make-kpkg clean
$ fakeroot make-kpkg --initrd --revision=custom.0.1 kernel_image
ここでエラー。どうやらfakerootがない。rootに戻ってインストール。
# apt-get install fakeroot
もう一度一般ユーザに戻ってmake-kpkg
$ make-kpkg clean
$ fakeroot make-kpkg --initrd --revision=custom.0.1 kernel_image
かなりの時間がかかる。無事カーネルパッケージの作成完了
$ cd ..
$ ls
linux-image-2.6.23.1_custom.0.1_arm.deb
このlinux-image-2.6.23.1_custom.0.1_arm.debをインストールする。以下はrootアカウントで実行
# dpkg -i linux-image-2.6.18-subarchitecture_custom.1.0_i386.deb
途中で以下のように怒られる
dpkg: dependency problems prevent configuration of linux-image-2.6.23.1:
linux-image-2.6.23.1 depends on initramfs-tools (>= 0.53) | yaird (>= 0.0.11) | linux-initramfs-tool; however:
Package initramfs-tools is not installed.
Package yaird is not installed.
Package linux-initramfs-tool is not installed.
dpkg: error processing linux-image-2.6.23.1 (--install):
dependency problems - leaving unconfigured
Errors were encountered while processing:
linux-image-2.6.23.1
initramfs-toolsをインストールしようとしたが、apt-get -f installしろと怒られる
# apt-get -f install
とりあえず以下のように表示される。
Setting up linux-image-2.6.23.1 (custom.0.1) ...
Running depmod.
Finding valid ramdisk creators.
Using mkinitramfs-kpkg to build the ramdisk.
# dpkg -i linux-image-2.6.23.1_custom.0.1_arm.deb
とりあえずうまくいったように見える。コンソールキットをつないでU-Bootからの起動を試みるがうまくゆかず。
仕方なしに、uImage.buffaloにもどして、dpkgを用いない方法で試すことにする。
以下のURLを参照
$ make clean
$ make uImage
時間がかかるのでちょっと休憩
"mkimage" command not found - U-Boot images will not be built
このエラー画面を見て納得。uImageはU-Bootで用いるイメージのことだったらしい。
道理でうまくゆかないわけだ。ちなみにmkimageをfindで調べたところ、
/usr/local/sbinにあるらしい。
PATH=/usr/local/sbin:$PATH; export PATH
として再び
$ make uImage
今度はうまく作成されたっぽい。
Kernel: arch/arm/boot/zImage is ready
UIMAGE arch/arm/boot/uImage
Image Name: Linux-2.6.23.1
Created: Sun Nov 11 18:42:57 2007
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 961100 Bytes = 938.57 kB = 0.92 MB
Load Address: 0x00008000
Entry Point: 0x00008000
Image arch/arm/boot/uImage is ready
つづいてモジュールのコンパイル
$ make modules
モジュールのコンパイル中に気づく、もしかしてdpkgを使って作成したカーネルイメージからmkimageを用いてuImageを作成できるのでは?
そこで調査すると以下のページを見つける
さっそくCtrl-Cでコンパイルを途中で止めrootになり試す
# cd /boot
# mkimage -l uImage.buffalo
Image Name: Linux-2.6.12.6-arm1
Created: Thu Feb 8 15:00:09 2007
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1736372 Bytes = 1695.68 kB = 1.66 MB
Load Address: 0x00008000
Entry Point: 0x00008000
# mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n "Linux-2.6.23.1-arm1 Ver0.1" -d vmlinuz-2.6.23.1 uImage.kurobox
Image Name: Linux-2.6.23.1-arm1 Ver0.1
Created: Sun Nov 11 19:10:19 2007
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 961104 Bytes = 938.58 kB = 0.92 MB
リブートしてU-Bootでストップ
Marvell>>setenv kernel 'uImage.kurobox'
Marvell>>boot
こんどはカーネルの読み込みまではうまくいったが上がってこない。
何かを根本的に間違っているのだろうか?
仕方ないので電源を強制的に切ってパラメータを元に戻す。
Marvell>>setenv kernel 'uImage.buffalo'
Marvell>>boot
どうやらカーネルのコンフィグから見直さないといけないようだ。時間がかかりそうなので今日の玄箱はここいらでやめておこう。
■[CentOS5][CentOS4.5]不要なサービスの停止
うちのセカンドマシンはXenがインストールされていて以下のような構成になっています。
- Domain-0 CentOS5
- Domain-U 3台仮想マシン上でCentOS4.5が動作
一応基本的なモジュールと開発者用のツール&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に加え
を停止する。またpcscd,avahi-dnsconfd,avahi-daemonはインストールされていないのでoffの必要なし。
# chkconfig サービス名 off
を入力して、上記すべてをoffにしたのちrebootで再起動。無事終了。
■[CentOS][RT107e]syslogの保存
ルータはログ機能を持っているが、ログの保存領域はせまいものが多い。そのため大抵はsyslogを使って、外部にログを吐きだす機能を持っている。ここでは、YamahaのRT107eを用いてsyslogの設定を行う。syslogを受け取るのは、CentOS5とする。
- 前準備
まずファシリティ名を決める。ファシリティ名はauth,authpriv,cron,daemon,ftp,kern,local0〜local7,lpr,mail,news,syslog,user,uucpを用いることができる。この値はコンパイル時に決められているようだ。
# man 3 syslog
とすれば詳しい説明を読むことができる。
余談になるがmanのあとの数字はマニュアルのセクション番号。セクション番号は通常以下のように決められている
話がそれたが、ファシリティとして、local6を用いることにする。
またログは/var/log/routerlogにとる。ログのローテーションも行う。
- CentOS側の設定
/etc/syslog.confに以下の行を追加する。ここで空白はスペースではなくタブでなければならないので注意!
# Save Router Messages
local6.* /var/log/routerlog
次にログローテーションの設定を行う。/etc/logrotate.d/syslogで行う。一行目の{の前に/var/log/routerlogを追加しておく。
また、リモートからログを受け取れるようにsyslog起動時のオプションに-rをつけるように変更する。/etc/sysconfig/syslogファイルのSYSLOGD_OPTIONSに-rを追加すればよい。
SYSLOGD_OPTIONS="-r -m 0"
またsyslogは514番のudpポートを使用するため、iptableなどを用いている場合には、このポートを開けておくこと!
syslogを再起動する。
/etc/init.d/syslog restart
- RT107eの設定
管理者モードでログイン後以下のコマンドを入力する。
# syslog host SYSLOGを取るサーバ名
# syslog facility local6
またcaution、infoのsyslogはデフォルトでは取られないので以下のコマンドを実行する。
caution(フィルタなどに引っかかったパケット)のsyslogを取る場合
# syslog caution on
infoのsyslogを取る場合
# syslog info on
デバック用のsyslogを取る場合
# syslog debug on
debugは大量のsyslogがとられるためデバックのときのみにしておいたほうが良い。