wie hier http://forum.tuxbox-cvs.sourceforge.net ... 25#p369425 angekündigt, habe ich mal einen proof-of-concept gemacht, um aus der grossen rcS mehrere kleine init-skripten zu machen.
Getestet habe ich es auf der dm500. Der tarball (Inhalt von cdk/root_dream/etc/init.d) ist hier: new-init.tar.gz
So sieht das dann bei mir aus:
Code: Alles auswählen
dm500 login: root
BusyBox v1.14.3 (2009-08-25 13:21:23 CEST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
~ > cd /etc/init.d/
/etc/init.d > ls -l
-rwxr-xr-x 1 root root 1339 Aug 25 14:27 K30autofs
-rwxr-xr-x 1 root root 1478 Aug 25 14:27 S01mount
-rwxr-xr-x 1 root root 123 Aug 25 14:27 S02devicelinks
-rwxr-xr-x 1 root root 246 Aug 25 14:27 S10network
-rwxr-xr-x 1 root root 131 Aug 25 14:27 S15syslogd
-rwxr-xr-x 1 root root 82 Aug 25 14:27 S20inetd
-rwxr-xr-x 1 root root 1339 Aug 25 14:27 S30autofs
-rwxr-xr-x 1 root root 218 Aug 25 14:27 S75gui
-rwxr-xr-x 1 root root 672 Aug 25 14:27 functions
-rwxr-xr-x 1 root root 70 Aug 25 14:27 rcK
-rwxr-xr-x 1 root root 575 Aug 25 14:27 rcS
-rwxr-xr-x 1 root root 1030 Aug 25 14:27 start_neutrino
Code: Alles auswählen
/etc/init.d > cat functions
# common functions for init scripts
get_TZ() {
[ -e /var/etc/TZ ] && read TZ < /var/etc/TZ && return
[ -e /etc/TZ ] && read TZ < /etc/TZ
}
run_initscripts() {
if [ "x$1" == xstop ]; then
action="stop"
files="/var/etc/init.d/K* /etc/init.d/K*"
else
action="start"
files="/var/etc/init.d/S* /etc/init.d/S*"
fi
names=$(for file in $files ; do echo ${file##*/} ; done | sort -u)
for name in $names; do
if [ -x "/var/etc/init.d/$name" ]; then
echo "${action}ing /var/etc/init.d/$name ..."
/var/etc/init.d/$name $action
elif [ -x "/etc/init.d/$name" ]; then
echo "${action}ing /etc/init.d/$name ..."
/etc/init.d/$name $action
fi
done
}
Gestartet wird das aus einer sehr einfachen /etc/inittab:
Code: Alles auswählen
/etc > cat inittab
# ::sysinit:/etc/init.d/sysinit # unused
::once:/etc/init.d/rcS
# this sucks
::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/etc/init.d/rcK
Leider kann ich es momentan nicht auf der dbox testen, aber auch dort sollte es ziemlich ähnlich gehen.
Der Startvorgang geht so:
- es werden alle Skripte in /etc/init.d/ und /var/etc/init.d/, die mit "S" beginnen, der Reihe nach ausgeführt
- /var/etc/init.d hat eine höhere Priorität als /etc/init.d/, also wenn in beiden Verzeichnissen ein "S99foo" liegt, wird das in /var/etc/init.d/ ausgeführt.
Beim Herunterfahren ist es dasselbe, nur das die Skripte, die mit "K" beginnen ausgeführt werden.
Damit man dasselbe Skript als start-(S)- und stop-(K)-skript verwenden kann, wird den skripten noch der Parameter "start" bzw. "stop" mitgegeben, den die auswerten können.
Bei mir funktionierts