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-cmd
, for å spesifisere hvilken debootstrap-kommando som brukes. Standarden er debootstrap
hvis debootstrap og cdebootstrap er installert. I så fall vil alternativet -dist
også oftest brukes (med et distribusjonsnavn som bullseye).
--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=bullseye --role=udev
General Information -------------------- Hostname : testxen Distribution : bullseye Mirror : http://deb.debian.org/debian Partitions : swap 512M (swap) / 2G (ext4) Image type : sparse Memory size : 256M Bootloader : pygrub [...] Logfile produced at: /var/log/xen-tools/testxen.log Installation Summary --------------------- Hostname : testxen Distribution : bullseye MAC Address : 00:16:3E:C2:07:EE IP Address(es) : dynamic SSH Fingerprint : SHA256:K+0QjpGzZOacLZ3jX4gBwp0mCESt5ceN5HCJZSKWS1A (DSA) SSH Fingerprint : SHA256:9PnovvGRuTw6dUcEVzzPKTITO0+3Ki1Gs7wu4ke+4co (ECDSA) SSH Fingerprint : SHA256:X5z84raKBajUkWBQA6MVuanV1OcV2YIeD0NoCLLo90k (ED25519) SSH Fingerprint : SHA256:VXu6l4tsrCoRsXOqAwvgt57sMRj2qArEbOzHeydvV34 (RSA) Root Password : FS7CUxsY3xkusv7EkbT9yae
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-pakken anbefaler den) for å erstatte den eksisterende eth0-oppføringen (vær nøye på at du bruker rett navn på nettverksenheten):
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. Du må kanskje øke standardminnet ved å redigere variabelminnet fra oppsettfilen (i dette tilfellet /etc/xen/testxen.cfg
). Her har vi satt den til 1024 (megabyte).
#
xl list
Name ID Mem VCPUs State Time(s) Domain-0 0 3918 2 r----- 35.1 #
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 2757 2 r----- 45.2 testxen 3 1024 1 r----- 1.3
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
-konsollen, med xl console
-kommandoen:
#
xl console testxen
[...] Debian GNU/Linux 11 testxen hvc0 testxen-innlogging:
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
.
xl
-underkommandoer forventer ett eller flere argumenter, ofte et DomU-navn. Disse argumentene er godt beskrevet på manualsiden xl(1).
init
-prossessen, og det resulterende settet ser mye ut som en virtuell maskin. Det offisielle navnet på et slikt oppsett er en «kontainer» (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; kontaineren 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 kontainer (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
eller enp1s0
) 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 br0 iface br0 inet dhcp bridge-ports eth0
eth0
, samt grensesnittet definert for kontainere.
/etc/network/interfaces
-filen blir da:
# Grensesnittet eth0 er ikke endret 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.
#
lxc-create -n testlxc -t debian
debootstrap is /usr/sbin/debootstrap Checking cache download in /var/cache/lxc/debian/rootfs-stable-amd64 ... Downloading debian minimal ... I: Retrieving Release I: Retrieving Release.gpg [...] Download complete. Copying rootfs to /var/lib/lxc/testlxc/rootfs... [...] #
/var/cache/lxc
, og deretter flyttet til den katalogen filsystemet skal ende opp. Dette gjør det mulig å lage identiske kontainere 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.
lxcbr0
. Som forvalg brukes dette av alle nyopprettede kontainere via /etc/lxc/default.conf
og lxc-net
-tjenesten:
lxc.net.0.type = veth lxc.net.0.link = lxcbr0 lxc.net.0.flags = up
lxcbr0
-broen hos verten. Du vil finne disse innstillingene i den opprettede kontainerens oppsett (/var/lib/lxc/testlxc/config
), der også enhetens MAC-adresse vil være spesifisert i lxc.net.0.hwaddr
. Skulle denne siste posten mangle eller være deaktivert, vil det genereres en tilfeldig MAC-adresse.
lxc.uts.name = testlxc
lxc-start --name=testlxc
.
lxc-attach -n testlxc passwd hvis vi ønsker det.
Nå kan vi logge inn:
#
lxc-console -n testlxc
Connected to tty 1 Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself Debian GNU/Linux 11 testlxc tty1 testlxc login:
root
Password: Linux testlxc 5.10.0-11-amd64 #1 SMP Debian 5.10.92-1 (2022-01-18) 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. Last login: Wed Mar 9 01:45:21 UTC 2022 on console root@testlxc:~#
ps auxwf
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 18964 11464 ? Ss 01:36 0:00 /sbin/init root 45 0.0 0.2 31940 10396 ? Ss 01:37 0:00 /lib/systemd/systemd-journald root 71 0.0 0.1 99800 5724 ? Ssl 01:37 0:00 /sbin/dhclient -4 -v -i -pf /run/dhclient.eth0.pid [..] root 97 0.0 0.1 13276 6980 ? Ss 01:37 0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups root 160 0.0 0.0 6276 3928 pts/0 Ss 01:46 0:00 /bin/login -p -- root 169 0.0 0.0 7100 3824 pts/0 S 01:51 0:00 \_ -bash root 172 0.0 0.0 9672 3348 pts/0 R+ 01:51 0:00 \_ ps auxwf root 164 0.0 0.0 5416 2128 pts/1 Ss+ 01:49 0:00 /sbin/agetty -o -p -- \u --noclear [...] root@testlxc:~#
/var/lib/lxc/testlxc/rootfs
). Vi kan gå ut av konsollen med Control+a q.
lxc-start
har begynt å forvelge --daemon
-argumentet. Vi kan avbryte kontaineren med en kommando som for eksempel lxc-stop --name=testlxc
.
lxc-autostart
som starter kontainere 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 kontainere som er en del av onboot
-gruppen, og deretter kontainere 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
.
virt-manager
er et grafisk grensesnitt som bruker libvirt til å opprette og administrere virtuelle maskiner.
apt-get install libvirt-clients libvirt-daemon-system qemu-kvm virtinst virt-manager virt-viewer
. libvirt-daemon-system gir bakgrunnsprosessen libvirtd
, som tillater (potensielt ekstern) håndtering av virtuelle maskiner som kjører på verten, og starter de nødvendige VM-er når vertsmaskinen starter opp. libvirt-clients gir virsh
-kommandolinjeverktøyet 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.
libvirtd
hvor diskbildene skal lagres, med mindre forvalgt plassering (/var/lib/libvirt/images/
) gjør nytten.
#
mkdir /srv/kvm
#
virsh pool-create-as srv-kvm dir --target /srv/kvm
Pool srv-kvm created #
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 --memory 2048 --disk /srv/kvm/testkvm.qcow,format=qcow2,size=10 --cdrom /srv/isos/debian-11.2.0-amd64-netinst.iso --network bridge=virbr0 --graphics vnc --os-type linux --os-variant debiantesting
Starter intallasjon … Tildeler 'testkvm.qcow'
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 --memory 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 (qcow2 ) tillater [ starte 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).
Forvalgt nettverksoppsett som inneholder definisjonen for et virbr0 -brogrensesnitt, og kan redigeres ved bruk av virsh net-edit default og startes via virsh net-start default hvis det ikke allerede gjøres automatisk under oppstart av systemet.
| |
--graphics 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.4, «Å lage krypterte tunneler med portvideresending (Port Forwarding)»). Alternativt kan --graphics vnc,listen=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.
Full liste over OS-typer kan vises ved bruk av osinfo-query os -kommandoen fra libosinfo-bin-pakken.
|
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@tjener/system testkvm
root@tjenerens passord: root@tjenerens passord:
libvirtd
om listen over de virtuelle maskinene den forvalter:
#
virsh -c qemu:///system list --all Id Name State ---------------------------------- 8 testkvm shut off
#
virsh -c qemu:///system start testkvm
Domain testkvm started
vncviewer
):
#
virsh -c qemu:///system vncdisplay testkvm
127.0.0.1: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
.