Installation #
Nach kurzer Suche finde ich das Paket "rootstrap":
apt-get install rootstrap
In der /etc/rootstrap/rootstrap.conf habe ich den Abschnitt für die Netzwerkeinstellungen angepaßt. Dann "rootstrap root_fs" ausgeführt. Das ging bei mir nur als root (lt. Manpage sollte es auch als User gehen, aber ich weiß nicht, was man dazu noch tun muss).
Ich habe folgende Einträge in der /etc/network/interfaces, Gastgeber und UML erhalten ihre IP-Adresse vom DHCP-Server: (Pakete bridge-utils und uml-utilities müssen installiert sein).
auto lo eth0 tap0 br0 iface lo inet loopback iface eth0 inet manual up ifconfig eth0 0.0.0.0 promisc up iface tap0 inet manual pre-up tunctl -u umluser -t tap0 up ifconfig tap0 up down ifconfig tap0 down iface br0 inet dhcp bridge_ports eth0 tap0 bridge_fd 1 bridge_stp off bridge_hello 1 down ifconfig br0 down
Beim "umluser" handelt es sich um die Benutzer-Kennung unter der der UML mit Netzwerk-Zugriff über tap0 gestartet wird, z.B. mit:
./linux ubd0=debian31 ubd1=swap eth0=tuntap,tap0 con=null
User Mode Linux startet #
An dieser Stelle gibt's den ersten Erfolg zu vermelden:
Mit "linux" startet das User Linux. Ein Problem hat das System beim RW-Mounten des Root Filesystems: Klar, die Datei "root_fs" darf nur von root geschrieben werden, ich hab's aber unter meinem User gestartet. Also: "chown user root_fs" aufgerufen und beim nächsten Versuch gehen sechs x-term-Fenster für die sechs virtuellen Konsolen meines User-Linux auf! Als root angemeldet habe ich dann zuerst in der /etc/inittab die Konsolen zwei bis sechs auskommentiert.
Aber wozu habe ich beim Erzeugen des Filesystem-Image die ganzen Netzwerkparameter angegeben? Das Netzwerk ist nicht konfiguriert
Das Netzwerk auf dem host System konfigurieren #
Damit die Interface auch gebunden werden können, werden 2 Kernelmodule benötigt: tun und netlink_dev
$ su Password: # modprobe tun && modprobe netlink_dev # [ -c /dev/net/tun ] || ( mkdir -p /dev/net && mknod -m 660 /dev/net/tun c 10 200 ) # tunctl -u user Set 'tap0' persistent and owned by uid 1000 # chmod 660 /dev/net/tun # chown root.uml-net /dev/net/tun <-- der UML-User muss in der Gruppe uml-net sein # ifconfig tap0 192.168.1.2 up # echo "1" > /proc/sys/net/ipv4/ip_forward # route add -host 192.168.1.3 dev tap0 <-- use the ip from the uml here # echo "1" > /proc/sys/net/ipv4/conf/tap0/proxy_arp <-- das tap device des tunctl Kommandos oben angeben # arp -Ds 192.168.1.3 eth0 pub # exit
Das Netzwerk innerhalb der UML konfigurieren #
Schade, die Netzwerkparameter aus der rootstrap.conf waren wohl nur für die Installation. Also zunächst muss die Netzanbindung nach aussen -- also zum Gast-System hin -- beim Aufruf angegeben werden:
linux eth0=tuntap,,,192.168.x.y
Dabei gilt "tuntap" für ein 2.4.x System, sonst "ethertap" einsetzen. Die IP-Adresse ist eine freie aus dem Netz, sie kann mit der IP des Gast-Systems übereinstimmen. Es ist nicht die IP des UserModeLinux Systems! Das funktioniert für normale User nur, wenn man ihnen zuvor das Recht gibt /usr/lib/uml/uml_net auszuführen!
Nach dem Starten des Systems lassen sich dann mit
# ifconfig lo 127.0.0.1 up # ifconfig eth0 192.168.x.z up # route add default gw 192.168.x.1
die Interfaces eth0 und lo starten.
Das läßt sich wie üblich durch ein /etc/network/interfaces unter Debian einstellen. Dazu muss noch der /sbin/start-stop-daemon aktiviert werden, er ist nämlich in /sbin/start-stop-daemon.REAL umbenannt worden! Sonst startet garnichts.
/begin 2003-07-07 ping-panther at freenet.de
Das mit start-stop-daemon klingt mir nach einem in die Hose gegangenen debootstrap-Lauf. Ab und zu klemmte da auch was bei mir, aber diesen Fehler hab ich so nicht zu sehen bekommen. Es mag auch spezifisch für die debootstrap/rootstrap-Kombination sein.
Meine debootstrap-Wirren waren lediglich pcmcia-cs-spezifisch. Beim Generieren von Pototo-Roots ignoriert debootstrap irgendwie das --exclude=pcmcia-cs, hierfür hab ich das Skript in /usr/lib/debootstrap angepaßt, für Woody, Sarge und Sid klappt es, pcmcia-cs per --exclude= auszublenden. Und Bei Sid ist derzeit (gegen Ende Juni-2003 zuletzt probiert) /etc/default/rcS nicht vorhanden. Aber das ist ja Sid... "Sid is dangerous"... ;-)
Höherlevelige Root-Filesystem-Generatoren hab ich nicht angeschaut.
/end
Bisher ist es mir gelungen in meinem ersten UserModeLinux System mit apt-get denn sshd und apache zu installieren. Sieht also recht gut aus!
Auf einem Gastsystem mit Kernel 2.2.20 habe ich das rootstrap jedoch nicht auf Anhieb zum laufen gebracht und dann lieber auf Kernel 2.4.18 migriert.