Artisan Numérique

/système/paquets/ipk/zaurus/ Comprendre les paquets IPK

ipkg est le gestionnaire de package utilisé sur toutes les ROM que j'ai eues entre les mains. C'est une version light de dpkg à ce que j'en ai compris (je ne suis pas sous debian). techniquement ce sont des archives tgz qui contiennent elles-mêmes des archives tgz :)

Philosophie de base

Comme tous les systèmes d'installation de logiciels dans le monde *nix, ipkg est bas sur un système de paquets et de sources. Les paquets sont des fichiers archive qui contiennent les binaires à installer pour une application donnée. Généralement dans le nom d'un tel fichier est indiqué le nom de l'application, son numéro de version, l'architecture pour laquelle elle a été compilée et éventuellement une notion de sous-paquet.

Dans le monde Zaurus, les paquets sont des fichiers .ipk. Sans rentrer dans le détail de leur structure, ce sont basiquement des archives tar compressées. Si l'on prend l'exemple d'abiword, son paquet ipk sera par exemple nommé abiword-plugins_2.4.5_armv5tel.ipk. abiword pour le nom de l'application, 2.4.5 pour sa version et armv5tel pour indiquer que ce paquet est compilé pour un processeur ARM (et marchera donc difficilement sur un PC :-)

C'est le paquet "principal" d'AbiWord, celui qui contient le coeur de l'application. Mais il peut y avoir aussi des sous-paquets qui dépendent du paquet principal, par exemple abiword-plugins-wikipedia_2.4.5_armv5tel.ipk qui est le plugin wikipedia d'AbiWord 2.4.5.

Le concept de dépendance a son importance car si les paquets sont bien faits (les miens le sont rarement ;-) ils contiennent une série d'informations qui indique s'ils dépendent d'un autre paquet. Ainsi, lorsque vous installez un logiciel A qui dépend de B qui lui-même dépend de C, l'installateur va télécharger les 3 paquets et les installer. Avouez que c'est un peu plus pratique que les installations à la mode Windows... La question que l'on se pose alors c'est "où l'installateur va chercher B et C" ? C'est là qu'interviennent les sources (les feeds en langage Zaurus).

Une feed est un dossier local ou distant contennant de nombreux paquets .ipk et un fichier nommé Packages. Ce fichier est en quelque sorte le botin de la feed, il contient la liste de tous les paquets .ipkg disponibles dans ce répertoire. Ainsi, il est facile pour l'installateur, une fois que nous lui avons proprement indiqué le chemin d'une feed, de télécharger ce fichier en premier lieu pour lui servir d'index. C'est grâce à lui qu'il est capable de résourdre les dépendances manquantes. Vous pouvez vous convaincre de l'existence de ce fichier "caché" en allant directement le regarder dans une feed standard de pdaXrom b121.

Bien évidemment, un installateur digne de ce nom est capable de connaître un nombre illimité de sources différentes. Et s'il est très bien fait (ce qui n'est pas le cas d'ipkg ;-), il est capable de mettre à jour votre système avec les versions les plus récentes.

En bref, pour notre Zaurus, ipkg doit être configuré pour y ajouter toutes les sources/feed dont nous avons besoin. Ce qui n'est pas le cas lorsque pdaXrom vient d'être installé, malheureusement...

Paramétrage de ipkg

Même s'il existe un frontal graphique à ipkg, il est formateur de savoir l'utiliser en ligne de commande pour en comprendre le fonctionnement. Et la première chose qui va donc nous intéresser est de modifier la liste des feeds pour ajouter des sources nouvelles ou simplement réparer les sources éronnées.

Le fichier de configuration d'ipkg est /etc/ipkg.conf. Prenez votre éditeur de texte préféré (vi évidement ;-) et regardez à quoi il ressemble. Vous verrez deux sections distinctes. Tout d'abord la liste des feeds. Une ligne par source au format suivant :

src NOM URL

Le prefix src indique que ce qui suit est une feed. NOM est n'importe quel nom de votre choix, tant qu'il est utilisé une et une seule fois, par exemple maSource. URL est l'adresse du dossier contenant les fichiers .ipk et le fameux fichier Packages (voir plus haut). Comme je le disais, la feed peut être locale, en ce cas l'URL est de la forme http://un.site.web/dossier/feed ou local, en écrivant file:///chemin/vers/ma/feed/locale. Ce qui nous donne les deux exemples suivants, le premier est la feed standard de pdaXrom pour la béta 121 modèle CX00, le second une feed locale sur ma carte compact flash :

src pdaXrom http://www.pdaxrom.org/download/1.1.0r121/Zaurus-Cxx00/feed
src maFeed  file:///mnt/cf/maFeed

Une fois que les feeds sont configurées, nous pouvons regarder la deuxième section d'ipkg.conf concernant les destinations. En effet, la commande ipkg installe par défaut les applications à la racine. Mais pour des raisons évidentes de place, il est parfois intéressant de stoquer les grosses applications (kdepimpe, firefox, etc..) sur une carte SD par exemple. Le format de chaque ligne est le suivant :

dest NOM CHEMIN

Le prefix dest indique que ce qui suit est une destination d'installation. NOM est n'importe quel nom de votre choix, comme pour les feeds. Attention cependant, autant prendre un nom facile à taper car vous l'utiliserez à chaque fois que vous voulez installer quelque chose sur cette destination. CHEMIN est quant à lui le chemin local (interne au Zaurus) où ipkg doit installer le binaire. Cela peut être un autre dossier de la racine (ex. /opt pour les possesseurs de disque dur), une carte SD (/mnt/SD/mesInstallations), etc...

Une fois les modifications effectuées, vous pouvez sauver le fichier ipkg.conf et mettre à jour la base des paquets par la commande :

ipkg update

L'utilitaire va alors télécharger chaque fichier Packages de chaque feed que vous lui avez indiquée. Ensuite pour installer une application la syntaxe est la suivante :

ipkg -dest DESTINATION install PAQUET

Si l'argument -dest DESTINATION est ommis, c'est la première destination du fichier ipkg.conf qui sera utilisée (généralement la /). PAQUET quant à lui est le nom du paquet ipk à installer, sans numéro de version, architecture et .ipk à la fin. Par exemple pour installer AbiWord sur la carte SD :

ipkg -dest SD install abiword

Fonctionnement d'ipkg

Lorsque vous lancez un ipkg update, l'ensemble des fichiers Packages de chaque feed lue par ipkg est sauvée sous le nom de la feed que vous avez indiquée via /etc/ipkg.conf dans le dossier /usr/lib/ipkg/lists.

Quant vous lancez une installation, ipkg, écrit une entrée dans le fichier /usr/lib/ipkg/status indiquant le nom du paquet et la mention not-installed. C'est intéressant à savoir car si vous arrêtez une installation en cours de route (ou si vous essayer d'installer un paquet qui n'existe pas), cette entrée est conservée et du coup ipkg vous redemande à chaque appel s'il doit retenter l'installation. S'il s'agit d'une erreur, il suffit au préalable de modifier le fichier /usr/lib/ipkg/status et d'enlever les enregistrements marqués not-installer. C'est le contenu de ce fichier qui est lu lorsque vous tapez ipkg status.

Ensuite ipkg va écrire ses fichiers dans un dossier temporaire tmp placé en dessous du dossier de destination. Par exemple en /home/tmp (pour une destination par défaut) ou /mnt/sd/tmp (pour la destination SD). C'est important à savoir lorsqu'une install plante et que l'on doit virer les packets téléchargés et non installés.

Lorsque vous installez dans une destination qui n'est pas la racine, ipkg va tricher avec Linux en créant un lien symbolique entre le fichier réel (par exemple /mnt/car/usr/bin/monApplication) et le dossier où Linux s'attend à trouver un tel fichier (/usr/bin).

Enfin, une fois l'installation terminée, la liste, par paquet, des fichiers installés est stockée par ipkg dans le dossier /usr/lib/ipkg/infos sous le nom nom_paquet.list. Par exemple pour abiword, sera crée un fichier /usr/lib/ipkg/infos/abiword.list. Il va aussi mettre à jour le fichier /usr/lib/ipkg/status en remplaçant not-installed par installed.

Utilisation de frontal graphique qpkg

ipkg est un outil en ligne de commande qui dispose d'un frontal graphique nommé qpkg. Cet outil permet visuellement d'obtenir la liste des paquets disponibles, de rajouter des feeds et de faire des mises à jour.

Pour plus de confort, il est aussi possible d'utiliser qpkg) via SSH avec redirection X11. Pratique pour voir les paquets en plein écran et se balader avec la roulette ;-)

Créer son propre paquet IPK

Pour distribuer notre magnifique binaire fraîchement compilée un peu de packaging s'impose. Il nous faut donc le mettre dans un fichier .ipk.

Structure des fichiers ipk

Un fichiers .ipk est une simple archives tar compressée par gzip qui contient elle-même 2 autres archives : data.tar.gz et control.tar.gz.

Le fichier data.tar.gz contient les fichiers à décompresser dans le Zaurus, à partir de la racine. Dans notre cas, il contiendra de tous les fichiers contenus dans le dossier dist que nous avons créé par make install.

Le fichier control.tar.gz peut contenir quatre scripts et deux fichiers de contrôles.

Les scripts sont optionnels et seront lancés au court de la vie du paquet :

preinst Exécuté avant la décompression postinst Exécuté après la décompression prerm Exécuté avant la désinstallation postrm Exécuté après la désinstallation

Les deux fichiers sont de contrôle quant à eux :

control Fichier obligatoire contenant la description du package. Dans le cas de xinetd, ce serait :

Package: xinetd<strong> (Le nom du paquet)</strong>
Installed-Size: 332K <strong>(La taille une fois installé)</strong>
Filename: ./xinetd_2.3.14_arm.ipk<strong> (Le nom du fichier ipk)</strong>
Version: 2.3.14 <strong>(La version du paquet)</strong>
Depends: <strong>(Les éventuelles paquets dont dépends ce paquet)</strong>
Priority: optional <strong>(Je n'en sais rien du tout)</strong>
Section: system <strong>(La catégorie du paquet)</strong>
Maintainer: Mukti <strong>(La personne en charge de la mise à jour de ce paquet)</strong>
Architecture: arm <strong>(L'architecture de ce paquet, ARM pour le Zaurus)</strong>
Description: xinetd has access control mechanisms, extensive logging capabilities, 
the ability to make services available based on time, can place limits on the number of 
servers that can be started, and has deployable defence mechanisms to protect against port 
scanners, among other things.

conffiles Optionnel. Une liste de fichier ne devant pas être écrasée lors d'une mise à jour

Préparation de la distribution

Tout d'abord ne pas oublier que les Zaurus n'ont pas de ressources illimitées. Un des premiers travaux à faire dans le dossier dist est d'enlever tout ce qui ne sert "à rien" : documentations, exemples, tests, etc... jusqu'à obtenir quelque chose de minimum.

Une fois ceci fait, il faut créer dans dist un dossier CONTROL qui va contenir l'ensemble des fichiers de contrôle dont nous avons parlé plus haut et donc, au minimum, le fichier control. Pensez à bien renseigner ce fichier et y indiquer les dépendances avec d'autres paquets.

Création de l'ipk

Le meilleur moyen pour fabriquer rapidement un fichier .ipk est d'utiliser l'utilitaire mkipkg fourni avec le cross-compiler.

mkipkg dist

pour produire le fichier .ipk correctement formé et vérifié. Il ne reste plus qu'à l'envoyer dans le Zaurus pour le tester.

Mettre de l'ordre dans les dépots

ipkg est l'outil utilisé pour installer des paquets sur pdaXrom. C'est aussi lui qui est utilisé par qpkg, sa version graphique. Or, quelles que soient les versions de pdaXrom, le fichier de configuration d'ipkg est faux. Il faut donc commencer par le remettre en place...

Pour cela, en tant que root, utilisez Office/Leafpad ou plus simple vi et ouvrez le fichier /etc/ipkg.conf que vous remplacerez par le contenu suivant (décommentez ce qui correspond à votre version) :

# à décommenter si vous êtes en béta 3
# src main http://mail.pdaxrom.org/download/1.1.0beta3/Zaurus-Cxx00/feed/
# src 7x0 http://mail.pdaxrom.org/contrib/1.1.0beta3/Zaurus-7x0-860/feed/

# à décommenter si vous êtes en béta 3
# src main  http://mail.pdaxrom.org/download/1.1.0beta4/Zaurus-Cxx00/feed/
# src karmaLab http://www.karma-lab.net/zaurus
# src old http://mail.pdaxrom.org/download/1.1.0beta1/Zaurus-C1000-C3100/feed/

# à décommenter si vous êtes en béta 121
# src karmaLab http://www.karma-lab.net/zaurus/stable
# src karmaLab-lab http://www.karma-lab.net/zaurus/not-tested
# src main  http://www.pdaxrom.org/download/1.1.0r121/Zaurus-Cxx00/feed
# src other  http://www.pdaxrom.org/download/1.1.0r121/Zaurus-7x0-860/feed
# src old http://mail.pdaxrom.org/download/1.1.0beta1/Zaurus-C1000-C3100/feed
# src beta4 http://mail.pdaxrom.org/download/1.1.0beta4/Zaurus-7x0-860/new/feed


dest root /
dest cf /mnt/cf
dest sd /mnt/card
dest net /mnt/net
dest user /mnt/user
dest ide /mnt/ide
dest ide2 /mnt/ide2
dest ide3 /mnt/ide3
dest usbstorage /mnt/usbstorage
dest tmpinst /home/tmp/ipkg/inst

Sauvez puis fermez leafPad. Cette opération donne les bonnes sources de paquets à ipkg en ajoutant les deux sources de paquets de la béta 2.

Il faut maintenant mettre à jour la base de paquets soit en ligne de commande

ipkg update

soit via System Tools/Package Manager et pressez le bouton update (le 2ième). Au bout d'un temps, les descriptions de paquet seront téléchargées.