kernel 更新後の初回起動時にリビルドなどの処理を自動的にしてくれる init スクリプト
最近の Vine Linux 4.2/VineSeed は、 apt-get upgrade としたら、通常 kernel 関連パッケージも更新されてしまいます。このため、
- kernel 更新後の初回起動時に NVIDIA のドライバーモジュールをリビルドするのを忘れていて X が起動しなかったり、
- VMware Player の kernel モジュールのリビルドを忘れていて起動しなかったり、
- Vine に madwifi-hal のカーネルモジュールがないから、毎回ビルドしなきゃ!
など、うっかりとやってしまう場合がしばしばあります。
ということで、「起動時の処理や kernel 更新時への処理を、自前で init スクリプトを用意しときましょ!」それだけの話です。ハイ。某所向けに作成した init スクリプトを骨抜きしまくって作りました。
インストール方法を説明します。
- 以下のスクリプトをたとえば /etc/init.d/my-updates として保存します。具体的な処理については、適当に修正してください。以下のスクリプトはサンプルも兼ねています。
- /sbin/chkconfig my-updates on を実行します。
#!/bin/bash # $Id: my-updates,v 1.6 2009/05/08 17:57:34 munepi Exp $ # # my-updates my updates # # Author: munepi <munepi えっくすわいぜっと あっとまーく じーめーる どっと こむ> # chkconfig: 345 99 01 # description: automatically updates this system # processname: my-updates ### BEGIN INIT INFO # Provides: my-updates # Required-Start: nfslock rpcbind ypbind # Default-Start: 3 4 5 # Default-Stop: 0 1 2 6 ### END INIT INFO # source function library . /etc/rc.d/init.d/functions ARCH=$(uname -i) [ "$ARCH" = "i386" ] && ARCH=x86 RETVAL=0 MY_KERNEL_VERSION=/etc/my_kernel_version MY_EEEPC_HOSTNAME="eeevine" ## Shared Folders for VMware Player install -d -m0775 /tmp/vmware/ chown munepi:users /tmp/vmware/ ## for tmpfs install -m755 -d /var/cache/apt/archives/partial ### <eeevine> if [ "$(hostname)" = "${MY_EEEPC_HOSTNAME}" ]; then # Optional: swap zero echo 0 > /proc/sys/vm/swappiness fi ### </eeevine> ## automatically rebuild some kernel modules [ -f $MY_KERNEL_VERSION ] || \ echo "$(uname -r)" > $MY_KERNEL_VERSION MY_KERNEL=$(cat $MY_KERNEL_VERSION) NEW_KERNEL=$(uname -r) ## NVIDIA driver Rebuild_nvdrv(){ NVDRV_DIR=/park/src/nvidia echo -n " Rebuilding kernel modules for NVIDIA drivers ... " bash $(ls ${NVDRV_DIR}/*-${ARCH}-* | tail -1) -s > /dev/null 2>&1 echo "done." } ## VMware Player Rebuild_vmplayer(){ Rebuild_vmplayer_25x } ## VMware Player 2.5.x Rebuild_vmplayer_25x(){ echo -n " Rebuilding kernel modules for VMware Player ... " vmware-modconfig --console --install-all > /dev/null 2>&1 echo "done." # /etc/init.d/vmware restart > /dev/null 2>&1 } ## VMware Player 2.0.x Rebuild_vmplayer_20x(){ echo -n " Rebuilding kernel modules for VMware Player ... " yes | ${__sed} s/y// | sudo vmware-config.pl echo "done." /etc/init.d/vmware restart > /dev/null 2>&1 } ### <eeevine> ## eeevine-utils: run make install ## 701: madwifi-hal ## 901: rt2860sta Rebuild_eeevine(){ echo -n " Rebuilding kernel modules for Wireless LAN ... " pushd /usr/local/share/eeevine > /dev/null 2>&1 make install > /dev/null 2>&1 popd > /dev/null 2>&1 echo "done." } ### </eeevine> start(){ echo "Starting my updates: " if [ "$NEW_KERNEL" != "$MY_KERNEL" ]; then if [ "$(hostname)" = "${MY_EEEPC_HOSTNAME}" ]; then Rebuild_eeevine else Rebuild_nvdrv Rebuild_vmplayer fi echo $(uname -r) > $MY_KERNEL_VERSION fi RETVAL=$? [ $RETVAL -eq 0 ] && action "" /bin/true || action "" /bin/false } status(){ [ -f $MY_KERNEL_VERSION ] \ && echo "$(cat $MY_KERNEL_VERSION) done." \ || echo "none done." } case "$1" in start) start ;; status) status ;; *) echo $"Usage: $0 {start|status}" exit 1 esac exit 0 ### end of file