Initscript für Usermode Linux
Posted: Fri Oct 08, 2004 9:26 pm
Ich habe ein wenig mit Usermode-Linux experimentiert und möchte hier mein passendes Init-Script vorstellen. Die Grundversion war mal in einer älteren PC-Zeitschrift vorgestellt. Habs mir ein wenig modifiziert, speziell um Netzwerkeinrichtung. Wems hilft...
english users can found the following comments at http://forums.gentoo.org/viewtopic-p-20 ... ml#2093976
$USER ist ein normaler User unter dessen Account die Maschine läuft um die nicht als root zu starten.
$NICE ist optional
$REMOTE_IP wird hier nicht benötigt, steht aber zu "Merkezwecken" gleich mit drin. Diese sollte dann in der UML-Maschine mit den üblichen Werkzeugen gesetzt werden.
$CONSOLE ist hier auf "null" gesetzt weil ich die Maschine nicht booten sehen will. Ich erreiche sie ja später mit dem Kommando:
Alle $MAC müssen meiner Erfahrung nach mit "fe:fd" beginnen um gesetzt zu werden.
Für das Stoppen wird hier der Befehl cad der uml_mconsole verwendet. Hierzu muss der Eintrag in der /etc/inittab (der virtuellen Maschine) entsprechend geändert werden.
Streiche: ca
ctrlaltdel:/sbin/shutdown -r now
Setze: ca
ctrlaltdel:/sbin/halt
Das Script läuft nicht korrekt wenn /tmp als noexec gemountet ist. Keine Ahnung warum... wer's weiß bitte melden.
Feedback welcome
Code: Select all
#!/sbin/runscript
USER="uml_user"
UMID="uml_id"
UMLDIR="/mnt/umls/${UMID}"
#NICE="/usr/bin/nice -n 2"
DISKS="ubd0=${UMLDIR}/root_fs ubd1=${UMLDIR}/swap_fs"
CONSOLE="con0=null con=pts"
RAM="20M"
DEVICE="tap0"
LOCAL_IP="192.168.0.254"
REMOTE_IP="192.168.0.1"
NETMASK="255.255.255.0"
MAC="fe:fd:aa:bb:cc:dd"
start() {
ebegin "Booting up usermode linux id: ${UMID} "
/usr/bin/tunctl -u ${USER} -t ${DEVICE} > /dev/null
/sbin/ifconfig ${DEVICE} mtu 1484 ${LOCAL_IP} netmask ${NETMASK} up
${NICE} /usr/bin/sudo -H -u ${USER} /usr/bin/screen -d -m ${UMLDIR}/linux umid=${UMID} mem=${RAM} ${DISKS} ${CONSOLE} eth0=tuntap,${DEVICE},${MAC}
eend $?
}
stop() {
ebegin "Shutting down usermode linux id: ${UMID} "
/usr/bin/sudo -H -u ${USER} /usr/bin/uml_mconsole ${UMID} cad &> /dev/null
einfon "Waiting ."
while ps aux | grep "${UMLDIR}/linux umid=${UMID}" | grep -v grep &> /dev/null
do
cnt=`expr $cnt + 1`
if [ $cnt -gt 60 ]
then
# > 120 seconds now.
/usr/bin/tunctl -d ${DEVICE} &> /dev/null
eend 1 "Failed."
break
fi
sleep 2
echo -n "."
done
/usr/bin/tunctl -d ${DEVICE} &> /dev/null
echo -n "done."
eend 0
}$USER ist ein normaler User unter dessen Account die Maschine läuft um die nicht als root zu starten.
$NICE ist optional
$REMOTE_IP wird hier nicht benötigt, steht aber zu "Merkezwecken" gleich mit drin. Diese sollte dann in der UML-Maschine mit den üblichen Werkzeugen gesetzt werden.
$CONSOLE ist hier auf "null" gesetzt weil ich die Maschine nicht booten sehen will. Ich erreiche sie ja später mit dem Kommando:
Code: Select all
screen `sudo -H -u $USER /usr/bin/uml_mconsole $UMID config con1 | cut -d ":" -f 2`Für das Stoppen wird hier der Befehl cad der uml_mconsole verwendet. Hierzu muss der Eintrag in der /etc/inittab (der virtuellen Maschine) entsprechend geändert werden.
Streiche: ca
Setze: ca
Das Script läuft nicht korrekt wenn /tmp als noexec gemountet ist. Keine Ahnung warum... wer's weiß bitte melden.
Feedback welcome