процесс установки:



runit сам супервизор
runit-services набор готовых сервисов для debian
socklog замена rsyslog
ipsvd Internet protocol service daemons
fgetty очень маленькая и шустрая замена getty и login (очень приятная штука, но с с проблемкой)
 Консоль:
aptitude install runit runit-run runit-services socklog socklog-run ipsvd fgetty

отвечаем утвердительно на вопрос о замене init на симлинк runit.
в принципе всё, можно перегружать систему ещё действующим супервизором
 Консоль:
init.sysv 6



но, лучше заранее подготовится.
проверяем какие сервисы у нас уже есть

update-service --list

смотрим что можно добавить из набора

ls /etc/sv/

добавим всё для комфортной работы по NFS и SSH

 Консоль:
update-service --add /etc/sv/portmap
update-service --add /etc/sv/rpc.statd
update-service --add /etc/sv/socklog-inet
update-service --add /etc/sv/ssh

теперь нужно подготовить скрипт инициации системы.


runit работает так:
1) запускается скрипт /etc/runit/1
2) запускается скрипт /etc/runit/2
3) запускаются демоны.
4) при выключении выполняется /etc/runit/3
/etc/runit/1  - в обязательном порядке должен монтировать файловую систему и /proc /dev etc..
затем выполнять некоторые необходимые функции, например установку времени, настройку сети и прочее.
/etc/runit/3 - должен делать всё на оборот, останавливать демоны, размонтировать файловую систему, запустить halt.


свой /etc/runit/1 я переработал следующим образом.
 Консоль:
#!/bin/dash
# system one time tasks

PATH=/command:/sbin:/bin:/usr/sbin:/usr/bin

############################################
mount -o remount,rw /
    #bootchartd init
    #bootchartd start
############################################
MDPRO(){
echo "MDPRO"
    modprobe -va loop coretemp lm90 sha512
    modprobe -v ramzswap backing_swap=/dev/sda1 memlimit_kb=190398
}
MDPRO
############################################
    mount -n -t proc  none /proc
    mount -n -t sysfs none /sys
    mount -n -t ramfs none /dev
    mknod -m 660 /dev/console c 5 1
    mknod -m 660 /dev/null c 1 3
    ln -snf /proc/self/fd /dev/fd
    ln -snf /proc/self/fd/0 /dev/stdin
    ln -snf /proc/self/fd/1 /dev/stdout
    ln -snf /proc/self/fd/2 /dev/stderr
    ln -snf /proc/kcore /dev/core
    mkdir /dev/pts
    mkdir /dev/shm
    chmod 777 /dev/shm
    mount -n -t devpts -o gid=5,mode=0620 none /dev/pts

    udevd --daemon
    udevadm trigger &
    udevadm settle &
#############################################
MTB(){
    echo "remount / rw"
    :>/etc/mtab
    mount -f /
    #cat /proc/mounts >> /etc/mtab
    awk '$2 != "/" {print}' /proc/mounts >> /etc/mtab
    for i in $(cut -d ' ' -f 2 </etc/mtab); do mount -f -o remount "$i"; done
    swapon /dev/ramzswap0
    swapon -s
    mount -aFt nocoda,nonfs,noproc,noncpfs,nosmbfs,noshm
}
MTB
###############################################
CLN(){
    echo "cleaning"
    rm -fv /etc/nologin
    rm -fv /etc/shutdownpid
    rm -fv /forcefsck
    rm -rvf /var/lock/*
    rm -rvf /var/run/*
    rm -rvf /tmp
    mkdir /tmp
    mkdir /tmp/.ICE-unix
    mkdir /tmp/.X11-unix   
    chmod 1777 /tmp
    chmod 1777 /tmp/.ICE-unix
    chmod 1777 /tmp/.X11-unix
    :> /var/run/utmp && chmod 0664 /var/run/utmp
   
}
CLN
#################################################
IFC(){
echo "IFUP"
    ifconfig lo 127.0.0.1 up
    ifconfig eth0 up
    ifconfig eth0 192.168.0.103 broadcast 192.168.0.255 netmask 255.255.255.0
    route add default gw 192.168.0.1 dev eth0
}
IFC
###############################################
SYSCTL(){
    sysctl -p
    atd -d
    }
SYSCTL &
###############################################
NSSW(){
echo "NSSW"
    ( [ -r /etc/domainname ] && domainname `cat /etc/domainname` ) &
    ( [ -r /etc/hostname ] && hostname `cat /etc/hostname` ) &
}
NSSW
###############################################
DBUS(){
if [ -e /var/run/dbus.pid ] ; then
rm /var/run/dbus.pid
fi
if [ ! -x /var/run/dbus ] ; then
install -m755 -g 81 -o 81 -d /var/run/dbus
fi
if [ -x /usr/bin/dbus-uuidgen ] ; then
dbus-uuidgen --ensure
fi
sed -i 's/^[[:space:]]*<fork\/>/<!--<fork\/>-->/;s/^[[:space:]]*\(<pidfile>.*<\/pidfile>\)/<!--\1-->/' /etc/dbus-1/system.conf
eval `dbus-launch --sh-syntax --exit-with-session`
dbus-daemon --system;
#sync;
hald --daemon=yes --use-syslog &
}
DBUS &
###############################################
    ( [ -e /var/log/dmesg.log ] && mv /var/log/dmesg.log /var/log/dmesg.log.1 ; dmesg > /var/log/dmesg.log ) &
touch /etc/runit/stopit
chmod 0 /etc/runit/stopit
exit 0


что это?
1) все команды которые можно выполнить в фоне, заканчиваются амперсандом.
2) я мог бы создать некий каталог и разбив всё это положить туда маленькими файлами, а запускать просто в цикле. но мне удобнее так. напоминает FreeBSD.
3) естественно если вдруг кто решит такое повторить, вам придётся переработать большую часть этого кода под свой дистрибутив и свои нужды.
4) можно запускать службы как /etc/init.d/blahblah start, но не для этого я отказываюсь от sysv-init


ну и /etc/runit/3 ответственный за выключение выглядит так:
 Консоль:
#!/bin/dash
PATH=/sbin:/bin:/usr/sbin:/usr/bin

echo 'Waiting for services to stop...'
sv -w196 force-stop /etc/runit/runsvdir/current/*
sv exit /etc/runit/runsvdir/current/*

echo 'Shutdown...'
killall5 -15
sleep 3
killall5 -9
sleep 1
swapoff -a
umount -a -r -t noramfs,notmpfs,nosysfs,noproc
mount -n -o remount,ro /
halt -w


if [ -x /etc/runit/reboot ]
then
    /sbin/reboot -d -f -i
else
    /sbin/poweroff -d -f -h -i
fi




если что то сломалось, при загрузке даём ядру знать что хотим старый init

init=/sbin/init.sysv

UPD
у fgetty выплыла неприятная особенность, он не работает с debian testing но работает с Sid.
связанно это с отсутствием понимания sha512 шифрования.
если он не работает, его следует выпилить загрузившись с диска или по ssh.