vine-users ML アーカイブ



[vine-users:065046] Vine 2.6r4 で Kernel 2.6.4

  • From: ARAI Shun-ichi <arai@xxxxxxxxxxx>
  • Subject: [vine-users:065046] Vine 2.6r4 で Kernel 2.6.4
  • Date: Mon, 15 Mar 2004 00:21:05 +0900 (JST)
あらいです。

 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