Introduksjon til qemu
qemu er en full
virtualiseringsløsning for Linux på x86 maskinvare som inneholder
virtualiseringsutvidelser (Intel VT eller AMD-V).
Denne pakken er kjent for å bygge og fungere riktig ved å bruke en
LFS 12.1 plattform.
Pakkeinformasjon
-
Nedlasting (HTTP): https://download.qemu.org/qemu-8.2.1.tar.xz
-
Nedlasting MD5 sum: bda54248d773be2599df66f8995f10e1
-
Nedlastingsstørrelse: 124 MB
-
Estimert diskplass som kreves: 2.2 GB (373 MB installert)
-
Estimert byggetid: 1.3 SBU (legg til 0.8 SBU for tester,
begge med parallellisme=4)
Qemu Avhengigheter
Påkrevd
GLib-2.78.4 og Pixman-0.43.2
Anbefalt
alsa-lib-1.2.11, Libslirp-4.7.0, og SDL2-2.30.0
Valgfri
pipewire-1.0.3 eller PulseAudio-17.0 (kan brukes i stedet for
alsa-lib), BlueZ-5.72, cURL-8.6.0,
Cyrus SASL-2.1.28, Fuse-3.16.2, GnuTLS-3.8.3, GTK+-3.24.41,
keyutils-1.6.3, libaio-0.3.113,
libusb-1.0.27, libgcrypt-1.10.3, libjpeg-turbo-3.0.1, libseccomp-2.5.5, libssh2-1.11.0, libpng-1.6.42,
libtasn1-4.19.0, Linux-PAM-1.6.0,
LZO-2.10, Nettle-3.9.1, Mesa-24.0.1, VTE-0.74.2,
capstone, ceph, daxctl, JACK, glusterfs, libbpf,
libcacard,
libcap-ng,
libdw,
libfdt,
libiscsi, libnfs,
libpmem,
libssh,
libu2f-emu,
lzfse,
netmap, numactl, rdma-core, SELinux, snappy,
spice, usbredir, og
VDE
Valgfri (Kjøretid)
Systemd-255
Valgfri (for å bygge dokumentasjonen)
sphinx_rtd_theme-2.0.0
Note
Denne valgfrie avhengighetslisten er ikke uttømmende. Se utdataen
fra ./configure
--help for en mer komplett liste.
Redaktørens notater: https://wiki.linuxfromscratch.org/blfs/wiki/qemu
Installasjon av qemu
Udev regelen til LFS tillater bare root
bruker, brukerne som eier en lokal
påloggingsøkt støttet av den valgfrie kjøretidsavhengigheten
Systemd-255, eller brukerne i
kvm
gruppen å bruke KVM enheten.
Som root
bruker, legg til
eventuelle ikke-root
brukere som
kan bruke KVM enheten enten uten Systemd-255 installert eller eksternt (via
en SSH tilkobling) til kvm
gruppen:
usermod -a -G kvm <username>
Installer qemu ved å kjøre
følgende kommandoer:
Note
Qemu er i stand til å kjøre mange mål. Byggeprosessen er også i
stand til å bygge flere mål samtidig i en kommadelt liste
tilordnet --target-list
. Kjør
./configure --help
for å få en fullstendig liste over tilgjengelige mål.
if [ $(uname -m) = i686 ]; then
QEMU_ARCH=i386-softmmu
else
QEMU_ARCH=x86_64-softmmu
fi
mkdir -vp build &&
cd build &&
../configure --prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--target-list=$QEMU_ARCH \
--audio-drv-list=alsa \
--disable-pa \
--enable-slirp \
--docdir=/usr/share/doc/qemu-8.2.1 &&
unset QEMU_ARCH &&
make
qemu bruker ninja som en delprosess ved
byggingen. For å kjøre testene, kjør: ninja test. To tester,
bios-tables-test og migration-test, er kjent for å mislykkes.
Nå, som root
bruker:
make install
Endre tillatelsene og eierskapet til et hjelpeskript, som er
nødvendig når du bruker “bridge” nettverksenhet (se nedenfor). En gang
til som root
bruker, kjør:
Note
Du må legge til brukere som kan bruke “bridge” nettverksenhet
i kvm
gruppen selv om
Systemd-255 er installert.
chgrp kvm /usr/libexec/qemu-bridge-helper &&
chmod 4750 /usr/libexec/qemu-bridge-helper
Note
For enkelhets skyld kan det være lurt å lage en symbolsk lenke
for å kjøre det installerte programmet. For eksempel (som
root
bruker):
ln -sv qemu-system-`uname -m` /usr/bin/qemu
Bruke Qemu
Siden bruk av qemu betyr å bruke en virtuell datamaskin, trinnene
for å sette opp den virtuelle maskinen er i nær analogi med de for
å sette opp en ekte datamaskin. Du må bestemme deg for CPU, minne,
disk, USB enheter, nettverkskort(er), skjermstørrelse osv. Når
“maskinvaren”
er bestemt, må du for eksempel velge hvordan du kobler til
maskinenen til internett og/eller for å installere et OS. I det
følgende viser vi grunnleggende måter å utføre disse trinnene på.
Men qemu er mye mer enn dette, og det anbefales på det sterkeste å
lese qemu dokumentasjonen i /usr/share/doc/qemu-8.2.1/qemu-doc.html
.
Note
Det er standard praksis å navngi datamaskinen som kjører qemu
“host” og
den emulerte maskinen som kjører under qemu “guest”. Vi bruker
disse notasjonene nedenfor.
Note
Følgende instruksjoner forutsetter at den valgfrie symbolske
lenken, qemu
, har blitt opprettet.
I tillegg, qemu
skal kjøres i et grafisk miljø. Men det er mulig å bruke qemu
“headless”
eller gjennom SSH. Se dokumentasjonen for de ulike mulighetene.
Disk
En virtuell disk kan settes opp på følgende måte:
VDISK_SIZE=50G
VDISK_FILENAME=vdisk.img
qemu-img create -f qcow2 $VDISK_FILENAME $VDISK_SIZE
Den virtuelle diskstørrelsen og filnavnet bør justeres etter ønske.
Den faktiske størrelse på filen vil være mindre enn spesifisert,
men vil utvides etter behov, så det er trygt å sette en høy verdi.
Operativsystem
For å installere et operativsystem, last ned et iso bilde fra din
foretrukne Linux distribusjon. For formålet med dette eksemplet vil
vi bruke Fedora-16-x86_64-Live-LXDE.iso
i gjeldende mappe.
Kjør følgende:
qemu -enable-kvm \
-drive file=$VDISK_FILENAME \
-cdrom Fedora-16-x86_64-Live-LXDE.iso \
-boot d \
-m 1G
Følg de vanlige installasjonsprosedyrene for den valgte
distribusjonen. -boot
alternativet spesifiserer oppstartsrekkefølgen til stasjoner som en
streng med stasjonsbokstaver. Gyldige stasjonsbokstaver er: a, b
(diskett 1 og 2), c (første harddisk), d (første CD-ROM).
-m
alternativet er mengden
minne som skal brukes til den virtuelle maskinen. Valget avhenger
av belastningen til verten. Moderne distribusjoner bør være
komfortable med 1 GB. -enable-kvm
alternativet tillater
maskinvare akselerasjon. Uten denne bryteren er emuleringen mye
tregere.
Definere den virtuelle maskinvaren
Den virtuelle maskinvaren er definert av kommandolinjen til qemu.
En eksempelkommando er gitt nedenfor:
qemu -enable-kvm \
-smp 4 \
-cpu host \
-m 1G \
-drive file=$VDISK_FILENAME \
-cdrom grub-img.iso \
-boot order=c,once=d,menu=on \
-net nic,netdev=net0 \
-netdev user,id=net0 \
-device ac97 \
-vga std \
-serial mon:stdio \
-name "fedora-16"
Betydningen av kommandolinjealternativene
-enable-kvm
: aktiver full
KVM virtualisering støtte. På noen maskinvare kan det være
nødvendig å legge til det udokumenterte -machine smm=off
alternativet for å aktivere KVM.
-smp <N>
: muliggjør
symmetrisk multiprosessering med <N> CPUer.
-cpu <model>
:
simulere CPU <model>. Listen over støttede modeller kan fås
med -cpu help
.
-drive
file=<filename>
: definerer en virtuell disk hvis
bildet er lagret på <filename>
.
-cdrom grub-img.iso
:
definerer en iso formatert fil for å bruke som en cdrom. Her bruker
vi en grub redningsskive, som kan være nyttig når noe går galt ved
oppstart.
-boot
order=c,once=d,menu=on
: definerer oppstarts rekkefølgen
for den virtuelle BIOS.
-net
nic,netdev=<netid>
: definerer et nettverkskort
koblet til nettverksenheten med id <netid>.
-netdev
user,id=<netid>
: definerer nettverkets
“bruker”
enhet. Dette er et virtuelt lokalt nettverk med adresser
10.0.2.0/24, hvor verten har adressen 10.0.2.2 og fungerer som en
inngangsport til internett, og med en navneserver på adressen
10.0.2.3, og en smb server på adressen 10.0.2.4. En innebygd DHCP
server kan tildele adresser mellom 10.0.2.15 og 10.0.2.31.
-soundhw <model>
:
definerer lydkortets modell. Listen kan fås med -soundhw help
.
-vga <type>
:
definerer typen VGA kort å etterligne. For -vga std
, hvis du bygger en
Linuxkjerne som gjest, anbefales det å aktivere CONFIG_DRM_BOCHS
(som en del av kjernen eller en
kjerne modul) for å drive alle funksjonene til det emulerte VGA
kortet, og CONFIG_FB
for å vise Linux
konsollen på den. Det andre <type>
verdier er ikke testet av redaktører
og kan kreve ytterligere avhengigheter.
-serial mon:stdio
: sender
serieporten til gjesten (/dev/ttyS0
på linux gjester), multiplekset med qemu monitoren, til
standardinngangen og -utgangen til qemu prosesser.
-name <name>
: angir
navnet på gjesten. Dette navnet vises i gjestevinduets bildetekst.
Det kan være nyttig hvis du kjører flere gjester samtidig.
-drive
if=pflash,format=raw,readonly=on,file=/usr/share/qemu/edk2-x86_64-code.fd
:
Last en forhåndsbygd EDK2 UEFI fastvare, i stedet for standard PC
BIOS. Bruk dette alternativet hvis du vil starte gjesteOS med UEFI.
-drive file=<filename>,if=virtio
:
Gir Virtio grensesnittet til gjestekjernen for tilgang til
diskbildet, i stedet for å simulere en ekte diskmaskinvare. Dette
kan forbedre disk I/O ytelse, men det krever en Virtio driver i
gjestekjernen. Bruk det i stedet for en vanlig -drive
hvis gjestekjernen støtter Virtio. For å
bygge en Linuxkjerne med Virtio støtte for gjest, bruk make defconfig && make
kvm_guest.config til opprette en innledende
kjernekonfigurasjon med Virtio drivere aktivert, deretter gjør din
tilpasning. Og hvis gjestekjernen er Linux, vil virtuelle disker
som bruker Virtio grensesnittet bli navngitt vdx
i devtmpfs, i stedet for sdx
.
-net
nic,netdev=net0,model=virtio-net-pci
: Gir Virtio
grensesnittet til gjestekjernen for tilgang til nettverkets
grensesnitt, i stedet for å simulere et ekte nettverkskort. Dette
kan forbedre nettverkets I/O ytelse, men det krever en Virtio
driver i gjestekjernen. Bruk den i stedet for den vanlige
-net
hvis gjestekjernen støtter Virtio.
Kontrollere den Emulerte Skjermen
For å angi oppløsningen til den emulerte skjermen for en Xorg
server som kjører i et gjeste Linux system, les the section called “Finjustere
Skjerminnstillinger”.
Nettverk
Ovennevnte løsning for nettverk lar gjesten få tilgang til det
lokale nettverket gjennom verten (og muligens for å få tilgang til
internett via lokale rutere), men det motsatte er ikke sant. Ikke
engang verten kan få tilgang til gjesten, med mindre
portvideresending er aktivert. Og hvis flere gjester kjører, kan de
ikke kommunisere med hverandre. Andre nettverksenheter kan brukes
til dette formålet. For eksempel det er “socket” enheten, som lar
flere gjester dele et felles virtuelt nettverk. I det følgende
beskriver vi i mer detaljer hvordan du setter opp “bridge” enheten, som
tillater gjestene til å se ut som om de er koblet til det lokale
nettverket. Alle kommandoene nedenfor skal kjøres som root
bruker.
Tillat at verten videresender IP pakker:
sysctl -w net.ipv4.ip_forward=1
For å gjøre dette permanent, legg til kommandoen til /etc/sysctl.d/60-net-forward.conf:
cat >> /etc/sysctl.d/60-net-forward.conf << EOF
net.ipv4.ip_forward=1
EOF
Sett opp en nødvendig konfigurasjonsfil:
install -vdm 755 /etc/qemu &&
echo allow br0 > /etc/qemu/bridge.conf
Bytt bryteren i qemu kommandolinjen ovenfor -netdev user,...
med -netdev bridge,...
.