Virtualisation sous Linux
Transcription
Virtualisation sous Linux
Linux Linux Virtualisation Pythagore F.D. FH/050301/1/100303 Sommaire VIRTUALISATION...............................................................................................3 Présentation.......................................................................................................4 UNIX..................................................................................................................9 VIRTUALISATION SOUS LINUX...................................................................10 Types de virtualisation...................................................................................11 Exemples d'utilisation....................................................................................14 BOCHS...................................................................................................................17 Présentation.....................................................................................................18 QEMU.....................................................................................................................19 Présentation.....................................................................................................20 Installation.......................................................................................................21 Lancement........................................................................................................22 Administration................................................................................................26 Images..............................................................................................................28 Snapshot...........................................................................................................31 Réseau..............................................................................................................33 XEN : INTRODUCTION.....................................................................................36 Présentation.....................................................................................................37 XEN : FONCTIONNEMENT..............................................................................38 Installation.......................................................................................................39 Ajout de systèmes invités..............................................................................40 Configuration des systèmes invités..............................................................42 UML........................................................................................................................48 Présentation.....................................................................................................49 UML: UTILISATION...........................................................................................51 Utilisation........................................................................................................52 MultiUML.......................................................................................................55 Outils................................................................................................................57 Debug...............................................................................................................60 Lancement de plusieurs noyaux...................................................................66 Sauvegarde d'un système de fichiers...........................................................70 UML: MISE EN OEUVRE...................................................................................72 Présentation.....................................................................................................73 Installation.......................................................................................................87 VMWARE..............................................................................................................88 Présentation.....................................................................................................89 Installation.......................................................................................................90 Interfaces d'administration............................................................................91 VSERVER..............................................................................................................98 Présentation.....................................................................................................99 VSERVER: MISE EN OEUVRE.......................................................................101 Installation.....................................................................................................102 Construction d'un serveur...........................................................................109 Lancement......................................................................................................110 Réseau............................................................................................................112 Utilisation......................................................................................................116 Sécurité...........................................................................................................119 WINE....................................................................................................................123 Présentation...................................................................................................124 Installation.....................................................................................................128 Configuration................................................................................................130 Matériels, partages et bases.........................................................................139 Prérequis d'utilisation.................................................................................142 Programmes...................................................................................................145 Ressources et support...................................................................................149 I Virtualisation Pythagore F.D. (c) Pythagore F.D. 2010 Page 3 Présentation Un système d'exploitation a pour objectif d'exploiter les ressources d'un ordinateur. Il dispose d'un ensemble de programmes permettant de gérer ses ressources. Un problème majeur est que cet ensemble de programme est étroitement lié à la machine physique. Il est par exemple, difficile de disposer de plusieurs comptes d'administrateur, de dupliquer des périphériques, d'exécuter des applications non prévues sur ce système d'exploitation, d'exécuter une autre instance du système d'exploitation pour faire des tests, ... L'objectif de la virtualisation est de simuler plusieurs instances d'une machine physique. On appellera machine virtuelle, une de ces instances. Exemples: • VM • VMware • UML • Xen • bochs • VirtualBox • LDOMS • zones solaris Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 4 Virtualisation VM "VIRTUAL MACHINE" Le système VM simule autant d'ordinateurs différents qu'il existe de personnes connectées. Les possibilités de chacun de ces ordinateurs diffèrent en fonction de privilèges donnés lors de la création de cet "ordinateur virtuel". La composante du système qui effectue cette simulation est appelée CP, c'est le Control Program. L'ordinateur simulé est composé d'une CPU (organe de calcul) identique à la CPU réelle, de mémoire, d'un disque en accès lecture/écriture, de 2 disques en lecture seule contenant des fichiers utilitaires divers (compilateurs, menus...) et de périphériques: • Une console qui s'associe au terminal où vous vous connectez. • Une imprimante permettant l'impression de listings. • Un lecteur virtuel de cartes permettant de recevoir résultats et fichiers. • Un perforateur virtuel permettant d'envoyer des demandes de jobs et des fichiers sur le réseau. Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 5 VM Une machine virtuelle n'a pas d'accès direct aux organes réels du système, c'est à dire (par exemple) qu'elle ne peut pas imprimer directement sur l'imprimante réelle, c'est l'opérateur qui va demander au système de vider deux fois par jour le contenu des imprimantes virtuelles sur l'imprimante réelle. Le contenu des imprimantes en attente est stocké temporairement sur disque: c'est une opération de SPOOLING. Une machine virtuelle ne peut pas communiquer avec les autres machines sans leur accord, ni accéder aux données des autres utilisateurs. Elle peut toutefois envoyer des fichiers et des messages mais la machine cible peut ne pas les recevoir. Sous VM, se connecter, c'est "simplement" associer l'ordinateur correspondant à votre numéro de machine (on dira la machine virtuelle) à la console où vous vous trouvez. Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 6 CMS Comme le système simule à l'utilisateur un ordinateur à part entière, il faut encore charger dans celuici un système d'exploitation qui permet de gérer simplement l'ordinateur simulé. Un de ces systèmes d'exploitation est CMS (conversationnal monitoring system), c'est lui que vous utilisez pour éditer, compiler, ou soumettre, lire et écrire des fichiers sur votre disque. CMS, gère l'ordinateur simulé par CP. C'est CMS qui affiche fenêtres et menus, qui lit votre terminal. En fait, il le fait sous l'étroite surveillance de CP. CMS Utilisateur Utilisateur Utilisateur CMS CMS CMS Machine Virtuelle 1 Machine Virtuelle 2 Machine Virtuelle 3 CP: Control Program Machine physique Présentation (c) Pythagore F.D. 2010 Système CMS: Interfacage et gestion de la machine virtuelle Système CP: Simulation des machines virtuelles et gestion de la machine physique Pythagore F.D. Page 7 hyperviseur: VM Dans l'exemple décrit précedemment, on n'utilise pas la fonctionnalité "Hyperviseur" de VM. En fait, CP, le programme de contrôle, simulant une machine virtuelle en tout point identique à une machine physique, peut être utilisé comme Hyperviseur de systèmes. Ainsi, sur une même machine physique, on peut faire fonctionner des machines virtuelles sous CMS mais aussi des machines virtuelles pilotant des systèmes d'exploitation tels que UNIX, MVS, DOS/VSE... si ces systèmes sont disponibles pour la machine physique considérée. Exemple VM Utilisateurs utilisant CMS Utilisateurs utilisant UNIX Utilisateurs utilisant MVS Utilisateur Utilisateur Utilisateur Utilisateur Utilisateur Utilisateur CMS CMS UNIX MVS Machine Virtuelle 1 Machine Virtuelle 2 Machine Virtuelle 3 Machine Virtuelle 4 CP: Control Program Machine physique Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 8 UNIX Pour UNIX, il n'y a pas de simulation de plusieurs ordinateurs comme VM, mais en fait la possibilité d'exécuter plusieurs programmes simultanément au sein d'une même machine globale. Il n'y a pas de concept de "périphériques", un terminal, une bande, ce n'est qu'un fichier qu'on lit ou que l'on écrit. L'accès aux différentes ressources (fichiers, mémoire, processus..) est limité aux utilisateurs autorisés. Chaque utilisateur dispose d'un nom qui lui donne un numéro d'utilisateur et de groupe. Chaque ressource sous UNIX dispose de droit d'accès que l'on compare aux droits associés au numéro d'utilisateur, ce qui détermine le droit d'écrire ou de lire un fichier, un terminal, une bande. De la même façon que sur VM, il existe un compte privilégié où l'on dispose du libre accès à toutes les ressources du système. Utilisat. 1 Utilisat. 2 Utilisat. 3 Inte rfacage avec la machine physique via inte rface UNIX UNIX Machine Physique Sur Unix, il existe des solutions pour mettre en place la virtualisation. Ces solutions sont dépendantes de l'infrastructure matérielle. UNIX (c) Pythagore F.D. 2010 Pythagore F.D. Page 9 II Virtualisation sous Linux Pythagore F.D. (c) Pythagore F.D. 2010 Page 10 Types de virtualisation Il existe cinq familles de techniques: • Conteneurs: pour faire fonctionner plusieurs copies d'une même application en les isolant. Les performances sont bonnes, mais l'isolation n'est pas complète. • Noyaux secondaires en espace utilisateur. Leurs mauvaises performances sont améliorées par l'utilisation de techniques plus sophistiquées. • Machine virtuelle (VM ou Virtual Machine): le système mime le fonctionnement de la machine physique en espace utilisateur pour donner aux systèmes secondaires l'illusion de fonctionner sur une machine normale. Les performances sont assez mauvaises. • Hyperviseur: noyau spécialisé et optimisé qui permet de faire fonctionner d'autres noyaux généralement adaptés. Il n'y a pas de transparence complète comme dans le cas de la machine virtuelle: il s'agit de paravirtualisation. Les performances sont bonnes et deviennent excellentes si l'on combine cette technique avec la virtualisation matérielle. • Virtualisation matérielle (HVM ou Hardware Virtual Machine): prévoit des instructions spécifiques au niveau du processeur, notamment pour virtualiser la mémoire. Le complément logiciel à réaliser est de ce fait nettement plus simple, et les performances d'ensemble sont très bonnes. La difficulté majeure est que les systèmes additionnels, exécutés en plus du système d'exploitation principal, ne peuvent fonctionner qu'en mode utilisateur sur le processeur (pour des raisons de sécurité). Types de virtualisation (c) Pythagore F.D. 2010 Pythagore F.D. Page 11 Principaux outils Le domaine de la virtualisation est très actif: de nouveaux outils et produits apparaissent régulièrement, d'autres sont réutilisés, fusionnés,... • UML (User Mode Linux): exécution d'un noyau Linux comme un programme utilisateur. • Xen: hyperviseur avec prise en compte de la virtualisation matérielle dans ses dernières versions. • VMWare: suite de produits commerciaux (sauf la version serveur basique), princpalement basés sur une machine virtuelle, sauf ESX server qui est un hyperviseur. • Qemu: machine virtuelle libre (sauf pour l'extension d'accélération), utilisant plusieurs techniques (traduction dynamique d'instructions, extension de virtualisation) d'amélioration de performances. • VirtualBox: machine virtuelle existant en deux versions, libre et commerciale. • Vserver: mécanismes de conteneurs très utilisés par les hébergeurs. • OpenVZ: autre outil de gestion de conteneurs. • KVM: module très récent du noyau Linux permettant l'utilisation de la virtualisation matérielle afin de faire fonctionner Qemu et d'en améliorer les performances. Les résultats sont très prometteurs mais l'outil est encore en cours de stabilisation. Types de virtualisation (c) Pythagore F.D. 2010 Pythagore F.D. Page 12 Les principaux outils (suite) • lguest: hyperviseur simple, lui aussi très récent, utilisé sous forme de module noyau et permettant l'exécution de plusieurs copies identiques du même noyau. Le résultat obtenu est similaire à UML même si le type de virtualisation est différent. • Bochs: machine virtuelle émulant un processeur X86 et quelques périphériques. "Ancêtre" de qemu, ses performances sont assez mauvaises. • Wine: émulateur de bibliothèques Microsoft Windows permettant l'exécution de certains programmes destinés à Windows sur une machine Linux. Des variantes commerciales spécialisées existent et donnent en général de meilleurs résultats que la version libre. Types de virtualisation (c) Pythagore F.D. 2010 Pythagore F.D. Page 13 Exemples d'utilisation Faire de l'hébergement virtuel Diviser une machine puissante en de nombreux serveurs dédiés. Simplifier l'administration de la machine Chaque service peut s'exécuter dans une machine virtuelle, ce qui simplifie les accès "root", les arrêts/relances, les portages sur une autre machine physique. Réaliser une zone sécurisée Dans le système tournant sous le système "invité", il est possible de lancer des processus potentiellement risqués. En cas d'attaque et de piratage de la machine, l'intrus sera bloqué, il n'aura pas accès au système hôte. Bien sûr, toute faille de sécurité dans la couche de virtualisation est potentiellement catastrophique... Même si un pirate parvient à obtenir les droits d'accès "root" dans le système invité, il n'aura que les droits d'un utilisateurs "simple" sur la machine hôte. Exécuter des applications prévues pour un système spécifique En installant ce système spécifique en tant qu'invité d'un hôte nécessaire à d'autres applications. Exemples d'utilisation (c) Pythagore F.D. 2010 Pythagore F.D. Page 14 Exemples d'utilisation pour tests Tests de procedures de sauvegarde, restauration Des tests potentiellement dangereux pour la machine peuvent être réalisés au sein du système invité sans compromettre la machine hôte. Réseaux virtuels Des tests réseaux peuvent être effectués en simulant un grand nombre de machines. Tester de nouveaux noyaux, de nouvelles distributions Simplifie les manipulations et l'administration. Exemples d'utilisation (c) Pythagore F.D. 2010 Pythagore F.D. Page 15 Exemples d'utilisation en développement Travailler sur le noyau ou des pilotes (debug, développement) Modifications plus aisées sur le noyau. Arrêt/relance du noyau simplifiés pour tester les changements. Le fonctionnement est plus sécurisé: pas d'influence sur le noyau réel. Debug de processus Si un programme ne fonctionne pas correctement à cause d'un appel système et que vous ne trouvez pas la cause vous pourrez alors mettre un breakpoint sur l'appel système pour voir exactement ce qu'il se passe. Création d'un "honeypot" Il s'agit d'une machine piège, volontairement non sécurisée, destinée à attirer les intrus pour analyser leur comportement et améliorer la sécurité des systèmes réels. Un "honeynet" étend ce principe à un réseau complet de machine pièges, très lourd à mettre en place sans mécanisme de virtualisation. Exemples d'utilisation (c) Pythagore F.D. 2010 Pythagore F.D. Page 16 III Bochs Pythagore F.D. (c) Pythagore F.D. 2010 Page 17 Présentation Bochs est un émulateur logiciel (écrit en C++) de plateforme Intel x86 (processeur et périphériques essentiels). Il permet l'installation et l'utilisation de systèmes d'exploitation compatibles x86 à l'intérieur de cet émulateur. ➢Il est comparable à Qemu dans son principe (d'ailleurs Qemu se base sur certains modules de Bochs), mais Qemu permet également d'émuler d'autres platesformes matérielles, et permet d'améliorer les performances d'exécution (utilisation de la traduction dynamique d'instructions ou d'un module de virtualisation dédiée), notamment quand la machine physique réelle est elle aussi de type x86 (dans ce cas, les instructions à émuler n'ont pas à être traduites pour la plateforme qui les exécute, donc il s'agit de virtualisation et non plus d'émulation). L'émulation purement logicielle réalisée par Bochs le rend très portable (on peut ainsi exécuter un système d'exploitation purement x86 sur une machine très différente) mais aussi très peu performant (même utilisé sur une plateforme x86 puisqu'il ne fait aucune virtualisation), donc pas forcément adapté aux utilisations nécessitant une bonne réactivité. Au départ outil propriétaire, il a été racheté par Mandriva qui le diffuse sous licence libre LGPL. Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 18 IV Qemu Pythagore F.D. (c) Pythagore F.D. 2010 Page 19 Présentation Qemu est un émulateur de machine virtuelle, utilisant plusieurs techniques d'amélioration de performances (traduction dynamique d'instructions, extension de virtualisation). Qemu est sous licence GPL (sauf pour l'extension d'accélération). Qemu peut fonctionner en deux modes: ou • exécution d'un code compilé pour un autre processeur: x86, PowerPC, ARM, MIPS, Sparc32/64, ColdFire(68000) • émulation d'une machine physique: PC (x86 ou x86_64) ISA PC (PC sans bus PCI) PREP (PowerPC) G3 BW PowerMac (PowerPC) Mac99 PowerMac (PowerPC) Sun4m (32bit Sparc) Sun4u (64bit Sparc) Malta board (32bit MIPS) ARM Integrator/CP (ARM926E ou 1026E) ARM Versatile baseboard (ARM926E) Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 20 Installation Nous utiliserons la version de qemu précompilée pour Linux sur un processeur i386. L'installation est réalisée par simple décompactage du fichier archive: tar xzf qemu-0.9.0-i386.tar.gz Cette archive est prévue pour être décompactée à partir de la racine du système de fichiers. Les répertoires utilisés sont: • usr/local/bin: contient les exécutables • usr/local/share/qemu: contient les images des bios Installation (c) Pythagore F.D. 2010 Pythagore F.D. Page 21 Lancement Il faut indiquer à qemu le nom d'un fichier image contenant un système d'exploitation utilisable ainsi qu'un répertoire contenant les images des bios. Exemple: qemu -L images_bios -no-reboot images_qemu/linux-0.2.img Lancement (c) Pythagore F.D. 2010 Pythagore F.D. Page 22 Lancement Architectures supportées La liste est obtenue avec l'option M ? $ qemu -M ? Supported machines are: pc Standard PC (default) isapc ISA-only PC Ici un pentium 2 à 2Ghz Simulation de plusieurs processeurs L'option smp demande à qemu d'émuler plusieurs processeurs (255 au maximum) qemu -L bios -smp 8 images_qemu/linux-0.2.img Lancement (c) Pythagore F.D. 2010 Pythagore F.D. Numéro du processeur utilisé Page 23 Optimisation Module accélérateur Pour accélerer qemu, il existe un module à ajouter dans le noyau: kqemu. Un autre accélérateur est qvm86(free/open source) http://savannah.nongnu.org/projects/qvm86/ Installation à partir des sources Télécharger le fichier source kqemu. Le décompacter, puis compiler de manière "standard": ./configure make make install Installation à partir de rpm rpm -i dkms-2.0.16-1.el4.rf.noarch.rpm rpm -i dkms-kqemu-1.3.0-0.1.pre11.nodist.rf.noarch.rpm compilation du module: dkms install -m kqemu -v 1.3.0-0.1.pre11.nodist.rf Lancement (c) Pythagore F.D. 2010 Pythagore F.D. Page 24 Installation de kqemu Il faut ensuite ajouter le module et configurer /dev/kqemu. Manuellement ou modprobe kqemu mknod /dev/kqemu c 250 0 chmod 666 /dev/kqemu modprobe kqemu major=250 Avec udev Si on utilise udev, le périphérique /dev/kqemu est créé automatiquement, mais il faut changer les droits: echo 'KERNEL=="kqemu", NAME="%k", MODE="0666"' > /etc/udev/rules.d/60-kqemu.rules Lancement (c) Pythagore F.D. 2010 Pythagore F.D. Page 25 Administration Mémoire La mémoire réservée par défaut par qemu est de 128Mo. Pour réserver plus de place, il faut lancer qemu avec l'option m qemu -m 256 -hda monimage.img -L bios La mémoire sera réservée dans un segment partagé, accessible sous Linux au travers du pseudo périphérique /dev/shm. Pour agrandir ce segment, il faut utiliser l'option size lors du montage du périphérique. umount /dev/shm mount -t tmpfs -o size=800m none /dev/shm qemu -m 768 -hda monimage.img -L bios Administration (c) Pythagore F.D. 2010 Pythagore F.D. Page 26 Administration La séquence ctrlalt a une signification particulière pendant l'émulation: • ctrlalt2: passe en mode console • ctrlalt: capture la souris et le clavier Mode console En mode console, les commandes suivantes sont disponibles (avec complétion automatique): • quit: quitte l'émulateur • stop: stoppe l'émulation • cont: reprend l'émulation • system_reset: relance brutalement la machine • eject/change: permet d'éjecter ou remplacer un périphérique amovible • info: donne des informations sur l'état du système: info pci info network En mode console, les touches CTRLPGUP et CTRLPGDN permettent de faire défiler l'écran Administration (c) Pythagore F.D. 2010 Pythagore F.D. Page 27 Images Une image qemu est un fichier qui représente un périphérique de type disque. Contenu d'une image L'utilisation principale d'une image est d'y installer un système d'exploitation. Autres cas d'utilisation: Images existantes La version 0.9 est livrée avec des images préconfigurées: • freedos.img • linux0.2.img • minix204 • small.ffs • sparctest0.2 qemu -no-kqemu -L qemu images_qemu/small.ffs Images (c) Pythagore F.D. 2010 Pythagore F.D. Page 28 Création Image vierge qemu-img create -f qcow2 ub704 1G Le fichier monimage.img est du type "Copy on Write", c'estàdire qu'il ne consommera de la place que lors des écritures: $ file ub704 ub704: QEMU Copy-On-Write disk image version 2, size 0 + 1073741824 Le format qcow2 permet d'utiliser la fonction "snapshot". Installation d'un système qemu -hda ub704 -L bios -boot d \ -cdrom ubuntu.iso L'option boot d indique qu'il faut démarrer sur l'image iso Images (c) Pythagore F.D. 2010 Pythagore F.D. Page 29 Création d'une image Une fois le système installé vous pouvez relancer le système sur le disque principal. qemu ub704 -L qemu Images (c) Pythagore F.D. 2010 Pythagore F.D. Page 30 Snapshot Un snapshot est une photographie d'un état d'exécution d'une machine virtuelle. Les snapshots peuvent être créés, chargés et détruits. Prise d'une photographie Affichage Snapshot (c) Pythagore F.D. 2010 Pythagore F.D. Page 31 Snapshot Chargement On peut aussi lancer qemu directement à partir d'une photographie donnée avec l'option loadvm qemu -m 384 -hda ub704 -L qemu -loadvm avant_bug La reprise à partir d'une photographie ne peut pas tenir compte des périphériques amovibles. Suppression d'une photographie Snapshot (c) Pythagore F.D. 2010 Pythagore F.D. Page 32 Réseau Pour qu'une instance de qemu puisse accéder au réseau, il faut spécifier l'option net sur la ligne de commande. Trois modes sont disponibles: • nic: crée une interface réseau dans l'instance et la connecte sur un VLAN de la machine hôte • tap: méthode standard. Crée une interface réseau dans l'instance et la connecte au travers d'un tunnel ethernet. L'instance qemu est vue comme une machine du réseau local. • user: simulation d'une pile IP en mode utilisateur. La machine qemu est comme derrière un coupe feux. Elle voit le réseau de la machine hôte mais la machine hôte ne peut pas accéder à qemu. Réseau (c) Pythagore F.D. 2010 Pythagore F.D. Page 33 Mode "user" qemu -L bios linux-0.2.img -net nic -net user Il faut activer la translation d'adresses à partir de l'instance qemu echo 1 > /proc/sys/net/ipv4/ip_forward /sbin/iptables -A INPUT -i ! eth0 -j ACCEPT /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE Réseau (c) Pythagore F.D. 2010 Pythagore F.D. Page 34 Mode tap Vérifiez que vlanutils est installé # vconfig add eth0 6 # ifconfig eth0.6 10.6.0.1/16 # ifconfig eth0.6 eth0.6 Link encap:Ethernet HWaddr 00:15:F2:00:3D:FB inet adr:10.6.0.1 Bcast:10.6.255.255 Masque:255.255.0.0 adr inet6: fe80::215:f2ff:fe00:3dfb/64 Scope:Lien UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:0 RX bytes:0 (0.0 b) TX bytes:492 (492.0 b) Puis, qemu -L bios linux-0.2.img -net nic -net tap,vlan=6 Réseau (c) Pythagore F.D. 2010 Pythagore F.D. Page 35 V Xen : Introduction Pythagore F.D. (c) Pythagore F.D. 2010 Page 36 Présentation Xen est un logiciel hyperviseur (noyau spécifique très optimisé), permettant l'exécution de plusieurs systèmes d'exploitation en parallèle sur une même machine physique. Les versions récentes (Xen 3) peuvent exploiter les fonctionnalités de virtualisation matérielle des processeurs eux aussi récents (Intel VTX et AMD Pacifica), permettant d'obtenir de meilleures performances et d'installer des systèmes standards (dont les systèmes Windows de Microsoft), non modifiés pour une utilisation avec Xen. Avec un processeur plus ancien, on ne peut faire fonctionner que Linux, qui a été modifié pour être compatible Xen, ou FreeBSD (la compatibilité est complète seulement pour Xen 2, l'équipe FreeBSD manquant de ressources pour rendre le système compatible Xen 3). XenSource, l'entreprise qui supervise le développement, propose une version Open Source (que nous détaillons ici), ainsi que des versions commerciales plus complètes (comportant notamment une console d'administration similaire à celle de VMWare) et agrémentées d'une offre de support. La version Open Source n'est pas toujours facile à utiliser, car la documentation est incomplète et pas forcément entièrement mise à jour, et le logiciel est toujours en phase de développement rapide. Mais elle est gratuite et ne comporte pas de bridage sur le nombre d'éléments utilisables au sein de certaines fonctionnalités. Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 37 VI Xen : Fonctionnement Pythagore F.D. (c) Pythagore F.D. 2010 Page 38 Installation Une fois Xen téléchargé (depuis http://www.xensource.com/download/index_3.0.4.html, la version 3.0.4 étant la plus récente actuellement) et installé (sous forme de RPMs sur un système Redhat), il faut modifier la configuration de Grub pour que, lors du démarrage, l'hyperviseur Xen soit activé. Ce dernier charge ensuite le noyau Linux (spécialement adapté pour jouer le rôle d'intermédiaire entre le matériel et les systèmes , et donc en général fourni sous forme binaire avec Xen) qui jouera le rôle de système maître, accueillant tous les autres (systèmes invités). La configuration va ressembler à ceci : title Xen 3.0 / XenLinux 2.6 kernel /boot/xen-3.0.gz dom0_mem=262144 module /boot/vmlinuz-2.6-xen root=/dev/hda2 ro console=tty0 module /boot/initrd-2.6-xen.img Xen0 (ou dom0) représente le noyau maître, tandis que les autres noyaux sont appelé xenU ou domU, et porteront un numéro. Xen désigne par domaine un système d'exploitation, maître ou invité. Installation (c) Pythagore F.D. 2010 Pythagore F.D. Page 39 Ajout de systèmes invités Une fois grub configuré, on peut choisir la nouvelle entrée de menu au démarrage. On remarque des messages provenant de Xen qui démarre (préfixés par « (XEN) »), puis les messages habituels du noyau Linux, démarré et supervisé par Xen. Les systèmes invités sont décrits dans des fichiers textuels, dont deux exemples sont fournis : /etc/xen/xmexample1 et /etc/xen/xmexample2 Deux autres exemples, /etc/xen/xmxmexample.hvm et /etc/xen/xmexample.vti sont spécifiques au processeurs fournissant des fonctionnalités de virtualisation matérielle. Ajout de systèmes invités (c) Pythagore F.D. 2010 Pythagore F.D. Page 40 Ajout de systèmes invités (suite) A partir d'un exemple, on crée un nouveau fichier de description correspondant à nos besoins (mamachine par exemple), et on crée le système invité correspondant, après avoir mis en place un système de fichier racine fonctionnel pour l'invité (par exemple en réplicant le système hôte existant et en prenant en compte les répertoires particuliers comme /dev, /proc et /sys) : xm create -c mamachine vmid=1 c permet d'activer la console une fois le système invité démarré, et vmid permet d'affecter un identifiant au système invité. Un script /etc/init.d/xendomains permet de démarrer les systèmes dont le fichier de configuration est présent ou lié dans /etc/xen/auto. ➢Attention, les systèmes invités doivent utiliser chacun leur propre partition et système de fichiers racines, et non celles du système hôte. Le partage de données n'est pas possible, d'où la nécessité de réaliser une réplication (pas de possibilité d'installer un système hôte depuis un CDROM amorçable ; les versions commerciales de Xen proposent des fonctions supplémentaires sur ce point, mais pas d'émulation complète du lecteur CDROM comme dans VMWare). Sur ce point, Xen est comparable à UML. ➢Les outils http://xentools.org/software/xentools/ (principalement orientés distribution Debian) facilitent la création de systèmes de fichiers racine. Ajout de systèmes invités (c) Pythagore F.D. 2010 Pythagore F.D. Page 41 Configuration des systèmes invités Les fichiers de description des systèmes invités sont rédigés en langage Python. On peut y distinguer plusieurs sections importantes : • le nom du fichier représentant le noyau du système invité (et éventuellement le disque mémoire associé), via la variable kernel. Attention, excepté en cas d'utilisation de la virtualisation matérielle, il faut utiliser un noyau spécialement adapté à Xen. En fonction des versions de Xen, on peut utiliser soit le noyau fourni pour le domaine hôte (un seul noyau en tout fourni avec Xen, nom comportant le suffixe xen), soit le noyau fourni pour les domaines invités (deux noyaux sont dans ce cas fournis, l'un pour le système hôte, avec suffixe dom0, l'autre pour les systèmes invités, avec suffixe domU). On peut également obtenir les patches Xen (dans le paquet source officiel) et compiler son propre noyau, mais il s'agit d'une opération plus sujette à erreurs ; • le nom du domaine (variable name) • la quantité de mémoire à réserver pour ce système (variable memory) • la description des paramètres d'interfaces réseau virtuelles (variable vif) • la configuration des disques (partitions physiques utilisables par le système invité ainsi que leur numéro logique vu par ce dernier, partition racine utilisée pour démarrer le système), via les variables disk et root. Configuration des systèmes invités (c) Pythagore F.D. 2010 Pythagore F.D. Page 42 Configuration des systèmes invités (suite) Par défaut, les interfaces réseau virtuelles (Ethenet) des systèmes invités sont de type ponté, avec une adresse physique affectée de façon aléatoire par Xen. Les principaux réglages des interfaces virtuelles sont effectués par des scripts qui se trouvent dans le répertoire /etc/xen/scripts/ : networkbridge, networknat, networkroute, vifbridge, vifnat et vif route. Les scripts network configurent le réseau côté dom0 tandis que les scripts vif (virtual interface) réalisent le paramétrage côté domU. Trois modes de fonctionnement sont proposés (très similaires à ceux disponibles dans les produits VMWare) : pontage (scripts bridge), translation d'adresse (scripts nat) et routage direct (scripts route). Le pontage est le mode par défaut, pour utiliser l'un des deux autres modes, il faut utilser le mot clé script dans la définition des interfaces virtuelles au sein du fichier de définition du système invité. Le script vif correspondant sera appelé à la création de l'interface virtuelle. Pour modifier le mode côté dom0, il faut modifier le fichier de configuration /etc/xen/xendconfig.sxp (rédigé dans un langage spécifique à Xen, SXP, proche du Lisp). Un exemple : (network-script network-nat) (vif-script vif-nat) Configuration des systèmes invités (c) Pythagore F.D. 2010 Pythagore F.D. Page 43 Configuration des systèmes invités (suite) Une autre fonctionnalité réseau est la définition de réseaux virtuels (notion de vnet). Le chapitre de la documentation qui la détaille n'est pas présent dans toutes les versions. Les vnats émulent des réseaux locaux Ethernet privés auxquels les domaines Xen peuvent se connecter, et ce éventuellement depuis des machines physiques différentes. Le trafic de ces réseaux est encapsulé dans des paquets IP qui transitent sur le réseau physique (euxmême encapsulés dans des paquets Ethernet non virtuels). La commande de création est : xm vnetcreate <fichier>, où fichier décrit le réseau virtuel en format SXP (donc pas toujours aisé à manipuler). Configuration des systèmes invités (c) Pythagore F.D. 2010 Pythagore F.D. Page 44 Gestion des systèmes invités Le service xend, démarré par le script /etc/init.d/xend, permet la gestion des systèmes invités. La commande principale d'administration est xm (la page de manuel donne des détails utiles qui complètent le résumé obtenu par la souscommande help). [root@Poste410 ~]# xm help Usage: xm <subcommand> [args] Control, list, and manipulate Xen guest instances xm common subcommands: console <DomId> create [-c] <ConfigFile> [Name=Value].. destroy <DomId> help list [--long] [DomId, ...] mem-set <DomId> <Mem> migrate <DomId> <Host> pause <DomId> reboot <DomId> [-w][-a] restore <File> save <DomId> <File> shutdown <DomId> [-w][-a][-R|-H] top unpause <DomId> vcpu-set <DomId> <VCPUs> Attach to domain DomId's console. Create a domain based on Config File Terminate a domain immediately Display this message List information about domains Adjust the current memory usage for a domain Migrate a domain to another machine Pause execution of a domain Reboot a domain Create a domain from a saved state file Save domain state (and config) to file Shutdown a domain Monitor system and domains in real-time Unpause a paused domain Set the number of VCPUs for a domain <DomName> can be substituted for <DomId> in xm subcommands. For a complete list of subcommands run 'xm help --long' For more help on xm see the xm(1) man page For more help on xm create, see the xmdomain.cfg(5) man page Configuration des systèmes invités (c) Pythagore F.D. 2010 Pythagore F.D. Page 45 Gestion des systèmes invités (suite) Pour se connecter à la console d'un système invité, on utiliser xm console suivi de l'identifiant de ce domaine.Pour s'en déconnecter, on envoie un caractère d'échappement avec Ctrl+]. xm shutdown et xm reboot simulent un redémarrage et un arrêt matériels de système invité. En cas de plantage grave, xm destroy détruit complètement un système invité sans en informer le système d'exploitation correspondant. Configuration des systèmes invités (c) Pythagore F.D. 2010 Pythagore F.D. Page 46 Gestion des systèmes invités (suite) La commande permettant d'afficher la liste des systèmes est xm list : [root@Poste410 ~]# xm list Name AutreMachine Domain-0 MaMachine ID Mem(MiB) VCPUs State Time(s) 10 64 1 -b---62.5 0 256 1 r----86.6 9 64 1 -----65.6 La liste des états peut contenir les codes suivants : r pour running, b pour blocked (domaine en attente d'entréesortie ou mis en sommeil), p pour paused (état issu de la commande xm pause), c pour crashed (plantage grave) ou d pour dying (en cours de disparition). Configuration des systèmes invités (c) Pythagore F.D. 2010 Pythagore F.D. Page 47 VII UML Pythagore F.D. (c) Pythagore F.D. 2010 Page 48 Présentation Objectif: Normalement le noyau Linux dialogue directement avec le matériel (carte vidéo, disque dur, etc), et chaque programme qui s'exécute demande au noyau d'effectuer les opérations matérielles grâce à des appels système, comme ceci : +-----------+-----------+----+ | Process 1 | Process 2 | ...| +-----------+-----------+----+ | Linux Kernel | +----------------------------+ | Hardware | +----------------------------+ Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 49 Présentation Le noyau UML ne communique pas avec le materiel mais au «vrai » noyau, comme le ferait n'importe quel autre programme. Les programmes exécutés à l'intérieur de l'UML fonctionneront comme si ils étaient lancés depuis un noyau « normal » : +----------------+ | Process 2 | ...| +-----------+----------------+ | Process 1 | User-Mode Linux| +----------------------------+ | Linux Kernel | +----------------------------+ | Hardware | +----------------------------+ Présentation (c) Pythagore F.D. 2010 Noyau en mode utilisateur Noyau hôte Pythagore F.D. Page 50 VIII UML: utilisation Pythagore F.D. (c) Pythagore F.D. 2010 Page 51 Utilisation Fonctions de base Lancement d'une instance de Linux UML ou linux ubd0=Debian_root_fs ubd1=swap_fs uml_lance Arrêt Une fois dans l'UML, pour arrêter le système il suffit de faire un shutdown comme sur un système « classique ». Attention, un arrêt utilisant un kill sur le processus linux ou utilisant la commande " halt" de la console de supervision revient à couper brutalement le courant d'une machine Unix. Utilisation (c) Pythagore F.D. 2010 Pythagore F.D. Page 52 Compte non root Il est recommandé de lancer un UML avec un compte non privilégié bash-2.05b$ whoami seb bash-2.05b$ linux ubd0=root_fs_slack8.1 ubd1=swap_fs Checking for the skas3 patch in the host...not found Checking for /proc/mm...not found Checking PROT_EXEC mmap in /tmp...OK tracing thread pid = 17072 Linux version 2.6.10 (root@zia) (gcc version 3.3.5 (Gentoo Linux 3.3.5-r1, ssp-3 .3.2-3, pie-8.7.7.1)) #7 Tue Mar 15 16:39:37 CET 2005 Built 1 zonelists Kernel command line: ubd0=root_fs_slack8.1 ubd1=swap_fs root=98:0 PID hash table entries: 256 (order: 8, 4096 bytes) Dentry cache hash table entries: 8192 (order: 3, 32768 bytes) Inode-cache hash table entries: 4096 (order: 2, 16384 bytes) Memory: 29200k available Mount-cache hash table entries: 512 (order: 0, 4096 bytes) Checking for host processor cmov support...Yes Checking for host processor xmm support...No Checking that ptrace can change system call numbers...OK Checking syscall emulation patch for ptrace...missing ... Utilisation (c) Pythagore F.D. 2010 Pythagore F.D. Page 53 Consoles de connexion Utilisation (c) Pythagore F.D. 2010 Pythagore F.D. Page 54 Multi-UML Lancement de plusieurs distributions sur la même machine Multi-UML (c) Pythagore F.D. 2010 Pythagore F.D. Page 55 Utilisation Visualisation des différentes instances sur la machine hôte #ps -ef (...) root root root root root root (...) Multi-UML (c) Pythagore F.D. 2010 24974 24976 24978 24980 24984 24986 1 1 1 1 1 1 0 0 0 0 0 2 13:05 13:05 13:05 13:05 13:05 13:05 pts/11 pts/5 pts/5 pts/5 pts/5 pts/5 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 linux linux linux linux linux linux Pythagore F.D. [/bin/login] [/bin/login] [-bash] [-bash] [-bash] [top] Page 56 Outils • uml_mconsole • uml_moo • uml_mkcow • uml_net • uml_switch Ces outils sont fournis dans uml_utilities_20040406.tar Installation: tar xf uml_utilities_20040406.tar cd tools make && make install Utilisation Lancement d'un UML avec un paramètre nommant l'instance "umid=ici" ./linux ubd0=root_fs_slack8.1 umid=ici con=linux con0=fd:0,fd:1 [root@Poste306 console]# uml_mconsole ici (ici) Outils (c) Pythagore F.D. 2010 Pythagore F.D. Page 57 Utilisation de uml_mconsole (ici) help OK Commands: version - Get kernel version help - Print this message halt - Halt UML reboot - Reboot UML config <dev>=<config> - Add a new device to UML; same syntax as command line config <dev> - Query the configuration of a device remove <dev> - Remove a device from UML sysrq <letter> - Performs the SysRq action controlled by the letter cad - invoke the Ctl-Alt-Del handler stop - pause the UML; it will do nothing until it receives a 'go' go - continue the UML after a 'stop' log <string> - make UML enter <string> into the kernel log proc <file> - returns the contents of the UML's /proc/<file> Additional local mconsole commands: quit - Quit mconsole switch <socket-name> - Switch control to the given machine log -f <filename> - use contents of <filename> as UML log messages mconsole-version - version of this mconsole program (ici) version OK Linux vs 2.6.8.1-1um #1 Fri Mar 18 15:34:31 CET 2005 i686 Outils (c) Pythagore F.D. 2010 Pythagore F.D. Page 58 SysRq Sur la console: (ici) sysrq 5 OK (ici) sysrq m OK Donne sur la machine UML SysRq : Changing Loglevel Loglevel set to 5 SysRq : Show Memory Mem-info: DMA per-cpu: cpu 0 hot: low 4, high 12, batch 2 cpu 0 cold: low 0, high 4, batch 2 Normal per-cpu: empty HighMem per-cpu: empty Free pages: 10512kB (0kB HighMem) Active:1223 inactive:2040 dirty:9 writeback:0 unstable:0 free:2628 slab:1001 ... HighMem: empty Swap cache: add 0, delete 0, find 0/0, race 0+0 Free swap: 0kB 8192 pages of RAM 0 pages of HIGHMEM 1138 reserved pages 1503 pages shared 0 pages swap cached Outils (c) Pythagore F.D. 2010 Pythagore F.D. Page 59 Debug Grâce à UML, il est possible de déboguer le noyau comme n'importe quel autre processus. Il suffit de passer l'option debug en paramètre pour lancer UML dans GDB. linux debug ubd0=root_fs ubd1=swap_fs -> execution du noyau UML dans GDB Debug (c) Pythagore F.D. 2010 Pythagore F.D. Page 60 Configuration du réseau Sur l'hôte Ajout d'un tunnel Ethernet (TAP) modprobe tun Activation du routage echo 1 > /proc/sys/net/ipv4/ip_forward Sur l'instance linux ubd0=root_fs ubd1=swap_fs eth0=tuntap,,,10.23.80.1 (IP de l'hote) Configuration du tunnel Debian_UML:~# ifconfig eth0 10.23.80.2 netmask 255.255.0.0 broadcast 10.23.255.255 Debug (c) Pythagore F.D. 2010 Pythagore F.D. Page 61 Utilisation du réseau Affichage de la configuration Debian_UML:~# ifconfig eth0 Link encap:Ethernet HWaddr FE:FD:0A:15:33:8C inet addr:10.23.80.2 Bcast:10.23.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) Interrupt:5 Ajout d'une route par défaut Debian_UML:~# route add default gw 10.23.0.1 Modifier aussi /etc/resolv.conf pour disposer de la résolution de noms Debian_UML:~# ping google.com -c 2 PING google.com (216.239.39.99): 56 data bytes 64 bytes from 216.239.39.99: icmp_seq=0 ttl=241 time=109.4 ms 64 bytes from 216.239.39.99: icmp_seq=1 ttl=241 time=109.2 ms --- google.com ping statistics --2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 109.2/109.3/109.4 ms Debug (c) Pythagore F.D. 2010 Pythagore F.D. Page 62 Utilisation X11 Il est possible de lancer des applications X depuis le systeme UML. Pour cela, il faudra exporter le « display » vers une autre machine afin d'ouvrir l'application sur celleci. Afin de ne pas ouvrir une nouvelle fenêtre par application, on pourra utiliser Xnest. Exemple: Lancement de xterm dans l'UML mais l'affichage se fera sur l'hôte Sur l'hôte xhost + IP_serveur_uml Sur l'UML export DISPLAY IP_hote:0.0 xterm Debug (c) Pythagore F.D. 2010 Pythagore F.D. Page 63 Son L'utilisation du son est également possible au sein de l'UML (à condition de cocher l'option dans la configuration du noyau UML). cat ma_musique > /dev/dsp cela va envoyer la sortie de « ma_musique » au périphérique audio... Debug (c) Pythagore F.D. 2010 Pythagore F.D. Page 64 Réactions en cas de crash Exemple: consommation par un UML de toute la mémoire Utilisation de l'argument « mem » pour limiter l'utilisation de la mémoire linux debug ubd0=root_fs ubd1=swap_fsmem=100M En cas de plantage du kernel UML, le reste du système ainsi que les autres UML fonctionnent encore. Debug (c) Pythagore F.D. 2010 Pythagore F.D. Page 65 Lancement de plusieurs noyaux Le lancement de plusieurs noyaux avec la même ligne de commande est verrouillée car elle entrainerait l'exécution de plusieurs noyaux sur le même système de fichiers et donc une corruption des données. Une solution serait de copier les systèmes de fichiers autant de fois que l'on veut d'instances. Cette solution est très couteuse en espace disque mais aussi en consommation de ressources CPU Utilisation de COW (Copy On Write). COW permet de copier uniquement les données qui sont modifiées par une instance. Le système de fichiers de base ne fonctionne alors qu'en lecture seule et chaque instance écrit dans un système de fichier indépendant. Lancement linux ubd0=inst1_cow,root_fs_slack8.1 linux ubd0=inst2_cow,root_fs_slack8.1 linux ubd0=inst3_cow,root_fs_slack8.1 imid=i1 con0=fd:0,fd:1 imid=i2 con0=fd:0,fd:1 imid=i3 con0=fd:0,fd:1 Cela va créer trois fichiers inst1_cow, inst2_cow et inst3_cow, utilisés par les instances i1, i2 et i3. Lancement de plusieurs noyaux (c) Pythagore F.D. 2010 Pythagore F.D. Page 66 Visualisation de la place disque consommée ls -l -rw-r--r--rw-r--r--rw-r--r--rwxr-xr-x -rw-r--r-- 1 1 1 1 1 root root root root root root root root root root 210825216 210825216 210825216 2111392 210763776 mar mar mar mar mar 26 26 26 26 26 21:48 21:53 21:55 19:55 21:39 inst1_cow inst2_cow inst3_cow linux root_fs_slack8.1 Attention, les fichiers sont "troués" (sparsed files). Pour avoir l'espace disque réellement occupé, il faut utiliser l'option s de la commande 'ls' ls -ls 504 484 524 2068 206032 -rw-r--r--rw-r--r--rw-r--r--rwxr-xr-x -rw-r--r-- 1 1 1 1 1 root root root root root root root root root root 210825216 210825216 210825216 2111392 210763776 mar mar mar mar mar 26 26 26 26 26 21:48 21:53 21:55 19:55 21:39 inst1_cow inst2_cow inst3_cow linux root_fs_slack8.1 Dans cet exemple l'espace disque consommé est d'environ 210M. Lancement de plusieurs noyaux (c) Pythagore F.D. 2010 Pythagore F.D. Page 67 Réseau en multi-instances Chaque instance UML doit disposer de sa propre adresse IP. Les instances communiqueront alors (avec le système de base) au travers de la machine hôte qui fera office de "routeur". Il est possible de déclarer une interface multicast qui simplifiera les transferts réseaux. Avec le multicast, les instances UML pourront être sur des hôtes différents. Le multicast crée un segment Ethernet virtuel entre les instances UML. Sur la ligne de commande de chaque instance, il faut indiquer: ethn=mcast La syntaxe complète est: ethn=mcast,adresse MAC,adresse multicast,port multicast,ttl Valeurs par défaut mcast: obligatoire adresse MAC: calculée adresse multicast: 239.192.168.1 port: 1102 ttl: 1 Attention à la sécurité: les paquets multicast sont reçus par toutes les machines UML. Lancement de plusieurs noyaux (c) Pythagore F.D. 2010 Pythagore F.D. Page 68 Réseau en multi-instances (suite) Des outils complémentaires peuvent être utilisés pour créer et gérer des réseaux virtuels de taille importante : VNUML, http://www.dit.upm.es/vnumlwiki/index.php/Main_Page VDE, http://vde.sourceforge.net/ Lancement de plusieurs noyaux (c) Pythagore F.D. 2010 Pythagore F.D. Page 69 Sauvegarde d'un système de fichiers #!/bin/sh i="$1" rep_sauve=sauve_i${i} uml_mconsole i${i} stop uml_mconsole i${i} sysrq s cp -fra --sparse=always inst${i} $rep_sauve uml_mconsole i${i} go nice -n +19 bzip2 $rep_sauve Sauvegarde d'un système de fichiers (c) Pythagore F.D. 2010 Pythagore F.D. Page 70 Sécurisation et performances SKAS Normalement, chaque processus dans l'UML génère un processus sur l'hôte et un thread spécial s'occupe des appels systèmes sur les processus UML. Cela était imposé par le manque de support UML dans le noyau Linux. Ce mode de fonctionnement pose des problèmes car le noyau UML est présent dans l'espace mémoire de chacun des ses processus et est accessible en écriture par défaut. Il y a ici un problème de sécurité car des processus pourraient quitter l'UML pour se retrouver sur le système hôte. Grâce au mode SKAS (Separate Kernel Address Space) ce problème a été résolu. De plus, ce mode accélère l'UML. L'UML fonctionne maintenant dans un espace mémoire différent des ses processus. Cela corrige les problèmes de sécurité potentiels. Sauvegarde d'un système de fichiers (c) Pythagore F.D. 2010 Pythagore F.D. Page 71 IX UML: mise en oeuvre Pythagore F.D. (c) Pythagore F.D. 2010 Page 72 Présentation Pour installer une instance UML, il faut disposer d'un noyau Linux et d'un système de fichier installé et configuré. En outre, pour des raisons de performances et de sécurité, il est préférable de modifier le noyau de la machine hôte avec le patch skas (non inclus dans le noyau officiel, même récent). L'installation se fait en plusieurs temps: Phase 1 • • • • • • • Présentation (c) Pythagore F.D. 2010 Téléchargement des outils nécessaires Décompactage des sources du noyau cible Application du patch UML (si nécessaire) Modification de la configuration du noyau et compilation du noyau Création d'un système de fichier cible Compilation des modules et installation dans les système de fichiers cible Lancement du noyau UML Pythagore F.D. Page 73 Présentation Phase 2 • Décompactage des utilitaires UML • Compilation et installation des utilitaires • Relance du noyau UML Phase 3 • Application du patch SKAS sur le noyau hôte • Relance du noyau UML Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 74 Téléchargement Noyau: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.19.2.tar.bz2 Utilitaires http://www.user-mode-linux.org/~blaisorblade/uml-utilities/uml_utilities_20060323.tar.bz2 Pour le patch skas3, choisir le patch adapté dans le répertoire : http://www.user-mode-linux.org/~blaisorblade/patches/skas3-2.6/ Des correctifs spécifiques à la partie nonSKAS d'UML peuvent être nécessaires dans certains cas (malgré l'inclusion officielle régulière) ; on peut en trouver la liste dans le répertoire : http://www.user-mode-linux.org/~blaisorblade/patches/guest/ Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 75 Compilation d'un noyau SKAS sur la machine Cette étape est facultative mais renforce la sécurité: chaque instance UML s'exécutera dans un espace mémoire séparé. Après décompression d'un noyau vierge, appliquez le patch SKAS cat ../host-skas3-2.6.xxxxx.patch |patch -p1 cp linux-2.6.xx/arch/i386/defconfig .config Activez /proc/mm dans le menu "Processor type and features" (normalement déjà activée par défaut) Activez le chargement dynamique des modules Compilez le noyau Ce noyau prendra la place du noyau principal sur la machine. Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 76 Configuration du noyau UML make xconfig ARCH=um Activez le chargement dynamique des modules make menuconfig ARCH=um Linux Kernel v2.6.8.1 Configuration ───────────────────────────────────────────────────────────────────────────────────── ┌────────────────────────────── UML-specific options ───────────────────────────────┐ │ Arrow keys navigate the menu. <Enter> selects submenus --->. Highlighted │ │ letters are hotkeys. Pressing <Y> includes, <N> excludes, <M> modularizes │ │ features. Press <Esc><Esc> to exit, <?> for Help. Legend: [*] built-in [ ] │ │ excluded <M> module < > module capable │ │ ┌─────────────^(-)──────────────────────────────────────────────────────────────┐ │ │ │ [*] Separate Kernel Address Space support (NEW) │ │ │ │ [*] Networking support │ │ │ │ [*] Kernel support for ELF binaries │ │ │ │ <M> Kernel support for MISC binaries │ │ │ │ <*> Support for host-based filesystems │ │ │ │ <*> Host filesystem │ │ │ │ < > Usable host filesystem (NEW) │ │ │ │ < > HoneyPot ProcFS (NEW) │ │ │ │ [*] Management console │ │ │ │ [ ] Magic SysRq key (NEW) │ │ │ │ [ ] 2G/2G host address space split (NEW) │ │ │ └─────────────┴(+)──────────────────────────────────────────────────────────────┘ │ ├───────────────────────────────────────────────────────────────────────────────────┤ │ <Select> < Exit > < Help > │ └───────────────────────────────────────────────────────────────────────────────────┘ Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 77 Compilation Compiler le noyau make linux ARCH=um Striper l'exécutable obtenu strip linux Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 78 Création d'un FS L'objectif est d'obtenir un fichier montable en loop et contenant un système de fichier de type racine (rootfs) Téléchargement rapide, mais a peu de chances de convenir au besoin (version du noyau, type d'un FS préfabriqué de distribution, version) Présentation (c) Pythagore F.D. 2010 manuel Fastidieux mais précis. mkrootfs Ensemble de scripts facilitant la création d'un rootfs. http://www.stearns.org/mkrootfs/ UMLbuilder Produit pouvant fonctionner avec une interface graphique http://umlbuilder.sourceforge.net/ gBootRoot Interface graphique GTK. http://gbootroot.sourceforge.net/ rootstrap Produit des systèmes racines Debian. http://http.us.debian.org/debian/pool/main/r/rootstrap/ Pythagore F.D. Page 79 Manuel Création d'un système de fichier vide: Création dd if=/dev/zero of=root_fs bs=1M count=1 seek=5000 (seek=5000 pour créer un fichier vide (sparsed file)) Formatage: mkfs.reiserfs root_fs Création d'un espace de pagination dd if=/dev/zero of=swap_fs bs=1M count=1 seek=500 mkswap swap_fs Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 80 Création d'un FS Remplissage du système de fichier mkdir /mnt/uml_fs mount -o loop root_fs /mnt/uml_fs Avec une Debian Woody: mount -o loop debian-woody.rootfs debian_lo cp -fra debian_lo/* mnt/uml_fs ou avec une Gentoo cd /mnt/uml_fs tar -xvjpf stage3.tar.bz2 (systeme de base) Configuration minimale vi /mnt/uml_fs/etc/fstab #Changement de la partition root et swap en : /dev/ubd0 / reiserfs noatime 0 0 /dev/ubd1 none swap sw 0 0 umount /mnt/uml_fs Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 81 Modules Installation des modules dans le root_fs make modules_install INSTALL_MOD_PATH=/mnt/uml_fs (chemin du root_fs) Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 82 UMLbuilder Vous pouvez simplifier l'étape fastidieuse de la création du fs en utilisant des outils comme umlbuilder. Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 83 Création d'un FS Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 84 Rootstrap Rootstrap est un outil pour créer un FS complet. Il ne permet actuellement que de créer des systèmes de fichiers Debian. Il est composé d'un ensemble de scripts permettant de créer l'image du FS, installer un système de base, configurer un FS. Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 85 Rootstrap Extrait du fichier /etc/rootstrap/rootstrap.conf [global] fstype=ext3 initialsize=1024 #taille initiale du rootfs en Mo freespace=0 modules=network mkfs mount debian uml umount PATH=/bin:/sbin:/usr/bin:/usr/sbin [network] #interface=eth0 #transport=tuntap #host=192.168.10.1 #uml=192.168.10.2 #gateway=192.168.10.1 #domain=example.com #nameserver=192.168.10.1 [debian] dist=woody mirror=http://http.us.debian.org/debian exclude=pcmcia-cs setserial #install=myfavoritepackage someotherpackage [base-config] root_password=rootstrap [uml] install_modules=yes Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 86 Installation Vous avez maintenant un systeme prêt à démarrer (vous pouvez installer d'autres applications ou le configurer selon vos besoins durant les étapes précédentes). cp linux /usr/local/bin (ou autre endroit dans le PATH) Installation (c) Pythagore F.D. 2010 Pythagore F.D. Page 87 X VMWare Pythagore F.D. (c) Pythagore F.D. 2010 Page 88 Présentation La société Vmware propose plusieurs outils distincts, notamment Vmware workstation et Vmware server (ce dernier étant gratuit afin de servir d'appel vers des produits plus élevés en gamme), proposant une virtualisation sour forme de machine virtuelle. Une interface de gestion sophistiquée et complète les caractérise. Les principales différences sont que le premier propose un clonage de machines virtuelles, et que le second peut être administré à distance. Vmware player (gratuit) complète cette gamme et permet simplement d'exécuter une machine virtuelle existante. Par ailleurs, des produits plus orientés haut de gamme proposent une virtualisation par hyperviseur (ESX server), plus performante, et des solutions beaucoup plus complexes à destination des hébergeurs ou possesseurs de parcs informatiques très importants. Dans ce cours, nous étudions Vmware server, qui est assez simple à mettre en oeuvre et disponible gratuitement. Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 89 Installation Les différents paquets nécessaires peuvent être obtenus via : http://www.vmware.com/fr/download/server/ Ils se composent de : Vmwareserver1.0.129996.i386.rpm Vmwaremui1.0.129996.tar.gz Vmwareserverconsole1.0.129996.i386.rpm (celuici est téléchargé depuis l'interface Web après la première connexion). Une fois le paquet principal (Vmwareserver) installé, on le configure en appelant le script /usr/bin/vmwareconfig.pl en ligne de commande. Un numéro de série, obtenu lors du téléchargement, est nécessaire. On installe par ailleurs l'interface web de gestion (exécution du script vmwareinstall.pl), ainsi que la console d'administration, qui est une application graphique (le dernier paquet cité cidessus est à récupérer à partir de l'interface web). Les scripts /usr/bin/vmwareconfigmui.pl et /usr/bin/vmwareconfigserverconsole.pl permettent la configuration de ces deux éléments. Installation (c) Pythagore F.D. 2010 Pythagore F.D. Page 90 Interfaces d'administration L'interface Web est accessible par défaut sur le port 8222. Interfaces d'administration (c) Pythagore F.D. 2010 Pythagore F.D. Page 91 Contrôle de la machine virtuelle Elle permet de surveiller et contrôler (arrêt, redémarage) les machines virtuelles présentes au sein de VMWare Server. Interfaces d'administration (c) Pythagore F.D. 2010 Pythagore F.D. Page 92 Lancement de la console d'administration La console d'administration est lancée par la commande vmwareserverconsole. Permettant un contrôle plus complet et direct que l'interface web, c'est par son intermédiaire que de nouvelles machines virtuelles peuvent être définies et paramétrées. La réalisation d'instantanés pour redéploiment ultérieur est également proposée. Interfaces d'administration (c) Pythagore F.D. 2010 Pythagore F.D. Page 93 Résumé L'affichage résumé d'une machine virtuelle synthétise les paramètres importants et l'état courant. Interfaces d'administration (c) Pythagore F.D. 2010 Pythagore F.D. Page 94 Mémoire Les réglages de quantité de mémoire allouée à chaque machine virtuelle, importants en termes d'optimisation, sont également acessibles directement et modifiable quand la machine virtuelle est arrêtée. Interfaces d'administration (c) Pythagore F.D. 2010 Pythagore F.D. Page 95 Configuration réseau La configuration réseau (pontée, à translation d'adresse ou directe) des machines virtuelles est accessible depuis la console. Interfaces d'administration (c) Pythagore F.D. 2010 Pythagore F.D. Page 96 Interfaces d'administration Ces deux interfaces permettent au final la gestion complète des fonctionnalités de Vmware Server sous forme graphique. Les lecteurs de disques de la machine sont accessibles directement, ou en les émulant à partir du contenu d'un fichier image ISO (image de CDROM), permettant l'installation des systèmes invités sur le système hôte, comme on le ferait sur une machine physique qui ne comporte pas encore de système d'exploitation. Sont également installé des scripts de démarrage : /etc/init.d/vmware et /etc/init.d/httpd.vmware Le processus princpal représentant la fonctionnalité serveur est vmwareserverd ; des processus complémentaires de gestion des fonctionnalités réseau sont également actifs. Interfaces d'administration (c) Pythagore F.D. 2010 Pythagore F.D. Page 97 XI VServer Pythagore F.D. (c) Pythagore F.D. 2010 Page 98 Présentation VServer est un mécanisme permettant de gérer des conteneurs. Le système de base est découpé en zones étanches dans lesquelles s'exécute une instance de l'OS. Ce système est à michemin entre une "vraie" machine virtuelle et un environnement en chroot simple. Moins consommateur en ressources qu'un UML ou VMWare, il ne permet pas de virtualiser les noyaux. Il fonctionne sur les platesformes Linux. Base globale du système Linux Vserver Serveur1.pfd Vserver Serveur2.pfd La base globale Le système d'exploitation de base sert de socle à la création de vservers. C'est cette base globale qui contrôle l'installation, la gestion et la destruction de tous les vservers. La zone 'vserver' C'est une instance virtuelle du système, isolée et sécurisée. Elle utilise le noyau et les ressources mémoires de la base globale mais dispose de ses processus systèmes, d'une adresse IP, de ses fichiers de configuration et d'autres ressources propres. C'est une forme d'environnement "chrooté", disposant d'outils d'isolation de processus et de ressources. Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 99 Présentation Le projet vserver est né en 2001. La version 1.0.0 est sortie le 1er novembre 2003 sur un noyau 2.4 et la version 2.0.0 est sortie le 7 août 2005 sur un noyau 2.6. La version stable actuelle est la v2.2. L'installation consiste à modifier le noyau de base avec le patch vserver, puis à créer et configurer des systèmes invités. Un système invité n'est pas un système linux complet, mais plutôt un ensemble de ressources disponibles dans un environnement vserver. Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 100 XII Vserver: mise en oeuvre Pythagore F.D. (c) Pythagore F.D. 2010 Page 101 Installation Télécharger un noyau de base mkdir /opt/kernel && cd /opt/kernel/ wget 'http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.6.tar.bz2' tar xjf linux-2.6.22.6.tar.bz2 Compiler et rebooter le nouveau noyau pour vérifier que tout est fonctionnel (pilotes sata entre autres). Installation du patch Récupération, patch et compilation du nouveau noyau : wget 'http://ftp.linux-vserver.org/pub/kernel/vs2.2/patch-2.6.22.6-vs2.2.0.3.diff' cp -la linux-2.6.22.6 linux-2.6.22.6-vs2.2.0.3 cd linux-2.6.22.6-vs2.2.0.3/ cat ../patch-2.6.22.6-vs2.2.0.3.diff | patch -p1 Installation (c) Pythagore F.D. 2010 Pythagore F.D. Page 102 Configuration et compilation make xconfig make modules make && make modules_install make install Modification du chargeur pour y ajouter le boot sur le nouveau noyau : vi /etc/lilo.conf lilo reboot uname -a Installation (c) Pythagore F.D. 2010 Pythagore F.D. Page 103 Installation des utilitaires Les utilitaires vservers permettent de disposer de commandes complémentaires pour gérer les systèmes: arrêts/relances, copie, visualisation, ... Vérifiez que les paquets ext2fs2-devel et vconfig sont installés. Récupération, compilation et installation des utilitaires d'exploitation : wget 'http://ftp.linux-vserver.org/pub/utils/util-vserver/util-vserver-0.30.212.tar.bz2' tar xjf util-vserver-0.30.212.tar.bz2 cd util-vserver-0.30.214 Sur certaines distributions Linux, la commande mktemp ne supporte pas l'option 't': Modifier la variable _MKTEMP dans /opt/kernel/util-vserver-0.30.214/scripts/functions : #modif FH option -t non supportee sur mktemp function monmktemp { /bin/mktemp "$TMPDIR/$1" } Modifier la variable _MKTEMP dans /opt/kernel/util-vserver-0.30.214/scripts/util-vserver-vars #modif FH option -t non supportee fonction monmktemp creee dans scripts/functions _MKTEMP="monmktemp " #_MKTEMP="/bin/mktemp -t" Installation (c) Pythagore F.D. 2010 Pythagore F.D. Page 104 Compilation des utilitaires Préparation La commande naddress, fournie avec les utilitaires, contient un bug qui entraine, sur certaines distributions, un segmentation fault. Pour le corriger, il suffit de remplacer à la ligne 318 par out: free(str); return ret; out: //free(str); return ret; Compilation ./configure make make install make install-distribution S'il est besoin de modifier un source : make && make install cd /opt/kernel/util-vserver-0.30.214 make && \cp src/.libs/vcontext /usr/sbin/vcontext Installation (c) Pythagore F.D. 2010 Pythagore F.D. Page 105 Lancement Activation manuelle: echo /usr/lib/util-vserver/vshelper > /proc/sys/kernel/vshelper Activation automatique: Dans le fichier /etc/sysctl.conf, ajoutez : kernel.vshelper = /usr/lib/util-vserver/vshelper Lancez la commande : /usr/local/etc/init.d/vprocunhide restart qu'il faut aussi ajouter dans /etc/rc.local. Installation (c) Pythagore F.D. 2010 Pythagore F.D. Page 106 Premier test Téléchargement d'un script de test : wget http://vserver.13thfloor.at/Stuff/SCRIPT/testme.sh chmod 700 testme.sh Exécution: ./testme.sh Linux-VServer Test [V0.17] Copyright (C) 2003-2006 H.Poetzl chcontext is working. chbind is working. Linux 2.6.22.6-vs2.2.0.3.pfd2 #1 SMP Wed Feb 13 19:35:40 CET 2008 i686 Ea 0.30.214 273/glibc (Sa) <v13,net,v21,v22,v23,netv2> VCI: 0002:0200 273 030007b1 (TbsPHIW) --[000]# succeeded. [001]# succeeded. [011]# succeeded. [031]# succeeded. [101]# succeeded. [102]# succeeded. [201]# succeeded. [202]# succeeded. Installation (c) Pythagore F.D. 2010 Pythagore F.D. Page 107 Création d'une partition Pour de nombreuses raisons (sécurité, sauvegardes, ...), il est bon d'installer les vservers dans une partition séparée de celle de la base globale. mkdir /vservers mount /vservers/ fdisk /dev/sda --> définition d'une partition, ici /dev/sda9 mkfs -t ext3 -N 4000000 -m 0 /dev/sda9 Installation (c) Pythagore F.D. 2010 Pythagore F.D. Page 108 Construction d'un serveur Un nouveau serveur est créé à partir de la commande 'vserver': vserver Install build -m rsync --hostname Install.srv \ --interface inst=eth0:10.128.10.11/16 -- --source 10.128.10.8:/ rsync -Hazx --numeric-ids 10.128.10.8:/usr /etc/vservers/.defaults/vdirbase/Install/ Il faut que le système obtenu soit chrootable (vérifier que /var et /usr ne sont pas sur des partitions séparées). Ensuite, il faut configurer sommairement le nouveau vserver avant de le lancer: rm etc/fstab etc/modprobe + rc3.d cd etc/rc.d/ rm network bluetooth harddrake kheader sendmail upsmon dkms resolvconf \ shorewall laptop-mode dm network-up oki4daemon \ partmon virtualbox vmware ... Construction d'un serveur (c) Pythagore F.D. 2010 Pythagore F.D. Page 109 Lancement Lancement du vserver vserver Install start 'Connexion' au vserver vserver Install enter A ce stade, l'utilisateur se trouve dans la machine virtuelle. Configuration La première étape de configuration de la machine virtuelle consiste à changer le mot de passe de root : passwd root Lancement (c) Pythagore F.D. 2010 Pythagore F.D. Page 110 Contrôle de vserver Depuis la base globale, on peut obtenir des informations sur les vservers actifs, les lancer, les stopper, etc. Commandes usuelles • • • • vserver-copy : copie de serveurs, vserver-info : informations sur les vservers (compilation, répertoires, ...), informations sur les vservers, vfiles : extrait la liste des vcontext. vserver-stat: Exemples: # vserver-stat CTX PROC VSZ RSS 40000 40 410.4M 88.7M 40003 41 627.9M 276.3M userTIME 22m42s94 1h10m19 sysTIME 10m35s80 1m00s60 UPTIME NAME 41d01h02 Install 41d01h02 ServGlpi # vserver Install status Vserver 'Install' is running at context '40000' Number of processes: 40 Uptime: 40 days, 22:46 Lancement (c) Pythagore F.D. 2010 Pythagore F.D. Page 111 Réseau La déclaration des adresses IP dans un vserver se fait dans le répertoire : /usr/local/etc/vservers/Install/interfaces/0/ Ce répertoire contient entre autres deux fichiers: • ip : ne contient que l'adresse IP, • prefix : le netmask en notation CIDR. Un vserver peut contenir jusqu'à 16 adresses IP. La première est dans le répertoire 0. Exemple de script de création des adresses IP : #!/bin/sh j=1 for i in 10.21.10.1 10.21.10.2 do j=$(($j+1)) mkdir $j echo $i > $j/ip echo "24" > $j/prefix done Réseau (c) Pythagore F.D. 2010 10.21.10.50 Pythagore F.D. Page 112 Réseau Dans le répertoire /usr/local/etc/vservers/Install/interfaces/0/ existent deux autres fichiers: dev: qui fixe l'interface physique (eth0) name: qui fixe le nom de l'alias # ls /usr/local/etc/vservers/*/interfaces/0/ /usr/local/etc/vservers/Install/interfaces/0/: dev ip name prefix /usr/local/etc/vservers/ServGlpi/interfaces/0/: dev ip name prefix /usr/local/etc/vservers/ServIrc/interfaces/0/: dev ip name prefix # cat /usr/local/etc/vservers/Install/interfaces/0/* eth0 10.128.10.5 inst 16 # ifconfig eth0 Link encap:Ethernet HWaddr 00:50:8D:F9:15:38 inet adr:10.128.10.8 Bcast:10.128.255.255 Masque:255.255.0.0 ... eth0:glpi Link encap:Ethernet HWaddr 00:50:8D:F9:15:38 inet adr:10.128.10.18 Bcast:10.128.255.255 Masque:255.255.0.0 eth0:inst Link encap:Ethernet HWaddr 00:50:8D:F9:15:38 inet adr:10.128.10.5 Bcast:10.128.255.255 Masque:255.255.0.0 Réseau (c) Pythagore F.D. 2010 Pythagore F.D. Page 113 Acces ssh Le démon sshd de l'hôte écoute toutes les adresses. Il faut le limiter pour n'écouter que sa propre adresse, pas celles des vservers. Dans /etc/ssh/sshd_config de la base : ListenAddress 10.128.10.8 Dans /etc/ssh/sshd_config du vserver: ListenAddress 10.128.10.5 # Adresse IP de la machine physique. # Adresse IP du vserver. C'est un principe général à suivre pour les services réseaux: postfix, apache,... De manière générale, il faut essayer de basculer tous les lancements de services dans les vservers, et pas sur le host. Réseau (c) Pythagore F.D. 2010 Pythagore F.D. Page 114 Gestion de base Démarrage automatique au boot echo "default" > /usr/local/etc/vservers/Install/apps/init/mark Tous les vservers qui possèdent un fichier mark démarrent. Destruction d'un serveur rm -r /vservers/Install /etc/vservers/Install Nom DNS du vserver clone Clonage d'un serveur vserver ServRef build -m clone --hostname ServRef.srv \ --interface inst=eth0:10.128.10.12/16 -- --source Install Adresse du vserver clone Réseau (c) Pythagore F.D. 2010 Pythagore F.D. Vserver modèle Page 115 Utilisation Connexion On se connecte sur un vserver comme sur une machine physique autonome. Exemple de connexion : ssh Vserver1.pfd9 [root@Vserver1 ~]# ifconfig eth0 Link encap:Ethernet HWaddr 00:50:8D:F9:15:38 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:118773174 errors:0 dropped:0 overruns:0 frame:0 TX packets:89642631 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:1000 RX bytes:1778462961 (1.6 GiB) TX bytes:2223492147 (2.0 GiB) Interruption:19 Adresse de base:0x2000 eth0:inst Link encap:Ethernet HWaddr 00:50:8D:F9:15:38 inet adr:10.128.10.5 Bcast:10.128.255.255 Masque:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interruption:19 Adresse de base:0x2000 Utilisation (c) Pythagore F.D. 2010 Pythagore F.D. Page 116 Utilisation Processus La base vserver est très peu consommatrice de ressources. Résultat d'un ps UID root root 14 xfs root nscd 16 root root root root root root root postfix root root root Utilisation (c) Pythagore F.D. 2010 elf : PID PPID 1 0 3361 1 3444 1 3462 1 3515 1 3522 1 3528 1 3529 3528 3545 1 3557 1 3620 1 3777 1 3804 3620 3901 1 3906 3901 4877 29569 29566 3557 29569 29566 C 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 STIME Jan07 Jan07 Jan07 Jan07 Jan07 Jan07 Jan07 Jan07 Jan07 Jan07 Jan07 Jan07 Jan07 Jan07 Jan07 17:35 Feb07 Feb07 TTY ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? pts/0 ? pts/0 TIME 00:00:00 00:00:02 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 CMD init [3] syslogd -m 0 -a /var/spool/postfix/dev/log dbus-daemon --system xfs -port -1 -daemon -droppriv -user xfs crond -p /usr/sbin/nscd hald hald-runner xinetd /usr/sbin/sshd smbd -D nmbd -D smbd -D /usr/lib/postfix/master qmgr -l -t fifo -u -c ps -ef sshd: root@pts/0 -bash Pythagore F.D. Page 117 Partitions Accès depuis la base globale : [root@ServTP8 ~]# df Sys. de fich. /dev/sda1 /dev/hda1 /dev/sdb5 /dev/sda9 /dev/sda7 /dev/sda5 /dev/sda6 /dev/sda10 Tail. 5,8G 184G 66G 9,7G 981M 4,4G 981M 52G Occ. Disp. %Occ. Monté sur 4,6G 922M 84% / 150G 34G 82% /mnt/H 48G 18G 74% /mnt/G 6,7G 3,1G 69% /opt 17M 915M 2% /tmp 1,9G 2,3G 46% /usr 123M 808M 14% /var 5,6G 44G 12% /vservers Accès depuis un vserver : [root@Vserver1 ~]# df Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur /dev/hdv1 52G 5,6G 44G 12% / none 16M 0 16M 0% /tmp /dev/sdb6 401G 220G 181G 55% /mnt/H On remarque le cantonnement du vserver à son environnement prison chroot par sa base globale. Utilisation (c) Pythagore F.D. 2010 Pythagore F.D. Page 118 Sécurité Trois drapeaux permettent de limiter les accès aux pseudo fichiers de /proc depuis les vservers. Ils sont modifiables à l'aide de la commande setattr et visualisables avec showattr Exemple: Depuis la base globale: # showattr /proc/cpuinfo Awh-ui- /proc/cpuinfo Le drapeau A (admin) est levé, le w (watch) et le h (hide) sont baissés. Le fichier /proc/cpuinfo est donc visible et consultable depuis les vservers, mais ne sont pas modifiables. Admin Si levé, la ressource est visible dans la base globale Watch Si levé, la ressource est visible depuis le vserver Hide Si levé, la ressource n'est pas visible. Si baissé, la ressource est toujours visible et les drapeaux A et W n'ont aucune influence Sécurité (c) Pythagore F.D. 2010 Pythagore F.D. Page 119 Exemple Depuis la base globale: # setattr --hide --admin --~watch /proc/cpuinfo # showattr /proc/cpuinfo AWH-ui- /proc/cpuinfo Depuis un vserver: # cat /proc/cpuinfo cat: /proc/cpuinfo: Aucun fichier ou répertoire de ce type Deux options permettent d'étendre la portée des modifications: -R: fait une modification récursive des répertoires setattr -R --hide /mesfichiers -X: ne traverse pas les autres systèmes de fichiers Attention à la combinaison « hide ~admin » qui ne permet pas de faire la modification inverse sans reboot. Sécurité (c) Pythagore F.D. 2010 Pythagore F.D. Page 120 Barrière chroot Pour éviter les sorties de chroot, il faut poser une barrière sur le point d'entrée du chroot. Exemple: Pose d'une barrière sur le répertoire /vservers setattr --barrier /vservers Vérification de la pose # showattr /vservers ---Bui- /vservers ---bui- /vservers/lost+found ---bui- /vservers/Install Sécurité (c) Pythagore F.D. 2010 Pythagore F.D. Page 121 Autres commandes Quelques autres commandes analogues aux commandes unix de base mais qui agissent sur l'ensemble des contextes: • vtop • vps -ef • vpstree • vdu • vkill : kill global sur tous les serveurs Resssources • • Sécurité (c) Pythagore F.D. 2010 http://Openvcp.org, http://vsmon.revolutionlinux.com/ : superviseur de vserver, fait des vserver-stat sur une grappe. Pythagore F.D. Page 122 XIII Wine Pythagore F.D. (c) Pythagore F.D. 2010 Page 123 Présentation Objectif: Le logiciel Wine est une implémentation de l'interface de programmation Microsoft Windows. Il est bâti autour du serveur X Window des systèmes Unix. Wine permet d'utiliser des programmes conçus pour Windows sous Unix sans installer le système d'exploitation Windows. À la différence de Qemu ou Bochs, Wine n'est pas un émulateur de machine, mais gère les modes 16 et 32 bits de l'interface Windows. Description: WINE signifie « Wine Is Not an Emulator » (Wine n'est pas un émulateur), ou encore « WINdows Emulator » (l'émulateur Windows). Wine est un projet Open Source distribué sous licence LGPL (Lesser General Public License), après l'avoir été sous licence WineHQ, puis X11. La licence GNU LGPL permet de s'affranchir du caractère héréditaire de la licence GPL, en autorisant, le plus souvent, une bibliothèque LGPL à se lier à une autre non LGPL sans révoquer la licence. Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 124 Historique 1993-1996 Bob Amstatd et Eric Youngdale initient le projet sous licence BSD, repris ensuite par Alexandre Julliard et Peter MacDonald. Utilisation de Xt (X toolkit) comme API graphique. Support de NetBSD, puis de Win32. Word et Excel fonctionnent. 1997-2000 Création de wineHQ.org, QG de la communauté des utilisateurs de Wine. Corel participe au projet wineHQ. Passage sous licence X11 (dérivée de BSD). 2002 Année de la plus forte progression. Première conférence (annuelle) WineConf sur Wine. Passage sous licence LGPL. 2007 Sortie de la version 0.9.41, constituée d'un million et demi de lignes de code C rédigées par plus de 700 développeurs. Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 125 Projets associés Winelib Winelib est un kit de développement permettant de compiler des applications Windows (dont on possède les sources) sur Unix. Il est utilisé, entre autres, pour recompiler des applications à partir du code source Windows afin de pouvoir faire appel à des APIs Unix. Cela permet une meilleure intégration à l'environnement Unix que ce que ne permet Wine avec des applications Windows non modifiées. Un autre avantage majeur est une recompilation facilitée des applications sur des architectures non Intel, et donc une exécution de l'application sans devoir recourir à un quelconque émulateur de machine, gourmand en ressources. URL du site: http://www.winehq.org/site/winelib Cedega ExWineX. Reprise propriétaire de Wine (accès libre aux sources CVS). Projet orienté sur la capacité à faire tourner les jeux Windows, impliquant une implémentation la plus large possible de DirectX. Ce projet a entraîné le passage de Wine sous licence LGPL, qui interdit ce genre de réutilisation. Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 126 Projets associés CrossOver Projet commercial de versions très paramétrables de Wine sous MacOS X et Linux. Intègre une GUI. Installeurs PlayOnLinux (jeux), Winetricks et Wine doors (mono, dcom98, fonts,...) sont des installeurs d'applications Windows pour Wine. Obsolètes Winetools, Winesetuptk et Xwine ne sont désormais plus maintenus. Présentation (c) Pythagore F.D. 2010 Pythagore F.D. Page 127 Installation Il existe de nombreux binaires précompilés disponibles à l'adresse http://www.winehq.org/site/download pour une grande variété de distributions: RedHat / CentOS / Fedora, Suse, Mandriva, Slackware, Ubuntu, Debian, FreeBSD, PCBSD, Solaris, Windows. Procédure A partir des sources, il est nécessaire de disposer des fichiers de développement X11 (X development files) et de Fontforge pour compiler le support fenêtré X et disposer du support des fontes Windows: wget http://switch.dl.sourceforge.net/sourceforge/wine/ wine-0.9.41.tar.bz2 tar xvjf wine-0.9.41.tar.bz2 cd wine-0.9.41 ./configure make depend && make make install pour Debian et Ubuntu: apt-get install wine Installation (c) Pythagore F.D. 2010 Pythagore F.D. Page 128 Installation Mandriva: urpmi wine RedHat Enterprise Linux 4, à partir d'une installation de base: soit: soit: yum install wine rpm rpm rpm rpm rpm rpm rpm rpm rpm rpm rpm rpm rpm rpm Installation (c) Pythagore F.D. 2010 -i -i -i -i -i -i -i -i -i -i -i -i -i -i liblcms-1.15-10.i586.rpm gphoto2-2.1.4-7.i386.rpm bison-1.875c-2.i386.rpm wine-core-0.9.41-1.el4.i386.rpm wine-capi-0.9.41-1.el4.i386.rpm wine-cms-0.9.41-1.el4.i386.rpm wine-esd-0.9.41-1.el4.i386.rpm wine-jack-0.9.41-1.el4.i386.rpm wine-ldap-0.9.41-1.el4.i386.rpm wine-nas-0.9.41-1.el4.i386.rpm wine-tools-0.9.41-1.el4.i386.rpm wine-twain-0.9.41-1.el4.i386.rpm wine-0.9.41-1.el4.i386.rpm wine-devel-0.9.41-1.el4.i386.rpm Pythagore F.D. Page 129 Configuration Les fichiers de configuration résident dans $HOME/.wine, répertoire créé lors de la première utilisation de l'outil de configuration winecfg. Dans un terminal, taper la commande: ~# winecfg La fenêtre s'ouvre sur l'onglet « Applications ». Choisir la version de Windows pour les paramètres par défaut dans la liste déroulante. Contenu du répertoire de configuration $HOME/.wine: ~# ls -1 ~/.wine dosdevices/ drive_c/ system.reg userdef.reg user.reg Configuration (c) Pythagore F.D. 2010 Pythagore F.D. Page 130 Structure Les fichiers de configuration system.reg, userdef.reg et user.reg définissent la base de registre de Wine. Leur structure est la suivante: [ Chemin et nom de la clé ] "Paramètre1"="valeur1" "Paramètre2"="valeur2" @="Fichier ou clé de renvoi" ... Contenu du répertoire $HOME/.wine/dosdevices: ~# ls -1l ~/.wine/dosdevices/ c:/ -> ../drive_c z:/ -> / Ces lecteurs sont des liens symboliques. Par défaut, le lien symbolique c:/ pointe vers le répertoire $HOME/.wine/drive_c/ qui contient une arborescence Windows "habituelle": ~# ls -1 ~/.wine/drive_c/ Program Files/ windows/ Configuration (c) Pythagore F.D. 2010 Pythagore F.D. Page 131 "Applications" En cliquant sur le bouton "Ajouter une application", l'explorateur Windows permet de naviguer dans l'arborescence afin de sélectionner un nouveau programme à paramétrer. Dans la fenêtre précédente, l'utilisateur pourra choisir d'utiliser les paramètres globaux (le système par défaut) ou bien de sélectionner une autre émulation d'un système d'exploitation pour l'application choisie. Configuration (c) Pythagore F.D. 2010 Pythagore F.D. Page 132 "Bibliothèques" La liste déroulante permet de choisir entre une même dll installée par Wine (Incluse/builtin) ou par une application (native) en cliquant sur "Ajouter surclassage". L'ordre de tentative de chargement ou sa désactivation est déterminé par "Éditer surclassage", puis "sélectionner". Configuration (c) Pythagore F.D. 2010 Pythagore F.D. Page 133 "Affichage" L'onglet "Affichage" offre des options de gestion du comportement des fenêtres ouvertes par les applications. Coché, le paramètre "Permettre aux applications DirectX..." confine le pointeur de la souris dans la fenêtre du système émulé. Pour accéder aux autres fenêtres, presser ESC. "Emuler un bureau virtuel" autorise un affichage (fenêtré ou non) plus grand que la taille réelle du bureau. "Permettre au gestionnaire de fenêtres..." bascule ente le mode fenêtré (coché) et le mode plein écran (décoché, plus précis). Deux paramètres améliorent le rendu visuel en activant des fonctionnalités du GPU. Configuration (c) Pythagore F.D. 2010 Pythagore F.D. Page 134 "Intégration avec le bureau" Cet onglet permet l'installation et la configuration d'un thème d'affichage du bureau Windows, mais également de lier les dossiers systèmes à des répertoires locaux. Cette fonctionnalité permet d'accéder aux mêmes fichiers à partir d'applications Windows comme de systèmes Unix. Les répertoires locaux répondent aux spécificités Unix et peuvent être partagés par Samba ou NFS, voire montés localement. Configuration (c) Pythagore F.D. 2010 Pythagore F.D. Page 135 "Lecteurs" La disponibilité des unités de stockage de masse dans l'émulation est paramétrée dans cet onglet. Ces unités sont de 5 types: • "Détection auto.": l'unité est paramétrée selon le type de fichier (block, character,...), • "Disque dur local": analogue au lien symbolique vers un répertoire local, • "Partage réseau": le répertoire monté localement est partagé sur le réseau, une politique de restriction d'accès est appliquée, • "Lecteur de disquette": périphérique de type block (/dev/fdX) généralement monté sur le répertoire /media/floppy, • "CDROM": périphérique de type block (/dev/hdX) généralement monté sur le répertoire /media/cdrom. Seule l'assignation manuelle d'un label et d'un numéro de série est à ce jour implémentée. Configuration (c) Pythagore F.D. 2010 Pythagore F.D. Page 136 "Audio" L'onglet "Audio" permet la sélection d'un pilote audio et le paramétrage de l'accélération matérielle (qualité de la chaîne numérique). La fonctionnalité "Panneau de configuration", relative au mixage audio, n'est pas à ce jour implémentée. Configuration (c) Pythagore F.D. 2010 Pythagore F.D. Page 137 "À propos" Cet onglet présente les versions, site et descriptif de la bibliothèque Wine. Configuration (c) Pythagore F.D. 2010 Pythagore F.D. Page 138 Matériels, partages et bases Ports série et parallèle L'ajout de l'un de ces ports se fait par lien symbolique du fichier de périphérique character vers sa dénomination Windows dans le répertoire de configuration $HOME/.wine/dosdevices. • Ajout d'un port série: ~# ln -s /dev/ttyS0 ~/.wine/dosdevices/com1 • Ajout d'un port parallèle: ~# ln -s /dev/lp0 ~/.wine/dosdevices/lpt1 Imprimantes Wine peut interagir avec CUPS: l'ajout d'un port parallèle n'est alors pas nécessaire, mais la présence de la commande lpr côté Unix est requise. Dans le cas où CUPS n'est pas installé, Wine peut utiliser l'ancien système d'impression BSD: • les imprimantes du fichier /etc/printcap sont chargées par Wine • un fichier PPD est requis par imprimante (generic.ppd est inclus avec Wine) • la commande lpr est utilisée à l'impression Matériels, partages et bases (c) Pythagore F.D. 2010 Pythagore F.D. Page 139 Matériels, partages et bases Scanners La bibliothèque TWAIN de Wine redirige les requêtes vers vers les bibliothèques Linux Sane (Scanner Access Now Easy). Sane doit être présent sur le système, ainsi que l'utilitaire xscanimage. ➢ Le support des scanners n'est pas reconnu comme le point fort de Wine... Partage réseau L'ajout d'un répertoire partagé se fait par lien symbolique du répertoire Unix de partage vers le répertoire $HOME/.wine/dosdevices/unc. Exemple: Ajout du répertoire partagé par Samba monté sur /smb/mon_serveur/mon_partage: ~# ln -s /smb/mon_serveur/mon_partage ~/.wine/dosdevices/unc/mon_serveur/mon_partage Matériels, partages et bases (c) Pythagore F.D. 2010 Pythagore F.D. Page 140 Matériels, partages et bases ODBC La dll builtin odbc32.dll de Wine permet d'interfacer un programme avec n'importe quel système Unix ODBC. Il suffit de configurer l'environnement Unix pour indiquer à Wine la bibliothèque vers laquelle rediriger la requête: • par variable d'environnement: ~# export LIB_ODBC_DRIVER_MANAGER=/usr/lib/libodbc.so.1.0.0 • si elle n'est pas positionnée, en cherchant la bibliothèque libodbc32.so ~# ln -s libodbc.so.1.0.0 /usr/lib/libodbc.so ~# /sbin/ldconfig La dll native odbc32.dll de Windows est également utilisable pour se connecter aux bases telles que MS SQL ou Oracle. Le choix entre les deux dll s'effectue dans l'onglet "Bibliothèques", par surcharge. Matériels, partages et bases (c) Pythagore F.D. 2010 Pythagore F.D. Page 141 Pré-requis d'utilisation DLLs Wine n'implémente pas toutes les APIs Windows. Certaines DLLs peuvent s'avérer nécessaires au bon fonctionnement des programmes. Elles sont librement téléchargeables sur les sites suivants: • http://www.dllfiles.com/ • http://www.dlldump.com/ Fontes De la même façon, les fontes Microsoft pour le web s'avèrent nécessaires à l'installation et l'usage de certains programmes. Elles sont librement téléchargeables sur le site du projet hébergé par SourceForge "Smart package of Microsoft's core fonts": http://sourceforge.net/projects/corefonts/. Installation pour l'émulation Wine (toutes les fontes sont dans un même répertoire): ~# for i in `ls fontes-MS/*.exe`; do wine $i; done; Pré-requis d'utilisation (c) Pythagore F.D. 2010 Pythagore F.D. Page 142 Pré-requis d'utilisation Applications natives Wine intègre quelques applications d'utilisation, paramétrage et maintenance du système: • winefile: un explorateur de fichiers de type windows 3.11 ~# [wine] winefile • winhelp: un butineur de fichiers *.hlp ~# [wine] winhelp • notepad: un éditeur de texte ~# [wine] notepad • regedit: l'éditeur de la base de registre ~# [wine] regedit • regsvr32: utilitaire d'inscription des DLLs Inscrire une DLL: ~# [wine] regsvr32 <Nom_DLL> Désinscrire une DLL: ~# [wine] regsvr32 -u <Nom_DLL> • wineboot: simule un redémarrage ~# [wine] wineboot • uninstaller: utilitaire de suppression des programmes ~# [wine] uninstaller • wineconsole: commanddos pour exécution de scripts ~# [wine] wineconsole –backend=(user|curses) hello.bat • winebrowser: un navigateur web ~# [wine] winebrowser URL Pré-requis d'utilisation (c) Pythagore F.D. 2010 Pythagore F.D. Page 143 Pré-requis d'utilisation Environnement Les variables d'environnement peuvent être renseignées de deux façons: • dans un shell Unix, en utilisant la commande export pour bash par exemple, Wine passant toutes les variables d'environnement Unix à l'émulation Windows: ~# export MAVARIABLE=mavaleur • dans la base de registre, en éditant les clés situées dans HKEY_CURRENT_USER\Environment: ~# wine regedit Exemple: "System" = "c:\\windows\\system" Base de registre La base de registre est entièrement contenue dans un fichier pour le système et deux par utilisateur: ~/.wine/system.reg ~/.wine/userdef.reg ~/.wine/user.reg Une fois les applications que l'on souhaite mettre à disposition de tous les utilisateurs installées, le fichier system.reg ne change plus. Il peut être figé par la procédure suivante (en tant que root): cp ~/.wine/system.reg /usr/share/wine/wine.systemreg rm ~/.wine/system.reg ln -s /usr/share/wine/wine.systemreg ~/.wine/system.reg Le lien est à reproduire pour chaque utilisateur. Pré-requis d'utilisation (c) Pythagore F.D. 2010 Pythagore F.D. Page 144 Programmes Avant-propos Certains programmes Windows (Internet Explorer, Quicktime,...) installent des modules dans le panneau de configuration. Ceuxci sont accessibles par la commande: ~# wine control Syntaxe d'exécution Les programmes sont lancés en argument de la commande wine. Le chemin du programme est spécifié dans la syntaxe Unix ou Windows (une fois installé). Les arguments du programme sont spécifiés à la suite de son appel. Installation Selon les règles précédentes, l'installation d'Apophysis 2.02, un gestionnaire de fractales libre, se déroule de la façon suivante: ~# wine /media/usbdisk/Wine/Apo202.exe Programmes (c) Pythagore F.D. 2010 Pythagore F.D. Page 145 Programmes Programmes (c) Pythagore F.D. 2010 Pythagore F.D. Page 146 Programmes Exploitation Deux syntaxes sont donc disponibles pour l'exécution de binaires Windows: ou Programmes (c) Pythagore F.D. 2010 ~# wine ~/.wine/drive_c/Program\ Files/Apophysis\ 2.0/Apophysis.exe ~# wine "c:\Program Files\Apophysis 2.0\Apophysis.exe" Pythagore F.D. Page 147 Programmes Désinstallation La commande interne ~# uninstaller est utilisée pour désinstaller un programme et nettoyer la base de registre Wine. Programmes (c) Pythagore F.D. 2010 Pythagore F.D. Page 148 Ressources et support Ressources Wine est très peu consommateur de ressources. En revanche, les programmes qu'il permet d'exécuter peuvent l'être ou générer un plantage qui peut mener à une sévère dégradation des performances de la machine. À titre indicatif, les tests ont été réalisés sur la configuration suivante sur une RedHat EL4: • AMD Athlon 2500+ (1,8 Ghz) / 512 ko cache L2 • 1 Go de RAM • carte graphique Nvidia GeForce4 MX / AGP 2.0 / 64 Mo • disque dur ATA100 OpenOffice.org 2.2 pour Windows se lance en moins de 3s. Il est fonctionnel et son utilisation transparente. Support Les URLs suivantes peuvent aider à la résolution de problèmes: • site officiel: http://winehq.org • liste et versions d'applications fonctionnelles, retours d'expérience: http://winehq.org/apps • DLLs libres de droits: http://www.dlldump.com/ et http://www.dllfiles.com/ • le bout de toile de Franck: http://www.frankscorner.org/ Ressources et support (c) Pythagore F.D. 2010 Pythagore F.D. Page 149