Packages - Solaris

De UnixManiax
Aller à : navigation, rechercher


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 beaucoup sur les 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.