時間が多少あったので自宅の 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 を使うためにはカーネルで次のものをオンにしておく。
NAMESYS (NAMESYS) の 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 し、フロッピーを抜いて再起動すれば正しく立ち上がる。
/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.4.9 が出たので別マシンでやってみたが、ntfs モジュールでエラーが出る。 けっこう大きな変更があった のが原因らしい。 とりあえず ntfs を切ってコンパイル。
とりあえず 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 がない。
これはバグ入りのカーネルであった。やめておいたほうがいい。
/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
せっかく 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
/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
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
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 シリーズの新しいカーネルが出た。
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