Différences entre versions de « QEMU »
imported>SylvainBeucler |
imported>SylvainBeucler |
||
Ligne 158 : | Ligne 158 : | ||
==== Configuration précise ==== | ==== Configuration précise ==== | ||
− | Analyse de la configuration | + | ===== Analyse de la configuration ===== |
* Depuis une image qemu qui fonctionne: | * Depuis une image qemu qui fonctionne: | ||
Ligne 182 : | Ligne 182 : | ||
ne2000 pci macaddr=... | ne2000 pci macaddr=... | ||
− | + | ===== Méthode minimal ===== | |
− | |||
make allnoconfig | make allnoconfig | ||
− | + | Puis amélioration au fur et à mesure: | |
− | + | * Erreurs au chargement du noyau | |
− | + | * File -> Search dans qconf | |
− | + | ||
− | + | ===== Essentiel ===== | |
− | |||
− | |||
− | |||
− | |||
Kernel support for ELF binaries (BINFMT_ELF) | Kernel support for ELF binaries (BINFMT_ELF) | ||
Ligne 210 : | Ligne 205 : | ||
− | + | ===== La suite ===== | |
− | |||
# Précision du type de processeur | # Précision du type de processeur | ||
Ligne 253 : | Ligne 247 : | ||
# TODO: "Qemu can emulate several different models of network card. Valid values for type are ne2k_pci, ne2k_isa, rtl8139, smc91c111 and lance. Not all devices are supported on all targets." [http://qemu.org/qemu-doc.html#SEC10] | # TODO: "Qemu can emulate several different models of network card. Valid values for type are ne2k_pci, ne2k_isa, rtl8139, smc91c111 and lance. Not all devices are supported on all targets." [http://qemu.org/qemu-doc.html#SEC10] | ||
− | + | ===== Divers ===== | |
− | |||
− | |||
Kernel .config support (IKCONFIG) | Kernel .config support (IKCONFIG) | ||
Ligne 266 : | Ligne 258 : | ||
Cirrus Logic support (FB_CIRRUS) | Cirrus Logic support (FB_CIRRUS) | ||
− | + | ===== IPSec ===== | |
− | + | ||
+ | Cf. http://www.ipsec-howto.org/x299.html | ||
#? Transformation user configuration interface (XFRM_USER) # for racoon only? | #? Transformation user configuration interface (XFRM_USER) # for racoon only? | ||
PF_KEY sockets (NET_KEY) | PF_KEY sockets (NET_KEY) | ||
− | + | IP: AH transformation (INET_AH) | |
− | ========== | + | IP: ESP transformation (INET_ESP) |
− | + | #?IP: IPComp transformation (INET_IPCOMP) # strictly necessary? | |
+ | IP: IPsec transport mode (INET_XFRM_MODE_TRANSPORT) | ||
+ | IP: IPsec tunnel mode (INET_XFRM_MODE_TUNNEL) | ||
+ | #?IP: IPsec BEET mode (INET_XFRM_MODE_BEET) | ||
+ | |||
+ | Null algorithms (CRYPTO_NULL) | ||
+ | AES cipher algorithms (i586) (CRYPTO_AES_586) | ||
+ | |||
+ | ===== Virtual FAT disk images ===== | ||
+ | |||
+ | Ex: qemu debian.img -hdb fat:/tmp | ||
VFAT (Windows-95) fs support (VFAT_FS) | VFAT (Windows-95) fs support (VFAT_FS) | ||
Ligne 284 : | Ligne 287 : | ||
− | + | ===== Carte graphique ===== | |
− | |||
0000:00:02.0 VGA compatible controller: Cirrus Logic GD 5446 | 0000:00:02.0 VGA compatible controller: Cirrus Logic GD 5446 | ||
− | + | ===== Supprimé pour l'instant ===== | |
− | |||
− | |||
# Software poweroff: | # Software poweroff: | ||
Ligne 302 : | Ligne 302 : | ||
?generic/default IDE chipset support (IDE_GENERIC) | ?generic/default IDE chipset support (IDE_GENERIC) | ||
− | + | ===== Autre matériel ===== | |
− | |||
− | |||
0000:00:01.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI | 0000:00:01.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI | ||
Ligne 314 : | Ligne 312 : | ||
0000:00:01.0 ISA bridge: Intel Corp. 82371SB PIIX3 ISA [Natoma/Triton II] | 0000:00:01.0 ISA bridge: Intel Corp. 82371SB PIIX3 ISA [Natoma/Triton II] | ||
? | ? | ||
+ | |||
+ | ===== Automatisation ===== | ||
On peut prédéfinir ces options dans un fichier <code>allno.conf</code>, pris en compte au moment du <code>make allnoconfig</code> (cf. le README du noyau). Le fichier se présente sous cette forme (préfixer par <code>CONFIG_</code> et finir par <code>=y</code> - comme dans un <code>.config</code>): | On peut prédéfinir ces options dans un fichier <code>allno.conf</code>, pris en compte au moment du <code>make allnoconfig</code> (cf. le README du noyau). Le fichier se présente sous cette forme (préfixer par <code>CONFIG_</code> et finir par <code>=y</code> - comme dans un <code>.config</code>): |
Version du 16 février 2007 à 08:20
aptitude install qemu
Compiler et tester un exécutable de test
Pour obtenir powerpc-linux-gcc: Compilation croisée
$ cat <<EOF > hello.c #include <stdio.h> int main(void) { return ! printf("Hello world!\n"); } EOF $ powerpc-linux-gcc hello.c -Wall -ansi -pedantic -static $ qemu-ppc a.out Hello world!
Mais:
$ powerpc-linux-gcc hello.c -Wall -ansi -pedantic $ qemu-ppc ./a.out /lib/ld.so.1: No such file or directory Erreur de segmentation
ToDo: trouver une façon de travailler pour gérer les dépendances (chroot recompilé)? Piste: l'archive gnemul avec quelques bib systèmes.
Des images de systèmes à télécharger
Sur http://free.oszoo.org/download.html
Essayer notamment:
btdownloadcurses http://free.oszoo.org/ftp/images/linux-ppc-20040716.tar.bz2.torrent #20M btdownloadcurses http://free.oszoo.org/ftp/images/debian_sarge_ppc.tar.torrent #1Go!
Avec l'image de base, en tant que root pour avoir le réseau via /dev/net/tun
:
qemu-system-ppc -prep -localtime -kernel zImage.prep linux-ppc.img
À l'intérieur, vous pouvez [1]:
ifconfig eth0 172.20.0.2 # qemu scp me@172.20.0.1:fichier # système hôte
L'image de 1Go est un système Debian sarge PPC pré-installé complet:
qemu-system-ppc -prep -kernel vmlinuz-2.4.27.001 -hda debian_sarge_ppc.img -user-net
Dans celle-ci le réseau à l'air différent:
- 10.0.2.2: hôte et... serveur DHCP!
- 10.0.2.15: qemu
- Installing from Scratch...: HOWTO pour recréer l'image Debian Sarge
Tester une installation
wget http://cdimage.debian.org/debian-cd/3.1_r2/powerpc/iso-cd/debian-31r2-powerpc-netinst.iso qemu-img create debian_sarge_ppc.img 500M qemu-system-ppc -hda debian_sarge_ppc.img -cdrom debian-31r2-powerpc-netinst.iso -boot d
D'après le HOWTO, le noyau 2.6 ne passe pas - utiliser install-powerpc-2.4 ramdisk_size=10000
au boot.
Démarrer sur son propre disque-dur
qemu -snapshot -hda /dev/hda -hdb /dev/hdb
Démarrer sur une image de partition
(et non sur une image de disque complet)
qemu -hda debian.img -kernel bzImage -append "root=/dev/hda" # ...
VNC
Exemple:
qemu -vnc :0 -k fr os.img
Pour y accéder:
vncviewer localhost
Très pratique pour passer une VM en tâche de fond.
Problème: la souris VNC et la souris système de sont pas synchro :/
Partage Samba avec l'hôte
qemu -smb /path os.img
ou plutôt, si vous êtes chez Debian:
sudo qemu -smb /path os.img
Purée, je vais encore râler contre les distros, mais QUEL BESOIN ONT CES FOUTUS PACKAGEURS de coder en dur secrets.tdb
dans /var/lib/
alors que c'est sensé être configurable (option private dir
)? Cf. debian/patch/fhs.patch
. Du coup il n'est plus possible de lancer smbd sans être root, faute de droits >(
- bug chez Debian: ça ne fait que 2-3 ans.
Dans la VM, au choix:
mount //10.0.2.4/qemu smb/ mount -t cifs //10.0.2.4/qemu smb/ smbclient //10.0.2.4/qemu
Optimisation PC->PC
KQEMU - QEMU Accelerator Module
KQEMU est libre depuis le 5 février :)
Il permet d'accélérer des systèmes à base de Linux ou de W2K et ultérieur.
Remarque: kqemu ne donne pas nécessairement de bons résultats de toute façon. Win98 fonctionne mieux sans, par exemple. Il paraît que WXP peut être instable, désactiver éventuellement l'ACPI.
Si j'ai bien compris, il y a trois mode:
- pas d'accélération (option -no-kqemu)
- accélération normale (pas d'option et /dev/kqemu installé)
- accélération noyau (-kernel-kqemu)
qvm86
qvm86 permettait d'avoir une émulation plus rapide mais le code n'a pas été touché depuis 2005-09-04 (qemu 0.7.2), et l'auteur encourage [2] de passer à VirtualBox à la place. Il y a un patch plus récent mais je n'arrive pas à savoir sur quelle version de qemu il fonctionne. Apparemment [3] le patch s'applique sur la v0.8.0 mais ne contient que les changements sur qvm86, pas les changements correspondants sur qvm86 (notamment, il manque une mise à jour de patch.qvm86).
Compilation:
cvs -d:pserver:anonymous@cvs.sv.gnu.org:/sources/qemu co -D 2006-09-05 qemu cd qemu/ cvs -d:pserver:anonymous@cvs.sv.gnu.org:/sources/qvm86 co qvm86 cat qvm86/patch.qvm86 | patch -p0 ./configure --target-list=i386-softmmu --cc=gcc-3.3 make # sudo make install # cf. i386-softmmu/qemu et qvm86/qvm86.ko
Je ne sais pas trop comment tester l'efficacité du module. En tout cas c'est un excellent moyen de reproduire un BSOD W98 ;) (note: cet OS n'est pas sensé fonctionner avec un accélérateur de toute façon)
Optimisation avec le noyau Linux
Il y a un patch très simple dans les sources de kqemu (linux-2.6.9-qemu-fast.patch
) qui notamment (si j'ai bien compris) réserve une plage mémoire pour qemu. Je suppose que c'est de cela qu'il s'agit lorsque l'on voit des références à une commande qemu-fast
. Cependant je ne sais pas comment produire cet exécutable.
Désinstallation de la version binaire
tar tzf qemu-0.8.2-i386.tar.gz | (cd / && sudo xargs rm)
QEMU-compatible kernel
Configuration rapide
make defconfig ARCH=i386 make xconfig # Activer: NE2K_PCI=Y (ns2000 PCI network ethernet card) make file arch/i386/boot/bzImage
Ce noyau est malheureusement trop volumineux pour tenir sur une disquette (2.5Mo) - ce qui est nécessaire pour suivre certains HOWTO les séquences d'amorçage ([4][5]).
Utiliser éventuellement make ROOT_DEV=/dev/hda1
.
Configuration précise
Analyse de la configuration
- Depuis une image qemu qui fonctionne:
$ uname --machine i686 $ cat /proc/cpuinfo [...] model name : Pentium II (Klamath) [...] # Remarque: il y a une variante x86_64, avec qemu-system-x86_64 $ lspci 0000:00:00.0 Host bridge: Intel Corp. 440FX - 82441FX PMC [Natoma] (rev 02) 0000:00:01.0 ISA bridge: Intel Corp. 82371SB PIIX3 ISA [Natoma/Triton II] 0000:00:01.1 IDE interface: Intel Corp. 82371SB PIIX3 IDE [Natoma/Triton II] 0000:00:01.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI 0000:00:02.0 VGA compatible controller: Cirrus Logic GD 5446 0000:00:03.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS)
- Sur la console qemu (Ctrl+Alt+2):
(qemu) info network VLAN 0 devices: user redirector ne2000 pci macaddr=...
Méthode minimal
make allnoconfig
Puis amélioration au fur et à mesure:
- Erreurs au chargement du noyau
- File -> Search dans qconf
Essentiel
Kernel support for ELF binaries (BINFMT_ELF) # Disque-dur # 0000:00:01.1 IDE interface: Intel Corp. 82371SB PIIX3 IDE [Natoma/Triton II] ATA/ATAPI/MFM/RLL support (IDE) Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (BLK_DEV_IDE) Include IDE/ATA-2 DISK support (BLK_DEV_IDEDISK) #?PCI IDE chipset support (BLK_DEV_IDEPCI) #?Generic PCI bus-master DMA support (BLK_DEV_IDEDMA_PCI) #?Intel PIIXn chipsets support (BLK_DEV_PIIX) #?? DMA? Ext3 journalling file system support (EXT3_FS)
La suite
# Précision du type de processeur Pentium-II/Celeron(pre-Coppermine) (MPENTIUMII) # Servers (Apache...) System V IPC (SYSVIPC) # Systèmes de fichiers Second extended fs support (EXT2_FS) # /dev/shm Virtual memory file system support (former shm fs) (TMPFS) # /dev/log Unix domain sockets (UNIX) ? #Deadline I/O scheduler (IOSCHED_DEADLINE) #Deadline (DEFAULT_DEADLINE) # Floppy Normal floppy disk support (BLK_DEV_FD) # Lecteur CD-ROM Include IDE/ATAPI CDROM support (BLK_DEV_IDECD) # ^ À tester! ^ ISO 9660 CDROM file system support (ISO9660_FS) Microsoft Joliet CDROM extensions (JOLIET) # Network # 0000:00:03.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS) PCI support (PCI) Networking support (NET) TCP/IP networking (INET) Packet socket (PACKET) Network device support (NETDEVICES) Ethernet (10 or 100Mbit) (NET_ETHERNET) EISA, VLB, PCI and on board controllers (NET_PCI) PCI NE2000 and clones support (see help) (NE2K_PCI) # TODO: "Qemu can emulate several different models of network card. Valid values for type are ne2k_pci, ne2k_isa, rtl8139, smc91c111 and lance. Not all devices are supported on all targets." [6]
Divers
Kernel .config support (IKCONFIG) Enable access to .config through /proc/config.gz (IKCONFIG_PROC) CIFS support (advanced network filesystem for Samba, Window and other CIFS compliant servers) (CIFS) # For the vga=ask kernel parameter Video mode selection support (VIDEO_SELECT) Support for frame buffer devices (FB) Cirrus Logic support (FB_CIRRUS)
IPSec
Cf. http://www.ipsec-howto.org/x299.html
#? Transformation user configuration interface (XFRM_USER) # for racoon only? PF_KEY sockets (NET_KEY) IP: AH transformation (INET_AH) IP: ESP transformation (INET_ESP) #?IP: IPComp transformation (INET_IPCOMP) # strictly necessary? IP: IPsec transport mode (INET_XFRM_MODE_TRANSPORT) IP: IPsec tunnel mode (INET_XFRM_MODE_TUNNEL) #?IP: IPsec BEET mode (INET_XFRM_MODE_BEET) Null algorithms (CRYPTO_NULL) AES cipher algorithms (i586) (CRYPTO_AES_586)
Virtual FAT disk images
Ex: qemu debian.img -hdb fat:/tmp
VFAT (Windows-95) fs support (VFAT_FS) Codepage 437 (United States, Canada) (NLS_CODEPAGE_437) NLS ISO 8859-1 (Latin 1; Western European Languages) (NLS_ISO8859_1) # Pas nécessaire pour fat:, mais indispensable pour monter de vraies # partitions FAT françaises # Codepage 850 (Europe) (NLS_CODEPAGE_850)
Carte graphique
0000:00:02.0 VGA compatible controller: Cirrus Logic GD 5446
Supprimé pour l'instant
# Software poweroff: Power Management support (PM) ACPI Support (ACPI) Button (ACPI_BUTTON) The IPv6 protocol (IPV6) ?generic/default IDE chipset support (IDE_GENERIC)
Autre matériel
0000:00:01.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI ? 0000:00:00.0 Host bridge: Intel Corp. 440FX - 82441FX PMC [Natoma] (rev 02) ? 0000:00:01.0 ISA bridge: Intel Corp. 82371SB PIIX3 ISA [Natoma/Triton II] ?
Automatisation
On peut prédéfinir ces options dans un fichier allno.conf
, pris en compte au moment du make allnoconfig
(cf. le README du noyau). Le fichier se présente sous cette forme (préfixer par CONFIG_
et finir par =y
- comme dans un .config
):
CONFIG_BINFMT_ELF=y CONFIG_IDE=y [...] CONFIG_CIFS=y CONFIG_VFAT_FS=y CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_ISO8859_1=y
Note: en fait, il faut rajouter un certain nombre d'option qui sont automatiquement ajoutées par xconfig (notamment CONFIG_IDE_GENERIC pour le disque-dur...).
Liens
- Documentation officielle
- Guide simplifié pour QEMU
- Unofficial #qemu Wiki
- The QEMU forum
- QEMU Networking: panorama des différentes solutions de connexion réseau
- tuntap nécessite des permissions supplémentaires
- Limitations de Etherboot: utiliser ISC DHCPd v2 (pas v3).
- QEMU compilé pour Fedora