Cette section est une liste de quelques trucs et astuces permettant d'optimiser l'usage d'une instance virtuelle de système d'exploitation.
Gestion de paquets
Pour optimiser la gestion de paquets avec APT sur une machine virtuelle Debian GNU/Linux
on essaie de limiter au maximum l'occupation disque de façon à
donner un maximum d'espace dans l'arborescence /var
.
-
#
aptitude clean -
Il est inutile de conserver les fichiers
.deb
correspondant aux paquets installés sur le système virtuel. Cette commande sert justement à nettoyer l'arborescence/var/cache/apt
. -
#
aptitude purge $(deborphan) -
La commande deborphan appartenant au paquet du même nom recherche les paquets orphelins installé sur le système. Les paquets trouvés cette commande ne sont pas nécessaires au fonctionnement des services installés ; on peut donc les supprimer sans problème pour gagner de la place disque.
-
#
localepurge -
La commande localepurge appartenant au paquet du même nom. Elle sert à effacer tous les fichiers de «localisation» (langues étrangères) inutiles sur le disque. Elle est appelée automatiquement à chaque opération de gestion de paquets avec
apt-get
ouaptitude
.La fin du fichier de configuration
/etc/locale.nopurge
répertorie les paramètres des fichiers de localisation à conserver.#
tail /etc/locale.nopurge #VERBOSE ##################################################### # Following locales won't be deleted from this system # after package installations done with apt-get(8): en fr fr_FR.UTF-8 - Transparent proxy, Service Mandataire
-
L'utilisation du gestionnaire de paquets peut poser problème lorsque le système hôte se trouve derrière un service mandataire ou proxy transparent.
Dans ce cas, il faut compléter la configuration du gestionnaire de paquets sur chaque instance de système virtuel en ajoutant un fichier dans le répertoire
/etc/apt/apt.conf.d/
.#
cat /etc/apt/apt.conf.d/10proxy Acquire::http::No-Cache "true"; Acquire::http::Max-Age "0"; - Duplication du jeu de paquets entre systèmes, aptitude-create-state-bundle, aptitude-run-state-bundle
-
Pour dupliquer le jeu de paquets installés entre instances système, il est possible de créer un fichier image de l'état d'une installation. Cette technique permet de transférer la liste des paquets installés entre architectures différentes.
Côté système source, celui qui détient le jeu de référence, on utilise la commande aptitude-create-state-bundle et copie le fichier contenant la liste des paquets installés sur le système hôte.
#
aptitude-create-state-bundle selections.bz2#
chown etu.etu selections.bz2#
exit etu@vm:~$ logout Connection to fe80::b8ad:caff:fefe:5%vlan5 closed :~/vm$ $ scp etu@[fe80::b8ad:caff:fefe:5%vlan5]:~/selections.bz2 . Warning: Permanently added 'fe80::b8ad:caff:fefe:5%vlan5' (ECDSA) to the list of known hosts. etu@fe80::b8ad:caff:fefe:5%vlan5's password: selections.bz2 100% 30MB 30.4MB/s 00:01Côté système cible, celui sur lequel on doit appliquer le jeu de référence pour compléter sa liste de paquets installés, on utilise la commande aptitude-run-state-bundle.
:~/vm$
scp selections.bz2 etu@[fe80::b8ad:caff:fefe:0%vlan214]:~ Warning: Permanently added 'fe80::b8ad:caff:fefe:0%vlan214' (ECDSA) to the list of known hosts. etu@fe80::b8ad:caff:fefe:0%vlan214's password: selections.bz2 100% 30MB 30.4MB/s 00:00:~/vm$
ssh etu@fe80::b8ad:caff:fefe:0%vlan214 Warning: Permanently added 'fe80::b8ad:caff:fefe:0%vlan214' (ECDSA) to the list of known hosts. etu@fe80::b8ad:caff:fefe:0%vlan214's password:etu@vm:~$
su Mot de passe :vm:/home/etu#
aptitude-run-state-bundle selections.bz2
Paramétrage de la console
Que l'on accède à une instance de système virtualisé via une connexion SSH ou via un écran distant avec le protocole SPICE, il est important de disposer d'un jeu de caractères et d'un affichage cohérent.
- Terminal d'exécution, gpm
-
Le paquet gpm permet d'utiliser la souris en mode console pour effectuer les opérations du type copier/coller.
-
keyboard-configuration
,console-setup
-
Le paquet keyboard-configuration permet de gérer les codes de touches clavier et les jeux de caractères. La reconfiguration du paquet avec la commande
permet de passer en revue et de modifier les options relatives aux dispositions de claviers.#
dpkg-reconfigure keyboard-configurationLe paquet console-setup permet de paramétrer la configuration du clavier et de la police pour la console du système.
-
spice-vdagent
-
Dans le cas où l'on accède à un écran graphique de système virtualisé via le protocole SPICE, il est possible de «partager» les actions à la souris entre l'interface graphique du système local et du système virtuel. Cet outil permet aussi le redimensionnement dynamique de l'écran du système virtuel en fonction de la résolution de l'écran du système local.
Configuration graphique
La gestion de l'interface graphique d'une instance de système
virtualisé est en constante sur les hyperviseurs disponibles avec
le noyau Linux. Dans ce document, on se réfère au protocole
SPICE et au contrôleur graphique
virtuel QXL
.
Sur un système non virtualisé le graphisme utilise les ressources d'un composant spécifique baptisé Graphics Processing Unit ou GPU. La virtualisation implique l'émulation d'un composant GPU. Cette émulation doit être en mesure de traiter tous les appels aux bibliothèques graphiques effectués par les différents gestionnaire d'interface utilisateur. La tâche est donc particulièrement ardue.
Les scripts utilisés pour la rédaction de ce guide désignent le contrôleur QXL comme GPU. Voici quelques éléments d'identification.
$
lspci | grep VGA
00:01.0 VGA compatible controller: Red Hat, Inc. Device 0100 (rev 04)
Malheureusement, la version stable Wheezy ne dispose pas du paquet de pilotage de GPU émulé. Le suuport des fonctions graphiques est donc moins performant. En revanche, la version testing contient bien le paquet xserver-xorg-video-qxl.
-
Extrait du journal d'initialisation du serveur graphique sur la distribution stable Wheezy.
#
grep -i qxl /var/log/Xorg.0.log [ 10.785] (==) Matched qxl as autoconfigured driver 0 [ 10.785] (II) LoadModule: "qxl" [ 10.848] (WW) Warning, couldn't open module qxl [ 10.848] (II) UnloadModule: "qxl" [ 10.848] (II) Unloading qxl [ 10.848] (EE) Failed to load module "qxl" (module does not exist, 0) -
Extrait du journal d'initialisation du serveur graphique sur la distribution testing Jessie.
#
grep -i qxl /var/log/Xorg.0.log [ 13.206] (==) Matched qxl as autoconfigured driver 0 [ 13.206] (II) LoadModule: "qxl" [ 13.230] (II) Loading /usr/lib/xorg/modules/drivers/qxl_drv.so [ 13.240] (II) Module qxl: vendor="X.Org Foundation" [ 13.252] (II) qxl: Driver for QXL virtual graphics: QXL 1 [ 13.302] (II) qxl(0): Creating default Display subsection in Screen section [ 13.302] (==) qxl(0): Depth 24, (--) framebuffer bpp 32 [ 13.302] (==) qxl(0): RGB weight 888 [ 13.302] (==) qxl(0): Default visual is TrueColor [ 13.302] (==) qxl(0): Using gamma correction (1.0, 1.0, 1.0) [ 13.302] (II) qxl(0): Offscreen Surfaces: Enabled [ 13.302] (II) qxl(0): Image Cache: Enabled [ 13.302] (II) qxl(0): Fallback Cache: Enabled [ 13.303] (II) qxl(0): framebuffer at 0x7f1d30471000 (16384 KB) [ 13.303] (II) qxl(0): command ram at 0x7f1d31471000 (32760 KB) [ 13.303] (II) qxl(0): vram at 0x7f1d2c471000 (65536 KB) [ 13.303] (II) qxl(0): rom at 0x7f1d3852a000 [ 13.303] (II) qxl(0): Device version 0.0 [ 13.303] (II) qxl(0): Compression level 0, log level 0 [ 13.303] (II) qxl(0): 12286 io pages at 0x7f1d30471000 [ 13.303] (II) qxl(0): RAM header offset: 0x3ffe000 [ 13.303] (II) qxl(0): Correct RAM signature 41525851 [ 13.303] (II) qxl(0): 49144 KB of video RAM [ 13.303] (II) qxl(0): 1024 surfaces
Copie d'écran de l'interface graphique sur une instance de machine virtuelle Debian/testing.
Système de fichiers ext4
Il est possible d'optimiser les accès au système de fichiers
ext4 sur un système virtualisé. Dans la
mesure où l'on n'accède pas à un véritable dispositif de stockage,
certaines options de montage peuvent être modifiées. Voici un
extrait de fichier /etc/fstab
qui
donne la liste des options de montage de la racine du système de
fichiers.
etu@vm0:~$
grep ext4 /etc/fstab
/dev/mapper/vm0-root / ext4 relatime,data=writeback,commit=6000,barrier=0,errors=remount-ro 0 1
relatime
-
Cette option assure le maintien des méta-données du système de fichiers relatives aux accès. L'enregistrement
atime
d'un fichier est écrit seulement si le le fichier a été modifié depuis la dernière mise à jour de cet enregistrement (mtime
) ou si aucun accès au fichier n'a eu lieu pendant un certain temps. data=writeback
-
Le séquencement des données n'est pas préservé. Les données peuvent être écrites dans le système de fichiers principal après que les méta-données aient été enregistrées dans le journal.
Pour activer cette option pour un système de fichiers particulier, la syntaxe est :
#
tune2fs -o journal_data_writeback /dev/mapper/vm0-root tune2fs 1.42.9 (4-Feb-2014)#
tune2fs -l /dev/mapper/vm0-root | grep '^Default mount options:' Default mount options: journal_data_writeback commit=6000
-
Cette option contrôle de la synchronisation des méta-données du système de fichiers toutes les 6000 secondes.
barrier=0
-
Cette option contrôle l'ordonnancement dans le cache du système de fichiers. Sur une machine virtuelle, il n'est pas nécessaire d'exercer un contrôle à ce niveau.
Accès SSH
Pour administrer des systèmes à distance, le protocole SSH est le mode de connexion universel. Dans le contexte particulier de l'administration des instances de systèmes virtuels, une même image système avec une même clé d'hôte RSA est dupliquée autant de fois que nécessaire. On se trouve rapidement confronté aux traditionnels messages d'alerte sur l'usurpation de cette clé d'hôte lorsque l'on accès aux instances virtuelles depuis le système hôte.
On peut configurer le client SSH du système hôte de façon à ne pas vérifier
«l'identité», c'est à dire la clé d'hôte RSA, des instances de systèmes virtualisées. La
documentation complète sur la configuration du client
SSH est fournie dans les pages
de manuels :
.$
man ssh_config
Voici un extrait de fichier ~/.ssh/config
qui désactive les contrôles pour
tous les hôtes dont les adresses IP correspondent au masque 192.0.2.*
.
Host 192.0.2.* CheckHostIP no StrictHostKeyChecking no UserKnownHostsFile=/dev/null