はじめに

このメモについて

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をインストールした際のメモっす。
あくまで個人的なメモなので、何をも保証するものではありませんのであしからず。

環境

ハードウエア
Shuttle SS51G(V2.0)
MB
FS51 V2.0 (Socket 478 400/533MHz FSB Pentium 4 & Celeron)
CPU
Intel Celeron 2.0GHz
memory
512MB (256MB PC2700 DDR SDRAM DIMM × 2)
IDE
HDD
Seagate, ST380011A, UltraATA100/80GB/7200rpm
CD-ROM
LG CD-ROM CRD-8522B (52xCD-ROM)
Video
SiS 651, performance 256-bit 3D engine
NIC
Realtek 8100B
Sound
Sound: Realtek ALC 650 supports 5.1 channel audio, Support Digital SPDIF In/Out
ソフトウエア
Linux
ディストリビューション
Debian GNU/Linux 3.0r2
(2003-01-17現在のstable = woody)
カーネル
2.6.1 (vanilla)

なぜstableか

大した仕事はしないものの24時間稼働のサーバーとして使うつもりなので、 kernelは2.6系にするものの、 安定性の向上とバージョンアップの頻度を減らすためstableを基本とし、 極力stableのdebパッケージを使うようにしようかなぁと思う。

バージョンアップが必要なもの

バージョンの確認

kernelを展開して、Document/Changesを読んでバージョンアップが必要なものを確認。

そのままでよいもの
Gnu C
Gnu make
binutils
util-linux
バージョンアップ/インストールが必要なもの
module-init-tools
e2fsprogs
procps
使用していないので無視したもの
jfsutils
reiserfsprogs
xfsprogs
pcmcia-cs
quota-tools
PPP
isdn4k-utils
nfs-utils
oprofile

入れなければならないものがわかったところで、どうやってインストールするか考えた。
ソースを持ってきて自前でコンパイルしてインストールするのが一番手っ取り早いが、同名のstableのパッケージが更新された場合に上書きされてしまう可能性があり、また、今後のバージョンアップも自前で行わなければならなく手間が増えるのでこれは却下。
次にtestingやunstableのパッケージを必要なものだけ拝借しようと考えたが、依存関係でlibcなど大物パッケージの入れ替えも必要で、結局殆んどtesting/unstableと同じ環境になってしまいそうだったのでこれも断念。
仕方ないので自前でdebパッケージを作ってholdしようかなぁと考えていたところ、 Debian GNU/Linux スレッドテンプレDebian Backportsというプロジェクト発見。 とりあえずここので必要そうなものは揃いそうだったので、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。

その他、入れ替えが必要だったもの

sysstat
sysstatに含まれるiostatが正しく動かなかった。
sysstatのページによれば、v4.1.7からkernel 2.6に対応しているとのこと。 v5.0.0付属のiostatで正常動作するのを確認済。
lm_sensors
i2cはkernel 2.6に内包されているので必要ない。
lm_sensorsは2.8.3でkernel 2.6.1に対応。因みにkernel 2.6.0の場合はlm_sensors 2.8.2を使う必要があるみたい。 で、ドライバもkernel 2.6に内包されているので、lm_sensorsでは make user && make user_installだけでOK。
2004-04-05追記
kernel 2.6.5では、lm_sensorsのsensorsコマンドはCVS版を使う必要があった。 まぁそのうちkernel 2.6.5に対応したリリース版が出ると思われる。
2004-02-19追記
2.6 Kernel Informationによれば、kernel 2.6.3-rc2以降ではCVS版のlm_sensorsを使うようにとあるが、とりあえずkernel 2.6.3でもlm_sensors 2.8.4が使えてる。
2004-02-07追記
2004-02-07にlm_sensors 2.8.4が出た。kernel 2.6.2向けという位置づけのよう。

変更が必要なファイル

/etc/modprobe.conf

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

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

devpts

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/で以下のように実行されるようになりめでたしめでたし。

  1. S35mountall.sh … devptsはmountされない。
  2. S37udev … /devがudevdの支配下になる。
  3. S38devpts.sh … /dev/ptsをmountする。

kernelのコンパイル

特に理由はないけど、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のときから一切変更せずそのまま使えたものは以下の通り。

grub
OSとは関係ないけど
kernelのserial consoleの機能
kernelの設定次第だけど
Apache 2
debじゃなくて自前でコンパイルしたもの
djbdns
dhcp3

修正が必要だったもの

lm_sensors
kernel 2.4のときにはi2c-sis5595でなぜか動いていたが、よく調べると正しくはi2c-sis645。 で、kernel 2.6ではi2c-sis645はi2c-sis96x.cに改名。 従って/etc/default/lm_sensorsはこんな感じ。
MODULE_0=i2c-isa
MODULE_1=i2c-sis96x
MODULE_2=it87
MODULE_3=i2c-dev
sensorsを実行すると温度が表示されないが、 /sys/bus/i2c/devices/0-0290/temp_* を見れば温度がわかる。
しかし、kernel 2.4の時は取れていた CPU温度とファンの回転数が正しく取れなくなってしまった。 まぁ他の二つの温度はちゃんと取れているようだし、 そのうち直るだろうということで。
HotSaNIC 0.5.0-pre4
いろいろ動かなくなった。
system
/proc/meminfoの形式が変わったため、memとswapのための値が取れなくなっていた。
HotSaNIC/modules/system/platform/linux.pm を見たところ、kernel 2.5以上の場合のコードがコメントアウトされていたので、これを有効にした。
diskio
ディスク I/Oの情報が/proc/statから/proc/diskstatに移動し、形式も変更になったのが原因。 /proc/diskstatの形式については、 /usr/src/linux/Documentation/iostats.txt を参照。
HotSaNIC/modules/diskio/settingの 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/; }

sensors
/proc/下のパスが変わったのと、その形式が変わったのが原因。
HotSaNIC/modules/sensors/settingsを、
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
に変更。
kernel 2.6.4以前は以下の設定だった。
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
2004-04-05追記
kernel 2.6.5でi2cのデバイス名が変わった。 temp_input1temp1_inputのように、 番号の場所が変わった。

動かなくなったもの

Netcraft Uptime Survey
NetcraftのUptime Surveyでuptimeのグラフが表示されなくなった。
NetcraftのFAQ、 Which operating systems provide uptime information ? によれば、kernel 2.5.25からは対応していないのでしょうがないんだけど、 /etc/sysctl.confにはnet.ipv4.tcp_timestamps = 1と書いてあるし nmap -O -p 80でuptimeがとれているのでNetcraftもそのうち対応してくれるといいなぁと。
ちなみに、uptimeの仕組みについては(ひ)メモにちろっと書いてあるっす。

試していないもの

個人的に必要ないので試していないもの。

VGA
キーボード
マウス
sshとシリアル (grub+kernel+getty) でログインしているので、 これらは使ってないっす。
「\」や「|」が入力できない場合は以下のページが参考になるかも。
USB

後日談

2005-03-03
devptsにudevがなくなったことを追記。
2004-08-15
kernel 2.6.8が出たので入れ替え。特に問題なし。
2004-07-30
kernel 2.6.7が出たので入れ替え。特に問題なし。
2004-05-19
kernel 2.6.6が出たので入れ替え。特に問題なし。
2004-04-05
kernel 2.6.5が出たので入れ替え。
lm_sensorsのsensorsコマンドはCVS版を使う必要があった。まぁそのうちkernel 2.6.5に対応したリリース版が出ると思われる。
修正が必要だったものに追記。 i2cのデバイス名が変わったので、HotSaNICのsensorモジュールの設定を変更する必要があった。
2004-03-25
devptsを追記。
2004-03-23
Debian BackportsのURLを http://backports.azumanga-daioh.org/ から http://backports.mithril-linux.org/ に変更。
参照: [debian-users:39984] backportsサーバについて (Re: woodyでBroadcomのNICを使いたい)
2004-03-12
kernel 2.6.4が出たので入れ替え。特に問題なし。
2004-02-25
lm_sensors 2.8.4が出たので追記
動かなくなったものにNetcraftのuptimeを追記。
2004-02-19
kernel 2.6.3が出たので入れ替え。特に問題なし。
2004-02-05
kernel 2.6.2が出たので入れ替え。特に問題なし。

目次

リンク