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 à
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
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 (voir Installation du réseau USB). 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.
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.
pour produire le fichier .ipk correctement formé et vérifié. Il ne reste plus qu'à l'envoyer dans le Zaurus pour le tester.mkipkg dist
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) :
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.# à 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
Il faut maintenant mettre à jour la base de paquets soit en ligne de commande
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.ipkg update
Vos remarques et commentaires...
bonjour,
je bosse sur angstrom etc sur beagle board
je cherche a creer facielemnt un fichier ipk, juste pour qui lance sous midori un site internet
il y a juste un icone et un repertoire que serait le bureau
un truc aussi simple comment je fais
merci d avance
Publier un nouveau commentaire