En fevrier dernier, je vous parlais d’Illumos, incubateur libre permettant à OpenIndiana de garder l’haleine fraiche et le teint pétillant.
Les choses ont pas mal évolué depuis, en particulier, je me suis un chouillat impliqué dans le projet visant à intégrer parfaitement pkgsrc à Illumos.
De discussions en reflexions, j’en suis venu à me demander s’il ne serait pas judicieux de monter un repository de binaires pkgsrc pour OpenIndiana/Illumos/Solaris puisque cette plateforme est finalement parfaitement supportée depuis des lustres mais qu’aucun repo digne de ce nom n’a été maintenu plus de 2 mois. (et puis evidemment, il faut bien un package manager pour gêrer tous ces binaires hin hin hin…)
Ainsi, Mads Worsøe Duun, l’initiateur du projet pkgsrc pour Illumos, a demandé aux gentils administrateurs du projet OpenIndiana (ouais, faut suivre) de nous mettre à disposition une buildbox afin de proposer des packages à jour, et bien plus de logiciels que n’en proposent Blastwave ou les repos IPS/pkg d’OpenSolaris (*ricane* *ricane*).
Ce qui est réellement à notre disposition ici, c’est une Zone, or, dans la plupart des documentations sur ce sujet (pkgsrc et Solaris), la méthode préférée, c’est de justement créer une zone pour faire son bulk build, mais comme ne nous pouvons pas créer de zone dans une zone (YO DAWG), il faudra procéder autrement, et c’est la raison même de cet article.
Comme l’explique la documentation officielle, il serait parfaitement inconscient de réaliser son bulk build sur une arborescence opérationnelle, en effet, sur les 10000 packages disponibles, une quantité non négligeable d’entre eux vont ajouter des utilisateurs, des groupes, des repertoires, des logs, des modules, des librairies etc etc etc. Il vous faut une sandbox. Fort heureusement, la “création” d’une sandbox Solaris est d’une grande simplicité.
Je vous livre ici les differentes étapes que vous pourrez bien entendu concaténer dans un joli petit script.
On déclare tout d’abord la localisation du bac à sable sur le filesystem, puis on s’y rend :
SANDBOX="/export/home/pkgsrc/sandbox"
cd ${SANDBOX}
Là, nous créons tous les répertoires nécessaires au bon fonctionnement du chroot, /tmp possède evidemment des droits particuliers :
mkdir -p bin sbin usr lib etc tmp dev opt var/run proc
chmod 777 tmp; chmod +t tmp
On peuple un peu /etc de fichiers indispensables :
cp /etc/passwd etc/
cp /etc/group etc/
cp /etc/shadow etc/
cp /etc/nsswitch.conf etc/
cp /etc/vfstab etc/
cp /etc/resolv.conf etc/
cp /etc/hosts etc/
cp /etc/netconfig etc/
cp /etc/datemsk etc/
cp /etc/user_attr etc/
cp /etc/auto_home etc/
cp /etc/project etc/
cp -r /etc/skel /etc/
chmod 400 etc/shadow
Enfin, point de copie de fichiers inutiles, nous mountons en loopback les repertoires /dev et /proc en lecture et écriture, puis bin sbin usr lib en lecture seule afin de ne pas faire de bêtises.
for rwfs in proc dev
do
mount -F lofs /${rwfs} ${SANDBOX}/${rwfs}
done
for rofs in bin sbin usr lib
do
mount -F lofs -o ro /${rofs} ${SANDBOX}/${rofs}
done
C’est prêt !
imil@pkgsrc:~$ pfexec chroot pkgsrc/sandbox /usr/bin/bash
bash-4.0#
Afin de pouvoir correctement compiler l’ensemble des paquets de pkgsrc, vous aurez également besoin d’installer les logiciels suivants à l’aide de la commande pkg install : SUNWgcc, gnu-patch, gnu-tar, system/xopen/xcu4, gnu-grep, developer/object-file.
Enfin, voici les particularités de mon mk.conf, à ajouter aux directives du mk.conf chrooté grace au bootstrap et son drapeau --mk-fragment :
PKGSRC_COMPILER= ccache gcc
ACCEPTABLE_LICENSES+= vim-license
ACCEPTABLE_LICENSES+= sendmail-license
FAILOVER_FETCH= yes
ALLOW_VULNERABLE_PACKAGES= yes
PKG_DEVELOPER= yes
MAKE_JOBS= 16
PASSIVE_FETCH= 1
X11_TYPE= native
X11BASE= /usr/X11
Ainsi que la commande complète de bootstrap :
./bootstrap --workdir=/tmp/pkgsrc --prefix=/opt/ipp/pkg --abi=32 --mk-fragment=mk-fragment.conf
Happy building.
Recent Comments