logo
code:Haemophilus influenzae

ここに書かれていることは無保証です。同じことを行って問題が発生しても、 龍義は責任をとりません。

2003年9月
2003年10月
2003年11月
2003年12月
2004年1月
アイコンの説明


2/1
GATEWAY Profile
なんとなく keroppy を試す。あっさり CF の読み込みが可能になってしまった。
ちょっとびっくり。現在 CF は fat16 であったので、とりあえず ext2 で
フォーマットしなければならないのだけど、このフォーマットをどうやって
やろうかと悩む。色々やってみたのだけど、結局のこの Profile に knoppix を
入れて起動し、そこでフォーマットして色々とダウンロードをしたものを入れた。
ついでに、負荷テスト。

cat /dev/zero > /dev/null

などやって、 top で CPU の負荷が 100% なのを確認して、30分ほど放置した。
ヒートシンクは、だいぶ暖かくなったが、熱いというほどでもない。これなら
なんとか CPU ファンなしでもいけそうである。

2/3
Other
cygwin 環境に postgresql をインストールした。
まずは、昔のメモを見ながら。
とりあえず、 cygwin の setup.exe を実行して、 postgresql をインストールした。

mkdir /usr/local/pgsql
mkdir /usr/local/pgsql/data
initdb /usr/local/pgsql/data

昔やったときと少し違うが、予想通りエラーが出る。

> initdb /usr/local/pgsql/data
The files belonging to this database system will be owned by user "toyota".
This user must also own the server process.

The database cluster will be initialized with locale C.

fixing permissions on existing directory /usr/local/pgsql/data... ok
creating directory /usr/local/pgsql/data/base... ok
creating directory /usr/local/pgsql/data/global... ok
creating directory /usr/local/pgsql/data/pg_xlog... ok
creating directory /usr/local/pgsql/data/pg_clog... ok
selecting default max_connections... 10
selecting default shared_buffers... 50
creating configuration files... ok
creating template1 database in /usr/local/pgsql/data/base/1... FATAL:  could not
 create shared memory segment: Function not implemented
DETAIL:  Failed system call was shmget(key=1, size=1081344, 03600).

initdb: failed

なので、 cygipc のインストール。
http://www.neuro.gatech.edu/users/cwilson/cygutils/cygipc/index.html
から cygipc-2.00.tar.bz2 をダウンロードしてきて、解凍。 make を実行すると

> make
〜snip〜
gcc -Wall  -g -mwin32 -O2 -pipe -mcpu=i586 -fno-strength-reduce -falign-loops=2
 -falign-jumps=2 -falign-functions=2  -DVERSION_NUM=2.00 -I./include -I.  -c
 -o ipc-daemon.o ipc-daemon.c
ipc-daemon.c:66:18: popt.h: No such file or directory
〜snip〜

らしい。

find /usr/include -name popt.h
find ./ -name popt.h

とやっても見つからない。再び cygwin の setup.exe を実行して、 popt 周りが
インストールされているか確認する。libpopt はインストールされていたようであるが、
popt はインストールされていないようなので、インストールした。
これで再び make した。ちょっと warning が出た気もしたが、 make 完了。
make install でインストールした。

/usr/local/bin/ipc-daemon -q &

と実行して、さっきの続きを行う。

rm -rf /usr/local/pgsql/*
initdb /usr/local/pgsql/data

The files belonging to this database system will be owned by user "toyota".
This user must also own the server process.

The database cluster will be initialized with locale C.

fixing permissions on existing directory /usr/local/pgsql/data... ok
creating directory /usr/local/pgsql/data/base... ok
creating directory /usr/local/pgsql/data/global... ok
creating directory /usr/local/pgsql/data/pg_xlog... ok
creating directory /usr/local/pgsql/data/pg_clog... ok
selecting default max_connections... 100
selecting default shared_buffers... 1000
creating configuration files... ok
creating template1 database in /usr/local/pgsql/data/base/1... ok
initializing pg_shadow... ok
enabling unlimited row size for system tables... ok
initializing pg_depend... ok
creating system views... ok
loading pg_description... ok
creating conversions... ok
setting privileges on built-in objects... ok
creating information schema... ok
vacuuming database template1... ok
copying template1 to template0... ok

Success. You can now start the database server using:

    /bin/postmaster -D /usr/local/pgsql/data
or
    /bin/pg_ctl -D /usr/local/pgsql/data -l logfile start

うまくいきました。

> /bin/postmaster -D /usr/local/pgsql/data
LOG:  shmdt(0x13d0000) failed: Invalid argument
LOG:  database system was shut down at 2004-02-03 16:12:36
LOG:  checkpoint record is at 0/9DE7C8
LOG:  redo record is at 0/9DE7C8; undo record is at 0/0; shutdown TRUE
LOG:  next transaction ID: 534; next OID: 17142
LOG:  database system is ready

一応、動いているみたい。Invalid argument が気になるけど、見なかったことに。

2/4
Network
16port のスイッチを買う。10Base だけど 1280円。実験用のネットワークを
作ろうかと考えている。

2/5
Network
昨日の今日で、今日は通販で 16port のスイッチを買う。さすがに今回は、
100Base-TX 。今月末に IP が増えたときのネットワーク構成をどうしようか
考え中。

2/7
GATEWAY Profile
floppyfw ベースのフロッピーに作成した Linux 2.4.24 の kernel を入れて、
カードの認識をさせるテスト。 module は使用しない。ので、別のフロッピーに
cardmgr を入れて、起動後に fd をマウントさせてやってみた。

cardmgr[132]: chdit to /etc/pcmcia failed: No such file or directory

と。/etc/pcmcia を作成しても、今度は config ファイルがないと、エラーが
出たので、Linux マシンから、

/etc/pcmcia/config
/etc/pcmcia/config.opts
/etc/pcmcia/ide
/etc/pcmcia/ide.opts
/etc/pcmcia/shared

をコピーして、再度やってみた。うまく、認識されて、 CF の製造元である
HITACHI の表示も出た。しかし、それぞれのスクリプトから

/sbin/fuser
/sbin/ide_info
/usr/sbin/updfstab

コマンドを呼んでいるようで、エラーがポロポロでる。気にしないで、 mount して
みた。

# mount /dev/hda1 /mnt
 hda: hda1
 hda: hda1
EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended

うまく mount されたようである。これで CF 内のファイルが読めるようになった。
さて、この先、どのように、と言うか、どこまでやろうかな。

2/8
GATEWAY Profile
昨日の続き。まず、 /etc/pcmcia/config の不要な部分を削除して、ファイルの
サイズを小さくした。ファイルの中身は、下記のような感じになった。これは、
起動途中でカードの抜き差しをしないという前提でいじっている。

device "ide-cs"
  class "ide" module "ide-cs"

card "ATA/IDE Fixed Disk"
  function fixed_disk
  bind "ide-cs"

source ./config.opts

こんな感じで、 /etc/pcmcia/config.opts も綺麗にした。

include port 0x100-0x4ff, port 0xc00-0xcff
include memory 0xc0000-0xfffff
include memory 0xa0000000-0xa0ffffff, memory 0x60000000-0x60ffffff
exclude irq 12

次は /etc/pcmcia/ide 。これもざっくり。

#!/bin/sh
if [ -r ./shared ] ; then . ./shared ; else . /etc/pcmcia/shared ; fi

# Get device attributes
get_info $DEVICE

if [ ! -b /dev/$DEVICE ] ; then
    log mknod /dev/$DEVICE b $MAJOR $MINOR
    for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
        minor=`expr $part + $MINOR`
        log mknod /dev/${DEVICE}$part b $MAJOR $minor
    done
fi
exit 0

最後は /etc/pcmcia/shared 。

grep_stab ()
{
    # this should be cheaper than invoking "grep"
    local CLASS DEV
    while read SOCKET CLASS DRIVER INSTANCE DEV MAJOR MINOR ; do
        if [ "$1" = "$DEV" ] ; then return 0 ; fi
    done
    return 1
}

get_info ()
{
    STAB=/var/run/stab
    SCHEME=`cat /var/run/pcmcia-scheme`
    if [ -z "$SCHEME" ] ; then SCHEME="default" ; fi
    grep_stab $1 < $STAB || exit 1
}
f [ $# -lt 2 ] ; then usage ; fi
ACTION=$1 ; DEVICE=$2 ; NEW_SCHEME=$3

これで、pcmcia 周りのエラーは消えた。こんな感じで、

/config
/hosts
/network.ini
/syslinux.cfg
/floppyfw/floppyfw.ini

を作り直し。 firewall.ini は削除。 /floppyfw/add.bz2 に /etc/pcmcia 周りの
ファイルと、 cardmgr を入れて、 iptable を削除。modules と packages 以下を
削除して、この2つを呼んでいる /floppyfw/floppyfw.ini も削除。これで、起動。
エラーが1つ出た。

/etc/network.init: 75: cannot create /proc/sys/net/ipv4/tcp_syncookies: Directory nonexistent

だそうだ。問題の場所は

echo 1 > /proc/sys/net/ipv4/tcp_syncookies

で、ちょっと調べたら kernel を作成するときに

CONFIG_SYN_COOKIES

を有効にしなければならないらしい。とりあえず、この行を削除して、後で問題が
あったら、 kernel を作り直そうかと。あとは initrd の容量を大きくした。
kernel 作成時には 16M に指定してあったので、とりあえず 16M にして作り直し。

# cd /tmp
# dd if=/dev/zero of=tmp.img count=32768
# mke2fs -F -m 0 tmp.img
# mkdir /mnt/test2
# mount -o loop tmp.img /mnt/test2
# cp /mnt/fd/initrd.gz ./
# gunzip initrd.gz
# mkdir /mnt/test3
# mount -o loop initrd /mnt/test3
# cd /mnt/test3
# cp -p -r * /mnt/test2/
# umount /mnt/test2
# umount /mnt/test3
# cd /tmp
# rm initrd
# mv tmp.img initrd
# gzip initrd
# cp initrd /mnt/fd/

これで、良い感じになったので、後は CF に bind なり sshd を入れて、起動できる
ようにする。

2/9
Terminator Tu
OpenBSD 3.4 の patch 当て。
011: SECURITY FIX: February 8, 2004
010: SECURITY FIX: February 5, 2004
009: SECURITY FIX: January 13, 2004

2/10
GATEWAY Profile
initrd の作り直しをした。16M に変更するので、新しいファイルの作成。

# dd if=/dev/zero of=newinitrd count=32768
# mke2fs newinitrd
# mkdir /mnt/newinitrd
# mount -o loop newinitrd /mnt/newinitrd

古い initrd の内容をコピー。

# gunzip initrd.gz
# mkdir /mnt/initrd
# mount -o loop initrd /mnt/initrd
# cp -p -r /mnt/initrd/* /mnt/newinitrd/

これから、ファイル/ディレクトリの追加と削除をしていく。

# rm -rf /mnt/newinitrd/lib/iptables
...

編集が終了したら、 unmount して、圧縮する。

# umount /mnt/newinitrd
# gzip newinitrd

できたファイルをコピーして、完了。実際には、何度かこの作業を繰り返した。

# cp newinitrd.gz /mnt/test/initrd.gz

同じように add.bz2 も作成しなおし。こちらは、ただの tar ファイルなので、
mount 作業などは必要ない。

/tmp を ram disk にするため、 mke2fs をダウンロードしてきた。floppyfw の
package として配付されている。これを、add.bz2 に入れる。まず、
add.bz2 の展開。

# mkdir /tmp/add
# cd /tmp/add
# tar xvfj /mnt/test/floppyfw/add.bz2

次に、 mke2fs の package の展開と、コピー。

# cd /tmp
# tar xvfj mk2efs.bz2
# cp bin/mke2fs /tmp/add/bin
# cp lib/* /tmp/add/lib
# cd /tmp/add/lib
# ln -s libcom_err.so.2.0 libcom_err.so.2
# ln -s libext2fs.so.2.4 libext2fs.so.2

これで、 add.bz2 を作成。の前に、ちょっと細工。

# cd /tmp/add
# rm tmp
# mkdir tmp
# cd /tmp/add/var
# rm tmp
# ln -s /tmp tmp

これで、add.bz2 の作成。

# cd /tmp/add
# tar cvf /tmp/add *
# bzip2 /tmp/add
# cp /tmp/add.bz2 /mnt/test/floppyfw/

自動的に ram disk を作成するように、 /mnt/test/floppyfw/floppyfw.ini に
以下を追加した。

/bin/mke2fs /dev/ram 16384
mount /dev/ram1 /tmp

これで、 /tmp が 16M の ramdisk となった。最初は難しいと思っていたが、
やってしまうと大したことがない。

2/11
GATEWAY Profile
sshd をインストールしたいが、その前にとりあえず、 telnetd を動かすことに
した。で、色々探していたら、 busybox には inetd の機能と telnetd の機能、
さらに login 周りの機能も付いているようなので、インストールすることにした。
どうやら httpd まで付いているらしい。

http://www.busybox.org/ より最新版の busybox をダウンロードした。使うのは
stable 版ではなく、pre 版。10/2/04 時点で最新は 1.00-pre7 のバージョン。
これを Linux マシン(ia32)で compile した。

# cd /tmp
# tar xvfj busybox-1.00-pre7.tar.bz2
# cd busybox-1.00-pre7

どうも configure が無いみたいだし、前のバージョンのように Config.h も
無い。とりあえず、 make を叩いてみる(というか、文書読め)。

# make

なんと、 Linux の Kernel を menuconfig で作成するときと同じような画面に
なった。適当に使いそうなものを選んでいく。なんか、もの凄い数の機能があって、
少々驚き。 mount とかに loop デバイスを使うようなオプションがあるのだけど、
これは kernel が対応してないと駄目なんだろうな、と考えながら、一応、
動くようにしてみたり。
で、 compile 。の前に、一応、 backup をしてから make した。

# cp .config .config.040210
# make

なんなくできあがった。 httpd とか wget とか、色々追加したので、 strip しても
900k ぐらいになってしまった。が、気にしない。
で、 busybox の動作テスト。元々の busybox は /bin にあるので、そのままにして、
新しい busybox は /usr/bin に置いて、色々とリンクを作った。

# cd /usr/bin
# ln -s busybox telnet
# ln -s busybox inetd
# ln -s busybox syslogd
# ln -s busybox crond
# ln -s busybox croontab

それから、昨日インストールしてしまった tinylogin のリンクを削除。

# cd /usr/bin
# rm tinylogin
# rm getty
# rm login
# rm passwd
# rm su
# rm sulogin

で、このコマンドを busybox にリンクした。

# ln -s busybox getty
# ln -s busybox login
# ln -s busybox passwd
# ln -s busybox su
# ln -s busybox sulog

これで、用意はできた。

まず、 syslogd を起動した。問題なく動作した。log ファイルも /var/log/messages に
吐かれている。次は、 inetd の起動。の前に inetd.conf を作成するか、どこかから
取ってこないといけない。busybox を compile したマシンには inetd.conf なんて、
古めかしいものはないので、 SH4 の LAN-iCN2 からコピーした。これで、 inetd の
起動、問題なく起動しているようである。が、 inetd.conf を編集した後などに、
kill -HUP を inetd に投げると inetd が死んでしまう。毎回起動し直すのも、
結構面倒である。

この inetd.conf に busybox の telnetd を追加してやってみた。が、動かない。
busybox を実行したときと同じ画面が表示されて、接続が切れてしまう。telnetd を
直接実行すると、 login 画面が出るので問題なさそうなのだが、この login 画面が
出るときに、おかしなゴミが表示される。
inetd.conf を編集し直してみたりしたのだが、結局 source を見ることにした。色々と
やっていくうちに、 inetd が buffer overflow していることが判明した。これを
デバッグして compile し直しても良いのだけど、多分 telnetd を実行したときに
表示されるゴミも、 buffer overflow していると思われるので(確認していない)、
この先、まだまだ問題があるのでは、と心配なので、 busybox の pre 版を使うのは
やめることにする。

別の telnetd と inetd を compile しようかと考えて、 netkit の source を
ダウンロードしてきて、コンパイルしたのだけど、 libc のバージョンが違うので
動かない。このために cross compile の環境を作るのも面倒なので、 libc の
古いバージョンを使っていそうな Linux のディストリビューションの package を
ダウンロードしてくることにした。古そうなのを使っている、でなんとなく vine が
思い浮かんだので、vine のサイトから vine 2.1 のバージョンの inetd と telnetd の
package をダウンロードしてきた。ファイル名は

inetd-0.16-7vl1.i386.rpm
telnet-server-0.17.6x-18vl0.i386.rpm

このダウンロードした package を rpm2cpio と cpio を使って中身を取り出して、
実行してみた。うまく動作しているようである。これで telnetd が動作するので、
リモートから環境構築できるようになった。

リモートから環境構築できるようになったので、開けていた裏ブタを付けて、棚に
置いて、運用することにした。が、キーボードが接続されていないと、起動しない。
bios を色々といじったのだけど、駄目。今度、安い10キーが売っていたら、それを
買って付けることにする。とりあえずは、接続してから起動することに。

2/12
GATEWAY Profile
vine の ntp の package をダウンロードしてきて、 ntpdate を取り出した。
そこで、 ntpdate を実行。えらい、時間が狂っている。計算したら、9時間。
time コマンドを実行したら、UTC で表示されているし、timezone の設定が
できてないようなので、調べてみる。 どこかに時刻情報が格納されていると思って
他の Linux マシンの /etc を調べてみたら、 localtime というファイルがあった。
実際には、このファイルは /usr/share/zoneinfo/Asia/Tokyo にシンボリックリンク
されていたのだが、この元となる Tokyo というファイルを Profile の /etc に
コピーして、localtime と、ファイル名を変更した。これで、 time コマンドを
実行すると、ちゃんと JST という表示がされた。念のため、 ntpdate コマンドを
再度実行した。うまく動いているようである。
このファイル、73 バイトしかなくて、中身は binary data のようである。
他の国のファイルは、London が 1323 バイトなどとかなり大きいので、
summer time などの情報も格納されているみたいである。

2/15
Network
445/TCP のものすごいアクセスがあったようで、1日に4000以上の不正なアクセスが
見られた。原因は、Welchia.B という virus のようである。Windows2000 の
ソースも流出して、これからまた増えるんだろうな…。

2/17
BONA Light System Wireless
BONA Computech の Light System Wireless レビュー。長くなったのと、
写真があるので、別ページにした。

2/18
Network
cygwin 環境で Apache + PHP4 のインストール
apache 1.3.29 を The Apache HTTP Server Projecte のページから
ダウンロードしてきた。これを解凍して、make する。

# tar xvfz apache_1.3.29.tar.gz
# cd apache_1.3.29
# ./configure --help

結構オプションがあるけど、実験環境なので、必要なオプションだけ付けた。

# ./configure --enable-module=so
# make
# make install

肝心の httpd がインストールされない。問題は、Makefile が httpd として
認識しているためで、インストールの際に cp でエラーが発生している。
これを httpd.exe のように拡張子を付けた形に対応するようにと思ったが
面倒なので、下のスクリプトを作成して、実行した。

#!/bin/sh
cp ./src/httpd.exe /usr/local/apache/bin/httpd.exe
strip /usr/local/apache/bin/httpd.exe
chmod 755 /usr/local/apache/bin/httpd.exe
cp ./src/support/ab.exe /usr/local/apache/bin/ab.exe
strip /usr/local/apache/bin/ab.exe
chmod 755 /usr/local/apache/bin/ab.exe
cp ./src/support/checkgid.exe /usr/local/apache/bin/checkgid.exe
strip /usr/local/apache/bin/checkgid.exe
chmod 755 /usr/local/apache/bin/checkgid.exe
cp ./src/support/htpasswd.exe /usr/local/apache/bin/htpasswd.exe
strip /usr/local/apache/bin/htpasswd.exe
chmod 755 /usr/local/apache/bin/htpasswd.exe
cp ./src/support/htdigest.exe /usr/local/apache/bin/htdigest.exe
strip /usr/local/apache/bin/htdigest.exe
chmod 755 /usr/local/apache/bin/htdigest.exe
cp ./src/support/logresolve.exe /usr/local/apache/bin/logresolve.exe
strip /usr/local/apache/bin/logresolve.exe
chmod 755 /usr/local/apache/bin/logresolve.exe
cp ./src/support/rotatelogs.exe /usr/local/apache/bin/rotatelogs.exe
strip /usr/local/apache/bin/rotatelogs.exe
chmod 755 /usr/local/apache/bin/rotatelogs.exe

次は php のインストール。最新版の php-4.3.4.tar.bz2 を php の web page から
ダウンロードしてきた。

# tar xvfj php-4.3.4.tar.bz2
# cd php-4.3.4
# ./configure --help

えらい量のオプションが付けられる。というか、多すぎ。とりあえず、
日本語を使えるようにするのと、 apxs の指定をした。

# ./configure --with-apxs=/usr/local/apache/bin/apxs --enable-mbstring
checking for gawk... gawk
checking for bison... no
checking for byacc... no
configure: warning: You will need bison if you want to regenerate the PHP parsers.
checking for flex... lex
checking for yywrap in -ll... no
checking lex output file root... ./configure: line 2425: lex: command not found
configure: error: cannot find output from lex; giving up

lex がないようである。ついでに byacc と bison もあった方がよさそうなので、
cygwin の setup.exe を実行して、 byacc, bison, flex のインストールを行った。

# ./configure --with-apxs=/usr/local/apache/bin/apxs --enable-mbstring
〜略〜
Configuring SAPI modules
checking for AOLserver support... no
checking for Apache 1.x module support via DSO through APXS...

Sorry, I was not able to successfully run APXS.  Possible reasons:

1.  Perl is not installed;
2.  Apache was not compiled with DSO support (--enable-module=so);
3.  'apxs' is not in your path.  Try to use --with-apxs=/path/to/apxs
The output of /usr/local/apache/bin/apxs follows
apxs:Error: Sorry, no DSO support for Apache available
apxs:Error: under your platform. Make sure the Apache
apxs:Error: module mod_so is compiled into your server
apxs:Error: binary `/usr/local/apache/bin/httpd'.
configure: error: Aborting

らしいので、 PATH に /usr/local/apache/libexec を追加して、再度行った。
httpd の起動に失敗するようである。エラーは、

[httpd エントリポイントが見つかりません]
「プロシージャエントリポイント _fcntl64 がダイナミックライブラリ cygwin1.dll から見つかりません。」

というもの。 uname -a を実行すると、

CYGWIN_NT-4.0 hogehoge 1.5.5(0.94/3/2) 2003-09-20 16:31 i686 unknown unknown Cygwin

と出た。最新は 1.5.7 なので cygwin の setup.exe を実行して、最新にする。
が、結果は同じ。 uname の結果も同じなので、変だな、と思って、 /bin を
見ると

cygwin1.dll
cygwin1.dll.new

なるものがあった。どうやら、 cygwin が起動中は置き換えられないようである。
つまり、cygwin の setup.exe を実行するときは、 cygwin の画面を落とせ、と
いうことのようである。

cygwin1.dll を cygwin1.dll.old に置き換え、 cygwin1.dll.new を cygwin1.dll に
置き換えて、実行。問題なく実行できた。さて、 configure の続き。
使っている PentiumII 566 MHz のマシンでは configure 終了まで 21分18秒かかった…。
make も1時間近くかかった気がする。問題なく終了した。で、 make install を実行。

# make install
Installing PHP CLI binary:        /usr/local/bin/
Installing PHP CLI man page:      /usr/local/man/man1/
Installing PHP SAPI module:       apache
apxs:Error: file libs/libphp4.so is not a DSO
make: *** [install-sapi] Error 1

ちょっと調べたら、 module ができていないようであるので、作らなければならない。
それに、 module の拡張子は dll なので、 Makefile も書き換えないといけない。
とりあえず、 module の作成。

# cd libs
# gcc  -lcrypt -shared -o libphp4.dll -Wl,--out-implib=libphp4.dll.a 
-Wl,--export-all-symbols -Wl,--whole-archive libphp4.a 
/usr/local/apache/libexec/libhttpd.dll -Wl,--no-whole-archive
Creating library file: libphp4.dll.a
Info: resolving _ap_user_id by linking to __imp__ap_user_id (auto-import)
Info: resolving _ap_group_id by linking to __imp__ap_group_id (auto-import)
Info: resolving _ap_user_name by linking to __imp__ap_user_name (auto-import)
Info: resolving _ap_max_requests_per_child by linking to __imp__ap_max_requests_per_child (auto-import)
Info: resolving _ap_server_root by linking to __imp__ap_server_root (auto-import)
Info: resolving _top_module by linking to __imp__top_module (auto-import)

なにやら、表示されたようだが、 module はできたようなので、大丈夫でしょう。
次に、 Makefile の書き換え。libphp4.so の部分を libphp4.dll に書き換え。これで
make install を実行した。 include ファイルを作成するのにえらい時間がかかったが、
問題なくインストールされたようである。

httpd.conf の編集。

# vi /usr/local/apache/conf/httpd.conf

追加したのは、下の1行のみ。

AddType application/x-httpd-php .php

apache の実行。

# /usr/local/apache/bin/apachectl start
httpd: bad user name nobody
/usr/local/apache/bin/apachectl start: httpd could not be started

あらら。追加することに。

# echo "nobody:*:1024:1024:::" >> /etc/passwd
# echo "nogroup::1024:" >> /etc/group

これで、再度起動。

# /usr/local/apache/bin/apachectl start
[Thu Feb 19 16:12:59 2004] [warn] Apache does not support line-end comments. Consider using quotes around argument: "#-1"
/usr/local/apache/bin/apachectl start: httpd started

もう一度、httpd.conf の編集。

# vi /usr/local/apache/conf/httpd.conf

group の部分がおかしいようであるので、

User nobody
Group #-1

となっていたのを

User nobody
Group nogroup

に変更した。

# /usr/local/apache/bin/apachectl start
/usr/local/apache/bin/apachectl start: httpd started

今度は、奇麗に起動したようである。IE を起動して、動作しているか確認してみる。

http://127.0.0.1/

駄目である。と、思ったが、思い出した。

http://127.0.0.1:8080/

で、見えるようになった。 httpd.conf の port 設定が 8080 になっていたのである。
これも、 80 に変更した。httpd はうまく動作しているようである。php の動作確認を
してみる。

# echo "<?php phpinfo() ?>" > /usr/local/apache/htdocs/test.php

これで、ブラウザからアクセスしてみた。

http://127.0.0.1/test.php

おぉ。ちょっと感動。問題なく動作しているみたいである。次は、 php から
postgresql にアクセス、と思ったが、今日はここまで。

2/19
Network
buffalo BLR-TX4S のファーム解析をした。
MIPS の Linux のようである。面白そう。

2/20
GATEWAY Profile
floppyfw を入れた Profile に、色々とインストールをしたいのだが、kernel 2.4 +
glibc 2.1.3 の環境がないので、コンパイルできなくて困っている。ふと、ひらめいて
昔の knoppix でできないかとダウンロードしようとしたのだけど、昔のバージョンの
knoppix が見つからないし、家にあった knoppix V3.1(8/11/2002) は kernel 2.4.5 だけど、
libc のバージョンは 2.3.1 だし。どっかに同じ環境を作るか、 CD から起動できる
ようなものを作るか、クロスコンパイルか、だな。困った。

2/21
Terminator K7-DDR
dpkg のインストール。debian の deb ファイルを解凍するもの。source を
debian のページからとってきた。コンパイルする。

# wget http://ftp.debian.org/debian/pool/main/d/dpkg/dpkg_1.9.21.tar.gz
# tar xvfz dpkg_1.9.21.tar.gz
# cd dpkg-1.9.21
# ./configure --help
# ./configure --prefix=/usr/local
# make
〜snip〜
ebiandoc2html -n -D. internals.sgml
make[1]: debiandoc2html: コマンドが見つかりませんでした
make[1]: *** [internals.html/index.html] エラー 127
make[1]: 出ます ディレクトリ `/home/toyota/src/dpkg/dpkg-1.9.21/doc'
make: *** [all-recursive] エラー 2

なんか、エラーが出ているようだけど、本体はコンパイルできているようだったので
気にしないことにした。それにしても、コンパイル中に、何かを翻訳しているのだけど、
一体何を翻訳しているのだろう。

# strip main/dpkg
# su
〜snip〜
# cp main/dpkg /usr/local/bin
# cp dpkg-deb/dpkg-deb /usr/local/bin

2/22
GATEWAY ProfileTerminator K7-DDR
floppyfw を入れた Profile 用の開発環境を作ろうと、色々調べたのだが、かなり
面倒なことがわかった。JF のGlibc2-HOWTO.txtを見ながら、やって
みたのだが、コンパイルする度に

gcc -s -nostdinc -nostdlib -I- -I/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include
 -I/usr/bespin/usr/include -I/usr/bespin/usr/include/linux -L/usr/bespin/lib
 -L/usr/bespin/usr/lib -lc /usr/bespin/lib/ld-2.1.3.so /usr/bespin/usr/lib/crti.o
 /usr/bespin/usr/lib/crt1.o /usr/bespin/usr/lib/crtn.o

と指定しなければいけない。テストで小さめなプログラム(logrotate)でコンパイルを
してみたのだが、かなり面倒だった。動いたには動いたけど。これが、 configure を
使った sshd などの大きなプログラムになると、とてつもなく面倒になる。それを
考えると、ちょっと躊躇してしまう。完全なクロスコンパイルの環境を作ったほうが
後々楽かもしれないな。

2/23
Network
18日の作業の続き(cygwin + apache + php)。PHP のコンパイルのやり直し。

# ./configure --with-apxs=/usr/local/apache/bin/apxs --enable-mbstring --without-mysql --with-pgsql
# make

52分かかった(涙)。

# cd libs
# gcc -shared -o libphp4.dll -Wl,--out-implib=libphp4.dll.a -Wl,--export-all-symbols
 -Wl,--whole-archive libphp4.a /usr/local/apache/libexec/libhttpd.dll
 -Wl,--no-whole-archive -lcrypt

すごいエラーが発生する。PostgreSQL 周りのエラーのようなので、ライブラリの指定を
追加してみた。

# gcc -shared -o libphp4.dll -Wl,--out-implib=libphp4.dll.a -Wl,--export-all-symbols
 -Wl,--whole-archive libphp4.a /usr/local/apache/libexec/libhttpd.dll
 -Wl,--no-whole-archive -lcrypt -lpq
Creating library file: libphp4.dll.a
Info: resolving _ap_user_id by linking to __imp__ap_user_id (auto-import)
Info: resolving _ap_group_id by linking to __imp__ap_group_id (auto-import)
Info: resolving _ap_user_name by linking to __imp__ap_user_name (auto-import)
Info: resolving _ap_max_requests_per_child by linking to __imp__ap_max_requests_per_child (auto-import)
Info: resolving _ap_server_root by linking to __imp__ap_server_root (auto-import)
Info: resolving _top_module by linking to __imp__top_module (auto-import)

うまくいったみたい。前回と同じように、少し Makefile をいじってから
インストール。

# cd ..
# vi Makefile
# make install
cp libs/libphp4.dll /usr/local/apache/libexec/libphp4.dll
cp: cannot create regular file `/usr/local/apache/libexec/libphp4.dll': Permission denied
apxs:Break: Command failed with rc=1
make: *** [install-sapi] Error 1

apache を起動していると、駄目なのかな。一度停止してみる。

# /usr/local/aoache/bin/apachectl stop
# make install

インストールが完了した。それと、 php.ini をコピーしなければならないみたい
だが、コピーしないで、とりあえずやってみる。

# /usr/local/apache/bin/apachectl start
C:¥cygwin¥usr¥local¥apache¥bin¥httpd.exe (264): *** unable to remap
 C:¥cygwin¥bin¥cygssl-0.9.7.dll to same address as parent(0x1060000) != 0x1070000
/usr/local/apache/bin/apachectl start: httpd could not be started

何故か起動しない。ちょっと調べてみたけど、解決はちょっと面倒そうだ。
全然進まない。

2/24
G6-200
GATEWAY の Profile 用のクロスコンパイルの環境はあきらめて、 Linux 2.4.25 +
libc 2.1.3 の環境を作成した。 swap が共通して使えるのと、稼働率が低かった
理由から、 G6-200[kessel] に環境を作成することにした。中に入っていた
windows のデータ領域はざっくり消して、 Windows + Linux + Linux のトリプル
ブートの環境。これを 6.4G のハードディスクでやっているのが、信じられない。

調べて、色々考えた結果、 debian version 2.2rev7(Potato) に kernel 2.4 を
入れることにした。早速、 the Internet から昔の iso イメージをダウンロードを
してこようと検索したのだけど、見つからない。結局、昔の雑誌のおまけから
インストールすることにした。

慣れないインストール画面に、少々手間取りながらも、インストールは順調に進んで、
apt でパッケージを インストールする前に、web からダウンロードしてインストールする、
というのを選んだ。それが間違いの始まり。無事インストール完了と思ったら、
kessel 2.2.19 + libc 2.3 という、元も子もない環境になってしまった。

# cat /etc/debian_version
3.0

だし。インストールのやり直し。は、明日にしよう。それにしても、apt-get の画面は
いまいち使いづらい。

2/25
G6-200
GATEWAY の Profile 用のクロスコンパイルの環境はあきらめて、 Linux 2.4 +
libc 2.1.3 の環境を作成する。 swap が共通して使えるのと、稼働率が低かった
理由から、 G6-200[kessel] に環境を作成することにした。中に入っていた
windows のデータ領域はざっくり消して、 Windows + Linux + Linux のトリプル
ブートの環境。これを 6.4G のハードディスクでやっているのが、信じられない。

調べて、色々考えた結果、 debian version 2.2rev7(Potato) に kernel 2.4 を
入れることにした。早速、 the Internet から iso イメージをダウンロードを
してこようと検索したのだけど、古すぎるようで見つからない。やっと探しあてた3つの
ページからダウンロードして、それぞれのページの md5 値のファイルを何度も
確認した。さすがに古い OS + unofficial なページからダウンロードしてきたので。

慣れないインストール画面に、少々手間取りながらも、インストールは順調に進んで、
apt でパッケージを インストールする画面になった。web からダウンロードして
インストールする、というのを選んだのだが、それが間違いの始まり。無事インストール
完了と思ったら、kessel 2.2.19 + libc 2.3 という、元も子もない環境になってしまった。

# cat /etc/debian_version
3.0

だし。インストールのやり直し。は、明日にしよう。それにしても、deslect の画面は
いまいち使いづらい。

2/26
G6-200
昨日の続き。インストールのやり直し。今回 apt は全て CD-ROM からインストール
するようにした。おかげで、kernel は 2.2.19 だが、 libc は 2.1.3 と目的の
バージョンである。ここで、 kernel を 2.4 にあげてみる。動くかどうかは少々
不安だけど。

さっそく、いつの間にか kernel 2.4.25 になった、 kernel をダウンロードして、
展開した。で、

# wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.25.tar.gz
# tar xvfz linux-2.4.25.tar.gz
# cd linux-2.4.25
# make menuconfig

を実行したのだが、

>> Unable to find the Ncurses libraries.
>>
>> You must have Ncurses installed in order
>> to use 'make menuconfig'

となってしまった。 ncurses-dev が必要らしい。そこで、追加インストールの実行。

# dselect
〜略〜
# make menuconfig
〜略〜
# make depend
# make clean
# make bzImage

3つ合わせて17分ちょっとかかった。さっそく /boot にコピーして、起動させてみた。
あっさりと、問題なく起動した。

ネットワークの設定をざっくりと。/etc/hosts にご近所を書いて、 ip アドレスを
dhcp から固定に変更。

# vi /etc/network/interfaces

#iface eth0 inet dhcp
iface eth0 inet static
  address 192.168.0.67
  netmask 255.255.255.0
  network 192.168.0.0
  broadcast 192.168.0.255
  gateway 192.168.0.1

実際は違うけど、こんな感じで編集終了。
次は openssl のインストール。 openssl-0.9.7c.tar.gz を取ってきた。

# wget http://www.openssl.org/source/openssl-0.9.7c.tar.gz
# tar xvfz openssl-0.9.7c.tar.gz
# cd openssl-0.9.7c
# ./config
# make

とやってコンパイル完了しのだが、よく見ると compile のオプションに
-mcpu=pentiumpro
とついてしまっている。これで K6-2 が動くの不安なので、やり直し。

# ./Configure linux-k6
# make clean
# make

と、やって失敗した、と思った。 compile しているこのマシンにもインストール
しなければならないので、 ppro のはそのままにしておけば良かったなと。結局、
G-200 用にコンパイルして、 make install を行った。
次は openssh のインストール。の前に zlib のインストールだった。

# wget http://www.gzip.org/zlib/zlib-1.2.1.tar.gz
# tar xvfz zlib-1.2.1.tar.gz
# cd zlib-1.2.1
# ./configure
# make
# su
# make install

次は openssh のインストール。文が長くなってしまっているな。別 html に
しようかな…。

# wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-3.7.1p2.tar.gz
# tar xvfz openssh-3.7.1p2.tar.gz
# cd openssh-3.7.1p2
# ./configure
# make
# su
# make install

とやったのだけど、

Privilege separation user sshd does not exist
make: [check-config] Error 255 (ignored)
kessel:/home/toyota/src/openssh/openssh-3.7.1p2-local

と止まってしまった。あぁ、ユーザを作らなきゃいけないんだ、と思って、ちょっと
調べたら、 openssh のバージョンが、3.8p1 になっていた。一気にやる気が
失せたので、また今度に。

2/27
Network
Logitec の NAS 製品、LHD-EA160LU2 レビュー。長くなったのと、
写真があるので、別ページにした。

2/28
Network
ルータがまた暴走しているようである。ルータから1秒間に24通ものメールが
着たりと、とても迷惑な状態。おかげで集計もできていないのだが、またほっとくと
直るんだろうなぁ。

2/29
GATEWAY ProfileG6-200
GATEWAY Profile に以下のものをインストールした。やっつけ仕事。これで、
内向けの dns サーバができた。
OpenSSL 0.9.7c
OpenSSH 3.8p1
bind 8.4
lynx 2.8.5
良く考えたら、こいつの起動直後に glibc を入れ替えても良かったのじゃないか、と
思ってきた。今度時間があったらやってみようと思う。それと、このコンパイル環境を
作成するため、わざわざ debian のインストールしたのだが、これも chroot を
うまく使えば、OS のインストールをせずに環境が作れたのでは、と思ってきてもいる。
この件についても、時間があれば今度やってみよう。


21st projects Tatsuyoshi Networks Prompt Works
by Tatsuyoshi
since 2003