Gentoo Logo

Ghidul Dezvoltatorului Gentoo Linux pentru Testarea Sistemului cu User-Mode Linux

Conţinut:

1.  Obţinerea User-Mode Linux

După cum scrie pe pagina user-mode linux (http://user-mode-linux.sourceforge.net) , user-mode linux permite unui utilizator să "ruleze Linux în interiorul lui". În special, user-mode linux oferă o maşină virtuală în care un utilizator poate "[r]ula programe instabile, experimenta noi versiuni de kernel Linux sau distribuţii, şi poate afla funcţionarea internă a sistemului Linux, toate acestea fără a risca avarierea sitemului principal Linux." Modificări experimentale ale pachetelor principale Gentoo cum ar fi sys-apps/baselayout sau sys-libs/glibc au un potenţial de a distruge sistemul şi al aduce într-o stare în care nu mai poate fi pornit; cu ajutorul user-mode linux putem testa modificările fără a ne îngrijora de integritatea sistemului principal.

Majoritatea versiunilor de kernel 2.6 au suport pentru UML. Deşi puteţi utiliza sursele dvs. curente de kernel, ar fi mai înţelept să vă păstraţi ramurile de kernel UML într-o locaţie separată. La urma urmei, veţi compila un kernel cu o configuraţie diferită şi veţi vrea să aveţi sisteme eterogene în sistemul dvs. principal de Linux (mai multe kerne-uri UML diferite).

Deci, descărcaţi o serie de surse de kernel (ca cea vanilla de la kernel.org) şi extrageţi-o într-o locaţie utilizată pentru dezvoltare.

Urmează configurarea acestui kernel UML aşa cum aţi face-o pentru orice alt sistem, dar adăugaţi ARCH=um pentru ca aplicaţia de compilare a kernel-ului să interpreteze faptul că acest kernel trebuie să ruleze ca un proces de sine stătător în sistemul părinte.

Cod 1.1: Compilarea kernel-ului UML

# cd /srv/aegis/src/uml-linux
# make menuconfig ARCH=um
# make linux ARCH=um
# cp linux /usr/local/bin/linux

Atenţie: Partea ARCH=um este extrem de importantă!

Asiguraţi-vă că /usr/local/bin există. Modificaţi /etc/env.d/00basic în aşa fel încăt variabila PATH să conţină /usr/local/bin şi rulaţi din nou env-update:

Cod 1.2: Modificarea 00basic

# nano -w /etc/env.d/00basic
# env-update
# source /etc/profile

Pentru ca kernelul user-mode linux să încarce corespunzător un sistem Gentoo kernelul trebuie să fie configurat să nu monteze implicit automat /dev (devfs). De asemenea, foarte probabil veţi dori ca suportul pentru tmpfs ("Virtual Memory Filesystem") să fie compilat în kernel, întrucât script-ul de pornire al Gentoo linux stochează informaţiile lui intr-o mică partiţie tmpfs. (Imaginea de kernel binară disponibilă pe pagina oficiala user-mode linux mount-ează automat /dev, şi nu conţine tmpfs compilat; nu vă deranjaţi utilizându-l).

Recomand imperios citirea documentaţiei user-mode linux, dar idea de bază este că, rulând programul /usr/local/bin/linux, el porneşte kernel-ul user-mode linux şi încearcă să iniţializeze sistemul stocat în fişierul root_fs care ar trebui să se afle în directorul de lucru curent.

Nu strică să intalaţi, de asemenea, utilitarele user-mode linux.

Cod 1.3: Instalarea utilitarelor UML

# emerge sys-apps/usermode-utilities

Aceste utilitare uşurează protocolul de reţea (printre alte) dintre sistemul virtual user-mode linux şi sistemul gazdă Linux.

2.  Creearea root_fs

Creearea Gentoo chroot

Fişierul root_fs necesar pentru user-mode linux este un singur fişier care conţine un întreg sistem de fişiere Gentoo Linux. Pentru a genera acest fişier aveţi nevoie ca dispozitivul Loopback să fie disponibil în kernelul sistemul gazdă (cel non-user-mode).

Crearea fişierului root_fs va fi ultimul pas pe care îl vom efectua. Mai întâi vom genera un sistem de fişiere Gentoo într-un mediu chroot normal. Avem nevoie de arhivele tar stage, care pot fi descărcate separat sau extrase pe de mediu Installation CD, sau extrase dintr-un fişier .iso al mediului Installation CD.

Cod 2.1: Mount-area unui fişier .iso Installation CD

# mkdir /mnt/loop
# mount -o loop /calea/catre/install-<TAB>.iso /mnt/loop

Setarea mediului chroot este aproape identică cu cea din instalarea unui Gentoo Linux obişnuit.

Cod 2.2: Crearea unui mediu chroot Gentoo pentru a putea fi mount-at

# mkdir /mnt/gentoo
# cd /mnt/gentoo
# tar xvjpf /cale/catre/stage<TAB>.tar.bz2

Demount-aţi fişierul .iso. De acum nu mai aveţi nevoie de el.

Porniţi procesul de bootstrap şi instalare a sistemului în mod normal: efectuaţi chroot în directorul /mnt/gentoo şi urmaţi instrucţiunile de instalare Gentoo :)

Adăugaţi orice alt pachet de care aveţi nevoie. Puteţi chiar să-i daţi un nume sistemului dumneavoastră vitual Gentoo. În /etc/fstab cel mai probabil va trebui ca /dev/ROOT sa fie /dev/ubda, cu un tip fs ext2, ext3, sau reiserfs. Modificaţi ca /dev/SWAP să fie /dev/ubdb, şi comentaţi /dev/BOOT.

În acest moment nu uitaţi să definiţi parola de root.

Cod 2.3: Definirea parole de root

# passwd

Acum, trebuie să efectuăm unele modificări script-urilor de boot. Ştergeţi consolefont şi keymaps din nivelul de execuţie boot:

Cod 2.4: Ştergerea script-urilor de iniţializare care nu sunt necesare

# rc-update del consolefont boot
# rc-update del keymaps boot

Ieşiţi din mediul chroot, demount-aţi tot ce aţi mount-at anterior, arhivaţi noua distribuţie Gentoo, iar apoi ştergeţi fişierele.

Cod 2.5: Finalizarea instalării

# cd /mnt/gentoo
# tar cvjpf ~/gentoo.tbz2 *
# cd
# rm -rf /mnt/gentoo

Crearea root_fs

Mediul chroot Gentoo pe care îl avem noi are aproape 300 MB, de aceea root_fs trebuie să aibă cel puţin acea dimensiune. Vom alege 0.5 GOcteţi ca fiind o dimensiune rezonabilă.

Cod 2.6: Crearea fişierelor UML

# dd if=/dev/zero of=root_fs seek=500 count=1 bs=1M
# mke2fs -F root_fs
# mount -o loop root_fs /mnt/loop
# tar xvjpf gentoo.tbz2 -C /mnt/loop
# umount /mnt/loop

Ar fi de asemenea frumos să aveţi o partiţie swap de 0.5 GOcteţi.

Cod 2.7: Crearea partiţie swap

# dd if=/dev/zero of=swap_fs seek=500 count=1 bs=1M
# mkswap -f swap_fs

Acum vedeţi dacă merge!

Cod 2.8: Pornirea kernelului UML

# linux ubd0=root_fs ubd1=swap_fs

Notă: User-mode linux foloseşte terminale xterm pentru consolele virtuale care sunt rulate în momentul pornirii sistemului, deci trebuie să vă asiguraţi că terminalul din care rulaţi user-mode linux are variabila $DISPLAY definită (împreună cu permisiunile xhost/xauth adecvate).

Cu puţin noroc ar trebui să vă puteţi inregistra în noul sistem Gentoo user-mode linux. Singurul lucru care impiedică acestă vesiune de user-mode linux să fie funcţională este legătură de reţea dintre maşina virtuală şi maşina gazda.

3.  Reţeaua

Utilizarea unei Reţele deja Existentă

Asiguraţi-vă că imaginea de kernel a sistemului gazdă are următoarele setări compilate ca module:

Cod 3.1: Configurarea imaginii de kernel pentru sistemul gazdă

Networking -->
  IP: Netfilter Configuration -->
    IP tables support -->
      Full NAT -->
        <M> MASQUERADE target support 
    
    Network Device Support --> 
      <M> TUN/TAP Support

Rulaţi următoarele comenzi pe maşina gazdă:

Cod 3.2: Setarea reţelei

# modprobe tun
(Dacă primiţi o eroare de tip FATAL, aici, încercaţi să ştergeţi /dev/net/tun şi apoi reîncercaţi)
# modprobe iptable_nat
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# echo 1 > /proc/sys/net/ipv4/ip_forward

Linia iptables defineşte mascarada IP dintre reţeaua privată în care se va afla sistemul user-mode şi internetul (accesat via eth0 în cazul nostru). Linia cu echo activează înaintarea pachetelor între reţeau privată şi interfaţa la care este conectată poarta de acces (eth0 pentru noi).

Acum pornim sistemul user-mode linux şi vedem daca reţeaua este funcţională.

Cod 3.3: Porniţi UML

# linux ubd0=root_fs ubd1=swap_fs eth0=tuntap,,,192.168.0.254
(vă autentificaţi în sistemul user-mode)
# ifconfig eth0 192.168.0.1 up
# ping -c 2 192.168.0.254
PING 192.168.0.254 (192.168.0.254): 56 octets data
64 octets from 192.168.0.254: icmp_seq=0 ttl=255 time=0.8 ms
64 octets from 192.168.0.254: icmp_seq=1 ttl=255 time=0.6 ms

--- 192.168.0.254 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.6/0.7/0.8 ms
# route add default gw 192.168.0.254
# netstat -rn
Kernel IP routing table
Destination  Gateway        Genmask        Flags MSS Window irtt Iface
192.168.0.0  0.0.0.0        255.255.255.0  U      40 0         0 eth0
0.0.0.0      192.168.0.254  0.0.0.0        UG     40 0         0 eth0
# scp user@192.168.0.254:/etc/resolv.conf /etc/resolv.conf (if needed)
# ping -c 2 www.gentoo.org
PING www.gentoo.org (207.170.82.202): 56 octets data
64 octets from 207.170.82.202: icmp_seq=0 ttl=240 time=119.6 ms
64 octets from 207.170.82.202: icmp_seq=1 ttl=240 time=92.0 ms

--- www.gentoo.org ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 92.0/105.8/119.6 ms

Pe sistemul user-mode am alocat interfeţei user-mode eth0 o adresă IP privată 192.168.0.1 şi am pornit interfaţa. Gazda are IP adresa privată IP 192.168.0.254, şi trimitem un mesaj echo (ping) să ne asiguram că interfaţa este funcţională. Liniile route adaugă adresa gateway implicită, adică sistemul gazdă, folosim scp pentru a obţine un /etc/resolv.conf funţional (dacă este necesar), şi trimitem un mesaj echo (ping) către www.gentoo.org pentru a ne asigura că rezolvarea numelor funcţionează (şi în general accesul la internet) în sistemul nostru user-mode. Acum sistemul user-mode poate folosi emerge după bunul plac!

Utilizarea unei Reţele Virtuale

Înainte de a deveni prea încântat, aceasta nu este o reţea virtuală privată. Este o reţea care este accesibilă doar din instanţele UML. Pachetul usermode-utilities oferă un utilitar denumit uml_switch ce defineşte punctele terminale ale comutării.

Cod 3.4: Activarea punctelor terminale ale unei comutări UML

(Dacă informaţia comutării trebuie să stea în prim plan:)
$ uml_switch -unix ~/tmp/switch.sock

(Dacă trebuie să fie în fundal:)
$ uml_switch -unix ~/tmp/switch.sock &> ~/tmp/switch.log &

Pentru a porni instanţele UML pe acest comutator, rulaţi următoarea comandă. Interfaţa dvs. (virtuală) de reţea va fi conectată la procesul uml_switch şi va utiliza adresa MAC specificată.

Cod 3.5: Rularea primei instanţe UML

$ linux ubd0=first_rootfs ubd1=first_swapfs eth0=daemon,10:00:01:02:00:00,,~/tmp/switch.sock

Încă vă mai puteţi conecta sistemul la reţeaua existentă, sau să aveţi un al doilea proces ataşat atât la interfaţa virtuală cât şi la cea existentă:

Cod 3.6: Rularea celei de-a doua instanţe UML

$ linux ubd0=second_rootfs ubd1=second_swapfs eth0=daemon,10:00:01:02:00:01,,~/tmp/switch.sock \
  eth1=tuntap,,,192.168.1.43

Mai multe informaţii despre setarea tuntap pot fi regăsite în secţiunea anterioară.

4.  Testarea fişierului .iso

Poate, ceea ce este cel mai folositor pentru testarea sistemului Gentoo Linux este pornirea fişierului .iso cu user-mode linux şi să finalizaţi instalarea sistemului Gentoo din interiorul sistemului virtual user-mode linux.

Pornirea fişierului .iso, sai mai precis a imaginii initrd de pe fişierul .iso, este destul de facilă:

Cod 4.1: Pornirea cu fişierul ISO

# mount -o loop /path/to/install-<TAB>.iso /mnt/loop
# cp /mnt/loop/isolinux/gentoo.igz .
# linux load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=22000 \
> initrd=rescue.gz root=/dev/ram0 ubd0=root_fs ubd1=swap_fs \
> ubd2=/dev/cdroms/cdrom0 eth0=tuntap,,,192.168.0.254

Acum puteţi urma paşii din documentul de instalare a sistemului Gentoo, exact cum sunt specificaţi, şi va mai trebui să ştiti că sistemul de fişiere "root" va fi /dev/ubd/0, "partiţia" swap va fi /dev/ubd/1, iar dispozitivul cdrom va fi/dev/ubd/2.

5.  Resurse



Imprimare

Actualizat la 16 Decembrie 2005

Versiunea originală a acestui document a fost actualizată ultima dată la 1 Martie 2008

Sumar: Acest ghid descrie programatorilor Gentoo Linux cum să folosească şi să seteze user-mode linux pentru testarea modificărilor care pot duce la deteriorarea sistemului.

Grant Goodyear
Editor

John Davis
Editor

Sven Vermeulen
Editor

Benny Chuang
Editor

Adi Roiban
Translator

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Bytemark

Bytemark

Linux World Expo

Linux World Expo

Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.