Debian: Startup-Scripte disablen
Ich nutze "Debian unstable", das seinen Namen verspottet und alles andere als unstabil ist. Unstabil sind nur die Versionsnummern: es gibt hier keine festen Releases, sondern ein neues Softwarepaket wird in "Debian unstable" aufgenommen, sobald es fertig ist.
Genauso mag ich's, ich will nicht alle halbe Jahre auf eine komplett neue Distro umsteigen, sondern lieber zwischendrin inkrementell upgraden.
Wenn ich apt-get update; apt-get dist-upgrade
aufrufe, werden jeweils die neuesten
Pakete installiert. Fein !
Doch halt: einige Pakete enthalten Daemons oder sonstige Startup-Scripte.
Und die werden dann künftig automatisch gestartet. Das kostet (Boot-)Zeit
und (Speicher-)Platz. Manchmal kann man den Start in /etc/default
abschalten,
aber manchmal eben auch nicht.
Dagegen hilft dieses Script:
#!/bin/sh
DISABLE="\
mountnfs.sh \
umountnfs.sh \
mountnfs-clean.sh \
acpid \
hwclock.sh \
hwclockfirst.sh \
mysql \
rsync \
sudo \
"
DIRS="rcS.d rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d"
for dir in $DIRS; do
cd /etc/$dir
for script in $DISABLE; do
X=`ls [KS][0-9][0-9]$script 2>/dev/null` || continue
mkdir -p disabled
echo "Disabling $dir/$X ..."
mv $X disabled
done
done
Alle ungewünschten Scripte landen in dem Unterverzeichnis "disabled" und werden beim nächsten Systemstart übergangen.
Bei einem auf Debian-basierenden Embedded-System lösche ich mit diesem Ansatz
auch diverse Scripte in /etc/network/if-{up,down}
:
#!/bin/sh
orig=`pwd`
disableInit () {
for dir in rcS.d rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d; do
cd $orig/etc/$dir
X=`ls [KS][0-9][0-9]$1 2>/dev/null` && {
mkdir -p disabled
echo "Disabling etc/$dir/$X ..."
mv $X disabled
}
done
}
disableNet() {
for dir in if-up.d if-down.d if-post-down.d if-pre-up.d; do
cd $orig/etc/network/$dir
X=`ls $1 2>/dev/null` && {
mkdir -p disabled
echo "Disabling networking/$dir/$X ..."
mv $X disabled
}
done
}
# bitte kein /var/lib/dmesg
disableInit bootlogs
# wir haben kein bootlogd
disableInit bootlogd
disableInit stop-bootlogd
disableInit stop-bootlogd-single
# /etc/mtab zeigt auf /proc/mounts
disableInit mtab.sh
disableInit udev-mtab
# scheint auch so wunderbar zu funktionieren
disableInit keyboard-setup
# Wir haben keinen speziellen Consolen-Font
disableInit console-setup
# Derzeit ist nichts in /etc/sysctl.conf
disableInit procps
# Wir haben kein NFS
disableInit mountnfs.sh
disableInit mountnfs-bootclean.sh
disableInit umountnfs.sh
disableNet mountnfs
# Wir haben nur ein Rootfs, und das wird durch checkfs.sh gecheckt
disableInit checkfs.sh
# RSYNC läuft nie als Daemon
disableInit rsync
# NTP vorerst aus
disableNet ntpdate
# Wir brauchen keine Uhrzeit zu holen, das macht der Linux-Kernel von selbst
disableInit hwclock.sh
disableInit hwclockfirst.sh
# Es ist alles gemountet
disableInit mountall.sh
disableInit mountall-bootclean.sh
# Wir haben immer genug Platz zum Einloggen
disableInit mountoverflowtmp
# kbd hat nichts mit dem Keyboard zu tun, sondern lädt einen Font für die Console
disableInit kbd
# PCMCIA ist fest in den Kernel compiliert, keine Grund, Module zu laden
disableInit pcmciautils
# lädt alle Module in /etc/modules, aber das File ist bei uns leer
disableInit module-init-tools
# löscht irgendwelche nvi-Backup-Dateien
disableInit nviboot
# mit aufs als /media/realroot brauchen wir nicht aufzuräumen
# einige Dinge, wie x11-common und bootmisc.sh, übernimmt
# /etc/init.d/realroot.sh nebenbei mit
disableInit rmnologin
disableInit ifupdown
disableInit ifupdown-clean
disableInit x11-common
disableInit bootmisc.sh
disableInit mountdevsubfs.sh
# Das Unmounten geht mit realroot leider nicht ohne Fehlermeldung und ist
# sowieso nicht notwendig
disableInit umountfs
disableInit umountroot
# kein File für /dev/urandom
disableInit urandom
exit 0