[AVANCE]Installation QEMU/KQEMU compilés sauce debian

QEMU: un émulateur de processeur
QEMU est un émulateur de processeur: il émule actuellement arm, powerpc, sparc et x86. QEMU dispose de deux modes de fonctionnement:

  • Emulation “User Mode” (= lancé dans l’espace utilisateur): QEMU peut lancer des executables compilés pour un autre processeur.
  • Emulation systême complète: QEMU émule une machine virtuelle complète, fournissant un processeur et divers périphèriques virtuels, fournissant une interface avec la machine physique.

kqemu: un accèlérateur de QEMU
kqemu est un module noyau fournissant au noyau des fonctionnalités permettant d’accélèrer QEMU.
En effet QEMU seul est d’une lenteur assez redhibitoire, et est plus destiné au dénuguage d’applis destinés à un autre processeur qu’à de la “vraie” émulation.
Avec kqemu, et une machine puissante, on obtient des vitesses d’execution “raisonnables” (mais encore infèrieures à celles d’autres solutions d’execution comme vmware, ou wine).

kqemu n’est pas fourni en paquet sous debian pour des raisons de licenses, quand à la version de qemu fournie sous forme de paquet, nous allons recompiler, par principe.

Nous allons donc tout faire en recompilant depuis les sources (d’autant plus que pour l’instant, aucun autre paquet ne dépend de QEMU).

N’oubliez pas d’éxecuter les commandes avec des droits superuser, idéalement avec sudo.

préparation

  • En premier lieu, vous aurez besoin d’un minimum d’outils de compilation, ceux que vous avez déjà installés si vous avez recompilé votre noyau. Mettons:aptitude install build-essential automake autoconf

  • Dans l’optique d’optimiser le fonctionnement de QEMU, nous allons le compiler avec le support de la SDL:aptitude install libsdl1.2-dev

  • Je n’ai jamais essayé de compiler le module kqemu avec les headers, mais ça doit être possible comme avec n’importe quel autre module. Par contre, kqemu n’est pas disponible avec le module-assistant.

La présentation qui suit va donc correspondre au cas ou vous disposez des sources de votre noyau que vous avez compilé, et qu’un lien /usr/src/linux pointe déjà vers cette arborescence (ou vers les headers, si cous préfèrez essayer avec).

En bref, pour installer les sources de votre noyau courant, et compiler un noyau avec la même configuration que votre noyau courant, puis l’installer, si vous ne l’avez pas déjà fait, et que vous partez d’un noyau de distrib, rapidement:export KBUILDVER=`uname -r` aptitude install linux-source-$KBUILDVER cd /usr/src tar xjf linux-source-$KBUILDVER ln -s linux-source-$KBUILDVER linux make-kpkg --config oldconfig --initrd --append-to-version "-personnel" buildpackage dpkg -i ../*$KBUILDVER-personnel*.debsi vous préfèrez les headers:export KBUILDVER=`uname -r` aptitude install linux-headers-$KBUILDVER ln -s linux-headers-$KBUILDVER linux
Plus d’infos dans forum.debian-fr.org/viewtopic.php?t=1806

compilation de QEMU avec prise en compte de kqemu
préparons la compilation (dépendances de compil et sources:

apt-get build-dep qemu cd /usr/src apt-get source qemu wget http://fabrice.bellard.free.fr/qemu/kqemu-0.7.2.tar.gz cd qemu-XXX # dépend de la version de qemu telechargée à la commande precedente tar xzf ../kqemu-0.7.2.tar.gz ./configure --help
La dernière commande vous permet de déterminer les options de configuration dépendent de vos choix, et de votre configuration de machine (j’ai été obligé de forcer les support alsa, par exemple).
Ensuite, ja n’ai pas trouvé comment faire autrement que de modifier le fichier ./debian/rules ou j’ai remplacé:

[code]config-host.mak: configure
dh_testdir

    CFLAGS="$(CFLAGS)" ./configure \
      --prefix=/usr \
      --cc=$(CC)[/code]

par

[code]config-host.mak: configure
dh_testdir

    CFLAGS="$(CFLAGS)" ./configure \
      --prefix=/usr \
      --cc=$(CC) \
    --enable-alsa[/code]Je sais qu'il y a des manières plus propres de recompiler en passant des options au ./configure au travers du dpkg-buildpackage, mais je n'ai pas retrouvé. Si quelqu'un a une idée...

Ensuite, on lance la compil:dpkg-buildpackage -uc -b
puis on installe le paquet obtenu:dpkg -i ../qemu*.deb. Il se peut que certaines dépendances manquent encore. Notez les paquets qui manquent, installez les, puis relancez le ‘dpkg -i’.

en cas de changement de noyau comment recompiler kqemu ?
Il suffit de relancer la commande dpkg-buildpackage…, et même sans reinstaller le paquet produit, kqemu est recompilé et installé dans l’arborescence des modules (mais il faut le modprober).

peaufinage d’install
A priori, en même temps qu’il compilait le paquet qemu, le module kqemu a dû s’installer dans votre arborescence de modules noyau. vous pouvez le vérifier avec:modprobe kqemu. Ensuite, ajoutez les modules utiles à votre /etc/modules:

echo kqemu >>/etc/modules echo tun >>/etc/modules
Voilà.
[i](TODO:

  • un exemple d’install,
  • la recompil du module tun avec le module assistant)[/i]

Je viens d’essayer la version CVS avec le module kqemu version 1.36. J’ai pu faire tourner dessus avec le module accélérateur donc bcp plus vite:

  • Windows XP
  • Windows 98
  • Debian sarge

La nouveauté est le support de Windows 98 AVEC kqemu. Je vais éventuellement en faire un paquet.

Une question MattOTop, qemu ne se compile qu’avec gcc >= 3.3 chez moi, kqemu supporte par contre toutes les versions de gcc. Chez moi mon noyau est en gcc2.95. Quelle est la version de gcc pour le noyau de la sarge (le 2.4.27 et le 2.6.8?), le 3.3?

aucune idée, mais pour la recompil du paquet qemu, le 4.0 ne passe pas, il faut un 3.x (3.4 a marché pour moi).

Tu peut déposer le paqutage quelque part fran.b? Je sens que je vais avoir des problème avec gcc.
Au pire utilise dl.free.fr/ ?

concernant kqemu :

une fois decompressé, j’ai fait

make et voila la réponse :

vohudebian:/usr/src/kqemu# make make -C SUBDIRS=`pwd` modules make: *** SUBDIRS=/usr/src/kqemu: Aucun fichier ou répertoire de ce type. Arrêt. make: *** [kqemu.o] Erreur 2

AMA le problême d’empaquetage est aussi dans la manière dont sont interconnectés qemu et kqemu. Je pense qu’il faut faire un paquet source à compiler pour chaque noyau, et ne l’installer qu’avec dpkg-buildpackage, ou apt-build.
En fait, qemu ne se compile avec le support de kqemu que quand les sources kqemu sont en sous repertoire de qemu. On peut juste bloquer le support de kqemu dans ce cas, mais on ne peut pas le forcer.
Par ailleurs, la compil de kqemu ne se fait bien, sous debian, avec dpkg-buildpackage, que si elle est faite au travers de la compil de qemu, car elle hérite de variables d’env passées par le make de qemu.
Aprés, je viens de changer de noyau, et avec ma méthode, j’ai un problême: même en déscendant faire un make clean dans le répertoire kqemu, impossible de produire un autre module qu’un module compilé avec mon noyau précèdent. il compile bien un nouveau .ko dans le repertoire, et le recopie dans le repertoire de modules, mais quand je le modprobe, ça râle. :imp:
Pourtant, /usr/src/linux pointe bien vers les sources de mon noyau courant compilé, avec la config courante… grumlll et pas de ./configure dans kqemu…

[quote=“vohu”]concernant kqemu :

une fois decompressé, j’ai fait

make et voila la réponse :

vohudebian:/usr/src/kqemu# make make -C SUBDIRS=`pwd` modules make: *** SUBDIRS=/usr/src/kqemu: Aucun fichier ou répertoire de ce type. Arrêt. make: *** [kqemu.o] Erreur 2 [/quote]Suis ma méthode: elle a un défaut majeur que je tente de corriger, mais au moins elle marche. De toutes manière, il ne suffit pas de compiler kqemu et de l’insèrer pour en profiter: il faut aussi recompiler qemu avec le support kqemu.

[quote=“transpil”]Tu peut déposer le paqutage quelque part fran.b? Je sens que je vais avoir des problème avec gcc.
Au pire utilise dl.free.fr/ ?[/quote]lors de ma compil, le paquet gcc nécessaire est installé, et même si tu décides de ne pas modifier la diversion gcc->gcc4.0 ou autre, le réempaquetage l’utilisera tout de même de manière transparente.
Bon, je vais regarder ce pb de recompilation de kqemu avec un nouveau noyau.

bon, ce coup ci, en faisant une reconstruction complète de qemu avec le dpkg-buildpackage, ça a l’air de recompiler plus. On va voir si ça n’instale pas le bon module, par hasard.
Sinon, en me relisant, j’ai corrigé un bug à l’etape du déploiement des sources, j’avais oublié de descendre dans le repertoire des sources qemu avant de deployer dedans celles de kqemu. C’est corrigé.

J’ai compiler sans probleme avec les headers (j’ai fait une betise j’ai plus les sources et pas moyen pour le moment de tout récupérer correctement mais j’y travaille)

Mais lors du modprobe il rale aussi chez moi pourtant le .ko s’est bien fait au bon endroit.

J’ai l’impression qu’il va falloir couper le topic en deux :slightly_smiling:

:wink: peut être pas la peine de scinder, si tu suis mon tuto: j’ai ajouté une section en cas de changement de noyau comment recompiler kqemu ?

Juste pour information, ayant une deuxième partition de secours (que j’ai passé en stable :

[quote]ginkgobiloba@debian:~$ gcc -v
Lecture des spécification à partir de /usr/lib/gcc-lib/i486-linux/3.3.5/specs
Configuré avec: …/src/configure -v --enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared --enable-__cxa_atexit --with-system-zlib --enable-nls --without-included-gettext --enable-clocale=gnu --enable-debug --enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc i486-linux
Modèle de thread: posix
version gcc 3.3.5 (Debian 1:3.3.5-13)
[/quote]
Voilà quelle est la version de gcc en stable (noyau 2.6. 8 )
Je crains fort de ne pouvoir vous être plus utile.

Bon, pour ceux qui sont intéressé, j’ai packagé la dernière version de qemu et kqemu (donc qemu CVS du 1 Mai et kqemu-1.36).

Vous trouverz les paquets sur

http://boisson.homeip.net/qemu/

ou

ftp://boisson.homeip.net/sarge/qemu/

J’ai compilé le module pour les deux noyaux de sarge.

Il y a moyen de faire les paquets soit même en chargeant les sources sur

deb-src boisson.homeip.net/source ./

Charger le paquet qemu et kqemu.

Attention:

  1. gcc doit pointer vers le compilateur pour le noyau: 2.95 pour 2.4 et 3.3 (?) pour les 2.6. Dans ce cas, les paquets devraient bien se faire.

1bis) qemu n’a pas forcément besoin de kqemu.

  1. Je suis un infâme conservateur méfiant des noyaux tout neuf, tout ça pour dire que je n’ai pas fait le test pour le 2.6, par ailleurs je crée à l’installation froidement un fichier /dev/kqemu avec mknod. Peut être cela pose pbm avec udev?

Bon usage.

Si vous voulez essayer, il ya une compilation de kqemu pendant l’install, tous ce qu’il ya de plus simple:
zilwil.free.fr/jull/os/qemu_0.8. … 1_i386.deb

ou tres dangereux imagine que ce soit un rootkit ou trojan déguisé en qemu.

J’ai essayer rien d’alarmant et fonctionne très bien:
zilwil.free.fr/jull/os/qemu_0.8. … 1_i386.deb

D’ailleur si tu essaye une recherche tu retrouve le paquet sauf que les liens sont mort:
google.fr/search?hl=fr&q=qem … cher&meta=

Non, au delà de l’aspect sécurité, c’est surtout que c’est trop simple. :mrgreen:

Compiler qemu : comme d’hab je m’y perd ! J’ai toujours un message d’erreur inattendu pour moi (je n’ai pas compilé mon noyau, vous savez pourquoi) :
après dpkg-buildpackage -uc -b

[quote]dpkg-parsechangelog: error: cannot open debian/changelog to find format: Aucun fichier ou répertoire de ce type
dpkg-buildpackage: unable to determine source package is
[/quote]

C’est pas grave : qemu est disponible en sid et en etch

[quote]qemu:
Installé : 0.8.2-1
Candidat : 0.8.2-1
Table de version :
*** 0.8.2-1 0
660 ftp.fr.debian.org sid/main Packages
100 /var/lib/dpkg/status
0.8.1-1 0
590 ftp2.fr.debian.org etch/main Packages

[/quote]
:stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue:

Oui il est disponible mais pas avec kqemu qui l’accelere c’est l’intéret principale :smiley: