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 « clichés » (« snapshots ») et les « unions » ?¶
Certains types de chroot supportent 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, le service de construction des paquets Debian exécute
sbuild(1) pour construire les paquets Debian qui utilise schroot pour
créer un environnement de construction propre pour chaque paquet. Sans
cliché, 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 cliché la plus utilisée utilise les
clichés LVM (chroot de type ‘lvm-snapshot’). Dans ce cas,
le chroot doit exister sur un volume logique LVM (LV) ; les
cliché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 clichés Btrfs qui utilisent beaucoup
moins d'espace disque (chroot de type ‘btrfs-snapshot’), et
peuvent être plus sûrs que les cliché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 cliché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 doit pour le moment
intégrer le support des unions de système de fichiers comme aufs
et unionfs. ainsi les clichés LVM restent la méthode
recommandée pour le moment.
UTILISATION¶
Puis-je exécuter un service (« daemon ») dans un chroot ?¶
Un problème commun est d'essayer d'exécuter un service dans un
chroot et découvrir que cela ne marche pas. Typiquement, le service 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 forquant deux fois et en laissant le processus parent se
terminer. Malheureusement schroot détecte que le programme s'est
terminé (le service est un orphelin petit-fils 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 service lors de
la fermeture de la session.
En conséquence, il n'est pas possible d'exécuter un service
directement avec schroot. Vous pouvez cependant le faire si vous
créez une session avec
--begin-session et ensuite
exécutez le service avec
--run-session. Il est alors de votre
responsabilité de terminer la session avec
--end-session quand
le service a terminé ou que vous n'en avez plus besoin.
Occasionnellement, il peut être nécessaire de nettoyer
manuellement des sessions. Si quelque chose a changé dans votre
système qui fait échouer le script de mise en place lors de la
fin de session, par exemple en retirent 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
% /usr/lib/x86_64-linux-gnu/schroot/schroot-listmounts -m \
/var/lib/schroot/mount/ma-session↵
- •
- Démontez tout système de fichiers
- •
- Supprimez /var/lib/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 peuvent toujours être
montés. Ne pas le faire peut engendrer la perte irréparable de
données.
UTILISATION AVANCÉE¶
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 clair 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 le
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 connaissez 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 commande 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@lists.alioth.debian.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 via l'interface du
gestionnaire de listes à l'adresse
http://lists.alioth.debian.org/mailman/listinfo/buildd-tools-devel.
Signaler des bogues.¶
Sur les système Debian, les bogues peuvent être signalés en
utilisant l'utilitaire
reportbug(1) ou en envoyant un message à
<submit@bugs.debian.org> (consultez
http://bugs.debian.org pour plus de
détail 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@debian.org>
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),
schroot(1),
sbuild(1),
schroot-setup(5),
schroot.conf(5).