From Mageia wiki
Jump to: navigation, search


Drakconf multiflag.png
Autres langues
English ; Français ;

Accueil [en] Accueil Équipes Packageurs Les outils d'empaquetage Mageiachroot pour empaqueteur


Attention !
Cette page est en cours de traduction. N'hésitez pas continuer la traduction, à la relire ou la corriger !

Pourquoi utiliser chroot ?

Souvent, lors de la construction ou de la reconstruction de paquets, vous devrez installer diverses bibliothèques et en-têtes de développement, dont beaucoup ne seront pas utilisés dans votre installation quotidienne.

Un environnement chroot autonome qui peut contenir tous les paquets de développement nécessaires est une excellente solution. Il peut facilement être sauvegardé et utilisé comme environnement de test et de construction, sans encombrer votre installation principale.

Et bien sûr, si vous parvenez à casser l’environnement chroot, il est aussi facile de le réparer qu’en restaurant la sauvegarde à partir d’une archive ou même en le redémarrant depuis le début.

Créer un chroot

Remarque :
Mageia dispose d’un outil, iurt, qui est capable d’effectuer des constructions automatiques en utilisant un environnement chroot spécifique à chaque fois et qui permet également de réaliser des compilations croisées avec d’autres architectures. Vous aurez besoin d’une bande passante importante pour utiliser cet outil efficacement.

Prérequis

  • Accès à la racine du système Mageia en fonctionnement
  • urpmi
  • Accès à un miroir Mageia, soit distant (http/ftp/rsync…), soit local (nfs/cdrom/file…)

Installation d’un chroot

Vous devez créer votre répertoire de travail. (/mnt/chroot/cauldron par exemple). Ce répertoire hébergera votre système Mageia chrooté.

mkdir -p /mnt/chroot/cauldron

Configurez urpmi avec la commande urpmi.addmedia. urpmi vous permet d'installer n'importe quelle version de Mageia dans un chroot sans modifier la configuration urpmi de votre système en fonctionnement. Nous choisissons ici d'installer le système Mageia cauldron dans le chroot. Nous utiliserons l'option --distrib de urpmi.addmedia qui configure automatiquement le dépôt[1] pour urpmi :

  • core
  • Core Updates
  • Nonfree
  • Nonfree Updates

Pour un système 32bits

urpmi.addmedia --distrib --urpmi-root /mnt/chroot/cauldron ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/Mageia/distrib/cauldron/i586

Pour un système 64bits

urpmi.addmedia --distrib --urpmi-root /mnt/chroot/cauldron ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/Mageia/distrib/cauldron/x86_64

Une liste de miroirs est disponible à l'adresse suivante https://mirrors.mageia.org/

Installer un système de base

Les paquets minimums exigés pour un chroot opérationnel sont :

  • basesystem-minimal (required)
  • urpmi (required for self-contained chroot)
  • locales-<XX> (strongly recommended): where <XX> stands for the ISO code of the locale you usually use within your running system [1] In our example, locales-fr or locales-en.

Vous pouvez également installer des paquets supplémentaires lors de la configuration initiale. Par exemple : syslinux

urpmi --urpmi-root /mnt/chroot/cauldron basesystem-minimal urpmi locales-fr syslinux

Accédez au chroot

Pour accéder au chroot ;

chroot /mnt/chroot/cauldron

À l’intérieur du chroot isolé, vous pouvez travailler avec celui-ci comme s’il s’agissait d’un système normal. Vous pouvez « quitter » le chroot avec la commande exit.

Configuration minimale

  • Configuration du DNS : Afin d'avoir une connexion réseau fonctionnelle dans notre chroot, vous devez remplir dans /mnt/chroot/cauldron/etc/resolv.conf, l'adresse DNS de votre fournisseur. Vous pouvez simplement copier votre /etc/resolv.conf fonctionnel dans le chroot /mnt/chroot/cauldron/etc/resolv.conf.
cp /etc/resolv.conf /mnt/chroot/cauldron/etc/resolv.conf
  • Monter le système de fichiers /proc : en dehors du chroot, monter le système de fichiers virtuel /proc de votre système en cours d'exécution à l'intérieur de votre chroot.
mount -o bind /proc /mnt/chroot/cauldron/proc

Construire des paquets

Dans l'environnement chroot, vous devez maintenant installer les paquets suivants :

  • rpm : notre version corrigée de la version de Red Hat.
  • rpm-build : les scripts utilisés pour construire les paquets.
  • spec-helper : un outil pour minimiser les specfiles en réalisant des tâches automatiques telles que le dépouillement des binaires et la compression des pages man.
  • libtool : utilisé par certains scripts configure pour construire des bibliothèques partagées.
  • rpmlint : utilisé pour vérifier la validité du rpm généré.

Vous pouvez maintenant suivre le guide Construire des paquetages RPM tout en utilisant l'environnement chroot.

Bonus

Accédez à votre système chrooté via SSH

Entrez dans votre système chrooté

chroot /mnt/chroot/cauldron

Installer Le openssh-server paquet dans votre chroot

# urpmi openssh-server

Changez le port par défaut (port 22), qui sera utilisé par le serveur SSH de votre système chrooté, en un autre port, 2222 par exemple, afin qu'il n'entre pas en conflit avec le serveur SSH réel qui pourrait fonctionner sur la machine hôte. Vous devrez modifier /etc/ssh/sshd_config

# $OpenBSD: sshd_config,v 1.74 2006/07/19 13:07:10 dtucker Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. (…) Port 2222 (…)

Lancez le serveur ssh de votre système chrooté

systemctl start sshd

Ajoutez un utilisateur dans votre chroot avec useradd

useradd jdoe passwd jdoe

Quitter le chroot

exit

Maintenant, aussi longtemps que le système de fichiers /proc est monté à l'intérieur de votre chroot et que votre serveur sshd chrooté fonctionne, vous devriez être en mesure de vous connecter à votre système chrooté via ssh comme ceci

ssh jdoe@localhost -p 2222

Si vous n'obtenez pas de shell après avoir tapé le mot de passe, vous devrez peut-être ajouter ceci à /etc/fstab dans le chroot :

none /dev/pts devpts defaults 0 0

Et puis, bien sûr, le monter.

mount /dev/pts

Accédez à d’autres partitions

Toutes les autres partitions disponibles peuvent également être partagées avec le chroot en les liant à un montage de la même manière que nous l’avons fait avec /proc.

Par exemple, si votre /home est une partition séparée ;

mount -o bind /home /mnt/chroot/cauldron/home

ou pour les supports externes;

mount -o bind /chemin/vers/media /mnt/chroot/cauldron/media/external