kernel 2.6.27 pre-releaseのバグ

ここより要約

e1000eモジュールでサポートされるIntel 82566と82567のネットワークインターフェース(ICH8とICH9のチップセットの一部分)のEEPROMデータが壊れてしまい、使えなくなってしまう。

自分のPCがこの影響を受けるかどうかは以下のようにして確認できる。

# lspci | grep 8256[67]

上のコマンドで出力があれば、この問題の影響を受ける。出力がない場合は影響を受けない可能性が高いが、以下のコマンドによりe1000eモジュールを使っているかを確認できる。

# /sbin/lsmod |grep e1000e

上のコマンドで出力があれば、e1000eが使われており、影響を受ける可能性がある。

以下のコマンドを使えば、EEPROMデータをバックアップできる。

#ethtool -e ethX > savemyeep.txt

ethXは通常eth0などとなる。

カーネルの置き換えができない場合、networkサービスの停止後以下のコマンドでe1000eを無効にできる。
# modprobe -r e1000e
# rm -f /lib/modules/2.6.27*/kernel/drivers/net/e1000e/e1000e.ko.gz
# depmod -a

この問題が発症するとグラフィックドライバによりカーネルパニックを起こし、ネットワークが使えなくなる。直すにはマザーボードのBIOSを更新すればいいのかもしれない。

apt-getでkernelをアップグレードから除外する

vmwareでlinuxを動かしていると、カーネルのアップグレードがあるたびに面倒なことになるので、apt-get upgradeしたときカーネルをアップグレードしない方法を調べてみた。

ここではdebianを使って行った。

$ cat /etc/debian_version
4.0
$ uname -r
2.6.18-6-486

# apt-get upgrade -s
Reading package lists... Done
Building dependency tree... Done
The following packages will be upgraded:
cupsys cupsys-bsd cupsys-client cupsys-common libcupsimage2 libcupsys2 libfreetype6 libfreetype6-dev libtiff4 libxml2
libxml2-utils libxslt1.1 linux-image-2.6.18-6-486 linux-source-2.6.18 openssh-client openssh-server python-libxml2
xsltproc

upgrade に-sをつけてシミュレーションで動かすと、inux-image-2.6.18-6-486とlinux-source-2.6.18がアップグレード対象であることがわかる。

wajigを使ってholdする

# apt-get install wajig

# wajig hold linux-image-2.6.18-6-486 linux-source-2.6.18
The following packages are on hold:
linux-image-2.6.18-6-486
linux-source-2.6.18

これでこれら2つのパッケージはアップグレードされないと思うので再び以下のように確認してみる。

# apt-get upgrade -s
Reading package lists... Done
Building dependency tree... Done
The following packages have been kept back:
linux-image-2.6.18-6-486 linux-source-2.6.18
The following packages will be upgraded:
cupsys cupsys-bsd cupsys-client cupsys-common libcupsimage2 libcupsys2 libfreetype6 libfreetype6-dev libtiff4 libxml2
libxml2-utils libxslt1.1 openssh-client openssh-server python-libxml2 xsltproc

2つのパッケージがkept backになっているのでアップグレードされないのだろう。wajigはdpkgレベルで動くものらしく、上記のholdコマンドはたぶん以下のようにdpkgの–get-selectionsや–set-selectionsを使っていると思われる。

# dpkg --get-selections | grep hold
linux-image-2.6.18-6-486 hold
linux-source-2.6.18 hold

wajigでholdしたものは以下のようにして元に戻す。

# wajig unhold linux-image-2.6.18-6-486 linux-source-2.6.18
The following packages are still on hold:

/etc/apt/preferencesを使う方法

aptにはパッケージをpinする機能があるらしく、以下のような手順で実現した。

# dpkg-query --list|grep linux-image
ii linux-image-2.6-486 2.6.18+6etch3 Linux kernel 2.6 image on x86
ii linux-image-2.6.18-6-486 2.6.18.dfsg.1-22 Linux 2.6.18 image on x86
# dpkg-query --list|grep linux-source
ii linux-source-2.6.18 2.6.18.dfsg.1-22 Linux kernel source for version 2.6.18 with

# vi /etc/apt/preferences

# apt-get upgrade -s
Reading package lists... Done
Building dependency tree... Done
The following packages will be upgraded:
cupsys cupsys-bsd cupsys-client cupsys-common libcupsimage2 libcupsys2 libfreetype6 libfreetype6-dev libtiff4 libxml2
libxml2-utils libxslt1.1 openssh-client openssh-server python-libxml2 xsltproc

2つのパッケージがアップグレード対象から消えた。

debianでカーネル構築

フォルダ作成

$ mkdir ~/MYK
$ cd ~/MYK


http://kernel.org/pub/linux/kernel/v2.6/から最新カーネルGET

$ ls
linux-2.6.24.tar.bz2

デフォルトの.configを/bootから持ってくる。

$ tar xjf linux-2.6.24.tar.bz2
$ cd linux-2.6.24/
$ cp /boot/config-2.6.18-6-486 ./.config

menuconfigを起動

$ make menuconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/docproc
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/kxgettext.o
HOSTCC scripts/kconfig/lxdialog/checklist.o
In file included from scripts/kconfig/lxdialog/checklist.c:24:
scripts/kconfig/lxdialog/dialog.h:32:20: error: curses.h: No such file or directory
...............

menuconfigがエラー。ncursesがないのでインストール

$ apt-cache search ncurses|grep dev
btscanner - ncurses-based scanner for Bluetooth devices
lib64ncurses5-dev - Developer's libraries for ncurses (64-bit)
libncurses5-dev - Developer's libraries and docs for ncurses
libncursesw5-dev - Developer's libraries for ncursesw
librote-dev - a simple C library for VT102 terminal emulation - development
libtexttools-dev - Ada and C++ library for writing console applications

$ sudo apt-get install libncurses5-dev

もう一度menuconfig

$ make menuconfig

こんどは成功。ここでいろいろなコンパイルオプションを選択できる。

menuconfig.png

コンパイル開始

$ sudo make-kpkg --initrd --revision=mykernel.1.0 kernel_image

あとは以下のコマンドでインストールできるようだ。(実際はやってない)

# dpkg --install ../linux-image-2.6.24_mykernel.1.0_i386.deb

(参考)
http://www.debian.org/doc/FAQ/ch-kernel.en.html
http://www.togaware.com/linux/survivor/Why_make_kpkg.html