Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Initscript für Usermode Linux
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Deutsche Dokumentation
View previous topic :: View next topic  
Author Message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Fri Oct 08, 2004 9:26 pm    Post subject: Initscript für Usermode Linux Reply with quote

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
View user's profile Send private message
Fibbs
Guru
Guru


Joined: 26 Jan 2003
Posts: 448
Location: Forstern near Munich / Germany

PostPosted: Sat Oct 09, 2004 12:30 pm    Post subject: Reply with quote

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
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Sun Oct 10, 2004 1:40 am    Post subject: Reply with quote

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
View user's profile Send private message
TheSmallOne
Guru
Guru


Joined: 22 Jan 2005
Posts: 467
Location: Germany

PostPosted: Sat Feb 12, 2005 6:08 pm    Post subject: Reply with quote

-–- gelöscht -–-

Last edited by TheSmallOne on Sat Dec 22, 2012 12:20 pm; edited 1 time in total
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Tue Feb 15, 2005 9:52 am    Post subject: Reply with quote

Hab es gleich mal in dem genannten Thread kreuzgelinkt ;-)
Back to top
View user's profile Send private message
fangorn
Veteran
Veteran


Joined: 31 Jul 2004
Posts: 1886

PostPosted: Thu Nov 03, 2005 8:32 am    Post subject: Reply with quote

Danke Leute,

Es ist immer wieder erstaunlich, wie viel Arbeit man sich spart, wenn man nicht dazu kommt, sich etwas selbst zu bauen :wink:
Back to top
View user's profile Send private message
COiN3D
Guru
Guru


Joined: 02 Aug 2004
Posts: 543
Location: Munich, Germany

PostPosted: Mon Nov 07, 2005 8:34 am    Post subject: Reply with quote

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
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Tue Nov 08, 2005 6:44 pm    Post subject: Reply with quote

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
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Thu Feb 09, 2006 9:59 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Deutsche Dokumentation All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum