あらいです。
Subject のように、Kernel 2.6.4 を導入してみました。
Vine のバージョンは、2.6 のツリーに対して apt で upgrade してるので、
2.6r4 相当になっていると思います。
以下の二つの方針のもとにやりました。
・2.4.X でのブートもこれまで通りできるようにする
・ブート時の / への書き込みは避ける
手順は、以下の通り。
(1) カーネルを作成し、インストールする
(2) module-init-tools-3.0 をインストールする
(3) /etc/rc.d の下のファイルをいじる
順に行きます。
(1)
特に変わったことはしませんでした。ただ、どれもモジュールにはせず、必
要なものは全てカーネルに組み込んでしまいました。
最初は、module-init-tools への移行が面倒かなと思ったのでこうしたので
すが、結局手間は変わりませんでした。
(2)
上記の方針に沿うように、modutils はそのまま残し(.old にする方式は避
けた)、/opt/2.6env というディレクトリを作って、そこにインストールしま
した。
最初は /usr/local にしたのですが、/usr をマウントする前にも必要にな
ることがわかり、/ に入れました。
#ちなみに私は FHS を読んでません(^_^;)。
(3)
Kernel 2.6 のときだけ module-init-tools のコマンドを使用するように
$PATH を設定しました。これには、/etc/rc.d/init.d/functions を変更しま
した。差分を添付します。
なお、モジュール構成の変更に対応するため、$MODULECONF も変更していま
す。Kernel 2.6 用に /etc/modules.conf.2.6 というのを用意しました。
同様に、rc.sysinit も変更しました。これも差分を添付します。
rc.sysinit では、カーネルパラメータ kernel.modprobe の設定を行う箇所
を移動してますが、これは、hwclock 実行時に kernel.modprobe を参照して
いると思われるためです。
#ちなみに、Kernel 2.6.3 の時にはそのようなことはありませんでした。
更に、/etc/rc.d/init.d の下の各スクリプトも変更しました。
module-init-tools に含まれるコマンド(modprobe, lsmod など)をフルパ
スで起動している箇所を、パス指定なしで起動するようにしました。$PATH は、
/etc/rc.d/rc が functions 経由で指定してくれている筈です。
関連して、/etc/rc.d/init.d/functions を呼んでいない場合は呼ぶように
変更しました。これは、rc からではなくコマンドラインから呼ぶときにも確
実に PATH が設定されるようにするためです。
#これは、Vine ではパッケージのアップデートが頻繁でないからできるのか
#も知れませんね(^_^;)。
さて、以上の作業でとりあえず問題なく使えています。
ただ、murasaki その他、これまで BEEP音が鳴っていた箇所で音がしなくなっ
てしまいました。
また、rc.sysinit の /proc/ksyms 関連の箇所の変更は、意味もわからずやっ
ているので、正しいかどうかよくわかりません。
なお、本題とは離れますが、これまではモジュール es1371 の
post-install でコマンド /bin/aumix-minimal を起動してましたが、カーネ
ルに組み込んでしまったため、これは /etc/rc.d/rc.local に移動しました。
それでは、RFC(コメント求む)!
--
新井 俊一 <ARAI Shun-ichi>
arai@xxxxxxxxxxx
--- functions 2004-03-08 23:04:30+09 1.1
+++ functions 2004-03-09 22:55:03+09
@@ -19,6 +19,10 @@
# First set up a default search path.
export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin"
+case "`uname -r`" in
+2.6.*) export PATH=/opt/2.6env/sbin:/opt/2.6env/bin:$PATH
+ export MODULECONF=/etc/modules.conf.2.6 ;;
+esac
# Get a sane screen width
[ -z "${COLUMNS:-}" ] && COLUMNS=80
--- rc.sysinit 2004-03-08 23:01:07+09 1.1
+++ rc.sysinit 2004-03-12 00:11:37+09
@@ -61,6 +61,29 @@
# Configure kernel parameters
action $"Configuring kernel parameters: " sysctl -e -p /etc/sysctl.conf
+case "`uname -r`" in
+2.6.*) ksyms=/proc/kallsyms ;;
+*) ksyms=/proc/ksyms ;;
+esac
+if ! grep -iq nomodules /proc/cmdline >/dev/null 2>&1 && [ -f "$ksyms" ]; then
+ USEMODULES=y
+else
+ USEMODULES=
+fi
+
+if [ -f /proc/sys/kernel/modprobe ]; then
+ if [ -n "$USEMODULES" ]; then
+ case "`uname -r`" in
+ 2.6.*) sysctl -w kernel.modprobe="/opt/2.6env/sbin/modprobe" >/dev/null 2>&1 ;;
+ *) sysctl -w kernel.modprobe="/sbin/modprobe" >/dev/null 2>&1
+ esac
+ sysctl -w kernel.hotplug="/sbin/hotplug" >/dev/null 2>&1
+ else
+ # We used to set this to NULL, but that causes 'failed to exec' messages"
+ sysctl -w kernel.modprobe="/bin/true" >/dev/null 2>&1
+ sysctl -w kernel.hotplug="/bin/true" >/dev/null 2>&1
+ fi
+fi
# Set the system clock.
ARC=0
@@ -160,7 +183,7 @@
# Initialize USB controller and HID devices
usb=0
if ! grep -iq "nousb" /proc/cmdline 2>/dev/null && ! grep -q "usb" /proc/devices 2>/dev/null ; then
- aliases=`/sbin/modprobe -c | awk '/^alias usb-controller/ { print $3 }'`
+ aliases=`modprobe -c | awk '/^alias usb-controller/ { print $3 }'`
if [ -n "$aliases" -a "$aliases" != "off" ] ; then
modprobe usbcore
action $"Mounting USB filesystem: " mount -t usbdevfs usbdevfs /proc/bus/usb
@@ -404,17 +427,15 @@
IN_INITLOG=
fi
-if ! grep -iq nomodules /proc/cmdline >/dev/null 2>&1 && [ -f /proc/ksyms ]; then
- USEMODULES=y
-else
- USEMODULES=
-fi
-
# Our modutils don't support it anymore, so we might as well remove
# the preferred link.
rm -f /lib/modules/preferred
rm -f /lib/modules/default
-if [ -x /sbin/depmod -a -n "$USEMODULES" ]; then
+case "`uname -r`" in
+2.6.*) DEPMOD=/opt/2.6env/sbin/depmod ;;
+*) DEPMOD=/sbin/depmod ;;
+esac
+if [ -x "$DEPMOD" -a -n "$USEMODULES" ]; then
# If they aren't using a recent sane kernel, make a link for them
if [ ! -n "`uname -r | grep -- "-"`" ]; then
ktag="`cat /proc/version`"
@@ -442,12 +463,12 @@
# Vine: commentted out the lines regarding iff they need persistent DMA buffers
#if grep -q "options sound dmabuf=1" /etc/modules.conf 2>/dev/null ; then
RETURN=0
- alias=`/sbin/modprobe -c | awk '/^alias sound / { print $3 }'`
+ alias=`modprobe -c | awk '/^alias sound / { print $3 }'`
if [ -n "$alias" -a "$alias" != "off" ] ; then
action $"Loading sound module ($alias): " modprobe $alias
RETURN=$?
fi
- alias=`/sbin/modprobe -c | awk '/^alias sound-slot-0 / { print $3 }'`
+ alias=`modprobe -c | awk '/^alias sound-slot-0 / { print $3 }'`
if [ -n "$alias" -a "$alias" != "off" ] ; then
action $"Loading sound module ($alias): " modprobe $alias
RETURN=$?
@@ -459,17 +480,6 @@
action "Loading mixer settings: " /bin/aumix-minimal -f /etc/.aumixrc -L
fi
-if [ -f /proc/sys/kernel/modprobe ]; then
- if [ -n "$USEMODULES" ]; then
- sysctl -w kernel.modprobe="/sbin/modprobe" >/dev/null 2>&1
- sysctl -w kernel.hotplug="/sbin/hotplug" >/dev/null 2>&1
- else
- # We used to set this to NULL, but that causes 'failed to exec' messages"
- sysctl -w kernel.modprobe="/bin/true" >/dev/null 2>&1
- sysctl -w kernel.hotplug="/bin/true" >/dev/null 2>&1
- fi
-fi
-
# Load Japanese unicon module
case "$LANG" in
ja_JP.eucJP|ja_JP.ujis|ja_JP)
@@ -776,7 +786,7 @@
/bin/uname -a;
/bin/cat /proc/cpuinfo;
/bin/cat /proc/modules;
- /bin/cat /proc/ksyms) >/var/log/ksyms.0
+ /bin/cat "$ksyms") >/var/log/ksyms.0
# create the crash indicator flag to warn on crashes, offer fsck with timeout
touch /.autofsck
sleep 1