更新日: $Date: 2005-11-20 08:29:46 $ UTC ($Revision: 1.30 $)
公開日: 2004/01/18
sargeがリリースされたので、もうこの文書は必要ないと思いますが、なんかの役に立つかもしれないので残しておきます。
sargeへのアップグレードは、
を参考にしてすんなりできました。
ただ、aptitude -f --with-recommends dist-upgrade 2>&1 | tee upgrade.log
のようにリダイレクトすると設定のダイアログでなにも操作できなくなるので、ログを取るのはscriptやscreenのlog機能を使いましょう。
それでははじまりはじまり。
kernel 2.6.1も出たことだし、そろそろ2.6系のkernelも試してみようかなぁと思い、
Debian stableにkernel 2.6をインストールした際のメモっす。
あくまで個人的なメモなので、何をも保証するものではありませんのであしからず。
大した仕事はしないものの24時間稼働のサーバーとして使うつもりなので、 kernelは2.6系にするものの、 安定性の向上とバージョンアップの頻度を減らすためstableを基本とし、 極力stableのdebパッケージを使うようにしようかなぁと思う。
kernelを展開して、Document/Changesを読んでバージョンアップが必要なものを確認。
入れなければならないものがわかったところで、どうやってインストールするか考えた。
ソースを持ってきて自前でコンパイルしてインストールするのが一番手っ取り早いが、同名のstableのパッケージが更新された場合に上書きされてしまう可能性があり、また、今後のバージョンアップも自前で行わなければならなく手間が増えるのでこれは却下。
次にtestingやunstableのパッケージを必要なものだけ拝借しようと考えたが、依存関係でlibcなど大物パッケージの入れ替えも必要で、結局殆んどtesting/unstableと同じ環境になってしまいそうだったのでこれも断念。
仕方ないので自前でdebパッケージを作ってholdしようかなぁと考えていたところ、
Debian GNU/Linux スレッドテンプレ
でDebian Backportsというプロジェクト発見。
とりあえずここので必要そうなものは揃いそうだったので、Debian Backportsを利用することにした。
必要そうなものを/etc/apt/sources.listに追加。
deb http://www.jp.backports.org/debian stable kernel-2.6 e2fsprogs module-init-tools
後、インストール。ログを確認して、upgradeで入らなかったものは明示的にinstallする。
原因は分からないがe2fsprogsはupgradeでは入らなかった(ような気がする)。他にも明示的にinstallしたものがあった気がするけど覚えてないのでちと不正確です。
# apt-get update # apt-get upgrade # apt-get install module-init-tools # apt-get install e2fsprogs
ここでちとハマる。
Backportsを試す前に、PINを利用してtesting/unstableのdebパッケージを入れようとして、
/etc/apt/apt.conf.d/99targetにAPT::Default-Release "stable"
と書いていたままだったんだけど、これが原因でBackportsのapt-lineを追加してもupgradeやinstallでBackportsのdebがインストールできなかった。「//」でコメントアウトしちゃえばOK。
make user && make user_install
だけでOK。
kernel moduleの設定ファイル。 kernel 2.6でmodules.confからmodprobe.confに改名。
kernel 2.4の時はupdate-modulesを実行すると
/etc/modutils/*を元に/etc/modules.confが生成されたが、
kernel 2.6では/etc/modprobe.d/*を元に/lib/modules/modprobe.confが生成される。
/lib/modules/modprobe.confは/etc/modprobe.confからincludeされている。
なので、/etc/modutils/*に追加したものを/etc/modprobe.d/*にも反映。
# echo 'alias eth0 8139too' >> /etc/modprobe.d/local
sysfsについては、 japan.linux.comのdriverfs / sysfsなどを参照のこと。
mkdir /sys
して、以下を/etc/fstabに追加。
none /sys sysfs defaults 0 0
起動時にマウントされるように、/etc/init.d/checkroot.shを以下のように変更。
--- checkroot.sh 2004/01/13 02:41:24 1.1 +++ checkroot.sh 2004/01/13 08:16:09 @@ -173,6 +173,7 @@ : > /etc/mtab mount -f -o remount / mount -f /proc + mount -t sysfs sysfs /sys [ "$devfs" ] && grep -q '^devfs /dev' /proc/mounts && mount -f "$devfs" fi
2005-03-03追記
いつの頃からかBackportsからudevがなくなっていた。なんで?
しかたないので、/etc/fstab
に以下を追加して、
none /dev/pts devpts defaults 0 0
/etc/init.d/mountall.sh
を以下のようにした。
[ "$VERBOSE" != no ] && echo "Mounting local filesystems..." mount -avt nonfs,nosmbfs,noncpfs,noproc,nodevpts mount -avt proc,devpts
2004-03-25追記
Backportsのudevを 0.014-0.backports.org.1 から 0.022-0.backports.org.1 にしたらsshで入れなくなった。
なんで今まで動いていたのかわからないけど、
原因は/dev/pts
をmountした後にudevdが/dev
をmountしていたためのようで、以下の変更でなおった。
/etc/fstab
に以下を追加。
none /dev/pts devpts defaults 0 0
/etc/init.d/mountall.sh
のmountにnodevptsを追加。
--- /etc/init.d/mountall.sh 2004/03/25 04:50:39 1.1 +++ /etc/init.d/mountall.sh 2004/03/25 04:53:31 @@ -11,7 +11,7 @@ # about this. So we mount "proc" filesystems without -v. # [ "$VERBOSE" != no ] && echo "Mounting local filesystems..." -mount -avt nonfs,nosmbfs,noncpfs,noproc +mount -avt nonfs,nosmbfs,noncpfs,noproc,nodevpts mount -at proc #
/etc/rcS.d/S35devpts.sh
を
/etc/rcS.d/S38devpts.sh
にmv。
/etc/rcS.d/
で、mountall.sh→udev→devpts.shの順に実行されるようになっているか確認。なっていなければ、SXXの数字を調整する。例えばこんな感じ。
S35mountall.sh S37udev S38devpts.sh
ls /etc/rc[1-6].d/*udev
してみて、SXXudevなsymlinkがあったら削除。
これで、/etc/rcS.d/
で以下のように実行されるようになりめでたしめでたし。
/dev
がudevdの支配下になる。
/dev/pts
をmountする。
特に理由はないけど、make-kpkgは使わないでコンパイル。
# cd /usr/src # tar jxf linux-2.6.1.tar.bz2 # ln -snf linux-2.6.1 linux # cd linux # make menuconfig # make clean bzImage modules modules_install | make depは必要ない。 # cp arch/i386/boot/bzImage /boot/bzImage-2.6.1 # cp System.map /boot/System.map-2.6.1 # vi /boot/grub/grub.conf # ln -s bzImage-2.6.1 /boot/bzImage # ln -s System.map-2.6.1 /boot/System.map
/boot/grub/grub.confはこんな感じ。
default 0 timeout 10 serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1 terminal --timeout=20 serial console title Debian GNU/Linux, current root (hd0,0) kernel (hd0,0)/bzImage root=/dev/hda3 ro console=ttyS0,9600n8 console=ttyUSB0,9600n8 console=tty0 title Debian GNU/Linux, current (recovery mode) root (hd0,0) kernel (hd0,0)/bzImage root=/dev/hda3 ro console=ttyS0,9600n8 console=ttyUSB0,9600n8 console=tty0 single title Debian GNU/Linux, old root (hd0,0) kernel (hd0,0)/bzImage.old root=/dev/hda3 ro console=ttyS0,9600n8 console=ttyUSB0,9600n8 console=tty0 title Debian GNU/Linux, kernel 2.6.1 root (hd0,0) kernel (hd0,0)/bzImage-2.6.1 root=/dev/hda3 ro console=ttyS0,9600n8 console=ttyUSB0,9600n8 console=tty0 title Debian GNU/Linux, kernel 2.4.23 root (hd0,0) kernel (hd0,0)/bzImage-2.4.23 root=/dev/hda3 ro console=ttyS0,9600n8 console=ttyUSB0,9600n8 console=tty0
どうでもいいけど、/usr/src/linux/.name が参照されなくなったみたい。
kernel 2.4のときから一切変更せずそのまま使えたものは以下の通り。
MODULE_0=i2c-isa MODULE_1=i2c-sis96x MODULE_2=it87 MODULE_3=i2c-devsensorsを実行すると温度が表示されないが、
/sys/bus/i2c/devices/0-0290/temp_*
を見れば温度がわかる。KERNEL="2.4"
を
KERNEL="2.6"
に変更して、
HotSaNIC/modules/diskio/platform/linux.pm
を以下のように変更。
--- HotSaNIC/modules/diskio/platform/linux.pm 2004/01/14 11:35:24 1.1 +++ HotSaNIC/modules/diskio/platform/linux.pm 2004/01/18 13:03:54 @@ -3,7 +3,7 @@ use RRDs; sub version { - ($VERSION = '$Revision: 1.30 $') =~ s/.*(\d+\.\d+).*/$1/; + ($VERSION = '$Revision: 1.30 $') =~ s/.*(\d+\.\d+).*/$1/; my $platform; foreach (keys(%INC)) { $platform=$_ if $_ =~ /platform/; } return "$platform $VERSION"; @@ -12,7 +12,23 @@ sub sample { my %args=@_; - if ($args{KERNEL} eq "2.4") { + @stats = (); + if ($args{KERNEL} eq "2.6") { + + open FILE, "< /proc/diskstats"; + while (<FILE>) { + chomp; + push @stats, $_ if / [hs]d. /; + } + close FILE; + foreach my $entry (@stats) { + $entry =~ s/^\s*//; + my ($num1,$num2,undef,$racc,$undef,$rblk,undef,$wacc,undef,$wblk,undef,undef,undef,undef) = split /\s+/, $entry; + $num = $num1 . '_' . $num2; + store_values($args{MODNAME},$num,$racc,$wacc,$rblk,$wblk,512); + } + + } elsif ($args{KERNEL} eq "2.4") { # disk_io: (8,0):(985065,41330,436455,943735,13075448) (8,1):(12563,6363,333604,6200,167608) (8,2):(11194,11012,90140,182,3160) open FILE,"/proc/stat"; while (<FILE>) { (undef,@stats)=split if /disk_io/; }
SENSOR=/proc/sys/dev/sensors/it87-isa-0290/temp1,1_temp1,M/B Temp,3,1,0,C SENSOR=/proc/sys/dev/sensors/it87-isa-0290/temp2,2_temp2,CPU Temp,3,1,0,C SENSOR=/proc/sys/dev/sensors/it87-isa-0290/temp3,3_temp3,Temp3,3,1,0,C SENSOR=/proc/sys/dev/sensors/it87-isa-0290/fan3,4_fan3,fan3,2,1,0,RPM SENSOR=/proc/sys/dev/sensors/it87-isa-0290/in0,5_in0,VCore 1,3,1,0,V SENSOR=/proc/sys/dev/sensors/it87-isa-0290/in1,6_in1,VCore 2,3,1,0,Vから
SENSOR=/sys/bus/i2c/devices/0-0290/temp1_input,1_temp1,M/B Temp,1,0.001,0,C SENSOR=/sys/bus/i2c/devices/0-0290/temp2_input,2_temp2,CPU Temp,1,0.001,0,C SENSOR=/sys/bus/i2c/devices/0-0290/temp3_input,3_temp3,Temp3,1,0.001,0,C SENSOR=/sys/bus/i2c/devices/0-0290/fan1_input,4_fan3,fan3,1,1,0,RPM SENSOR=/sys/bus/i2c/devices/0-0290/in0_input,5_in0,VCore 1,1,0.001,0,V SENSOR=/sys/bus/i2c/devices/0-0290/in1_input,6_in1,VCore 2,1,0.001,0,Vに変更。
SENSOR=/sys/bus/i2c/devices/0-0290/temp_input1,1_temp1,M/B Temp,1,0.001,0,C SENSOR=/sys/bus/i2c/devices/0-0290/temp_input2,2_temp2,CPU Temp,1,0.001,0,C SENSOR=/sys/bus/i2c/devices/0-0290/temp_input3,3_temp3,Temp3,1,0.001,0,C SENSOR=/sys/bus/i2c/devices/0-0290/fan_input3,4_fan3,fan3,1,1,0,RPM SENSOR=/sys/bus/i2c/devices/0-0290/in_input0,5_in0,VCore 1,1,0.001,0,V SENSOR=/sys/bus/i2c/devices/0-0290/in_input1,6_in1,VCore 2,1,0.001,0,V
temp_input1
→ temp1_input
のように、
番号の場所が変わった。
net.ipv4.tcp_timestamps = 1
と書いてあるし
nmap -O -p 80でuptimeがとれているのでNetcraftもそのうち対応してくれるといいなぁと。個人的に必要ないので試していないもの。