Scroll to navigation

FAQ de SCHROOT(7) Debian sbuild FAQ de SCHROOT(7)

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.

The suggested workaround here is to disable the copying. This may be achieved by setting the setup.nssdatabases key to be empty in schroot.conf. In prior schroot releases, this was done by commenting out the NSSDATABASES file for the chroot (/etc/schroot/default/config by default). The database list may also be customised by editing the file containing the database list (/etc/schroot/default/nssdatabases by default).

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, 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.

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 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/run/schroot/mount/ma-session
Démontez tout système de fichiers
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 peuvent toujours être montés. 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 clair qu'une session est utilisé 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-2013 Roger Leigh <rleigh@debian.org>

schroot is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

VOIR AUSSI

dchroot(1), schroot(1), sbuild(1), schroot-setup(5), schroot.conf(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@lists.debian.org>, selon le cas, toute erreur dans cette page de manuel.

2014-01-04 Version 1.7.2