Mise à jour des pkgs avec le couple sandbox / pkg_chk

Il existe de nombreux moyens pour mettre à jour ses pkgs avec notre ami pkgsrc, cependant je vais vous montrer une autre méthode que je trouve un peu plus simple mais après c'est à vous de voir laquelle vous préférez. J'aime cette méthode que j'utilise sur mon serveur pour éviter de tout casser au cas où un pkg ne compile pas (rare mais ça peut arriver).

Pré-requis

Voici quelques actions à réaliser avant la mise à jour de nos packages.

Mise à jour de l'arbre

Mettre à jour /usr/pkgsrc et /usr/pkgsrc/wip par la méthode de votre choix, pour moi je prends la méthode la plus courante :

# cd /usr/pkgsrc && cvs update -Pd
# cd /usr/pkgsrc/wip && cvs update -Pd
Installation de pkg_chk

Installez l'outil qui nous permettra de vérifier et mettre à jour si besoin les packages manquant ou anciens.

# cd /usr/pkgsrc/pkgtools/pkg_chk && make install clean
Création de la sandbox

Il existe un script fourni par défaut dans l'arbre pkgsrc, il se trouve là : /usr/pkgsrc/mk/bulk/mksandbox. Il va créer les répertoires nécessaires en regardant aussi ce que vous avez mis dans votre mk.conf, ainsi je vous conseille d'ajouter dans votre mk.conf :

# /etc/mk.conf
WRKOBJDIR= /usr/tmp       # Set the pkgsrc objdir to /usr/tmp.
DISTDIR= /usr/distfiles   # Set the pkgsrc distfiles to /usr/distfiles.
PACKAGES= /usr/packages   # Set the pkgsrc packages to /usr/packages

Ce qui aura pour but de garder votre pkgsrc propre et ainsi, le /usr/packages sera en lien avec celui de la sandbox.

Choisissez un répertoire qui contiendra votre sandbox, moi j'ai choisi /usr/sandbox mais vous prenez ce qui vous plaît.

Pour Xorg natif

# mkdir /usr/sandbox
# /usr/pkgsrc/mk/bulk/mksandbox /usr/sandbox

Pour Xorg modulaire

# mkdir /usr/sandbox
# /usr/pkgsrc/mk/bulk/mksandbox --without-x /usr/sandbox
# echo "X11_TYPE=modular" >> /usr/sandbox/etc/mk.conf

Si tout se passe bien tout devrait être monté une deuxième fois dans /usr/sandbox :

# mount 
/bin on /usr/sandbox/bin type null (read-only, local)
/sbin on /usr/sandbox/sbin type null (read-only, local)
/lib on /usr/sandbox/lib type null (read-only, local)
/libexec on /usr/sandbox/libexec type null (read-only, local)
/usr/X11R7 on /usr/sandbox/usr/X11R7 type null (read-only, local)
/usr/bin on /usr/sandbox/usr/bin type null (read-only, local)
/usr/games on /usr/sandbox/usr/games type null (read-only, local)
/usr/include on /usr/sandbox/usr/include type null (read-only, local)
/usr/lib on /usr/sandbox/usr/lib type null (read-only, local)
/usr/libdata on /usr/sandbox/usr/libdata type null (read-only, local)
/usr/libexec on /usr/sandbox/usr/libexec type null (read-only, local)
/usr/lkm on /usr/sandbox/usr/lkm type null (read-only, local)
/usr/share on /usr/sandbox/usr/share type null (read-only, local)
/usr/sbin on /usr/sandbox/usr/sbin type null (read-only, local)
/var/mail on /usr/sandbox/var/mail type null (read-only, local)
/usr/src on /usr/sandbox/usr/src type null (read-only, local)
/usr/pkgsrc on /usr/sandbox/usr/pkgsrc type null (local)
/usr/packages on /usr/sandbox/usr/packages type null (local)
/usr/distfiles on /usr/sandbox/usr/distfiles type null (local)
Création de la liste des packages à vérifier et/ou mettre à jour

Maintenant il faut créer la liste des packages à mettre à jour, pour cela on va utiliser pkg_chk. Un conseil, mettez le pkgchk_list.conf dans /usr/pkgsrc comme ça il sera directement accessible dans la sandbox.

# pkg_chk -C /usr/pkgsrc/pkgchk_list.conf -g

Maintenant le fichier pkgchk_list.conf contient tous nos packages installés.

Si vous installez de nouveaux packages, n'oubliez pas de réexécuter cette comande car il se regénère pas tout seul !

Copier le mk.conf

Copiez maintenant votre mk.conf pour garder vos options et variables en tout genre dans votre sandbox :

# cp /etc/mk.conf /usr/sandbox/etc

Mise à jour des packages

Voici maintenant l'épisode où on va mettre à jour ses packages, enfin d'abord on va vérifier s'il y en a à mettre à jour et on va les construire.

Entrer dans la sandbox

Non ne sonnez pas, mais exécutez la commande qui suit à chaque fois que vous désirez y rentrer :

# /usr/sandbox/sandbox chroot
Édition du /etc/mk.conf

Pour le mk.conf de la sandbox je vous conseille d'ajouter :

# Création de packages pour mettre à jour :
UPDATE_TARGET=package

# Emplacement et paramètres pour pkg_chk
PKGCHK_CONF= /usr/pkgsrc/pkgchk_list.conf
PKGCHK_UPDATE_CONF= /tmp/pkgchk_update.conf

Notez que j'ai mis le fichier temporaire de mise à jour pkg_chk dans un autre répertoire que /usr/pkgsrc, je fais ça sur toutes mes machines pour éviter de polluer /usr/pkgsrc et aussi car je monte /usr/pkgsrc en nfs (read-only) mais vous n'êtes pas obligé.

Si vous utilisez postgresql, mysql ou apache, il peut y avoir de nouvelles version, et dans pkgsrc les versions sont parfois sélectionnables. La dernière fois j'ai eu un problème de ce genre, j'avais pas précisé quelle version de postgresql je voulais et par défaut il m'a installé la version 8.2, et un module PHP a voulu m'installer la version 8.3 mais comme la version 8.2 était déjà installé ça a donc planté. Pour évitez cela les développeurs pkgsrc propose le choix de la version comme ceci :

# Version 8.3 de postgresql
PGSQL_VERSION_DEFAULT= 83
# Version 2.2 de apache
PKG_APACHE_DEFAULT= apache22
# Version 5.0 de mysql
MYSQL_VERSION_DEFAULT= 50
Création des paquets

Il est maintenant temps de mettre à jour les packages, par contre vous devez réinstaller pkg_chk dans la sandbox avant de commencer (voir en haut).

Si vous n'avez pas défini de PKGCHK_CONF dans votre mk.conf vous devez le préciser en lançant la commande : (Vous prenez au choix une des deux méthodes.)

# PKGCHK_CONF=/usr/pkgsrc/pkgchk_list.conf pkg_chk -uas

Ou

# pkg_chk -C /usr/pkgsrc/pkgchk_list.conf -uas

Maintenant vous n'avez plus qu'à attendre la construction de tous les paquets qui une fois que ce sera fini seront dans /usr/packages/All.

Sortir du chroot

Une fois fini, on sort du chroot sandbox et on peut le démonter :

# exit
# /usr/sandbox/sandbox umount
Mise à jour des packages

N'oubliez pas que si vous n'avez pas défini de PACKAGES ou PKGCHK_CONF dans votre mk.conf vous devez préciser l'accès à ces deux

# pkg_chk -P /usr/packages/ -C /usr/pkgsrc/pkgchk_list.conf -uab

N'oubliez pas que cette commande se lance hors du chroot, sur le vrai système.

Résumé

Voilà c'est fini. Si vous désirez réitérer l'opération en résumé ce sera :

1. Génération du pkgchk_list.conf (pkg_chk -g)
2. Montage de la sandbox (/usr/sandbox/sandbox mount)
3. Chroot de la sandbox (/usr/sandbox/sandbox chroot)
4. Création (pkg_chk -uas)
5. Sortir du chroot (exit)
6. Mise à jour (pkg_chk -uab)

Astuce pour un serveur

Alors si vous avez un serveur à la maison je peux vous proposer quelque chose d'assez convivial, moi personnellement je mets /usr/pkgsrc en nfs pour éviter que toutes mes machines sur NetBSD aient besoin de remettre à jour leur arbre, du coup un seul est en commun.

Créer un point de montage nfs pour /usr/pkgsrc et /usr/packages

Sur le serveur éditez le fichier /etc/exports (il n'existe pas) et ajoutez :

/usr/pkgsrc /usr/packages -ro -network 192.168.1.0/24 -mask 255.255.255.0

Vous aurez besoin des services, éditez le /etc/rc.conf :

rpcbind=YES     # The rcpbind daemon.
mountd=YES      # The NFS mount requets service.
nfs_server=YES  # The NFS server.
lockd=YES       # NFS file locking daemon.
statd=YES       # Host status monitoring daemon.
Éditer le /etc/fstab sur chaque machine

Sur chaque machine, on ajoute dans le /etc/fstab. Pensez à changer le 192.168.1.20 pour être en accord avec votre serveur.

192.168.1.20:/usr/pkgsrc/ /usr/pkgsrc nfs ro,nodev,nosuid,nocoredump,noauto
192.168.1.20:/usr/packages /usr/packages nfs ro,nodev,nosuid,nocoredump,noauto

Puis montez les répertoires :

# mkdir /usr/packages /usr/pkgsrc
# mount /usr/packages /usr/pkgsrc
Éditer le /etc/mk.conf pour laisser pkgsrc intact

Ensuite, comme j'envoie /usr/pkgsrc en read-only on va modifier le mk.conf pour tout créer en dehors de celui ci.

# Settings for pkg_chk stuff.
PKGCHK_CONF= /usr/pkgsrc/pkgchk_mangue.conf
PKGCHK_UPDATE_CONF= /tmp/pkgchk_update.conf

WRKOBJDIR= /usr/tmp       # Set the pkgsrc objdir to /usr/tmp.
DISTDIR= /usr/distfiles   # Set the pkgsrc distfiles to /usr/distfiles.
PACKAGES= /usr/packages   # Set the pkgsrc packages to /usr/packages.
Envoyer les pkgchk_list.conf sur le serveur

Maintenant l'idée est d'envoyer le fichier contenant les packages installé de chaque machine sur le serveur :

Machine1 # pkg_chk -C pkgchk_mangue.conf -g
Machine2 # pkg_chk -C pkgchk_fraise.conf -g

On envoie ensuite ces fichiers sur le serveur, puis dans /usr/pkgsrc. Après avec la méthode expliquée au dessus, on génère les packages manquants ou obsolètes qui seront donc fabriqués dans /usr/packages/All qui celui ci est monté en NFS, du coup accessible sur toutes les machines.

Mise à jour de chaque machine

Maintenant comme /usr/packages est monté en NFS, on a plus qu'à exécuter pkg_chk pour mettre à jour sur chaque machine :

Machine1 # pkg_chk -P /usr/packages/All -C /usr/pkgsrc/pkgchk_mangue -uab
Machine2 # pkg_chk -P /usr/packages/All -C /usr/pkgsrc/pkgchk_fraise -uab
Gérer des différentes options pour une machine à l'autre

À l'heure où j'écris ces lignes je viens de résoudre un problème de taille, en effet j'avais mis en option par défaut -x11 -dri et d'autre encore afin de limiter les dépendances inutiles liées à X.org vu que c'était pour le serveur. Du coup par mégarde et en oubliant que j'avais mis ces options j'ai lancé la compilation de modular-xorg-server pour l'ordinateur de bureau et là évidemment sans l'option dri modular-xorg-server ne fournit pas dri.h et du coup impossible de compiler xf86-video-ati. Voici alors une solution qui vous permettra de compiler pour les machines différents.

Tout d'abord il faudrait diviser le /usr/packages en différentes parties, et oui si vous mettez des options différentes par exemple pour mplayer et que vous voulez le compiler pour une autre machine avec des options en plus pkg_chk verra le paquet binaire disponible et ne cherchera pas à le construire c'est pourquoi il faut utiliser un répertoire de packages différent.

Modification du /etc/mk.conf

Pour cela ajoutez ceci dans votre /etc/mk.conf :

On parle bien sûr du /etc/mk.conf qui concerne la sandbox.

.ifdef(MANGUE)
PKG_DEFAULT_OPTIONS= -bash -esound -arts -qt -kde -gnome -pulseaudio -cups inet6 dri x11
PACKAGES= /usr/mangue/packages
PKGCHK_CONF= /usr/pkgsrc/pkgchk_mangue.conf
.endif

.ifdef(ABRICOT)
PKG_DEFAULT_OPTIONS= -x11 -esound -bash -arts -qt -kde -gnome -gtk -cups -dri -gstreamer
PACKAGES= /usr/abricot/packages
PKGCHK_CONF= /usr/pkgsrc/pkgchk_abricot.conf
.endif
Création des packages obsolètes ou manquants

Maintenant, une fois bien installé dans votre sandbox il ne vous reste qu'à faire

# MANGUE=1 pkg_chk -uas

et/ou

# ABRICOT=1 pkg_chk -uas

Et vous retrouverez dans /usr/mangue/packages/All et /usr/abricot/packages/All tous les paquets manquant ou obsolètes.

Astuce : export en NFS

Ajout des répertoires de packages dans le fichier /etc/exports.

/usr/mangue/packages /usr/abricot/packages -ro -network 192.168.1.0/24 -mask 255.255.255.0

On monte le répertoire sur la machine destinée à être mise à jour :

# mount -t nfs 192.168.1.20:/usr/mangue/packages/ /usr/packages/
# PKG_PATH=/usr/packages pkg_chk -uab
 
howto/majpkg.txt · Dernière modification: 2010/03/10 08:15 (édition externe)
Derniers changements · Afficher le texte source · Connexion