黒胡椒の雑記帳 このページをアンテナに追加 RSSフィード

2007-11-22

[][]Debian

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

armの場合重要なのは、OABIとEABIがあるということ。

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

2007-11-17 玄箱Proのカーネルコンパイル

[][]カーネルコンパイル再び

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

今回参考にするのは以下のページ

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

# 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でコンパイルしたほうがいいみたいだ。

2007-11-13

[][]仮想マシンの物理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

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化の初期状態に戻す…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

[][][]

参考にしたのは以下のページ

# 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もインストールされた。以下からソースを落としてくる。

root以外のユーザでログインしてソースをwgetで取得

$ 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

どうやらカーネルのコンフィグから見直さないといけないようだ。時間がかかりそうなので今日の玄箱はここいらでやめておこう。

[][]不要なサービスの停止

うちのセカンドマシンは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で再起動。無事終了。

[][]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にとる。ログのローテーションも行う。

/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がとられるためデバックのときのみにしておいたほうが良い。