NOM
Foire aux questions de schroot
DESCRIPTION
Cette page de manuel couvre différentes questions fréquentes sur la configuration et l’utilisation de schroot.
CONFIGURATION
Pourquoi
schroot écrase-t-il des fichiers de configuration
dans le chroot ?
Par défaut, schroot copie les bases de donnée
NSS du système (’passwd’,
’shadow’, ’group’,
’gshadow’, ’services’,
’protocols’, ’networks’,
’hosts’, etc.) dans le chroot. La raison
est que l’environnement de chroot n’est pas
complètement séparé du système,
et copier ces fichiers permet de les maintenir à
jour. Cependant, ce n’est pas toujours
désirable, en particulier si installer un paquet dans
le chroot crée des utilisateurs et groupes
système qui ne sont pas présents chez
l’hôte, car ils disparaîtront la prochaine
fois que les bases de données seront
copiées.
La solution de repli suggérée ici est de désactiver la copie. Cela peut être effectué en définissant la clé setup.nssdatabases comme vide dans schroot.conf. Dans les versions précédentes de schroot, c’était effectué en commentant le fichier NSSDATABASES pour le chroot (/etc/schroot/default/config par défaut). La liste de bases de données peut être également personnalisée en éditant le fichier contenant la liste des bases de données (/etc/schroot/default/nssdatabases par défaut).
Prochainement, nous travaillerons à un meilleur schéma pour garder les bases de données de l’hôte et du chroot synchronisées ce qui permettra des fusions d’entrée plutôt qu’un écrasement entier de la base de données et qui garderait les changements spécifiques du chroot.
Quel type de
chroot dois-je utiliser :
« plain » ou
« directory » ?
Ces deux types de chroot sont en principe équivalents
car ce sont simplement des répertoires du
système de fichiers. « plain »
est très simple et n’effectue aucune
tâche de mise en place ; la seule raison pour
laquelle vous pourriez vouloir l’utiliser est que vous
mettez à niveau depuis un programme comme
dchroot(1) ou chroot(8) qui ne font rien
d’autre qu’exécuter une commande ou un
shell dans un répertoire. D’un autre
coté, les chroots « directory »
exécutent des scripts de mise en place qui peuvent
monter des systèmes de fichiers additionnels ou
d’autres tâches de mise en place.
CONFIGURATION AVANCÉE
Que sont les
« instantanés »
(« snapshots ») et les
« unions » ?
Certains types de chroot gèrent le clonage.
Cela veut dire que quand vous démarrez une session
vous obtenez une copie du chroot qui ne dure que pour
la durée de la session. C’est utile quand vous
voulez une copie propre temporaire du système pour
une tache simple, qui est ensuite automatiquement
détruite quand vous ne l’utilisez plus. Par
exemple, les démons de construction des paquets
Debian exécutent sbuild(1) pour construire les
paquets Debian et ce programme utilise schroot pour
créer un environnement de construction propre pour
chaque paquet. Sans création
d’instantané, le chroot devrait être
réinitialisé à la fin de chaque
construction afin de le préparer pour le suivant, et
chaque débris laissé par la
désinstallation de paquet ou de construction
précédente peut interférer avec la
construction suivante.
La méthode de création d’instantané la plus utilisée utilise les instantanés LVM (chroot de type ’lvm-snapshot’). Dans ce cas, le chroot doit exister sur un volume logique LVM (LV) ; les instantanés d’un LV peuvent ainsi être effectués avec la commande lvcreate(8) pendant l’initialisation de la session de chroot. Cependant, cela utilise beaucoup d’espace disque. Une nouvelle méthode consiste à utiliser les instantanés Btrfs qui utilisent beaucoup moins d’espace disque (chroot de type ’btrfs-snapshot’), et peuvent être plus sûrs que les instantanés LVM. Cependant, Btrfs est encore expérimental, mais cela deviendra certainement la méthode conseillée quand il deviendra mature.
Les unions sont des alternatives aux instantanés. Dans ce cas, au lieu de créer une copie du système de fichiers du chroot, un système de fichiers temporaire inscriptible est superposé au système de fichiers du chroot. Toute modification est ainsi sauvée dans la surcouche, laissant le système de fichier du chroot original inchangé. Le noyau Linux n’a pas encore intégré la prise en charge des unions de système de fichiers comme aufs et unionfs. Ainsi les instantanés LVM restent la méthode recommandée pour le moment.
UTILISATION
Puis-je
exécuter un démon
(« daemon ») dans un chroot ?
Un problème commun est d’essayer
d’exécuter un démon dans un chroot et
découvrir que cela ne marche pas. Typiquement, le
démon est tué rapidement après avoir
été démarré.
Quand schroot est exécuté, il initie une session, exécute la commande ou le shell spécifié, attend que cette commande ou ce shell se termine et ferme la session. Pour une commande ou un shell normal, cela marche bien. Cependant les services commencent par se lancer en tâche de fond et se détachent du terminal les contrôlant. Ils font cela en fourchant deux fois et en laissant le processus parent se terminer. Malheureusement schroot détecte que le programme s’est terminé (le démon est un petit-fils orphelin de ce processus) et il ferme la session. Une partie de la terminaison de la session est de tuer tous les processus restant dans le chroot, ce qui veut dire tuer le démon lors de la fermeture de la session.
En conséquence, il n’est pas possible d’exécuter un démon directement avec schroot. Vous pouvez cependant le faire si vous créez une session avec --begin-session et ensuite exécutez le démon avec --run-session. Il est alors de votre responsabilité de terminer la session avec --end-session quand le démon a terminé ou que vous n’en avez plus besoin.
Comment
puis-je nettoyer manuellement une session
cassée ?
Occasionnellement, il peut être nécessaire de
nettoyer manuellement des sessions. Si quelque chose a
changé dans votre système qui fait
échouer les scripts de mise en place lors de la fin
de session, par exemple le retrait d’un fichier ou
répertoire requis, il peut être impossible
à schroot de nettoyer tout automatiquement. Pour
chaque répertoire de session listé dans la
section “Répertoires de session”
dans schroot(1), tout fichier avec le nom d’un
identifiant de session doit être supprimé, et
tout répertoire avec le nom d’un identifiant de
session doit être démonté (s’il y
a des systèmes de fichiers montés à
l’intérieur) et également
supprimé.
Par exemple, pour supprimer une session nommée ma-session à la main :
• |
Supprimez le fichier de configuration de la session |
% rm /var/lib/schroot/session/ma-session↵
• |
Vérifiez les systèmes de fichiers montés |
% /usr/lib/i386-linux-gnu/schroot/schroot-listmounts -m \
/var/run/schroot/mount/ma-session↵
• |
Démontez tout système de fichiers monté | ||
• |
Supprimez /var/run/schroot/mount/ma-session | ||
• |
Répétez pour les autres répertoires comme /var/lib/schroot/union/underlay, /var/lib/schroot/union/overlay et /var/lib/schroot/unpack |
NOTE : Ne supprimez aucun répertoire sans vérifier s’il y a des systèmes de fichiers montés sous eux, car les systèmes de fichiers comme /home pourraient toujours être montés en liaison. Ne pas le faire peut engendrer la perte irréparable de données.
UTILISATION AVANCÉE
Comment
utiliser les sessions ?
Lors d’une utilisation normale, lancer une commande
peut ressembler à ça :
% schroot -c squeeze -- commande↵
Cela lancera la commande commande dans le chroot squeeze. Alors qu’il n’est pas évident qu’une session est utilisée ici, schroot effectue en fait les étapes suivantes :
• |
Création d’une session utilisant le chroot squeeze. Cela va donner automatiquement un nom unique, comme squeeze-57a69547-e014-4f5d-a98b-f4f35a005307, que normalement vous n’avez pas besoin de connaître. | ||
• |
Les scripts de mise en place sont exécutés pour créer la session de chroot et la configurent pour vous. | ||
• |
La commande commande est exécutée dans la session de chroot. | ||
• |
Les scripts de mise en place sont exécutés pour nettoyer la session de chroot. | ||
• |
La session est supprimée. |
Maintenant si
vous voulez exécuter plus d’une commande, vous
pouvez exécuter un interpréteur de commandes
et les exécuter interactivement, ou vous pouvez les
mettre dans un script shell et l’exécuter
à leur place. Mais vous pourriez vouloir faire
quelque chose d’intermédiaire, comme
exécuter des commandes arbitraires d’un
programme ou script où vous ne savez pas quelle
commande exécuter à l’avance. Vous
pourriez également vouloir préserver
l’état du chroot entre les commandes.
C’est la raison d’être des sessions :
une fois créée, la session est persistante et
ne sera pas automatiquement supprimée. Avec une
session, vous pouvez exécuter autant de commandes que
vous le voulez, mais vous devez créer et supprimer la
session manuellement car schroot ne peut pas savoir par
lui-même quand vous avez fini à
l’exception du cas de la commande unique ci-dessus.
C’est relativement facile :
% schroot --begin-session -c squeeze↵
squeeze-57a69547-e014-4f5d-a98b-f4f35a005307
Cela
crée une nouvelle session basée sur le chroot
squeeze. Le nom unique de la session,
l’identifiant de session, a été
écrit sur la sortie standard. Nous pouvons donc
l’enregistrer en tant que variable shell en même
temps comme cela :
% SESSION=$(schroot --begin-session -c
squeeze)↵
% echo $SESSION↵
squeeze-57a69547-e014-4f5d-a98b-f4f35a005307
Maintenant nous
avons créé la session et nous avons son
identifiant, nous pouvons y lancer des commandes en
utilisant l’identifiant de session :
% schroot --run-session -c
squeeze-57a69547-e014-4f5d-a98b-f4f35a005307 \
-- commande1↵
ou
% schroot --run-session -c "$SESSION" --
commande1↵
et ensuite nous
pouvons avoir autant de commandes que nous le voulons
% schroot --run-session -c "$SESSION" --
commande2↵
% schroot --run-session -c "$SESSION" --
commande3↵
% schroot --run-session -c "$SESSION" --
commande4↵
etc.
Quand nous
avons fini avec cette session, nous pouvons la supprimer
avec --end-session :
% schroot --end-session -c
squeeze-57a69547-e014-4f5d-a98b-f4f35a005307↵
ou
% schroot --end-session -c
"$SESSION"↵
Comme les noms de sessions générés automatiquement peuvent être longs et peu maniables, l’option --session-name vous permet de spécifier votre propre nom :
% schroot
--begin-session -c squeeze --session-name mon-nom↵
mon-nom
CONTRIBUER
Recevoir de
l’aide ou s’impliquer.
La liste de diffusion
<buildd-tools-devel [AT] lists.org> est
utilisée pour l’aide aux utilisateurs et les
discussions au sujet du développement. Vous pouvez
vous inscrire à la liste sur le site web du projet
à l’adresse
https://alioth.debian.org/projects/buildd-tools/ ou avec
l’interface du gestionnaire de listes à
l’adresse
http://lists.alioth.debian.org/mailman/listinfo/buildd-tools-devel.
Signaler des
bogues.
Sur les systèmes Debian, les bogues peuvent
être signalés en utilisant l’utilitaire
reportbug(1) ou en envoyant un message à
<submit [AT] bugs.org> (consultez
http://bugs.debian.org pour plus de détails sur
comment le faire).
Obtenir les
dernières sources.
schroot est maintenu dans le système de gestion de
source git. Vous pouvez obtenir les dernières sources
à partir de
git://git.debian.org/git/buildd-tools/schroot.
% git clone
git://git.debian.org/git/buildd-tools/schroot↵
La branche maîtresse contient la version de développement courante. Les versions stables peuvent être trouvées dans les branches. Par exemple la série de version 1.4 est la branche schroot-1.4.
AUTEURS
Roger Leigh.
COPYRIGHT
Copyright © 2005-2012 Roger Leigh <rleigh [AT] codelibre.net>
schroot est un logiciel libre : vous pouvez le redistribuer et/ou le modifier aux conditions définies dans la licence publique générale GNU telle que publiée par la Free Software Foundation, version 2 ou, selon votre préférence, toute version ultérieure.
VOIR AUSSI
dchroot(1), sbuild(1), schroot(1), schroot.conf(5), schroot-setup(5).
TRADUCTION
Ce document est une traduction, réalisée par Thomas Blein le 30 mai 2012.
L’équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité.
La version anglaise de ce document est toujours consultable en ajoutant l’option « -L C » à la commande man.
N’hésitez pas à signaler à l’auteur ou à la liste de traduction <debian-l10n-french [AT] lists.org>, selon le cas, toute erreur dans cette page de manuel.