Home » Linux » disable-services

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