Packages - Solaris
Utilisation des packages avant Solaris 11
Présentation
Comme la plupart des unix actuels, Solaris utilise un système de package pour installer les applications. Ce système est spécifique à Solaris. Il est identique sûr Solaris 8, 9 et 10. Il est bien sur également possible d'installer un package avec la méthode classique du tarball.
Jusqu'à la version 10, Solaris ne sait pas gérer les dépendances. Mais elles sont gérées dans OpenSolaris depuis plusieurs années et sont enfin gérées depuis Solaris 11.
Les packages peuvent être au format "normal" (répertoire au nom du package avec tous les fichiers dedans) ou au format "stream" (un unique fichier qui contient l'ensemble des fichiers du package – une sorte de tar).
Visualisation
- Lister les packages installés : pkginfo |more
- Infos sur un package (par exemple SUNWman) : pkginfo SUNWman
- Infos en version longue : pkginfo –l SUNWman
- Infos sur un package "stream" : pkginfo –d SUNWchase
- Infos sur un package contenu dans un cd : aller dans le répertoire et taper pkginfo –d.
- Liste détaillée des packages installés (utile pour retrouver un programme qui n'est pas dans le PATH) : grep programme /var/sadm/install/contents
Installer un package
Au format stream
pkgadd –d SUNWtruc
Au format normal
Aller dans le répertoire qui contient le répertoire du package
pkgadd –d . SUNWmachin
Supprimer un package
pkgrm SUNWbidule
Vérifier
- pkgchk SUNWtruc => vérifie s'il y a eu des modifs dans les fichiers du package. Ne renvoie rien si c'est ok.
- pkgchk –v SUNWtruc => liste les fichiers du package
- pkgchk –p /etc/shadown => vérifie si les attributs du fichier ont changé
- pkgchk –l –p /usr/bin/showrev => affiche des infos sur le fichier
Récupérer des packages sur le web
Il existe de nombreux programmes qui ne sont pas disponibles sur les dvd, mais qui ont été packagés pour Solaris. Il y en a énormément sur les deux sites web suivants :
Utilisation des packages depuis Solaris 11
[En cours]
Création de packages Solaris
La création de packages sous Solaris est relativement simple. Les étapes sont :
- installer le programme ou les fichiers qu’on veut empaqueter
- créer un fichier "pkginfo" qui contient des infos sur le nom du package, l'auteur, etc.
- créer un fichier "prototype" qui contient la liste de tous les fichiers et répertoires à inclure, ainsi que la liste éventuelle des scripts à exécuter pendant l'installation
- créer le package avec pkgmk
- le transformer au format stream avec pkgtrans
Voyons maintenant dans le détail.
Pour créer un package, il faut que le programme à packager soit déjà installé sur le serveur de création. On peut donc l'installer à partir des sources, ou on peut simplement déposer des fichiers aux endroits désirés.
Ensuite, on va créer un répertoire quelconque pour la construction du package, par exemple /var/tmp/package/.
# mkdir /var/tmp/package # cd /var/tmp/package
Puis on va créer un fichier "pkginfo" qui contient les infos suivantes (à adapter) :
# vi pkginfo PKG="TLTocsagent" NAME="OCS Inventory NG Agent" DESC="OCS Inventory NG Agent - Packaged by Tlt - based on Unix Unified Agent version 1.1.2.1" ARCH="sparc" VERSION="1.0" CATEGORY="application" VENDOR="Tlt" EMAIL=" fred@tlt.fr" BASEDIR="/" CLASSES="none"
La variable BASEDIR correspond au répertoire de base du package. Si tous les fichiers sont dans /usr/local, il est plus logique de mettre /usr/local plutôt que de laisser /.
Il faut également créer le fichier "prototype" qui va contenir la liste des répertoires, sous-répertoires et fichiers à inclure dans le package. Dans le cas d'un programme installé depuis un tarball qui contient beaucoup de fichiers, il peut être intéressant de faire un find. Ensuite, il faut éditer le fichier pour rajouter le type (d pour directory ou f pour file), les droits et le propriétaire. On obtient alors un fichier qui ressemble à :
bash-3.00# cat prototype i pkginfo=./pkginfo i postinstall=./set_crontab.sh d none etc 0755 root sys d none etc/ocsinventory-agent 0755 root root f none etc/ocsinventory-agent/ocsinventory-agent.cfg 0644 root root d none opt 0755 root sys d none opt/ocs 0755 root root f none opt/ocs/ocsinventory-agent.bin 0755 root root
Les lignes qui commencent par "i" sont des liens vers des fichiers. Il existe plusieurs types de liens :
- i pkginfo[=fichier] : lien vers le fichier qui contient les informations sur le package. Si on ne précise pas le nom du fichier, il cherche par défaut le fichier pkginfo
- i checkinstall[=fichier] : lien vers le script checkinstall. C'est un script lancé à l'installation avec le compte "nobody". On peut l'utiliser pour vérifier des dépendances et éventuellement quitter proprement pkgadd. Il faut vérifier que le user "nobody" ait bien les droits de faire ce que vous voulez. Ce script est lancé sans demande de confirmation.
- i preinstall[=fichier] : lien vers le script preinstall, qui est lancé au début de l'installation. Ce script est lancé avec les droits root. Une confirmation est demandée avant de le lancer.
- i postinstall[=fichier] : lien vers le script postinstall, qui est lancé après l'installation. Ce script est lancé avec les droits root. Une confirmation est demandée avant de le lancer.
- i preremove[=fichier] : lien vers le script preremove, qui est lancé avant la désinstallation. Ce script est lancé avec les droits root. Une confirmation est demandée avant de le lancer.
- i postremove[=fichier] : lien vers le script postremvoe, qui est lancé après la désinstallation. Ce script est lancé avec les droits root. Une confirmation est demandée avant de le lancer.
Important : les scripts sont automatiquement joués par le shell sh, même si on précise ksh ou bash dans le shebang,. Il faut donc faire attention à bien faire un script compatible sh (attention aux exports de variables, par exemple).
Dans cet exemple, on utilise un script de postinstall. Ce script sert à créer une crontab pour root. Pour plus de clarté, il ne s'appelle pas postinstall, mais set_crontab.sh. Voici son contenu :
bash-3.00# cat set_crontab.sh #!/usr/bin/bash crontab -l > /tmp/crontab.tmp hh=`bash -c 'hhh=$[ $RANDOM %24 ] ; echo $hhh'` mm=`bash -c 'mmm=$[ $RANDOM %59 ] ; echo $mmm'` export hh export mm echo "$mm $hh * * * /opt/ocs/ocsinventory-agent.bin --lazy > /dev/null 2>&1" >> /tmp/crontab.tmp crontab /tmp/crontab.tmp
Maintenant que tout est prêt, on va passer à la creation du package avec pkgmk.
pkgmk -r /
L'option "-r" sert à indiquer le répertoire racine. Il doit avoir la même valeur que la variable BASEDIR du fichier pkginfo.
Les fichiers du package sont créés dans /var/spool/pkg/, dans un répertoire qui a le nom de la variable PKG du fichier pkginfo.
On va alors le transformer au format "stream" pour qu'il soit sous la forme d'un fichier unique. Puis on le compresse. Pkgtrans va afficher la liste des packages trouvés dans /var/spool/pkg/ et demander lesquels transformer ; il suffit de répondre à sa question.
# pkgtrans -s /var/spool/pkg/ /var/tmp/package/TLTocsagent-1.0-sol10-sparc # gzip /var/tmp/package/TLTocsagent-1.0-sol10-sparc
L'option "–s" sert à indiquer la source ; ensuite on met le nom du fichier de destination. La version de solaris, l'architecture processeur et la version du package n'étant pas automatiquement ajoutée au nom du fichier, il est fortement recommandé de le rajouter à la main.
Et ça y est, notre package est disponible ici : /var/tmp/package/TLTocsagent-1.0-sol10-sparc.gz. On peut l'installer comme n'importe quel package stream.