#
mv /etc/grub.d/20_linux_xen /etc/grub.d/09_linux_xen
#
update-grub
xen-create-image
-kommandoen, som i stor grad automatiserer oppgaven. Den eneste nødvendige parameteren er --hostname
, som gir navn til DomU-en. Andre valg er viktige, men de kan lagres i oppsettsfilen /etc/xen-tools/xen-tools.conf
, og fraværet deres fra kommandolinjen utløser ikke en feil. Det er derfor viktig å enten sjekke innholdet i denne filen før du oppretter bilder, eller å bruke ekstra parametre i bruken av xen-create-image
. Viktige parametre omfatter de følgende:
--memory
, for å spesifisere hvor mye RAM som er øremerket til det systemet som nettopp er laget;
--size
og --swap
, for å definere størrelsen på de «virtuelle diskene» som er tilgjengelig for DomU-en;
--debootstrap
, for å få det nye systemet til å bli installert med debootstrap
; i det tilfellet vil også --dist
-valget oftest bli brukt (med et distribusjonsnavn som jessie).
--dhcp
sier at DomUs nettverksoppsett skal hentes med DHCP, mens --ip
lar en definere en statisk IP-adresse.
--dir
-valget, er å opprette en fil på Dom0 for hver enhet der DomU skal være. For systemer som bruker LVM, er alternativet å bruke --lvm
-valget, fulgt av navnet på en volumgruppe; xen-create-image
vil deretter opprette et nytt logisk volum inne i den gruppen, og dette logiske volumet vil bli tilgjengelig for DomU-et som en harddisk.
#
xen-create-image --hostname testxen --dhcp --dir /srv/testxen --size=2G --dist=jessie --role=udev
[...] General Information -------------------- Hostname : testxen Distribution : jessie Mirror : http://ftp.debian.org/debian/ Partitions : swap 128Mb (swap) / 2G (ext3) Image type : sparse Memory size : 128Mb Kernel path : /boot/vmlinuz-3.16.0-4-amd64 Initrd path : /boot/initrd.img-3.16.0-4-amd64 [...] Logfile produced at: /var/log/xen-tools/testxen.log Installation Summary --------------------- Hostname : testxen Distribution : jessie MAC Address : 00:16:3E:8E:67:5C IP-Address(es) : dynamic RSA Fingerprint : 0a:6e:71:98:95:46:64:ec:80:37:63:18:73:04:dd:2b Root Password : adaX2jyRHNuWm8BDJS7PcEJ
vif*
, veth*
, peth*
og xenbr0
. Xen-hypervisoren setter dem opp med det utlegget som har blitt definert og kontrollert av verktøy i brukerland. Siden NAT- og rutingmodellene bare er tilpasset det enkelte tilfelle, vil vi bare omtale bridge-modellen.
xend
er satt opp for å integrere inn virtuelle nettverksgrensesnitt i alle nettverksbroer som eksisterer fra før (der xenbr0
tar forrang dersom flere slike broer finnes). Vi må derfor sette opp en bro i /etc/network/interfaces
(som krever installasjon av pakken bridge-utils, som er grunnen til at xen-utils-4.4-pakken anbefaler den) for å erstatte den eksisterende eth0-inngangen:
auto xenbr0 iface xenbr0 inet dhcp bridge_ports eth0 bridge_maxwait 0
xl
-kommandoen. Denne kommandoen tillater ulike håndteringer av domenene, inkludert å føre dem opp, og starte/stoppe dem.
#
xl list
Name ID Mem VCPUs State Time(s) Domain-0 0 463 1 r----- 9.8 #
xl create /etc/xen/testxen.cfg
Parsing config from /etc/xen/testxen.cfg #
xl list
Name ID Mem VCPUs State Time(s) Domain-0 0 366 1 r----- 11.4 testxen 1 128 1 -b---- 1.1
testxen
-DomU bruker virkelig minne tatt fra RAM som ellers ville være tilgjengelig for Dom0, og ikke simulert minne. Når du bygger en tjener som skal være vert for Xen-bruk, pass på å sette av tilstrekkelig fysisk RAM.
hvc0
-konsollet, med xl console
-kommandoen:
#
xl console testxen
[...] Debian GNU/Linux 8 testxen hvc0 testxen login:
xl pause
, og xl unpause
. Merk at selv om DomU i pause ikke bruker noen prosessorkraft, er det tildelte minnet fortsatt i bruk. Det kan være interessant å vurdere kommandoene xl save
og xl restore
: Å lagre en DomU frigjør ressursene som tidligere ble brukte, inkludert RAM. Når den hentes inn igjen (eller pausen avsluttes, for den saks skyld), legger ikke DomU en gang merke til noe utover tiden som går. Hvis en DomU var i gang når Dom0 er stengt, lagrer skriptpakken automatisk DomU-et, og gjenoppretter den ved neste oppstart. Dette vil selvfølgelig medføre at de vanlige ubekvemmelighetene som oppstår når en bærbar datamaskin settes i dvalemodus. For eksempel, spesielt hvis DomU er suspendert for lenge, kan nettverkstilkoblinger gå ut på tid. Merk også at Xen så langt er uforenlig med en stor del av ACPI-strømstyringen, noe som utelukker suspensjon av Dom0-vertsystemet.
shutdown
command) eller fra Dom0, med xl shutdown
, eller xl reboot
.
init
-prossessen, og det resulterende settet ser mye ut som en virtuell maskin. Det offisielle navnet på et slikt oppsett er en «beholder» (derav LXC-forkortelsen: LinuX Containers), men en ganske viktig forskjell til «ekte» virtuelle maskiner, som leveres av Xen eller KVM, er at det ikke er noen ekstra kjerne; beholderen bruker den samme kjernen som vertssystemet. Dette har både fordeler og ulemper: Fordelene inkluderer utmerket ytelse grunnet total mangel på ekstrabelastning, og det faktum at kjernen har full oversikt over alle prosesser som kjører på systemet, slik at planleggingen kan være mer effektiv enn hvis to uavhengige kjerner skulle planlegge ulike oppgavesett. Den største blant ulempene er at det er umulig å kjøre en annen kjerne i en beholder (enten en annen Linux-versjon, eller et annet operativsystem i det hele tatt).
/sys/fs/cgroup
. Ettersom Debian 8 byttet til systemd, som også er avhengig av kontrollgrupper, gjøres dette nå automatisk ved oppstart uten ytterligere oppsett.
/etc/network/interfaces
, for å flytte oppsettet for det fysiske grensesnittet (for eksempel eth0
) til et brogrensesnitt (vanligvis br0
), og sette opp koblingen mellom dem. For eksempel, hvis nettverksoppsettsfilen i utgangspunktet inneholder oppføringer som de følgende:
auto eth0 iface eth0 inet dhcp
#auto eth0 #iface eth0 inet dhcp auto br0 iface br0 inet dhcp bridge-ports eth0
eth0
, samt grensesnittet definert for beholderne.
/etc/network/interfaces
-filen blir da:
# Grensesnitt eth0 er uendret auto eth0 iface eth0 inet dhcp # Virtuelt grensesnitt auto tap0 iface tap0 inet manual vde2-switch -t tap0 # Bru for kontainere auto br0 iface br0 inet static bridge-ports tap0 address 10.0.0.1 netmask 255.255.255.0
br0
-grensesnittet.
root@mirwiz:~#
lxc-create -n testlxc -t debian
debootstrap is /usr/sbin/debootstrap Checking cache download in /var/cache/lxc/debian/rootfs-jessie-amd64 ... Downloading debian minimal ... I: Retrieving Release I: Retrieving Release.gpg [...] Download complete. Copying rootfs to /var/lib/lxc/testlxc/rootfs... [...] Root password is 'sSiKhMzI', please change ! root@mirwiz:~#
/var/cache/lxc
, og deretter flyttet til den katalogen filsystemet skal til. Dette gjør det mulig å lage identiske beholdere mye raskere, ettersom det da bare kreves kopiering.
--arch
-valg for å spesifisere arkitekturen til systemet som skal installeres, og et --release
-valg hvis du ønsker å installere noe annet enn den nåværende stabile utgaven av Debian. Du kan også sette omgivelsesvariabelen MIRROR
til å peke på et lokalt Debian speil.
/var/lib/lxc/testlxc/config
), og legge til noen få lxc.network.*
-innganger:
lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0 lxc.network.hwaddr = 4a:49:43:49:79:20
br0
-broen hos verten; og at MAC-adressen vil være som spesifisert. Skulle denne siste posten mangle eller være deaktivert, vil det genereres en tilfeldig MAC-adresse.
lxc.utsname = testlxc
root@mirwiz:~#
lxc-start --daemon --name=testlxc
root@mirwiz:~#
lxc-console -n testlxc
Debian GNU/Linux 8 testlxc tty1 testlxc login:
root
Password: Linux testlxc 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. root@testlxc:~#
ps auxwf
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 28164 4432 ? Ss 17:33 0:00 /sbin/init root 20 0.0 0.1 32960 3160 ? Ss 17:33 0:00 /lib/systemd/systemd-journald root 82 0.0 0.3 55164 5456 ? Ss 17:34 0:00 /usr/sbin/sshd -D root 87 0.0 0.1 12656 1924 tty2 Ss+ 17:34 0:00 /sbin/agetty --noclear tty2 linux root 88 0.0 0.1 12656 1764 tty3 Ss+ 17:34 0:00 /sbin/agetty --noclear tty3 linux root 89 0.0 0.1 12656 1908 tty4 Ss+ 17:34 0:00 /sbin/agetty --noclear tty4 linux root 90 0.0 0.1 63300 2944 tty1 Ss 17:34 0:00 /bin/login -- root 117 0.0 0.2 21828 3668 tty1 S 17:35 0:00 \_ -bash root 268 0.0 0.1 19088 2572 tty1 R+ 17:39 0:00 \_ ps auxfw root 91 0.0 0.1 14228 2356 console Ss+ 17:34 0:00 /sbin/agetty --noclear --keep-baud console 115200 38400 9600 vt102 root 197 0.0 0.4 25384 7640 ? Ss 17:38 0:00 dhclient -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.e root 266 0.0 0.1 12656 1840 ? Ss 17:39 0:00 /sbin/agetty --noclear tty5 linux root 267 0.0 0.1 12656 1928 ? Ss 17:39 0:00 /sbin/agetty --noclear tty6 linux root@testlxc:~#
/var/lib/lxc/testlxc/rootfs
). Vi kan gå ut av konsollen med Control+a q.
--daemon
-valget til lxc-start
. Vi kan avbryte beholderen med en kommando slik som lxc-stop --name=testlxc
.
lxc-autostart
som starter beholdere der lxc.start.auto
-valget er satt til 1). Mer finkornet kontroll over oppstartsrekkefølgen er mulig med lxc.start.order
og lxc.group
. Som standard starter klargjøringsskriptet først beholdere som er en del av onboot
-gruppen, og deretter beholdere som ikke er en del av en gruppe. I begge tilfeller er rekkefølgen innenfor en gruppe definert av lxc.start.order
-valget.
qemu-*
-kommandoer, den handler fremdeles om KVM.
/proc/cpuinfo
.
virtual-manager
er et grafisk grensesnitt som bruker libvirt til å opprette og administrere virtuelle maskiner.
apt-get install qemu-kvm libvirt-bin virtinst virt-manager virt-viewer
. libvirt-bin gir libvirtd
-bakgrunnsprosessen, som tillater (potensielt ekstern) håndtering av virtuelle maskiner som kjører på verten, og starter de nødvendige VM-er når verten starter opp. I tillegg gir denne pakken virsh
-kommandolinjeverktøy som gjør det mulig å styre libvirtd
-håndterte maskiner.
virt-install
, som tillater å lage virtuelle maskiner fra kommandolinjen. Avslutningsvis gir virt-viewer tilgang til en VM-grafiske konsoll.
eth0
fysisk grensesnitt, og en br0
-bro, og den første er knyttet til den siste.
/var/lib/libvirt/images/
) er grei.
root@mirwiz:~#
mkdir /srv/kvm
root@mirwiz:~#
virsh pool-create-as srv-kvm dir --target /srv/kvm
Pool srv-kvm created root@mirwiz:~#
virt-install
. Denne kommandoen registrerer den virtuelle maskinen med parametre i libvirtd, og starter den deretter slik at installasjonen kan fortsette.
#
virt-install --connect qemu:///system --virt-type kvm --name testkvm --ram 1024 --disk /srv/kvm/testkvm.qcow,format=qcow2,size=10 --cdrom /srv/isos/debian-8.1.0-amd64-netinst.iso --network bridge=br0 --vnc --os-type linux --os-variant debianwheezy
Starting install... Allocating 'testkvm.qcow' | 10 GB 00:00 Creating domain... | 0 B 00:00 Guest installation complete... restarting guest.
Valget --connect spesifiserer «hypervisoren» som skal brukes. Den har samme format som en URL som inneholder et virtualiseringssystem (xen:// , qemu:// , lxc:// , openvz:// , vbox:// , og så videre), og den maskinen som skal være vert for VM (dette kan være tomt når det gjelder den lokale verten). I tillegg til det, og i QEMU/KVM tilfellet, kan hver bruker administrere virtuelle maskiner som arbeider med begrensede tillatelser, og URL-banen tillater å skille «system»-maskiner (/system ) fra andre (/session ).
| |
Siden KVM forvaltes på samme måte som QEMU, tillater --virt-type kvm å spesifisere bruken av KVM selv om nettadressen ser ut som QEMU.
| |
Valget V --name definerer et (unikt) navn for den virtuelle maskinen.
| |
Valget --ram kan spesifisere hvor mye RAM (i MB) som skal avsettes til den virtuelle maskinen.
| |
--disk angir plasseringen av bildefilen som skal representere harddisken til vår virtuelle maskin; denne filen er laget, hvis den ikke allerede er til stede, med størrelsen (i GB) spesifisert av size -parameteret. format -parameteret gjør det mulig å velge mellom flere måter for lagring av bildefilen. Standardformatet (raw ) er en enkelt fil som samsvarer nøyaktig med diskens størrelse og innhold. Vi plukket ut et avansert format her, spesifikk for QEMU, og tillater starting med en liten fil som bare vokser når den virtuelle maskinen faktisk begynner å bruke plass.
| |
--cdrom -valget brukes til å indikere hvor en finner den optiske disken til bruk ved installasjon. Banen kan enten være en lokal bane for en ISO-fil, en URL der man kan få tak i filen, eller fra disk-filen i en fysisk CD-ROM-stasjon (dvs. /dev/cdrom ).
| |
--network angir hvordan det virtuelle nettverkskortet integreres i vertens nettverksoppsett. Standard oppførsel (som vi eksplisitt håndhevet/tvang i vårt eksempel) er å integrere det inn i hvilken som helst foreliggende nettverksbro. Hvis en slik bro ikke finnes, vil den virtuelle maskinen kun nå det fysiske nettverket gjennom NAT, så det får en adresse i et privat delnettsområde (192.168.122.0/24).
| |
--vnc sier at den grafiske konsollen skal gjøres tilgjengelig ved hjelp av VNC. Standard virkemåte for den tilknyttede VNC-tjeneren er å bare lytte til det lokale grensesnitt; hvis VNC-klienten skal kjøres på en annen vert, krever opprettelse av forbindelsen at det settes opp en SSH-tunnel (se Seksjon 9.2.1.3, «Å lage krypterte tunneler med portvideresending (Port Forwarding)»). Alternativt kan --vnclisten=0.0.0.0 anvendes slik at VNC-tjeneren er tilgjengelig fra alle grensesnitt. Vær oppmerksom på at hvis du gjør det, må du virkelig sette opp din brannmur tilsvarende .
| |
--os-type og --os-variant -valgene kan optimalisere noen parametere for den virtuelle maskinen, basert på noen av de kjente funksjonene i operativsystemet nevnt der.
|
virt-viewer
kjøres fra et hvilket som helst grafisk miljø for å åpne den grafiske konsollen (merk at det spørres om rot-passordet til den eksterne verten to ganger, fordi operasjonen krever 2 SSH-forbindelser):
$
virt-viewer --connect qemu+ssh://root@server/system testkvm
root@server's password: root@server's password:
libvirtd
om listen over de virtuelle maskinene den forvalter:
#
virsh -c qemu:///system list --all Id Name State ---------------------------------- - testkvm shut off
#
virsh -c qemu:///system start testkvm
Domain testkvm started
vncviewer
):
#
virsh -c qemu:///system vncdisplay testkvm
:0
virsh
:
reboot
for å restarte en virtuell maskin;
shutdown
for å utløse en ren avslutning;
destroy
, for å stoppe den brutalt;
suspend
for å pause den;
resume
for å avslutte pause;
autostart
for å aktivere (eller deaktivere, med --disable
-valget) automatisk start av den virtuelle maskinen når verten starter;
undefine
for å fjerne alle spor etter den virtuelle maskinen fra libvirtd
.
debootstrap
, som beskrevet ovenfor. Men hvis den virtuelle maskinen skal monteres med et RPM-basert system (som Fedora, CentOS eller Scientific Linux), vil oppsettet måtte gjøres med yum
-verktøyet (tilgjengelig i pakken med samme navn).
rpm
for å pakke ut et innledende sett med filer, medregnet spesielt yum
-oppsettsfiler, og så påkalle yum
for å pakke opp de gjenværende pakkesettene. Men siden vi kaller yum
fra utsiden av chrooten, trenger vi å gjøre noen midlertidige endringer. I eksemplet nedenfor, er mål-chrooten /srv/centos
.
#
rootdir="/srv/centos"
#
mkdir -p "$rootdir" /etc/rpm
#
echo "%_dbpath /var/lib/rpm" > /etc/rpm/macros.dbpath
#
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/centos-release-7-1.1503.el7.centos.2.8.x86_64.rpm
#
rpm --nodeps --root "$rootdir" -i centos-release-7-1.1503.el7.centos.2.8.x86_64.rpm
rpm: RPM should not be used directly install RPM packages, use Alien instead! rpm: However assuming you know what you are doing... warning: centos-release-7-1.1503.el7.centos.2.8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY #
sed -i -e "s,gpgkey=file:///etc/,gpgkey=file://${rootdir}/etc/,g" $rootdir/etc/yum.repos.d/*.repo
#
yum --assumeyes --installroot $rootdir groupinstall core
[...] #
sed -i -e "s,gpgkey=file://${rootdir}/etc/,gpgkey=file:///etc/,g" $rootdir/etc/yum.repos.d/*.repo