Faire tourner poudriere dans une jail

Il n’est plus recommandé pour le moment de faire tourner poudrière dans une jail ! : Tant que les FileSystèmes fdescfs tmpfs linprocfs … ne seront pas ‘jailable’.

Une traduction et mise en pratique de l’excellent how to de bapt ‘Run poudriere in a jail‘.

Prérequis :

Avoir une idée du fonctionnement général de poudriere, pour cela lire : What is poudriere?

Cet how-to n’est fonctionnel qu’à partir de la version 9.1 de FreeBSD, il dépend des nouvelles possibilités de montage à l’intérieur des jails : allow.mount.devfs, allow.mount.nullfs, allow.mount.zfs voir : ‘FreeBSD 9.1-RELEASE Release Notes‘.

Définition de la jail ‘poudre’ sur la machine hote :

# cat /etc/jail.conf
poudre {
	name=poudre;
	host.hostname=poudre;
	ip4=inherit;
	ip6=inherit;
	persist;
	children.max=10;
	allow.mount;
	allow.mount.devfs;
	allow.mount.procfs;
	allow.mount.zfs;
	allow.mount.nullfs;
	allow.raw_sockets;
	allow.socket_af;
	allow.sysvipc;
	allow.chflags;
	enforce_statfs=1;
	path=/prison/poudre;
	exec.start="mount -t devfs devfs /dev";
	exec.stop="umount /dev; zfs umount -a";
}

Création du volume zfs conteneur de notre jail :

# zfs create -p -o mountpoint=/prison/poudre zroot/prison/poudre

Récupération et installation du système de base pour la jail :

# cd /prison/poudre
# fetch -q -o - ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/9.1-RELEASE/base.txz | tar xpf -
# cp /etc/resolv.conf /prison/poudre/etc/resolv.conf

Création du volume zfs conteneur des repositories pkgng :

# zfs create -o jailed=on zroot/pkgng-repo

Chargement des modules nécessaires sur la machine hote :

De façon temporaire :

# kldload tmpfs linux linprocfs nullfs fdescfs

De façon definitive  : voir man rc.conf

# grep kld_list /etc/rc.conf
kld_list="tmpfs linux linprocfs nullfs procfs fdescfs"

Lancement du jail :

# jail -c poudre
poudre: created
# jls
   JID  IP Address      Hostname                      Path
     1  -               poudre                        /prison/poudre

Donner accès au conteneur des repositories pkgng à la jail :

# zfs jail `jls -q -j poudre jid` zroot/pkgng-repo
# jexec -U root poudre zfs mount -a

Dans les prochaines releases de FreeBSD il faudra plutôt faire :

# zfs jail poudre zroot/pkgng-repo
# jexec -U root poudre zfs mount -a

Création du fichier de configuration par défaut de poudrière :

# mkdir -p /prison/poudre/usr/local/etc
# cat poudriere.conf
BASEFS=/poudre
ZROOTFS=/pkgng-repo
ZPOOL=zroot
RESOLV_CONF=/etc/resolv.conf
DISTFILES_CACHE=/distfiles
CHECK_CHANGED_OPTIONS=yes
NOLINUX=1

Création du répertoire distfiles :
Il contiendra les fichiers sources des programmes des ports.

# mkdir /prison/poudre/distfiles

Ce connecter avec un shell dans la jail :

# jexec -U root poudre sh
poudre#

Récupérer et installer poudriere :

poudre # cd /root
poudre # fetch ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-9-current/ports-mgmt/poudriere-2.2.tbz
poudre # pkg_add poudriere-2.2.tbz

Votre poudriere est maintenant prête :
Peupler un portstree :

poudre # poudriere ports -c

Créer une liste de ports à poudrer :

poudre # cat ~/list 
sysutils/tmux

Création d’un environnement de build :

poudre # poudriere jails -c -j miniBuilderJail -v 9.1-RELEASE -a amd64

Lancement de la poudriere :

poudre # poudriere bulk -f ~/list -j miniBuilderJail

Récapitulatif :

Démarrer sa jail poudriere :

# jail -c poudre

Suivi de pour l’instant :

# zfs jail `jls -q -j poudre jid` zroot/pkgng-repo
# jexec -U root poudre zfs mount -a
# jexec -U root poudre sh
poudre#

Et bientôt :

# zfs jail poudre zroot/pkgng-repo
# jexec -U root poudre zfs mount -a
# jexec -U root poudre sh
poudre#

Arrêter sa jail poudriere

# jls
   JID  IP Address      Hostname                      Path
     1  -               poudre                        /prison/poudre
# jail -r 1
1: removed
This entry was posted in unix and tagged , , , . Bookmark the permalink.

7 Responses to Faire tourner poudriere dans une jail

  1. Perso je n’utilise plus le /boot/loader.conf pour charger les modules non obligatoires au démarrage du système: Je les listes dans la variable kld_list du /etc/rc.conf à la place.
    Avec ce tuto ca donne:
    kld_list=’tmpfs linux linprocfs nullfs procfs fdescfs’
    Cela a pour avantage d’accélérer le temps de démarrage sur une machine physique. Par contre pour le cas particulier d’une jail, je ne sais pas si le temps gagné est vraiment avantageux.

    • Angelica says:

      There’s really not any lltite more for configuring Apache. Apache configuration is a big pain. I been using lighttpd at home instead of Apache and I’m very happy with it.Which gets to the point that every piece of SW that’s a letter in LAMP is swappable. I think a good combination would be BLPP for BSD/lighttpd/Postgres/P*. The DB may be the toughest thing to swap out, though. If you kept Mysql, you’d have BLMP, a BLiMP (zeppelin). But, a really good and fast one. :)

    • Bertie says:

      I rckeon you are quite dead on with that.

  2. nomad says:

    Merci pour cette remarque, j’ai appris quelque chose, je met a jour le tuto.

  3. Forever says:

    Hey, that’s a cvleer way of thinking about it.

  4. nomad says:

    viens de mettre a jour.

    # kldload tmpfs linux linprocfs nullfs procfs fdescfs

    en

    # kldload tmpfs linux linprocfs nullfs fdescfs

Leave a Reply

Your email address will not be published. Required fields are marked *

ERROR: si-captcha.php plugin says GD image support not detected in PHP!

Contact your web host and ask them why GD image support is not enabled for PHP.

ERROR: si-captcha.php plugin says imagepng function not detected in PHP!

Contact your web host and ask them why imagepng function is not enabled for PHP.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>