imported>SylvainBeucler |
imported>SylvainBeucler |
Ligne 1 : |
Ligne 1 : |
− | == Compilation du noyau utilisateur ==
| + | Paquets: |
| | | |
− | C'est très simple: on compile le noyau Linux avec le paramètre <code>ARCH=um</code> ''pour chaque commande''.
| + | aptitude install hpijs-ppds # needed? |
| | | |
− | wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.13.tar.bz2
| + | => sous Etch, le pilote recommandé "HP Deskjet D2300 / hpijs" ne fonctionne pas. |
− | tar xjf linux-2.6.17.13.tar.bz2
| |
− | cd linux-2.6.17.13
| |
| | | |
− | make defconfig ARCH=um
| |
− | make xconfig ARCH=um # facultatif; pensez à activer HOSTFS si besoin
| |
− | make ARCH=um
| |
− | strip linux
| |
− | make modules_install ARCH=um INSTALL_MOD_PATH=uml-modules/
| |
| | | |
− | Cf. [http://user-mode-linux.sourceforge.net/new/source.html Building from source] chez UML.
| + | L'imprimante a en effet besoin de hplip en version >= 1.7.4 (avril 2007), cf. |
| + | [http://hplip.sourceforge.net/supported_devices/inkjet.html les imprimantes gérées par hplip]. |
| | | |
− | Des options que j'active:
| + | Télécharger la version en fichier <code>.run</code>. |
− | * MAGIC_SYSRQ: active l'équivalent de Alt+ImprÉcr, utilisable depuis uml_mconsole
| |
− | * HOST_2G_2G: contourne un problème de certains noyaux hôte (cf. plus bas)
| |
− | * HOSTFS: possibilité de monter des répertoires de la machine hôte - attention à la sécurité)
| |
− | * STATIC_LINK: compiler le noyau en statique (pas de dépendance sur des bibliothèques partagées .so)
| |
| | | |
− | Il y a également des patches à essayer [http://www.user-mode-linux.org/~blaisorblade/patches/]:
| + | aptitude purge hpijs hpijs-ppds |
− | * hôte/host:
| + | aptitude install build-essential libjpeg-dev |
− | ** skas3 - meilleures performances (dossier skas3-2.6)
| + | sh hplip-2.7.10.run |
− | * invité/guest:
| + | # => c=custom |
− | ** exec support: permet de lancer des commandes shell avec uml_mconsole (ex: [http://www.user-mode-linux.org/~blaisorblade/patches/guest/uml-2.6.18.1-bb2/broken-out/uml-mconsole-exec.diff])
| + | # => s=single func |
| | | |
− | == Construction du système de base ==
| + | Avec plus de choses (autres que l'impression stricte) à compiler: |
| + | aptitude install python-dev libcupsys2-dev libusb-dev libtool |
| + | sh hplib-2.7.10.run |
| + | # a=automatic |
| + | # Reported missing optional dependencies: |
| + | # libnetsnmp-devel pyqt reportlab sane-devel scanimage xsane sane |
| | | |
− | On se propose de construire et de lancer un système UML sans aucun accès root.
| + | <code>foomatic</code> (<code>/usr/lib/ppr/interfaces/foomatic-rip</code>) est utilisé d'une manière ou d'une autre dans la chaîne d'impression: |
| + | aptitude install foomatic-filters |
| | | |
− | Vraisemblablement, ce n'est pas possible facilement. Cela est dû au manque d'outil en mode utilisateur pour travailler directement sur des systèmes de fichiers ext3.
| + | Par défaut, l'imprimante n'utilise que la cartouche couleur pour imprimer. Aller dans les préférences de l'imprimante (http://localhost:631/printers/DeskJet-D2400) pour sélectionner l'utilisation d'une des deux cartouches uniquement, ou des deux cartouches combinées. (ça n'a pas l'air de bien fonctionner depuis l'interfaces "Impression" de Gnome, par contre). |
− | | |
− | === Tentative 1 ===
| |
− | | |
− | Essayons de créer un système complet, sans faire d'image, et en possédant tous les fichiers:
| |
− | | |
− | La dernière version de debootstrap propose une variante ''fakechroot'' qui permet de l'utiliser sans accès root:
| |
− | export PATH=/usr/local/sbin:/usr/sbin:/sbin:$PATH # pour trouver la commande 'chroot'
| |
− | fakechroot /usr/sbin/debootstrap --variant=fakechroot sarge sarge-uml/ http://localhost/mirrors/debian
| |
− | /usr/src/linux-2.6.17.13/linux root=/dev/root rootflags=/home/sylvain/tests/uml/debian/sarge-uml/ rootfstype=hostfs
| |
− | | |
− | Résultat: cela ne fonctionne pas, à mon avis parce que dans ce cas précis sarge-uml/dev est un lien symbolique vers /dev.
| |
− | | |
− | === Tentative 2 ===
| |
− | | |
− | Essayons à partir d'une image UML déjà opérationnelle. Le principe est de monter le système de fichier hôte avec ''hostfs'', puis de faire un <code>mount -o loop</code> depuis le UML sur l'image disque à bootstrap-per. Cela permet de monter l'image sans avoir de privilèges super-utilisateur.
| |
− | | |
− | mount none host/ -t hostfs -o /home/sylvain/tests/uml/debian
| |
− | cd host/
| |
− | mkdir loop/
| |
− | mount image -o loop loop/
| |
− | ls loop/ # -> bin boot dev etc ...
| |
− | | |
− | [http://packages.debian.org/unstable/utils/rootstrap rootstrap] fonctionne apparemment sur ce principe.
| |
− | Je n'ai pas réussi mais je n'ai pas beaucoup cherché.
| |
− | | |
− | === En mode root ===
| |
− | | |
− | Faute de mieux, utilisons sudo:
| |
− | | |
− | mkdir loop/
| |
− | # image de 1Go, à trous (espace disque progressif)
| |
− | dd if=/dev/null of=image count=0 bs=1G seek=1
| |
− | # on formatte en ext3
| |
− | /sbin/mkfs.ext3 -F image
| |
− |
| |
− | sudo mount image loop/ -o loop
| |
− | sudo debootstrap sarge loop/ http://192.168.1.60/mirrors/debian
| |
− |
| |
− | # configuration de la console:
| |
− | sudo grep -v tty loop/etc/inittab > inittab.work
| |
− | sudo echo "1:2345:respawn:/sbin/getty 38400 console linux" >> inittab.work
| |
− | sudo mv inittab.work loop/etc/inittab
| |
− |
| |
− | # configuration réseau:
| |
− | cat <<'EOF' > interfaces.work
| |
− | auto lo
| |
− | iface lo inet loopback
| |
− | EOF
| |
− | sudo mv interfaces.work loop/etc/network/interfaces
| |
− |
| |
− | # fake mtab and fstab
| |
− | cat <<'EOF' > fstab.work
| |
− | proc /proc proc defaults 0 0
| |
− | /dev/ubda / auto defaults,errors=remount-ro 0 1
| |
− | EOF
| |
− | sudo mv fstab.work loop/etc/fstab
| |
− |
| |
− | sudo umount loop/
| |
− | | |
− | === Optimiser la taille de l'image pour la distribuer ===
| |
− | | |
− | Une image UML contient souvent des zones vides, où il n'y a pas encore de fichiers.
| |
− | | |
− | L'image ci-dessus réserve 1Go mais n'en occupe que 230Mo grâce à la création d'image "à trous" (''sparse'' en anglais).
| |
− | | |
− | $ ls -lh image
| |
− | -rw-r--r-- 1 sylvain sylvain 1,0G 2006-09-18 15:55 image
| |
− | $ du -sh image
| |
− | 234M image
| |
− | | |
− | D'autres méthodes (dd sur /dev/zero par exemple) n'en tiennent pas compte.
| |
− | | |
− | <code>df -h</code> dans UML indique une utilisation de 178Mo, donc on doit pouvoir encore améliorer (comment?). Éviter <code>e2defrag</code>, qui est obsolète et corrompt les systèmes de fichier. Piste: copier les fichiers dans une nouvelle image et supprimer l'ancienne - défragmentation à la volée.
| |
− | | |
− | | |
− | Pour optimiser une image "pleine":
| |
− | cp --sparse=always image image.sparse
| |
− | | |
− | Pour envoyer une image par le réseau en respectant les trous:
| |
− | tar cSf image.tar image # S pour "sparse"
| |
− | | |
− | == Réseau ==
| |
− | | |
− | Imaginez un câble virtuel qui relie la machine hôte et la machine UML, une carte carte réseau virtuelle à chaque bout. Chaque carte a une adresse IP, mais comme sur un réseau classique, les deux cartes ne doivent pas avoir la même adresse.
| |
− | | |
− | === Mode root avec tuntap ===
| |
− | | |
− | host# sudo /usr/src/linux ubda=sarge-debootstrap eth0=tuntap,,,192.168.1.101
| |
− | | |
− | Notez les messages d'UML indiquant la mise en place d'une interface tuntap <code>tap0</code>, une route pour accéder à la machine virtuelle, et un partage de connexion pour que la machine virtuelle puisse accéder au réseau extérieur.
| |
− | | |
− | Puis dans UML:
| |
− | | |
− | uml# ifconfig eth0 192.168.1.201
| |
− |
| |
− | === Mode semi-root avec tuntap ===
| |
− | | |
− | Pour utiliser tuntap, il faut créer à l'avance (et en mode root) une interface tap0 et lui assigner une adresse IP.
| |
− | | |
− | # tunctl -u sylvain
| |
− | Set 'tap0' persistent and owned by uid 1000
| |
− | | |
− | Puis il faut donner des droits aux utilisateurs non-privilégiés d'utiliser tuntap (en mode root aussi):
| |
− | | |
− | chmod 666 /dev/net/tun
| |
− | | |
− | C'est une solution efficace mais qui nécessite plusieurs étapes de préconfiguration en mode root, accompagné de permissions lâches sur tuntap.
| |
− | | |
− | | |
− | === Mode semi-root avec tuntap (2) ===
| |
− | | |
− | Mettre l'utilisateur concerné dans le groupe <code>uml-net</code>. Ce groupe a accès au programme setuid <code>/usr/lib/uml/uml_net</code>, qui peut lancer et configurer des interfaces tuntap. La sécurité du procédé n'est pas grande (l'utilisateur peut créer de nouvelles interfaces réseau et perturber iptables par exemple), mais est facile à mettre en place.
| |
− | | |
− | host# /usr/src/linux ubda=sarge-debootstrap umid=deb eth0=tuntap,,,10.10.10.10
| |
− | uml# ifconfig eth0 10.10.10.11
| |
− | uml# route add default gw 10.10.10.10
| |
− | | |
− | Note: la configuration automatique côté hôte nécessite [http://packages.debian.org/unstable/otherosfs/uml-utilities uml_net] (partage de connexion, route vers la machine UML...).
| |
− | | |
− | === Mode utilisateur avec slirp ===
| |
− | | |
− | Lancer UML avec une interface slirp, en utilisant le binaire 'fullbolt' (qui s'affranchit de la limitation débit de 10ko/s dans slirp 'classique'):
| |
− | | |
− | host# /usr/src/linux ubda=sarge-debootstrap umid=deb eth0=slirp,,/usr/bin/slirp-fullbolt
| |
− | | |
− | Dans UML, quelques étapes spécifiques à slirp sont nécessaires:
| |
− | | |
− | # Configurer l'interface sur 10.2.0.15 (IP de choix pour slirp)
| |
− | ifconfig eth0 10.2.0.15
| |
− | # Utiliser la redirection DNS 10.0.2.3
| |
− | echo "nameserver 10.0.2.3" > /etc/resolv.conf
| |
− | # Ajouter une route par défaut vers eth0:
| |
− | route add default dev eth0
| |
− | | |
− | Note: <code>ping</code> ne fonctionne pas, car il nécessite un accès root (sur l'hôte, ping est d'ailleurs souvent setuid).
| |
− | | |
− | === /etc/network/interfaces ===
| |
− | | |
− | Voici comment configurer automatiquement le réseau au démarrage d'UML, dans son fichier <code>interfaces</code>:
| |
− | | |
− | auto lo
| |
− | iface lo inet loopback
| |
− |
| |
− | auto eth0
| |
− | iface eth0 inet static
| |
− |
| |
− | # eth0=tuntap,,,10.10.10.1
| |
− | # address 10.10.10.10
| |
− | # netmask 255.0.0.0
| |
− | # gateway 10.10.10.1
| |
− |
| |
− | # eth0=slirp,,/usr/bin/slirp-fullbolt
| |
− | address 10.2.0.15
| |
− | netmask 255.0.0.0
| |
− | dns-nameservers 10.0.2.3
| |
− | up route add default eth0
| |
− | | |
− | (dns-nameservers nécessite le paquet ''resolvconf'')
| |
− | | |
− | Autre solution pour gérer automatiquement les DNS: installez un serveur DNS dans l'UML, et évitez ainsi de vous faire suer à déterminer ceux de l'hôte. In-dé-pen-dan-ce ;) À moins que vous n'ayez besoin du serveur DNS de votre réseau interne.
| |
− | | |
− | == Lancer un UML en tâche fond ==
| |
− | | |
− | ./linux ubda=... con=null &
| |
| | | |
| | | |
| == Liens == | | == Liens == |
| | | |
− | * [http://user-mode-linux.sourceforge.net/new/ The User-mode Linux Kernel Home Page]: lien direct vers la nouvelle version du site - on s'y retrouve mieux | + | * http://openprinting.org/show_printer.cgi?recnum=HP-DeskJet_D2400 : page openprinting |
− | * [http://eggdrop.ch/texts/uml/ Running Debian inside of Debian with User-Mode Linux]
| |
− | * [http://www.metz.supelec.fr/metz/personnel/galtier/PagesPerso/TutorielUML/index.html Tutoriel User Mode Linux]: avec introduction à SKAS et réseau
| |
− | * [http://user-mode-linux.sourceforge.net/UserModeLinux-HOWTO-6.html#ss6.11 Slirp] dans le UML HOWTO.
| |
− | * [http://www.phptr.com/bookstore/product.asp?isbn=0131865056&rl=1 Livre] [http://www.eyrolles.com/Informatique/Livre/9780131865051/livre-user-mode-linux.php officiel]: écrit par l'auteur, ce livre est sous licence 'Open Publication' et n'en utilise visiblement aucune des options non-libres. C'est donc un livre libre que l'on peut recommander d'acheter :) La page de présentation indique que les livres de la série "Bruce Perens' Open Source" sont tous sous cette licence et sont publiés au format électronique au bout de 6 mois. J'ai personnellement récupéré un exemplaire au format .chm mais je ne connais pas son origine. J'en dirai plus sur le contenu quand je l'aurai parcouru ;)
| |
− | * [http://testape.com/webtty_sample.php WebTTY]: lancez une instance UML sur le serveur distant et tapez du Bash intéractivement dans un navigateur web :)
| |
− | * [[Émulation]] sur doc.cliss21.com
| |
− | * Réseau
| |
− | ** [http://jungla.dit.upm.es/~vnuml/ VNUML]: Virtual Network User Mode Linux, simulation de réseaux complexes
| |
− | ** [http://www.strongswan.org/uml/index.htm strongSwan - UML testing]: tests d'une solution VPN avec un réseau virtuel d'UML.
| |
− | ** [http://www.freeswan.org/freeswan_snaps/CURRENT-SNAP/doc/umltesting.html FreeS/WAN User-Mode-Linux Testing guide]: même chose chez la concurrence
| |
− | ** [http://www.samag.com/documents/s=8997/sam0401a/0401a.htm Emulating Networks Using User-Mode Linux]
| |
− | | |
− | == Dépannage ==
| |
− | | |
− | Kernel panic - not syncing: start_userspace : expected SIGSTOP, got status = 256
| |
− | | |
− | Cf. http://www.mail-archive.com/user-mode-linux-devel@lists.sourceforge.net/msg03414.html
| |
− | | |
− | Votre noyau (hôte) est, si j'ai bien compris, mal configuré. Recompilez-le ou utilisez-en un autre.
| |
− | | |
− | Vous pouvez également activer CONFIG_HOST_2G_2G dans la configuration du noyau UM.
| |