View previous topic :: View next topic |
Author |
Message |
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Fri Oct 08, 2004 9:26 pm Post subject: Initscript für Usermode Linux |
|
|
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...
Code: | #!/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
} |
english users can found the following comments at https://forums.gentoo.org/viewtopic-p-2093976.html#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:
Code: | screen `sudo -H -u $USER /usr/bin/uml_mconsole $UMID config con1 | cut -d ":" -f 2` |
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:12345:ctrlaltdel:/sbin/shutdown -r now
Setze: ca:12345: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
Last edited by slick on Wed Feb 16, 2005 9:47 am; edited 13 times in total |
|
Back to top |
|
|
Fibbs Guru
Joined: 26 Jan 2003 Posts: 448 Location: Forstern near Munich / Germany
|
Posted: Sat Oct 09, 2004 12:30 pm Post subject: |
|
|
Supi danke,
genau sowas wollte ich auch bauen, war nur bisher zu faul.
Da sage einer, Faulheit zahle sich nicht aus
Gruß,
Fibbs |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Sun Oct 10, 2004 1:40 am Post subject: |
|
|
So kann man's auch sehen.
Ich bin ja auch faul, deswegen habe ich mir das gebaut, muss ich weniger tippen
Merke: Ein guter Admin ist immer faul! |
|
Back to top |
|
|
TheSmallOne Guru
Joined: 22 Jan 2005 Posts: 467 Location: Germany
|
Posted: Sat Feb 12, 2005 6:08 pm Post subject: |
|
|
-–- gelöscht -–-
Last edited by TheSmallOne on Sat Dec 22, 2012 12:20 pm; edited 1 time in total |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Tue Feb 15, 2005 9:52 am Post subject: |
|
|
Hab es gleich mal in dem genannten Thread kreuzgelinkt |
|
Back to top |
|
|
fangorn Veteran
Joined: 31 Jul 2004 Posts: 1886
|
Posted: Thu Nov 03, 2005 8:32 am Post subject: |
|
|
Danke Leute,
Es ist immer wieder erstaunlich, wie viel Arbeit man sich spart, wenn man nicht dazu kommt, sich etwas selbst zu bauen |
|
Back to top |
|
|
COiN3D Guru
Joined: 02 Aug 2004 Posts: 543 Location: Munich, Germany
|
Posted: Mon Nov 07, 2005 8:34 am Post subject: |
|
|
Hallo Slick,
eine Frage, was bringt dein Script im Endeffekt?
Grüße coin _________________ e17 documentation | Be free and use Jabber as your IM! | Combine IRC and IM |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Tue Nov 08, 2005 6:44 pm Post subject: |
|
|
COiN3D wrote: | eine Frage, was bringt dein Script im Endeffekt? |
Also damit kannst Du eine virtuelle Usermode-Linux Maschine über ein (das) Initscript starten, z.B. gleich automatisch per Runlevel. Das Initscript erstellt auch ein Netzdevice (tap*) auf der lokalen Maschine mit dem dann Deine virtuelle Maschine mit Deiner lokalen kommunizieren kann. Desweiteren kannst Du mit dem initscript die virtuelle Maschine wieder herunterfahren, ansonsten müßtest Du Dich ja erst auf der einloggen und dort "halt" aufrufen. Anschliessend wird auch das Netzwerkdevice wieder entfernt. Zumindest so in aller Kürze erklärt...
Ich denke mal das war auch eher eine nicht ganz ernst gemeinte Frage oder? Denn wenn Du nicht weißt was das Script tut und für was es gut ist solltest Du die Finger davon lassen |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Thu Feb 09, 2006 9:59 pm Post subject: |
|
|
Update
1) Ist $BRIDGE gesetzt wird das Device dort eingebunden bzw. beim Beenden wieder entfernt, die angegebene bridge muß hierfür existieren
2) /etc/init.d/uml login startet den screen (siehe Erläuterung oben), dieser kann dann später mit screen -r <UMID> fortgesetzt werden
3) überarbeitetes stop()
Code: | #!/sbin/runscript
USER="umluser"
UMID="umlid"
UMLDIR="/home/uml/umlid"
DISKS="ubd0=${UMLDIR}/root.fs ubd1=${UMLDIR}/swap.fs"
CONSOLE="con0=pts con=pts"
RAM="128M"
DEVICE="tap0"
#BRIDGE="br0"
LOCAL_IP="192.168.0.254"
REMOTE_IP="192.168.0.1"
NETMASK="255.255.255.0"
MAC="fe:fd:aa:bb:cc:dd"
# NICE="/usr/bin/nice -n 5"
opts="${opts} login"
start() {
ebegin "Booting up usermode linux id: ${UMID} "
# Rechte von /dev/net/tun beachten,
# evt. für die Gruppe der uml-User (hier: tun) Rechte setzen
# chown root:tun /dev/net/tun
# chmod 770 /dev/net/tun
/usr/bin/tunctl -u ${USER} -t ${DEVICE} > /dev/null
if [ "${BRIDGE}" == "" ] ; then
/sbin/ifconfig ${DEVICE} mtu 1484 ${LOCAL_IP} netmask ${NETMASK} up
else
/sbin/ifconfig ${DEVICE} mtu 1484 up
brctl addif ${BRIDGE} ${DEVICE}
fi
${NICE} /usr/bin/sudo -H -u ${USER} ${UMLDIR}/linux mem=${RAM} umid=${UMID} ${DISKS} ${CONSOLE} eth0=tuntap,${DEVICE},${MAC} &> /dev/null &
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 mem=${RAM} umid=${UMID}" | grep -v grep &> /dev/null
do
cnt=`expr $cnt + 1`
if [ $cnt -gt 60 ] ; then
# Waited 120 seconds now. Fail.
break
fi
sleep 2
echo -n "."
done
if [ "${BRIDGE}" != "" ] ; then
brctl delif ${BRIDGE} ${DEVICE}
fi
/usr/bin/tunctl -d ${DEVICE} &> /dev/null
if [ $cnt -gt 60 ] ; then
echo -n "Failed"
eend 1
else
echo -n "done."
eend 0
fi
}
login() {
screen -S ${UMID} `sudo -H -u ${USER} uml_mconsole ${UMID} config con1 | cut -d ":" -f 2`
} |
|
|
Back to top |
|
|
|