Linux 2.4

2.2.18 を 2.4.8 に

時間が多少あったので自宅の Vine 2.1 改(2.2.18)のカーネルを 2.4.8 に更新することにする。

準備

Linux How-To「カーネル2.4アップグレードガイド」 をまず読む。 あらかじめ modutils-2.4.6-1.i386.rpm を rpm -Uvh しておく。 linux-2.4.8.tar.bz2 を /usr/src で展開し、 /usr/src/linux/Makefile の 73 行めの

# export INSTALL_PATH=/boot
をアンコメントする。

ついでに /usr/src/linux/fs/isofs/dir.c に次のようにパッチをあてておくと Mac で作った CD-R でファイル名やディレクトリ名に / が含まれていても : に変換して読めるようになる。 この方法は土谷昌義さんに教えていただいた。

--- dir.c~      Sat Feb 10 04:29:44 2001
+++ dir.c       Mon Aug 13 10:27:48 2001
@@ -50,7 +50,7 @@
                unsigned char c = old[i];
                if (!c)
                        break;
-
+               if (c == '/') c = ':';  /* hack */
                if (c >= 'A' && c <= 'Z')
                        c |= 0x20;      /* lower case */

コンパイラは gcc-3.x はまだ心配。

gcc -v
...
gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)

カーネル作り

cd /usr/src/linux
make mrproper
make xconfig

適当に答えると .config ができる(→ )。 /etc/lilo.conf を次のように編集する。

image=/boot/vmlinuz
        label=linux
        read-only
        root=/dev/hda1

image=/boot/vmlinuz.old
	label=old
	read-only
	root=/dev/hda1

いよいよコンパイル。

make dep
make clean
make bzlilo
make modules
make modules_install

新カーネルで起動

いくつかの起動スクリプトは動かないようにしておく。 kudzu、usbmgr、pcmcia、vmware が候補。

/sbin/chkconfig --del kudzu
/sbin/chkconfig --del vmware

USB については Linux USB Project 参照。 とりあえずは使わない設定にしておく。

再起動すると新カーネルで起動する。

このままでは IP masquerade ができない。 新しい netfilter を勉強するまでのつなぎとして make xconfig で CONFIG_IP_NF_COMPAT_IPCHAINS を m にしておいたので、modprobe ipchains してから ipchains で masquerade の設定をする。 ついでに /etc/conf.modules を /etc/modules.conf に改名しておく。 コピーしただけでは後で文句を言われる。 完全に /etc/conf.modules を消すほうがいいらしい。

その後 modprobe ipchains は止めた。次のようにすれば簡単に IP Masquerade できる。
echo 1 >/proc/sys/net/ipv4/ip_forward
/sbin/modprobe iptable_nat
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/modprobe ip_nat_ftp

ついでに,ほかに役立つ設定。 rp_filter はファイアウォール内のアドレスを偽装して外から来る逆向き(reverse path)のパケットを排除する(RFC1812 参照)。 icmp_echo_ignore_broadcasts は smurfing 対策。

echo 1 >/proc/sys/net/ipv4/conf/all/rp_filter
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

/usr/src/linux/Documentation/networking/ip-sysctl.txt も参照。

VMware については 別ページ にまとめた。

調子に乗って util-linux-2.11h.tar.bz2 も取ってきてコンパイルする。 あらかじめ MCONFIG を適当に編集する(HAVE_SHADOW=yes とした)。

./configure
make
make install

これでいいはずだが po/de.po の6101行で make が止まる。 その行の \a の2文字を消して再度 make すればうまくいった。

続いて e2fsprogs-1.19.tar.gz も入れた。

mkdir build
cd build
../configure
make
make check
make install

make check で 0 tests failed と出ることを確認。

netfilter 関係(これは失敗)。 iptables-1.2.2.tar.bz2 をいただいてくる。

tar xvzf ..../iptables-1.2.2.tar.bz2
cd iptables-1.2.2
make pending-patches KERNEL_DIR=/usr/src/linux
make KERNEL_DIR=/usr/src/linux
make install KERNEL_DIR=/usr/src/linux

カーネルソースを勝手に書き換えられたみたい。 この状態でカーネルを作り直すと、VMware が立ち上がらなくなった。 結局カーネルソースの展開からやり直す羽目になった。

ReiserFS を使う

ReiserFS を使うためにはカーネルで次のものをオンにしておく。

NAMESYSNAMESYS) の Download のページから最新のユーザツール(reiserfsprogs-3.x.0j.tar.gz といったもの)をダウンロード。

./configure --prefix=/usr
make
make install

バックアップの取れるパーティションについては次のようにするだけ。

/hoge をバックアップ
umount /hoge
mkreiserfs /dev/XXXX
mount /hoge
/hoge を書き戻す

そうこうしているうちに注文しておいた40GのHDDが届いた。 とりあえずプライマリのスレーブ(hdb)にする。 全部を ReiserFS にするのはまだ心配なので次のようにした。 ReiserFS にする場合は /boot を別に作って notail オプションでマウントするようにする。 管理領域に32Mほど使うらしいので、サイズは大きめに。

1    1-512 (4G)   /     e2fs
2  513-768 (2G)   /var  reiserfs
3  769-784 (128M) swap
4  785-4982       /home reiserfs

これで適当なところにマウントし、hda から必要なものをコピーする。 / になるべきところには mkdir proc; chmod 555 proc もやっておく。 /etc/lilo.conf および /etc/fstab になるファイルも十分注意して作る。 swap パーティションは mkswap -c /dev/hdb3 のようにしておく (これを忘れると kernel: Unable to find swap-space signature が出る)。

次は /etc/fstab の例(reiserfs は最後を 0 0 にする)。

/dev/hda1    /       ext2      defaults   1 1
/dev/hda2    /var    reiserfs  defaults   0 0
/dev/hda3    swap    swap      defaults   0 0
/dev/hda4    /home   reiserfs  defaults   0 0
/dev/hdc     /opt         ext2    defaults              0 0
/dev/fd0     /mnt/floppy  ext2    user,noauto           0 0
#/dev/fd0    /mnt/dosfd   vfat    user,noauto,uni_xlate 0 0
/dev/fd0     /mnt/dosfd   vfat    user,noauto,codepage=932,iocharset=euc-jp 0 0
/dev/cdrom   /mnt/cdrom   iso9660 user,noauto,ro,iocharset=euc-jp           0 0
/dev/sdb4    /mnt/zip     ext2    user,noauto                               0 0
/dev/sdb4    /mnt/doszip  vfat    user,noauto,codepage=932,iocharset=euc-jp 0 0
none         /proc        proc    defaults              0 0
none         /dev/pts     devpts  gid=5,mode=620        0 0
none         /proc/bus/usb usbdevfs noauto              0 0

起動フロッピーを作る:

cp -a /boot/vmlinuz /boot/vmlinuz-2.4.8
mkbootdisk 2.4.8

新しい HDD を hda になるように付け変え、フロッピーでブート。 LILO と出たときにエンターキーを押せばフロッピーのカーネルで起動し、/dev/hda1 に制御が移る(必要に応じて LILO プロンプトで linux boot=/deb/hda2 などと打ち込む。linux init=/bin/bash とすれば bash だけが立ち上がる)。 そこで /sbin/lilo し、フロッピーを抜いて再起動すれば正しく立ち上がる。

USB の設定

/etc/rc.d/init.d/usbmgr の代わりに Linux Hotplugging で配布されている hotplug を使う。 hotplug-2001_04_24.tar.gz をダウンロードして展開し、次のようにする。

cp sbin/hotplug /sbin/
mkdir /etc/hotplug
cp -r etc/hotplug/* /etc/hotplug
cp etc/rc.d/init.d/hotplug /etc/rc.d/init.d/
/sbin/chkconfig --add hotplug

2.2.x → 2.4.9

2.4.9 が出たので別マシンでやってみたが、ntfs モジュールでエラーが出る。 けっこう大きな変更があった のが原因らしい。 とりあえず ntfs を切ってコンパイル。

2.4.8 → 2.4.10

とりあえず vmware を止め,/sbin/chkconfig --del vmware しておく。

cd /usr/src
mv linux linux-2.4.8
tar xvzf linux-2.4.10.tar.bz2
cd linux
# /usr/src/linux/Makefile を修正
# /usr/src/linux/fs/isofs/dir.c に自分用パッチ
# I-Oデータ USB-DFRWA 用パッチも
make mrproper
cp ../linux-2.4.8/.config .
make xconfig
make dep
# 必要に応じて make clean
make bzlilo
make modules
make modules_install

VMware については 別ページ

シャットダウンで電源が切れなくなった。 CONFIG_APM=y したのに /proc/apm がない。

2.4.10 → 2.4.15-greased-turkey

これはバグ入りのカーネルであった。やめておいたほうがいい。

/etc/rc.d/init.d/vmware stop
/sbin/chkconfig --del vmware
cd /usr/src
mv linux linux-2.4.10
tar xvzf linux-2.4.15.tar.bz2
cd linux
# /usr/src/linux/Makefile の 73 行めのコメントを外す
# /usr/src/linux/fs/isofs/dir.c に1行追加(上述)
# I-Oデータ USB-DFRWA 用パッチも
make mrproper
cp ../linux-2.4.10/.config .
make xconfig
make dep
# 必要に応じて make clean
make bzlilo
make modules
make modules_install

VMware Workstation 3.0 については vmware-config.pl を実行して再設定する。 以前の設定が残っているので,修正個所は次だけ。

What is the location of the directory of C header files that match your running 
kernel? [/lib/modules/2.4.10/build/include] /lib/modules/2.4.15-greased-turkey/build/include

2.4.15-greased-turkey → 2.4.16-pre1

せっかく shutdown で電源断の機能が復活したと喜んだのもつかの間,2.4.15 は file system corruption の由々しき問題をかかえていた。 さっそく 2.4.16-pre1 に更新。

cd /usr/src/linux
bzip2 -dc ..../patch-2.4.16-pre1.bz2 | patch -p1
make dep
make clean
make bzlilo
make modules
make modules_install

止めるのはちょっと念入りに。

init s
sync
umount /home など
(/var を使っているデーモンを止める)
umount /var
mount -o remount,ro /var
mount -o remount,ro /

あとは vmware の作り直し。

What is the location of the directory of C header files that match your running 
kernel? [/lib/modules/2.4.15-greased-turkey/build/include] /lib/modules/2.4.16-pre1/build/include

2.4.16-pre1 → 2.4.17

/etc/rc.d/init.d/vmware stop
/sbin/chkconfig --del vmware
cd /usr/src
mv linux linux-2.4.16-pre1
tar xvzf linux-2.4.17.tar.bz2
cd linux
# /usr/src/linux/Makefile の 74 行めのコメントを外す
# /usr/src/linux/fs/isofs/dir.c に1行追加(上述)
# I-Oデータ USB-DFRWA 用パッチも
make mrproper
cp ../linux-2.4.16-pre1/.config .
make xconfig # 今回は ext3 をオン(→ .config)
make dep bzlilo modules modules_install

これで再起動。

VMware の作り直し。 vmware-config.pl と打ち込んで次のところ以外は Enter でいい。

What is the location of the directory of C header files that match your running 
kernel? [/lib/modules/2.4.16-pre1/build/include] /lib/modules/2.4.17/build/include

EXT3 の準備。 ここ から e2fsprogs-1.25.tar.gz をいただいてくる。

mkdir build; cd build
../configure
make
make check
make install
make install-libs

util-linux の最新版も。

./configure
make
make install

/dev/hdc/opt2 に ext2 でマウントされている。 これを ext3 にしてみよう。

umount /opt2
tune2fs -j /dev/hdc

これで /etc/fstab を ext3 にして mount しなおす。 うまくいったのでルートパーティションも ext3 にしてしまう。

なお,ext3 を ext2 に戻すには次のようにする。

tune2fs -O^has_journal
e2fsck

2.4.17 → 2.4.18

I-Oデータ USB-DFRWA はサポートされたのでパッチ不要。

/etc/rc.d/init.d/vmware stop
/sbin/chkconfig --del vmware
cd /usr/src/linux
make mrproper
# /usr/src/linux/Makefile の 74 行めのコメントを外す
# 自分用に /usr/src/linux/fs/isofs/dir.c に1行追加(上述)
# 必要なら cp ../linux-2.4.17/.config .
make xconfig
make dep bzlilo modules modules_install

これで再起動。 あとは VMware の設定。

[root@okuhome /root]# vmware-config.pl
Making sure VMware Workstation's services are stopped.

Stopping VMware services:
   Virtual machine monitor                                 [  OK  ]
   Bridged networking on /dev/vmnet0                       [  OK  ]
   DHCP server on /dev/vmnet1                              [  OK  ]
   Host-only networking on /dev/vmnet1                     [  OK  ]
   DHCP server on /dev/vmnet8                              [  OK  ]
   NAT networking on /dev/vmnet8                           [  OK  ]
   Host-only networking on /dev/vmnet8                     [  OK  ]
   Virtual ethernet                                        [  OK  ]

Trying to find a suitable vmmon module for your running kernel.

None of VMware Workstation's pre-built vmmon modules is suitable for your 
running kernel.  Do you want this script to try to build the vmmon module for 
your system (you need to have a C compiler installed on your system)? [yes] 

What is the location of the directory of C header files that match your running 
kernel? [/lib/modules/2.4.18/build/include] 

Extracting the sources of the vmmon module.

Building the vmmon module.

make: 入ります ディレクトリ `/tmp/vmware-config2/vmmon-only'
make[1]: 入ります ディレクトリ `/tmp/vmware-config2/vmmon-only'
make[2]: 入ります ディレクトリ `/tmp/vmware-config2/vmmon-only/driver-2.4.18'
In file included from .././linux/driver.c:38:
/lib/modules/2.4.18/build/include/linux/malloc.h:4: warning: #warning linux/malloc.h is deprecated, use linux/slab.h instead.
In file included from .././linux/hostif.c:26:
/lib/modules/2.4.18/build/include/linux/malloc.h:4: warning: #warning linux/malloc.h is deprecated, use linux/slab.h instead.
make[2]: 出ます ディレクトリ `/tmp/vmware-config2/vmmon-only/driver-2.4.18'
make[2]: 入ります ディレクトリ `/tmp/vmware-config2/vmmon-only/driver-2.4.18'
In file included from .././linux/driver.c:38:
/lib/modules/2.4.18/build/include/linux/malloc.h:4: warning: #warning linux/malloc.h is deprecated, use linux/slab.h instead.
In file included from .././linux/hostif.c:26:
/lib/modules/2.4.18/build/include/linux/malloc.h:4: warning: #warning linux/malloc.h is deprecated, use linux/slab.h instead.
make[2]: 出ます ディレクトリ `/tmp/vmware-config2/vmmon-only/driver-2.4.18'
make[1]: 出ます ディレクトリ `/tmp/vmware-config2/vmmon-only'
make: 出ます ディレクトリ `/tmp/vmware-config2/vmmon-only'
The module loads perfectly in the running kernel.

Trying to find a suitable vmnet module for your running kernel.

None of VMware Workstation's pre-built vmnet modules is suitable for your 
running kernel.  Do you want this script to try to build the vmnet module for 
your system (you need to have a C compiler installed on your system)? [yes] 

Extracting the sources of the vmnet module.

Building the vmnet module.

make: 入ります ディレクトリ `/tmp/vmware-config2/vmnet-only'
In file included from driver.c:23:
/lib/modules/2.4.18/build/include/linux/malloc.h:4: warning: #warning linux/malloc.h is deprecated, use linux/slab.h instead.
In file included from hub.c:22:
/lib/modules/2.4.18/build/include/linux/malloc.h:4: warning: #warning linux/malloc.h is deprecated, use linux/slab.h instead.
In file included from userif.c:22:
/lib/modules/2.4.18/build/include/linux/malloc.h:4: warning: #warning linux/malloc.h is deprecated, use linux/slab.h instead.
In file included from netif.c:22:
/lib/modules/2.4.18/build/include/linux/malloc.h:4: warning: #warning linux/malloc.h is deprecated, use linux/slab.h instead.
In file included from bridge.c:22:
/lib/modules/2.4.18/build/include/linux/malloc.h:4: warning: #warning linux/malloc.h is deprecated, use linux/slab.h instead.
In file included from procfs.c:22:
/lib/modules/2.4.18/build/include/linux/malloc.h:4: warning: #warning linux/malloc.h is deprecated, use linux/slab.h instead.
make: 出ます ディレクトリ `/tmp/vmware-config2/vmnet-only'
The module loads perfectly in the running kernel.

Do you want networking for your Virtual Machines? (yes/no/help) [yes] 

Would you prefer to modify your existing networking configuration using the 
wizard or the editor? (wizard/editor/help) [wizard] 

The following bridged networks have been defined:

. vmnet0 is bridged to eth1

Do you wish to configure another bridged network? (yes/no) [no] 

Configuring a NAT network for vmnet8.

The NAT network is currently configured to use the private subnet 
192.168.30.0/255.255.255.0.  Do you want to keep these settings? [yes] 

Do you want to be able to use host-only networking in your Virtual Machines? 
[yes] 

The following hostonly networks have been defined:

. vmnet1 is a host-only network on subnet 192.168.34.0.

Do you wish to configure another host-only network? (yes/no) [no] 

Do you want this script to automatically configure your system to allow your 
Virtual Machines to access the host's filesystem? (yes/no/help) [no] 

This script previously created the file /etc/rc.d/rc3.d/S90vmware, and was about
to remove it.  Somebody else apparently did it already.

This script previously created the file /etc/rc.d/rc6.d/K08vmware, and was about
to remove it.  Somebody else apparently did it already.

Starting VMware services:
   Virtual machine monitor                                 [  OK  ]
   Virtual ethernet                                        [  OK  ]
   Bridged networking on /dev/vmnet0                       [  OK  ]
   Host-only networking on /dev/vmnet1 (background)        [  OK  ]
   Host-only networking on /dev/vmnet8 (background)        [  OK  ]
   NAT networking on /dev/vmnet8                           [  OK  ]

The configuration of VMware Workstation 3.0.0 build-1455 for Linux for this 
running kernel completed successfully.

You can now run VMware Workstation by invoking the following command: 
"/usr/bin/vmware".

Enjoy,

--the VMware team

2.4.18 を 2.4.21-pre2 に

Celeron 500MHz マシンのマザボを Asus P4S533-VM + Celeron 1.7GHz + DDR 256M に。 しかし cat /proc/cpuinfo すると cache size が 20 KB しかない。 vine-users ML でも話題になっていた「L2 キャッシュが認識されない」という現象かと思って,2.4.21-pre2 に上げてみる(結果的に 128 KB になった)。 ただし,どうやら表示だけの問題のようである。

su -
/etc/rc.d/init.d/vmware stop
/sbin/chkconfig --del vmware
cd /usr/src
tar xvzf linux-2.4.20.tar.bz2
ln -s linux-2.4.20 linux
cd linux
zcat /usr/local/archive/patch-2.4.21-pre2.gz | patch -p1
make mrproper
# /usr/src/linux/Makefile の 74 行めのコメントを外す
# 自分用に /usr/src/linux/fs/isofs/dir.c に1行追加(上述)
make xconfig
make dep bzlilo modules modules_install

これで再起動。

VMware も古い VMwareWorkstation-3.1.1-1790 のままであったので,ダウンロードしたままになっていた新しい 3.2.0-2230 に更新:

rpm -Uvh VMware-workstation-3.2.0-2230.i386.rpm

これで vmware-config.pl を起動。 今回はブロードバンドルータも仕入れたことなので host-only ではなく bridged にしてみる。

なお,Asus P4S533-VM は SiS チップセットなので,CONFIG_BLK_DEV_SIS5513 をオンにする必要がある。 hdparm /dev/hda 等して dma がオンになっていることを確認する。

2.4.21-pre2 を 2.4.21 に

半年ぶりに 2.4 シリーズの新しいカーネルが出た。

su -
/etc/rc.d/init.d/vmware stop
/sbin/chkconfig --del vmware
cd /usr/src
tar xvzf linux-2.4.21.tar.bz2
ln -sf linux-2.4.21 linux
cd linux
make mrproper
# /usr/src/linux/Makefile の 74 行めのコメントを外す
# 自分用に /usr/src/linux/fs/isofs/dir.c に1行追加(上述)
cp ../linux-2.4.21-pre2/.config .
make xconfig
make dep bzlilo modules modules_install

これで再起動。

vmware-config.pl で VMware を更新する。

hdparm /dev/hda 等して dma がオンになっていることを確認する。


リンクはご自由にどうぞ。

松阪大学 奥村晴彦 okumura@matsusaka-u.ac.jp
Last modified: 2003-06-14 16:27:25