|
|
(6 versions intermédiaires par 4 utilisateurs non affichées) |
Ligne 1 : |
Ligne 1 : |
| Ce petit memento comporte 5 parties: <br /><br />1) Fabrication d'un paquet élémentaire (vikings) <br />2) Fabrication d'un paquet plus compliqué avec compilation (cacheproc) <br />3) Exemple d'un paquet de scripts de mise à jour <br />4) Le rétroportage vite fait, bien ou mal fait <br />5) ./configure;make;make install et paquet debian... <br />6)Recompilation<br />7) Fabrication directe.<br /><br />'''Les sources et les résultats de ces paquets se trouve sur <br />deb http://boisson.homeip.net/sarge/ ./ <br />deb http://boisson.homeip.net/source ./ <br />'''<br /><br /><u>'''1) Un exemple très simple: vikings'''</u><br /><br />'''On ne travaille PAS sous root'''<br /><br />Ce paquet contient une arborescence /usr/games/lost et un script /usr/games/vik. Les fichiers sont tout prêts et n'ont pas besoin de préparation. <br /><br />- faire un répertoire /tmp/vikings-1.0 <br />- Y mettre vik et le répertoire lost <br />- Faire | | == Présentation == |
| | Ce petit memento comporte 5 parties: |
|
| |
|
| <center>
| | # Fabrication d'un paquet élémentaire (vikings) |
| | # Fabrication d'un paquet plus compliqué avec compilation (cacheproc) |
| | # Exemple d'un paquet de scripts de mise à jour |
| | # Le rétroportage vite fait, bien ou mal fait |
| | # ./configure;make;make install et paquet debian... |
| | # Recompilation |
| | # Fabrication directe. |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />$ cd /tmp <br />$ cd vikings-1.0/ <br />$ dh_make
| |
| |}
| |
|
| |
|
| </center> | | '''Les sources et les résultats de ces paquets se trouvent sur'''<br /> |
| | '''deb http://boisson.homeip.net/sarge/ ./'''<br /> |
| | '''deb http://boisson.homeip.net/source ./'''<br /> |
|
| |
|
| <br />dh_make pose la question de savoir si c'est un paquet simple (oui), multiple, librairie ou module noyau. Il crée un répertoire debian et un répertoire /tmp/vikings-1.0.orig permettant de faire le fichier .diff.gz (les paquets sources contiennet en général les sources initiaux, un fichier .diff rajoutant l'arborescence et les patchs debian et un fichier .dsc décrivant le paquet). ''A ce stade, il est important de noter que seules des modifications de textes sont permises. Si un binaire est modifié dans le paquet source, il est nécessaire de supprimer le répertoire /tmp/vikings-1.0.orig, les sources seront alors composés d'un fichier .tar.gz et d'un fichier .dsc (pas de diff.gz),''<br />Puis viennent les éditions
| | == Un exemple très simple : vikings == |
|
| |
|
| <center>
| | '''On ne travaille PAS sous root''' |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | Ce paquet contient une arborescence /usr/games/lost et un script /usr/games/vik. Les fichiers sont tout prêts et n'ont pas besoin de préparation. |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />$ emacs debian/control
| |
| |}
| |
|
| |
|
| </center>
| | * Faire un répertoire /tmp/vikings-1.0 |
| | * Y mettre vik et le répertoire lost |
| | * Faire |
|
| |
|
| <br />Mettre à jour les champs Description, et éventuellement Depends. Ici, le paquet dépend de dosbox donc remplacer
| |
|
| |
|
| <center> | | <pre> |
| | $ cd /tmp |
| | $ cd vikings-1.0/ |
| | $ dh_make |
| | </pre> |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />Depends: ${shlibs:Depends}, ${misc:Depends}
| |
| |}
| |
|
| |
|
| </center>
| | dh_make pose la question de savoir si c'est un paquet simple (oui), multiple, librairie ou module noyau. |
| | |
| | Il crée un répertoire debian et un répertoire /tmp/vikings-1.0.orig permettant de faire le fichier .diff.gz (les paquets sources contiennent en général les sources initiaux, un fichier .diff rajoutant l'arborescence et les patchs debian et un fichier .dsc décrivant le paquet). |
|
| |
|
| <br />par | | ''A ce stade, il est important de noter que seules des modifications de textes sont permises. Si un binaire est modifié dans le paquet source, il est nécessaire de supprimer le répertoire /tmp/vikings-1.0.orig, les sources seront alors composées d'un fichier .tar.gz et d'un fichier .dsc (pas de diff.gz),''<br /> |
|
| |
|
| <center>
| | Puis viennent les éditions |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />Depends: dosbox
| |
| |}
| |
|
| |
|
| </center> | | <pre> |
| | $ emacs debian/control |
| | </pre> |
|
| |
|
| <br />(la syntaxe est paquet, paquet, ...) <br />Faire
| |
|
| |
|
| <center>
| | Mettre à jour les champs Description, et éventuellement Depends. Ici, le paquet dépend de dosbox donc remplacer |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />$ emacs debian/rules
| |
| |}
| |
|
| |
|
| </center> | | <pre> |
| | Depends: ${shlibs:Depends}, ${misc:Depends} |
| | </pre> |
|
| |
|
| <br />Ce fichier est essentiel car contenant les instructions permettant de faire le paquet.Ici, il n'y a pas de Makefile donc virer ou commenter les lignes contenant $(MAKE), puis remplacer la ligne
| |
|
| |
|
| <center>
| | par |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br /><br /> $(MAKE) install DESTDIR=$(CURDIR)/debian/vikings
| |
| |}
| |
|
| |
|
| </center> | | <pre> |
| | Depends: dosbox |
| | </pre> |
|
| |
|
| <br />par
| |
|
| |
|
| <center> | | (la syntaxe est paquet, paquet, ...)<br /> |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | Faire |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br /> cp -dpRf vik lost $(CURDIR)/debian/vikings/usr/games
| |
| |}
| |
|
| |
|
| </center>
| |
|
| |
|
| <br />''Le répertoire de travail est /tmp/vikings-1.0=CURDIR, $(CURDIR)/debian/vikings contient l'arborescence du paquet à venir''. Il est parfois bon de faire au préalable | | <pre> |
| | $ emacs debian/rules |
| | </pre> |
|
| |
|
| <center>
| |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | Ce fichier est essentiel car il contient les instructions permettant de faire le paquet. Ici, il n'y a pas de Makefile donc virer ou commenter les lignes contenant $(MAKE), puis remplacer la ligne |
| |
| |
| '''Code:''' | |
| |-
| |
| |
| |
| <br /> mkdir -p $(CURDIR)/debian/vikings/usr/games <br /> cp -dpRf vik lost $(CURDIR)/debian/vikings/usr/games
| |
| |}
| |
|
| |
|
| </center>
| |
|
| |
|
| <br />Pour créer le répertoire. Une autre méthode plus simple consiste à déclarer le répertoire dans debian/dirs | | <pre> |
| | $(MAKE) install DESTDIR=$(CURDIR)/debian/vikings |
| | </pre> |
|
| |
|
| <center>
| |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | par |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />$ emacs debian/dirs
| |
| |}
| |
|
| |
|
| </center>
| |
|
| |
|
| <br />(Y mettre usr/games et virer le reste). Faire | | <pre> |
| | cp -dpRf vik lost $(CURDIR)/debian/vikings/usr/games |
| | </pre> |
|
| |
|
| <center>
| |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | ''Le répertoire de travail est /tmp/vikings-1.0=CURDIR, $(CURDIR)/debian/vikings contient l'arborescence du paquet à venir''. Il est parfois bon de faire au préalable |
| |
| | |
| '''Code:'''
| | |
| |-
| | <pre> |
| |
| | mkdir -p $(CURDIR)/debian/vikings/usr/games |
| | cp -dpRf vik lost $(CURDIR)/debian/vikings/usr/games |
| | </pre> |
| | |
| | |
| | Pour créer le répertoire, une autre méthode plus simple consiste à déclarer le répertoire dans debian/dirs |
| | |
| | |
| | <pre> |
| | $ emacs debian/dirs |
| | </pre> |
| | |
| | |
| | (Y mettre usr/games et virer le reste). Faire |
| | |
| | |
| | <pre> |
| $ emacs debian/copyright | | $ emacs debian/copyright |
| |}
| | </pre> |
| | |
| | |
| | pour y mettre la licence. Ici j'ai complété par <br /> |
| | «It was downloaded from abandonnia». Faire de même pour README.debian. <br /> |
| | Ces fichiers debian/README.debian et debian/copyright se retrouvent toujours et sont copiés sur /usr/share/doc/<paquet>/. Usuellement, on rajoute un fichier README de doc. |
| | |
| | |
| | Faire enfin |
| | |
| | <pre> |
| | $ fakeroot dpkg-buildpackage -us -uc |
| | </pre> |
| | |
| | |
| | qui fabrique les paquets sources et le .deb. <br /> |
| | Supposons que damned, faute de frappe et le paquet plante. Dans ce cas, repartir de sources propres: |
| | |
| | |
| | <pre> |
| | $ cd .. |
| | $ rm -Rf vikings-1.0/ |
| | $ dpkg-source -x vikings_1.0-1.dsc |
| | $ cd vikings-1.0/ |
| | $ emacs [le fichier fautif (Makefile ou debian/rules souvent)] |
| | $ fakeroot dpkg-buildpackage -us -uc |
| | </pre> |
| | |
| | |
| | Le paquet vikings_1.0-1_i386.deb est créé dans la racine. |
| | |
| | == Un deuxième exemple: cacheproc == |
| | |
| | cacheproc est un petit programme recherchant des processus cachés, il est écrit en camllight. Il se compose de |
| | |
| | <pre> |
| | -rw-r--r-- 1 francois src 2474 2004-01-19 22:08 chercheprocess.ml |
| | -rw-r--r-- 1 francois src 707 2004-01-19 22:22 Makefile |
| | -rw-r--r-- 1 francois src 1450 2004-01-19 22:32 README |
| | -rw-r--r-- 1 francois src 1936 2004-01-19 22:08 regarde.ml |
| | </pre> |
| | |
| | On procède comme ci dessus (dh_make, etc), l'idéal étant de modifier le moins possible debian/rules en utilisant le Makefile.<br /> |
| | README est un fichier sommaire de docs. Je le copie sur debian/README.debian (ce qui est une mauvaise idée mais bon, c'était un de mes premiers paquets)<br /> |
| | a) le fichier debian/control<br /> |
| | Outre les rubriques usuelles, rajouter camllight dans le Build-Depends: |
| | |
| | <pre> |
| | Build-Depends: debhelper (>> 3.0.0), camllight |
| | </pre> |
| | |
| | ''(J'oublie tout le temps, dsl)''<br /> |
| | b) mettre usr/bin dans debian/dirs (c'est là où seront les binaires) <br /> |
| | c) Dans debian/rules mettre |
| | |
| | <pre> |
| | $(MAKE) all |
| | </pre> |
| | |
| | au lieu de $(MAKE) dans le build-stamp et commenter le dh_strip (les objets caml supporte mal le strip (=compression de l'exe)).<br /> |
| | Reste donc à faire le Makefile. J'utilise un Makefile «générique» que je modifie à la demande. Il contient |
| | |
| | <pre> |
| | #!/usr/bin/make |
| | prefix = /usr |
| | exec_prefix = ${prefix} |
| | srcdir = . |
| | |
| | bindir = ${exec_prefix}/bin |
| | DESTDIR= |
| | |
| | INSTALL_LIST_BIN=regarde chercheprocess |
| | |
| | distclean: clean |
| | |
| | clean: |
| | -rm *.zi *.zo *~ |
| | for i in $(INSTALL_LIST_BIN); do if test -f $$i; then rm $$i; fi; done |
| | |
| | install: |
| | for i in $(DESTDIR)$(bindir); do mkdir -p $$i && test -d $$i && test -w $$i; done |
| | for i in $(INSTALL_LIST_BIN); do if test -f $$i; then cp $$i $(DESTDIR)$(bindir); else cp $(srcdir)/$$i $(DESTDIR)$(bindir); fi; done |
| | |
| | |
| | all: chercheprocess regarde |
| | |
| | chercheprocess: chercheprocess.ml |
| | camlc -custom -o chercheprocess -lunix chercheprocess.ml |
| | |
| | regarde: regarde.ml |
| | camlc -custom -o regarde -lunix regarde.ml |
| | </pre> |
| | |
| | Les lignes importantes sont INSTALL_LIST_BIN=.. donnant la liste des binaires à obtenir. Les cibles sont clean, all et install.<br /> |
| | '''clean''' nettoie les fichiers objets (noter le -rm et non rm qui évite l'erreur si il n'y a pas de fichier objet, ''on peut se demander pourquoi je n'ai pas fait pareil pour les binaires mais bon...'')<br /> |
| | '''install''' installe les binaires dans le répertoire $(DESTDIR)$(bindir), donc ici on crée le répertoire, on vérifie qu'il y a les bons droits, puis on y copie les binaires de la liste INSTALL_LIST_BIN (à noter que dans mon script, j'ai prévu le cas où il y a un répertoire source séparé).<br /> |
| | '''all''' renvoie sur 2 cibles, une par binaire. Chaque cible fabrique le binaire correspondant.<br /> |
| | Le reste est comme dans 1) |
| | |
| | == Un paquet de mis à jour pour gérer un parc de machines. == |
| | |
| | Ce genre de paquet est très utile pour répercuter des patchs sur un lot de machines (salle) toutes indentiques. |
| | |
| | Pour cela on utilise un script /etc/init.d/maj contenant dans la rubrique start |
| | |
| | <pre> |
| | echo -n "Starting $DESC: $NAME" |
| | cp /etc/apt/sources.list.lycee /etc/apt/sources.list |
| | apt-get update |
| | apt-get install -y lycee |
| | cp /etc/apt/sources.list.vrai /etc/apt/sources.list |
| | echo "." |
| | # rajout éventuel de compléments |
| | </pre> |
| | |
| | |
| | puis on fait |
| | |
| | <pre> |
| | $ chmod +x /etc/init.d/maj |
| | $ update-rc.d maj defaults 99 |
| | </pre> |
| | |
| | /etc/apt/sources.list.lycee <br /> |
| | contient une ligne <br /> |
| | deb file:/home/ftp/ / <br /> |
| | qui est ici un dépot partagé via nfs. |
| | |
| | |
| | Le paquet pris en exemple est celui qui me permet de gérer les salles du lycée où je travaille. A l'heure actuelle il contient |
| | |
| | <pre> |
| | tux.xpm autoexec.bat init.reg lomount maj Makefile repareW98 sources.list.lycee |
| | </pre> |
| | |
| | |
| | Il faut savoir que les logiciels de chimie utilisés par les élèves tournent sur un Windows98 dans un qemu (les machines sont des amd64). Comme prévus les patchs concernent surtout windows98. On y trouve un nouvel autoexex.bat, un fichier init.reg à mettre dans la racine du disque virtuel windows. Pour cela un utilitaire lomount (dont j'ai fini par faire un paquet) permet de monter des partitions d'une image d'un disque hda par exemple. repareW98 est un script qui remplace l'image du disque virtuel par une image neuve et y applique les patches. Quand l'élève plante le Windows (en gros toutes les deux heures), il clique sur une icone «repareWindows», et relance un windows tout neuf. Il a perdu tout son boulot ce qui a l'avantage de l'éduquer sur Windows. Voilà pour l'explication du contexte. |
| | |
| | |
| | Le paquet à faire doit donc à chaque installation installer la nouvelle version de maj, appliquer d'éventuels patchs et installer les fichiers ci dessus dans les bonnes places.<br /> |
| | Comme précédemment, l'installation des fichiers se fait par le Makefile: |
| | |
| | <pre> |
| | #!/usr/bin/make |
| | prefix = /usr |
| | exec_prefix = ${prefix} |
| | srcdir = . |
| | |
| | bindir = ${exec_prefix}/bin |
| | DESTDIR= |
| | |
| | |
| | distclean: clean |
| | |
| | clean: |
| | |
| | install: |
| | mkdir -p $(DESTDIR)/etc/init.d |
| | mkdir -p $(DESTDIR)/etc/apt/ |
| | mkdir -p $(DESTDIR)/usr/local/bin |
| | mkdir -p $(DESTDIR)/usr/local/windows |
| | cp -dpf maj $(DESTDIR)/etc/apt |
| | cp sources.list.lycee $(DESTDIR)/etc/apt/ |
| | cp lomount $(DESTDIR)/usr/local/bin |
| | cp repareW98 $(DESTDIR)/usr/local/bin |
| | cp tux.xpm $(DESTDIR)/var/lycee |
| | chmod +x $(DESTDIR)/usr/local/bin/* |
| | cp init.reg autoexec.bat $(DESTDIR)/usr/local/windows |
| | </pre> |
| | |
| | |
|
| |
|
| </center>
| | Pour le fichier debian/rules, il n'y a pas de fabrication de binaires (donc commenter le $(MAKE) de build-stamp). Le reste est le script par défaut. |
|
| |
|
| <br />pour y mettre la licence. Ici j'ai complété par <br />«It was downloaded from abandonnia». Faire de même pour README.debian <br />Ces fichiers debian/README.debian et debian/copyright se retrouvent toujours et sont copiés sur /usr/share/doc/<paquet>/. Usuellement, on rajoute un fichier README de doc. <br /><br />Faire enfin
| |
|
| |
|
| <center>
| | Le fichier debian/control contient les paquets rajoutés sur les machines au fur et à mesure de leur évolution: |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | <pre> |
| |
| | Source: lycee |
| '''Code:'''
| | [.....] |
| |-
| | Package: lycee |
| |
| | Architecture: any |
| <br />$ fakeroot dpkg-buildpackage -us -uc | | Depends: ${shlibs:Depends}, ${misc:Depends}, camllight (>= 0.75-2), ntpdate, fingerd, sun-j2re1.4, tuareg-mode |
| |}
| | Description: paquet de MAJ Lycee |
| | Mise à jour incrémentale des systèmes Linux |
| | </pre> |
|
| |
|
| </center>
| |
|
| |
|
| <br />qui fabrique les paquets sources et le .deb. <br />Supposons que damned, faute de frappe et le paquet plante, dans ce cas, repartir de sources propres:
| | Ici j'ai rajouté camllight, le mode tuareg pour caml, un java, ntpdate pour synchroniser les machines et fingerd pour savoir qui travaille et quand sur les machines (c'est mon coté bigbrother qu'il faut bien assumer). |
|
| |
|
| <center>
| |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | Enfin, le fichier debian/postinst exécute les différents patchs éventuels: |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />$ cd .. <br />$ rm -Rf vikings-1.0/ <br />$ dpkg-source -x vikings_1.0-1.dsc <br />$ cd vikings-1.0/ <br />$ emacs [le fichier fautif (Makefile ou debian/rules souvent)] <br />$ fakeroot dpkg-buildpackage -us -uc
| |
| |}
| |
|
| |
|
| </center> | | <pre> |
| | ... |
| | case "$1" in |
| | configure) |
| | # remplacement de maj |
| | cp /etc/apt/maj /etc/init.d |
| | chmod +x /etc/init.d/maj |
| | update-rc.d maj defaults 99 |
| | # exécution patch1 |
| | if [ ! -f /etc/lycee/patch1 ] ; then |
| | mkdir -p /etc/lycee/ |
| | touch /etc/lycee/patch1 |
| | # là mettre les commandes du patch1, ici remplacement logo |
| | cd /etc/X11/xdm/pixmaps |
| | rm tux.xpm |
| | ln -s /var/lycee/tux.xpm |
| | echo "Patch1 appliqué" |
|
| |
|
| <br />Le paquet vikings_1.0-1_i386.deb est cré dans la racine. <br /><br /><u>'''2) Un deuxième exemple: cacheproc'''</u><br /><br />cacheproc est un petit programme recherchant des processus cachés, il est écrit en camllight. Il se compose de
| | fi |
| | ;; |
| | abort-upgrade|abort-remove|abort-deconfigure) |
|
| |
|
| <center>
| | ;; |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | *) |
| |
| | echo "postinst called with unknown argument \`$1'" >&2 |
| '''Code:'''
| | exit 1 |
| |-
| | ;; |
| |
| | esac |
| <br />-rw-r--r-- 1 francois src 2474 2004-01-19 22:08 chercheprocess.ml <br />-rw-r--r-- 1 francois src 707 2004-01-19 22:22 Makefile <br />-rw-r--r-- 1 francois src 1450 2004-01-19 22:32 README <br />-rw-r--r-- 1 francois src 1936 2004-01-19 22:08 regarde.ml | | ... |
| |}
| | </pre> |
|
| |
|
| </center>
| |
|
| |
|
| <br />On procède comme ci dessus (dh_make, etc), l'idéal étant de modifier le moins possible debian/rules en utilisant le Makefile. <br />README est un fichier sommaire de docs. Je le copie sur debian/README.debian (ce qui est une mauvaise idée mais bon, c'était un de mes premiers paquets) <br />a) le fichier debian/control <br />Outre les rubriques usuelles, rajouter camllight dans le Build-Depends:
| |
|
| |
|
| <center>
| | Pour faire une mise à jour sur les machines, il suffit donc de mettre à jour le dépot local et tout se fera automatiquement. Cela a remplacé avantageusement le rapatriement automatique de scripts. Ça montre bien la puissance du paquetage .deb qui permet vraiment de tout faire très simplement |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | == Fabrication rapide de backports. == |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />Build-Depends: debhelper (>> 3.0.0), camllight
| |
| |}
| |
|
| |
|
| </center>
| | Le problème s'est posé pour moi pour clamav avant la mise en place de debian/volatile (que je n'utilise pas du coup). clamav fait des maj régulièrement et mon serveur était sous potato puis est maintenant sous woody (je n'ai pas le temps ni le vrai désir de passer sous sarge). Il s'agit donc de faire des backports de clamav. Il se trouve que Stephen Gran a fait un paquet très propre (en tout cas la version 0.80), lors des mise à jour je procède comme suit: |
|
| |
|
| ''(J'oublie tout le temps, dsl)''<br />b) mettre usr/bin dans debian/dirs (c'est là où seront les binaires) <br />c) Dans debian/rules mettre
| |
|
| |
|
| <center> | | Mettons que je parte de la version 0.80 <br /> |
| | 0) Récupération de l'arborescence debian de ce paquet <br /> |
| | 1) rapatriement de l'archive source clamav nouvelle <br /> |
| | 2) dépilage de cette archive et renommage du répertoire en clamav-0.80 <br /> |
| | 3) Exécution de |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | <pre> |
| |
| | $ dch -v backport-0.88-4 |
| '''Code:'''
| | </pre> |
| |-
| |
| |
| |
| <br /> $(MAKE) all | |
| |}
| |
|
| |
|
| </center>
| |
|
| |
|
| au lieu de $(MAKE) dans le build-stamp et commenter le dh_strip (les objets caml supporte mal le strip (=compression de l'exe)). <br />Reste donc à faire le Makefile. J'utilise un Makefile «générique» que je modifie à la demande. Il contient
| | Le paquet sera dans la version backport-0.88 <br />4) Compilation |
|
| |
|
| <center> | | <pre> |
| | $ cd ../clamav-0.88-4 |
| | $ fakeroot dpkg-buildpackage -us -uc |
| | </pre> |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />#!/usr/bin/make <br />prefix = /usr <br />exec_prefix = ${prefix} <br />srcdir = . <br /><br />bindir = ${exec_prefix}/bin <br />DESTDIR= <br /><br />INSTALL_LIST_BIN=regarde chercheprocess <br /><br />distclean: clean <br /><br />clean: <br /> -rm *.zi *.zo *~ <br /> for i in $(INSTALL_LIST_BIN); do if test -f $$i; then rm $$i; fi; done <br /><br />install: <br /> for i in $(DESTDIR)$(bindir); do mkdir -p $$i && test -d $$i && test -w $$i; done <br /> for i in $(INSTALL_LIST_BIN); do if test -f $$i; then cp $$i $(DESTDIR)$(bindir); else cp $(srcdir)/$$i $(DESTDIR)$(bindir); fi; done <br /><br /><br />all: chercheprocess regarde <br /><br />chercheprocess: chercheprocess.ml <br /> camlc -custom -o chercheprocess -lunix chercheprocess.ml <br /><br />regarde: regarde.ml <br /> camlc -custom -o regarde -lunix regarde.ml
| |
| |}
| |
|
| |
|
| </center>
| | C'est fini, les nouveaux paquets sont faits. |
|
| |
|
| <br />Les lignes importantes sont INSTALL_LIST_BIN=.. donnant la liste des binaires à obtenir. Les cibles sont clean, all et install. <br />'''clean''' nettoie les fichiers objets (noter le -rm et non rm qui évite l'erreur si il n'y a pas de fichier objet, ''on peut se demander pourquoi je n'ai pas fait pareil pour les binaires mais bon...'') <br />'''install'''installe les binaires dans le répertoire $(DESTDIR)$(bindir), donc ici on crée le répertoire, on vérifie qu'il y a les bons droits, puis on y copie les binaires de la liste INSTALL_LIST_BIN (à noter que dans mon script, j'ai prévu le cas où il y a un répertoire source séparé). <br />'''all''' renvoie sur 2 cibles, une par binaire. Chaque cible fabrique le binaire correspondant. <br />Le reste est comme dans 1) <br /><br /><u>'''3) Un paquet de mis à jour pour gérer un parc de machines.'''</u><br /><br />Ce genre de paquet est très utile pour répercuter des patchs sur un lot de machines (salle) toutes indentiques. <br /><br />Pour cela on utilise un script /etc/init.d/maj contenant dans la rubrique start
| |
|
| |
|
| <center>
| | Voici les commandes tapés pour le passage de 0.88-2 à 0.88-4: |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | <pre> |
| |
| | cd |
| '''Code:'''
| | wget http://ovh.dl.sourceforge.net/sourceforge/clamav/clamav-0.88.4.tar.gz |
| |-
| | ls clamav* |
| |
| | mv clamav-0.88/ clamav-backport-0.88-2 |
| <br /> echo -n "Starting $DESC: $NAME" <br /> cp /etc/apt/sources.list.lycee /etc/apt/sources.list <br /> apt-get update <br /> apt-get install -y lycee <br /> cp /etc/apt/sources.list.vrai /etc/apt/sources.list <br /> echo "." <br /> # rajout éventuel de compléments
| | tar xzf clamav-0.88.4.tar.gz |
| |}
| | tar tzf clamav-0.88.4.tar.gz |
| | mv clamav-0.88.4 clamav-0.88 |
| | cd clamav-0.88 |
| | cp -dpRf ../clamav-backport-0.88-2/debian/ . |
| | cd .. |
| | cd clamav-0.88 |
| | dch -v backport-0.88-4 |
| | fakeroot dpkg-buildpackage -us -uc |
| | cd .. |
| | ls |
| | ls -ltr |
| | ls *0.88-4*deb |
| | scp *0.88-4*deb cerbere:/home/ftp/sarge/sarge |
| | </pre> |
|
| |
|
| </center>
| |
|
| |
|
| <br /><br />puis on fait
| | C'est tout. Les sources obtenus me permettent de faire les paquets pour woody, sarge amd64, etc. |
|
| |
|
| <center>
| |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | Il peut y avoir quelques soucis nécessitant des retouches de debian/rules |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />$ chmod +x /etc/init.d/maj <br />$ update-rc.d maj defaults 99
| |
| |}
| |
|
| |
|
| </center>
| |
|
| |
|
| <br />/etc/apt/sources.list.lycee <br />contient une ligne <br />deb file:/home/ftp/ / <br />qui est ici un dépot partagé via nfs. <br /><br />Le paquet pris en exemple est celui qui me permet de gérer les salles du lycée où je travaille. A l'heure actuelle il contient
| | == Fabrication d'un paquet via checkinstall. == |
|
| |
|
| <center> | | attention, il y a un bug dans la version de checkinstall de lenny, le checkinstall n'existe pas chez etch, on pourra le trouver ici <br /> |
| | '''deb http://boisson.homeip.net/debian etch divers'''<br /> |
| | Pour contourner le bug, lancer checkinstall avec l'option --fstrans=no <br /> |
| | Sinon, checkinstall ne peut construire correctement le paquet si l'installation se fait avec un programme binaire statique. |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />tux.xpm autoexec.bat init.reg lomount maj Makefile repareW98 sources.list.lycee
| |
| |}
| |
|
| |
|
| </center>
| | Parfois, la méthode dh_make conduit à modifier le Makefile, on ne comprend plus rien et on a juste envie de faire un paquet et pas les paquets sources. Un petit génie a inventer checkinstall (par encore parfait mais bon)... |
|
| |
|
| <br />Il faut savoir que les logiciels de chimie utilisés par les élèves tournent sur un Windows98 dans un qemu (les machines sont des amd64). Comme prévus les patchs concernent surtout windows98. On y trouve un nouvel autoexex.bat, un fichier init.reg à mettre dans la racine du disque virtuel windows. Pour cela un utilitaire lomount (dont j'ai fini par faire un paquet) permet de monter des partitions d'une image d'un disque hda par exemple. repareW98 est un script qui remplace l'image du disque virtuel par une image neuve et y applique les patches. Quand l'élève plante le Windows (en gros toutes les deux heures), il clique sur une icone «repareWindows», et relance un windows tout neuf. Il a perdu tout son boulot ce qui a l'avantage de l'éduquer sur Windows. Voilà pour l'explication du contexte. <br /><br />Le paquet à faire doit donc à chaque installation installer la nouvelle version de maj, appliquer d'éventuels patchs et installer les fichiers ci dessus dans les bonnes places. <br />Comme précédemment, l'installation des fichiers se fait par le Makefile:
| |
|
| |
|
| <center> | | Exemple scilab version 4 dont j'avais besoin en urgence (ci dessous de mémoire, c'est reconstitué).<br /> |
| | Chargement rapide des sources, configuration classique: |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | <pre> |
| |
| | $ cd scilab-4.0 |
| '''Code:'''
| | $ ./configure --prefix=/usr |
| |-
| | $ make all |
| |
| | </pre> |
| <br />#!/usr/bin/make <br />prefix = /usr <br />exec_prefix = ${prefix} <br />srcdir = . <br /><br />bindir = ${exec_prefix}/bin <br />DESTDIR= <br /><br /><br />distclean: clean <br /><br />clean: <br /><br />install: <br /> mkdir -p $(DESTDIR)/etc/init.d <br /> mkdir -p $(DESTDIR)/etc/apt/ <br /> mkdir -p $(DESTDIR)/usr/local/bin <br /> mkdir -p $(DESTDIR)/usr/local/windows <br /> cp -dpf maj $(DESTDIR)/etc/apt <br /> cp sources.list.lycee $(DESTDIR)/etc/apt/ <br /> cp lomount $(DESTDIR)/usr/local/bin <br /> cp repareW98 $(DESTDIR)/usr/local/bin <br /> cp tux.xpm $(DESTDIR)/var/lycee <br /> chmod +x $(DESTDIR)/usr/local/bin/* <br /> cp init.reg autoexec.bat $(DESTDIR)/usr/local/windows
| |
| |}
| |
|
| |
|
| </center>
| |
|
| |
|
| <br /><br />Pour le fichier debian/rules, il n'y a pas de fabrication de binaires (donc commenter le $(MAKE) de build-stamp). Le reste est le script par défaut. <br /><br />Le fichier debian/control contient les paquets rajoutés sur les machines au fur et à mesure de leur évolution:
| | bref, du classique.<br /> |
| | Là commence checkinstall: |
|
| |
|
| <center> | | <pre> |
| | $ su |
| | # checkinstall make install |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | checkinstall 1.5.3, Copyright 2001 Felipe Eduardo Sanchez Diaz Duran |
| |
| | This software is released under the GNU GPL. |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />Source: lycee <br />[.....] <br />Package: lycee <br />Architecture: any <br />Depends: ${shlibs:Depends}, ${misc:Depends}, camllight (>= 0.75-2), ntpdate, fingerd, sun-j2re1.4, tuareg-mode <br />Description: paquet de MAJ Lycee <br /> Mise à jour incrémentale des systèmes Linux
| |
| |}
| |
|
| |
|
| </center>
| |
|
| |
|
| <br /><br />Ici j'ai rajouté camllight, le mode tuareg pour caml, un java, ntpdate pour synchroniser les machines et fingerd pour savoir qui travaille et quand sur les machines (c'est mon coté bigbrother qu'il faut bien assumer). <br /><br /><br />Enfin, le fichier debian/postinst exécute les différents patchs éventuels:
| | The package documentation directory ./doc-pak does not exist. |
| | Should I create a default set of package docs? [y]: |
|
| |
|
| <center>
| | Preparing package documentation...OK |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | Installing with "make install"... |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />... <br />case "$1" in <br /> configure) <br /># remplacement de maj <br /> cp /etc/apt/maj /etc/init.d <br /> chmod +x /etc/init.d/maj <br /> update-rc.d maj defaults 99 <br /># exécution patch1 <br /> if [ ! -f /etc/lycee/patch1 ] ; then <br /> mkdir -p /etc/lycee/ <br /> touch /etc/lycee/patch1 <br /># là mettre les commandes du patch1, ici remplacement logo <br /> cd /etc/X11/xdm/pixmaps <br /> rm tux.xpm <br /> ln -s /var/lycee/tux.xpm <br /> echo "Patch1 appliqué" <br /><br /> fi <br /> ;; <br /> abort-upgrade|abort-remove|abort-deconfigure) <br /><br /> ;; <br /><br /> *) <br /> echo "postinst called with unknown argument \`$1'" >&2 <br /> exit 1 <br /> ;; <br />esac <br />...
| |
| |}
| |
|
| |
|
| </center>
| | ========================= Installation results =========================== |
|
| |
|
| <br /><br />Pour faire une mise à jour sur les machines, il suffit donc de mettre à jour le dépot local et tout se fera automatiquement. Cela a remplacé avantageusement le rapatriement automatique de scripts. Ça montre bien la puissance du paquetage .deb qui permet vraiment de tout faire très simplement <br /><br /><u>'''4) Fabrication rapide de backports.'''</u><br /><br />Le problème s'est posé pour moi pour clamav avant la mise en place de debian/volatile (que je n'utilise pas du coup). clamav fait des maj régulièrement et mon serveur était sous potato puis est maintenant sous woody (je n'ai pas le temps ni le vrai désir de passer sous sarge). Il s'agit donc de faire des backports de clamav. Il se trouve que Stephen Gran a fait un paquet très propre (en tout cas la version 0.80), lors des mise à jour je procède comme suit: <br /><br />Mettons que je parte de la version 0.80 <br />0) Récupération de l'arborescence debian de ce paquet <br />1) rapatriement de l'archive source clamav nouvelle <br />2) dépilage de cette archive et renommage du répertoire en clamav-0.80 <br />3) Exécution de
| | Copying documentation directory... |
| | [....] |
| | ======================== Installation succesful ========================== |
|
| |
|
| <center>
| | Copying files to the temporary directory...OK |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | Striping ELF binaries and libraries...OK |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />$ dch -v backport-0.88-4
| |
| |}
| |
|
| |
|
| </center>
| | Compressing man pages...OK |
|
| |
|
| <br />Le paquet sera dans la version backport-0.88 <br />4) Compilation
| | Building file list...OK |
|
| |
|
| <center>
| |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | Please write a description for the package. |
| |
| | End your description with an empty line or EOF. |
| '''Code:'''
| | >> |
| |-
| | </pre> |
| |
| |
| <br />$ cd ../clamav-0.88-4 <br />$ fakeroot dpkg-buildpackage -us -uc | |
| |}
| |
|
| |
|
| </center>
| |
|
| |
|
| <br /><br />C'est fini, les nouveaux paquets sont faits. <br /><br />Voici les commandes tapés pour le passage de 0.88-2 à 0.88-4:
| | là on tape la description du paquet suivi d'une ligne vide |
|
| |
|
| <center> | | <pre> |
| | >> Scilab version 4 du 9 juillet 2006 |
| | >> |
| | </pre> |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />cd <br />wget http://ovh.dl.sourceforge.net/sourceforge/clamav/clamav-0.88.4.tar.gz <br />ls clamav* <br />mv clamav-0.88/ clamav-backport-0.88-2 <br />tar xzf clamav-0.88.4.tar.gz <br />tar tzf clamav-0.88.4.tar.gz <br />mv clamav-0.88.4 clamav-0.88 <br />cd clamav-0.88 <br />cp -dpRf ../clamav-backport-0.88-2/debian/ . <br />cd .. <br />cd clamav-0.88 <br />dch -v backport-0.88-4 <br />fakeroot dpkg-buildpackage -us -uc <br />cd .. <br />ls <br />ls -ltr <br />ls *0.88-4*deb <br />scp *0.88-4*deb cerbere:/home/ftp/sarge/sarge
| |
| |}
| |
|
| |
|
| </center>
| | S'en suit les parties identifiant le paquet. On les remplit en tapant le numéro de la catégorie à modifier puis le texte correspondant. |
|
| |
|
| <br /><br />C'est tout. Les sources obtenus me permettent de faire les paquets pour woody, sarge amd64, etc. <br /><br />Il peut y avoir quelques soucis nécessitant des retouches de debian/rules <br /><br /><u>'''5) Fabrication d'un paquet via checkinstall.'''</u><br /><br />attention, il y a un bug dans la version de checkinstall de lenny, le checkinstall n'existe pas chez etch, on pourra le trouver ici <br />'''deb http://boisson.homeip.net/debian etch divers'''<br />Pour contourner le bug, lancer checkinstall avec l'option --fstrans=no <br />Sinon, checkinstall ne peut construire correctement le paquet si l'installation se fait avec un programme binaire statique.<br /><br />Parfois, la méthode dh_make conduit à modifier le Makefile, on ne comprend plus rien et on a juste envie de faire un paquet et pas les paquets sources. Un petit génie a inventer checkinstall (par encore parfait mais bon)... <br /><br />Exemple scilab version 4 dont j'avais besoin en urgence (ci dessous de mémoire, c'est reconstitué). <br />Chargement rapide des sources, configuration classique: | | <pre> |
| | This package will be built according to these values: |
| | le numéro et en remplissant |
| | 0 - Maintainer: [ [mailto:francois@boisson.homeip.net francois@chez.moi] ] |
| | 1 - Summary: [ Scilab version 4 du 9 juillet 2006 ] |
| | 2 - Name: [ scilab ] |
| | 3 - Version: [ 1.0 ] |
| | 4 - Release: [ 1 ] |
| | 5 - License: [ GPL ] |
| | 6 - Group: [ agreg ] |
| | 7 - Architecture: [ i386 ] |
| | 8 - Source location: [ scilab ] |
| | 9 - Alternate source location: [ ] |
|
| |
|
| <center>
| | Enter a number to change any of them or press ENTER to continue: |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | ***************************************** |
| |
| | **** Debian package creation selected *** |
| '''Code:'''
| | ***************************************** |
| |-
| |
| |
| |
| <br />$ cd scilab-4.0 <br />$ ./configure --prefix=/usr <br />$ make all
| |
| |}
| |
|
| |
|
| </center>
| | Building Debian package...OK |
|
| |
|
| <br />bref, du classique. <br />Là commence checkinstall:
| | Installing Debian package... |
|
| |
|
| <center>
| | Erasing temporary files...OK |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | Writing backup package...OK |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />$ su <br /># checkinstall make install <br /><br />checkinstall 1.5.3, Copyright 2001 Felipe Eduardo Sanchez Diaz Duran <br /> This software is released under the GNU GPL. <br /><br /><br />The package documentation directory ./doc-pak does not exist. <br />Should I create a default set of package docs? [y]: <br /><br />Preparing package documentation...OK <br /><br />Installing with "make install"... <br /><br />========================= Installation results =========================== <br /><br />Copying documentation directory... <br />[....] <br />======================== Installation succesful ========================== <br /><br />Copying files to the temporary directory...OK <br /><br />Striping ELF binaries and libraries...OK <br /><br />Compressing man pages...OK <br /><br />Building file list...OK <br /><br /><br />Please write a description for the package. <br />End your description with an empty line or EOF. <br />>>
| |
| |}
| |
|
| |
|
| </center>
| | Deleting temp dir...OK |
|
| |
|
| <br />là on tape la description du paquet suivi d'une ligne vide
| |
|
| |
|
| <center>
| | ********************************************************************** |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | Done. The new package has been installed and saved to |
| |
| | /tmp/scilab/scilab_4.0_i386.deb |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />>> Scilab version 4 du 9 juillet 2006 <br />>>
| |
| |}
| |
|
| |
|
| </center>
| | You can remove it from your system anytime using: |
|
| |
|
| <br />S'en suit les parties identifiant le paquet. On les remplit en tapant le numéro de la catégorie à modifier puis le texte correspondant.
| | dpkg -r scilab |
|
| |
|
| <center>
| | ********************************************************************** |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | # |
| |
| | </pre> |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />This package will be built according to these values: <br /> le numéro et en remplissant <br />0 - Maintainer: [ [mailto:francois@boisson.homeip.net francois@chez.moi] ] <br />1 - Summary: [ Scilab version 4 du 9 juillet 2006 ] <br />2 - Name: [ scilab ] <br />3 - Version: [ 1.0 ] <br />4 - Release: [ 1 ] <br />5 - License: [ GPL ] <br />6 - Group: [ agreg ] <br />7 - Architecture: [ i386 ] <br />8 - Source location: [ scilab ] <br />9 - Alternate source location: [ ] <br /><br />Enter a number to change any of them or press ENTER to continue: <br /><br />***************************************** <br />**** Debian package creation selected *** <br />***************************************** <br /><br />Building Debian package...OK <br /><br />Installing Debian package... <br /><br />Erasing temporary files...OK <br /><br />Writing backup package...OK <br /><br />Deleting temp dir...OK <br /><br /><br />********************************************************************** <br /><br /> Done. The new package has been installed and saved to <br /> /tmp/scilab/scilab_4.0_i386.deb <br /><br /> You can remove it from your system anytime using: <br /><br /> dpkg -r scilab <br /><br />********************************************************************** <br /><br />#
| |
| |}
| |
|
| |
|
| </center>
| |
|
| |
|
| <br /><br />Là on se dit c'est fini, eh ben non. checkinstall ne crée pas les dépendances. On peut les faire on modifiant les dépendances à la main. Pour cela, on utilisera le script suivant:
| |
|
| |
|
| <center>
| | Là on se dit c'est fini, eh ben non. checkinstall ne crée pas les dépendances. On peut les faire on modifiant les dépendances à la main. Pour cela, on utilisera le script suivant: |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | <pre> |
| |
| | /usr/local/bin/lsdepend: |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />/usr/local/bin/lsdepend: <br /><br />#!/bin/sh <br />find . -type f | xargs ldd 2> /dev/null | <br /> sed -e '1,$s/=.*//' | <br /> sed -e '1,$s/^ */dpkg -S /' | grep -v ":" | <br /> grep "\.so" | <br /> sort -u | sh | <br /> sed -e '1,$s/:.*//' | <br /> sort -u | <br /> sed -e '1,$s/^/dpkg -l | grep "^[a-zA-Z]\\{2\\} * /' | sed -e '1,$s/$/ "/' |sh | |
| |}
| |
|
| |
|
| </center> | | #!/bin/sh |
| | find . -type f | xargs ldd 2> /dev/null | |
| | sed -e '1,$s/=.*//' | |
| | sed -e '1,$s/^ */dpkg -S /' | grep -v ":" | |
| | grep "\.so" | |
| | sort -u | sh | |
| | sed -e '1,$s/:.*//' | |
| | sort -u | |
| | sed -e '1,$s/^/dpkg -l | grep "^[a-zA-Z]\\{2\\} * /' | sed -e '1,$s/$/ "/' |sh |
| | </pre> |
|
| |
|
| <br /><br />On fait donc tout d'abord l'extraction des fichiers du paquet dans un répertoire (ici gre).
| |
|
| |
|
| <center>
| | On fait donc tout d'abord l'extraction des fichiers du paquet dans un répertoire (ici gre). |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | <pre> |
| |
| | $ mkdir gre |
| '''Code:'''
| | $ cd gre |
| |-
| | $ dpkg-deb -e ../scilab_4.0_i386.deb |
| |
| | $ dpkg-deb -x ../scilab_4.0_i386.deb . |
| <br />$ mkdir gre <br />$ cd gre <br />$ dpkg-deb -e ../scilab_4.0_i386.deb <br />$ dpkg-deb -x ../scilab_4.0_i386.deb . | | </pre> |
| |}
| |
|
| |
|
| </center>
| |
|
| |
|
| <br />La troisième commande fabrique un répertoire DEBIAN contenant un seul fichier control contenant
| | La troisième commande fabrique un répertoire DEBIAN contenant un seul fichier control contenant |
|
| |
|
| <center> | | <pre> |
| | Package: scilab |
| | Priority: extra |
| | Section: agreg |
| | Installed-Size: 104436 |
| | Maintainer: [mailto:francois@boisson.homeip.net francois@chez.moi] |
| | Architecture: i386 |
| | Version: 4.0-1 |
| | Description: Scilab version 4 du 9 juillet 2006 |
| | </pre> |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />Package: scilab <br />Priority: extra <br />Section: agreg <br />Installed-Size: 104436 <br />Maintainer: [mailto:francois@boisson.homeip.net francois@chez.moi]<br />Architecture: i386 <br />Version: 4.0-1 <br />Description: Scilab version 4 du 9 juillet 2006
| |
| |}
| |
|
| |
|
| </center> | | (La quatrième commande déplie l'archive des fichiers du paquet)<br /> |
| | Pas de champ Depends dans ce fichier Control, donc de la pagaille et des déconvenues à prévoir. Pour cela on peut avoir une idée des paquets nécessaires avec le script lsdepend. Celui ci cherche les librairies appelées et donne la liste des paquets nécessaires. Ainsi ici, sachant que les bianires sont dans usr/lib/scilab-4.0/bin/ |
|
| |
|
| <br />(La quatrième commande déplie l'archive des fichiers du paquet) <br />Pas de champ Depends dans ce fichier Control, donc de la pagaille et des déconvenues à prévoir. Pour cela on peut avoir une idée des paquets nécessaires avec le script lsdepend. Celui ci cherche les librairies appelées et donne la liste des paquets nécessaires. Ainsi ici, sachant que les bianires sont dans usr/lib/scilab-4.0/bin/ | | <pre> |
| | $ cd /usr/lib/scilab-4.0/bin/ |
| | francois@totoche:/usr/lib/scilab-4.0/bin$ lsdepend |
| | ii libc6 2.3.2.ds1-22 GNU C Library: Shared libraries and Timezone |
| | ii libg2c0 3.3.5-13 Runtime library for GNU Fortran 77 applicati |
| | ii libgcc1 3.4.3-12 GCC support library |
| | ii libice6 4.3.0.dfsg.1-1 Inter-Client Exchange library |
| | ii libncurses5 5.4-4 Shared libraries for terminal handling |
| | ii libsm6 4.3.0.dfsg.1-1 X Window System Session Management library |
| | ii libx11-6 4.3.0.dfsg.1-1 X Window System protocol client library |
| | ii libxext6 4.3.0.dfsg.1-1 X Window System miscellaneous extension libr |
| | ii libxmu6 4.3.0.dfsg.1-1 X Window System miscellaneous utility librar |
| | ii libxpm4 4.3.0.dfsg.1-1 X pixmap library |
| | ii libxt6 4.3.0.dfsg.1-1 X Toolkit Intrinsics |
| | ii maple4 1.0-1 Paquet Maple4 |
| | ii tcl8.4 8.4.9-1 Tcl (the Tool Command Language) v8.4 - run-t |
| | ii tk8.4 8.4.9-1 Tk toolkit for Tcl and X11, v8.4 - run-time |
| | ii xaw3dg 1.5+E-8 Xaw3d widget set |
| | francois@totoche:/usr/lib/scilab-4.0/bin$ |
| | </pre> |
|
| |
|
| <center>
| |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | Le paquet maple4 est une hérésie non libre inutile (doublon) qu'on oublie, cela nous donne le champ Depends suivant: |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />$ cd /usr/lib/scilab-4.0/bin/ <br />francois@totoche:/usr/lib/scilab-4.0/bin$ lsdepend <br />ii libc6 2.3.2.ds1-22 GNU C Library: Shared libraries and Timezone <br />ii libg2c0 3.3.5-13 Runtime library for GNU Fortran 77 applicati <br />ii libgcc1 3.4.3-12 GCC support library <br />ii libice6 4.3.0.dfsg.1-1 Inter-Client Exchange library <br />ii libncurses5 5.4-4 Shared libraries for terminal handling <br />ii libsm6 4.3.0.dfsg.1-1 X Window System Session Management library <br />ii libx11-6 4.3.0.dfsg.1-1 X Window System protocol client library <br />ii libxext6 4.3.0.dfsg.1-1 X Window System miscellaneous extension libr <br />ii libxmu6 4.3.0.dfsg.1-1 X Window System miscellaneous utility librar <br />ii libxpm4 4.3.0.dfsg.1-1 X pixmap library <br />ii libxt6 4.3.0.dfsg.1-1 X Toolkit Intrinsics <br />ii maple4 1.0-1 Paquet Maple4 <br />ii tcl8.4 8.4.9-1 Tcl (the Tool Command Language) v8.4 - run-t <br />ii tk8.4 8.4.9-1 Tk toolkit for Tcl and X11, v8.4 - run-time <br />ii xaw3dg 1.5+E-8 Xaw3d widget set <br />francois@totoche:/usr/lib/scilab-4.0/bin$
| |
| |}
| |
|
| |
|
| </center> | | <pre> |
| | Depends: libc6, tk8.4, tcl8.4, xaw3dg, libxmu6, libxt6, libxext6, libsm6, libice6, libx11-6, libncurses5, libg2c0, libgcc1, libxpm4 |
| | </pre> |
|
| |
|
| <br />Le paquet maple4 est une hérésie non libre inutile (doublon) qu'on oublie, cela nous donne le champ Depends suivant:
| |
|
| |
|
| <center>
| | et le fichier DEBIAN/control suivant |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | <pre> |
| |
| | Package: scilab |
| '''Code:'''
| | Priority: extra |
| |-
| | Section: agreg |
| |
| | Installed-Size: 104436 |
| <br />Depends: libc6, tk8.4, tcl8.4, xaw3dg, libxmu6, libxt6, libxext6, libsm6, libice6, libx11-6, libncurses5, libg2c0, libgcc1, libxpm4
| | Maintainer: [mailto:francois@boisson.homeip.net francois@chez.moi] |
| |}
| | Architecture: i386 |
| | Depends: libc6, tk8.4, tcl8.4, xaw3dg, libxmu6, libxt6, libxext6, libsm6, libice6, libx11-6, libncurses5, libg2c0, libgcc1, libxpm4 |
| | Version: 4.0-1 |
| | Description: Scilab version 4 du 9 juillet 2006 |
| | </pre> |
|
| |
|
| </center>
| |
|
| |
|
| <br />et le fichier DEBIAN/control suivant
| | On peut éventuellement créer un fichier DEBIAN/postinst et DEBIAN/prerm si on veut éxécuter un script juste après l'installation ou un script avant la désinstallation. Il ne reste plus qu'à refaire le paquet: |
|
| |
|
| <center> | | <pre> |
| | $ cd .. |
| | $ dpkg-deb -b gre scilab_4.0_i386.deb |
| | dpkg-deb : construction du paquet « scilab » dans « scilab_4.0_i386.deb ». |
| | francois@totoche:/tmp$ |
| | </pre> |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />Package: scilab <br />Priority: extra <br />Section: agreg <br />Installed-Size: 104436 <br />Maintainer: [mailto:francois@boisson.homeip.net francois@chez.moi]<br />Architecture: i386 <br />Depends: libc6, tk8.4, tcl8.4, xaw3dg, libxmu6, libxt6, libxext6, libsm6, libice6, libx11-6, libncurses5, libg2c0, libgcc1, libxpm4 <br />Version: 4.0-1 <br />Description: Scilab version 4 du 9 juillet 2006
| |
| |}
| |
|
| |
|
| </center>
| | et voilà le beau paquet scilab avec ses dépendances (du moins on l'espère). Bien évidemment, c'est rustique comme méthode mais cela permet de dupliquer une installation facilement et cela constitue une alternative pratique et rapide à la méthode classique sans sombrer dans les méandres d'un debian/rules ne fonctionnant pas... |
|
| |
|
| <br /><br />On peut éventuellement créer un fichier DEBIAN/postinst et DEBIAN/prerm si on veut éxécuter un script juste après l'installation ou un script avant la désinstallation. Il ne reste plus qu'à refaire le paquet:
| |
|
| |
|
| <center>
| | == Recompilation == |
|
| |
|
| {| width="90%" cellspacing="1" cellpadding="3"
| | Pour le coup c'est très simple. Il suffit de charger les sources, modifier eventuellement les options et recompiler le paquet. Soit donc pour le paquet paquet-1.23-6_i386.deb |
| |
| |
| '''Code:'''
| |
| |-
| |
| |
| |
| <br />$ cd .. <br />$ dpkg-deb -b gre scilab_4.0_i386.deb <br />dpkg-deb : construction du paquet « scilab » dans « scilab_4.0_i386.deb ». <br />francois@totoche:/tmp$
| |
| |}
| |
|
| |
|
| </center> | | <pre> |
| | $ apt-get source paquet |
| | $ cd paquet-1.23 |
| | $ emacs debian/rules |
| | </pre> |
|
| |
|
| <br /><br />et voilà le beau paquet scilab avec ses dépendances (du moins on l'espère). Bien évidemment, c'est rustique comme méthode mais cela permet de dupliquer une installation facilement et cela constitue une alternative pratique et rapide à la méthode classique sans sombrer dans les méandres d'un debian/rules ne fonctionnant pas...
| | (là chercher les options, regarder pres de la cible configure_stamp: ou build_stamp: et les modifier) |
|
| |
|
| <br /><br />6) Recompilation | | <pre> |
| | $ fakeroot dpkg-buildpackage -b -uc |
| | $ cd .. |
| | $ ls *.deb |
| | </pre> |
|
| |
|
| Pour le coup c'est très simple. Il suffit de charger les sources, modifier eventuellement les options et recompiler le paquet. Soit donc pour le paquet paquet-1.23-6_i386.deb <br /><br />Code:<br />$ apt-get source paquet<br />$ cd paquet-1.23<br />$ emacs debian/rules <br /><br />(là chercher les options, regarder pres de la cible configure_stamp: ou build_stamp: et les modifier) <br /><br />Code:<br />$ fakeroot dpkg-buildpackage -b -uc<br />$ cd ..<br />$ ls *.deb<br /><br /><br />Le paquet est prêt.
| | Le paquet est prêt. |
|
| |
|
| <br />'''<u></u>'''
| |
|
| |
|
| '''<u>7) Fabrication directe.</u>'''
| | == Fabrication directe. == |
|
| |
|
| '''<u></u>'''<u></u>
| |
|
| |
|
| Un paquet peut être fait simplement. Pour cela | | Un paquet peut être fait simplement. Pour cela |
Ligne 519 : |
Ligne 643 : |
| * Préparer l'arborescence des fichiers composant le paquet dans un répertoire /tmp/paquet. | | * Préparer l'arborescence des fichiers composant le paquet dans un répertoire /tmp/paquet. |
| * Faire un répertoire /tmp/paquet/DEBIAN | | * Faire un répertoire /tmp/paquet/DEBIAN |
| * Y mettre dedans un fichier control de la forme<br />Package: nomdupaquet<br />Priority: optional<br />Section: x11<br />Installed-Size: 4023 (si le paquet fait 4023K environ)<br />Maintainer: Georges Sand <aurore.dupin@chopin.muses.fr><br />Architecture: all<br />Version: 1.0<br />Depends: xbase-clients<br />Description: Modifications de startx<br /> Lancement de X différent<br /> . | | * Y mettre dedans un fichier control de la forme |
| * Y mettre éventuellement un fichier '''postinst''' (éxécutable) pour les éventuels instructions à faire après l'installation. Dans le cas où un fichier d'un paquet est modifié (mettons startx ici) il est important de faire une «diversion», ce qui se fait par un fichier '''preinst '''<span>comme suit</span>:<br />set -e<br />case "$1" in<br /> install)<br /> dpkg-divert --package nomdupaquet --divert /usr/bin/startx.org --rename /usr/bin/startx<br /> dpkg-divert --package nomdupaquet --divert /usr/X11R6/bin/startx.org --rename /usr/X11R6/bin/startx<br /> ;;<br /> abort-upgrade)<br /> ;;<br /> upgrade)<br /> ;;<br /> *)<br /> echo "preinst called with unknown argument \`$1'" >&2<br /> exit 1<br /> ;;<br />esac<br />exit 0<br /><br />et bien sûr un fichier '''postrm'''<span> supprimant la diversion en cas de retrait du paquet:<br /><br />set -e<br />case "$1" in<br /> remove|purge)<br /> dpkg-divert --package xbase-agreg --rename --remove /usr/X11R6/bin/startx<br /> dpkg-divert --package xbase-agreg --rename --remove /usr/bin/startx<br /><br /> ;;<br /> upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)<br /> ;;<br /> *)<br /> echo "postrm called with unknown argument \`$1'" >&2<br /> exit 0<br />esac</span> | | |
| * <span>faire ensuite <br />$ cd /tmp/paquet<br />$ find . -type f | grep -v "^./DEBIAN" | md5sum > DEBIAN/md5sums<br />$ su<br /># chown -R root.root *<br /># dpkg-deb -b . ../nomdupaquet-1.0_all.deb<br /></span><br /><br /> | | <pre> |
| * <span>Le paquet est prêt.</span> | | Package: nomdupaquet |
| | Priority: optional |
| | Section: x11 |
| | Installed-Size: 4023 (si le paquet fait 4023K environ) |
| | Maintainer: Georges Sand <aurore.dupin@chopin.muses.fr> |
| | Architecture: all |
| | Version: 1.0 |
| | Depends: xbase-clients |
| | Description: Modifications de startx |
| | Lancement de X différent |
| | . |
| | </pre> |
| | |
| | * Y mettre éventuellement un fichier '''postinst''' (éxécutable) pour les éventuels instructions à faire après l'installation. Dans le cas où un fichier d'un paquet est modifié (mettons startx ici) il est important de faire une «diversion», ce qui se fait par un fichier '''preinst ''' comme suit: |
| | |
| | <pre> |
| | set -e |
| | case "$1" in |
| | install) |
| | dpkg-divert --package nomdupaquet --divert /usr/bin/startx.org --rename /usr/bin/startx |
| | dpkg-divert --package nomdupaquet --divert /usr/X11R6/bin/startx.org --rename /usr/X11R6/bin/startx |
| | ;; |
| | abort-upgrade) |
| | ;; |
| | upgrade) |
| | ;; |
| | *) |
| | echo "preinst called with unknown argument \`$1'" >&2 |
| | exit 1 |
| | ;; |
| | esac |
| | exit 0 |
| | </pre> |
| | |
| | |
| | et bien sûr un fichier '''postrm''' supprimant la diversion en cas de retrait du paquet: |
| | |
| | <pre> |
| | set -e |
| | case "$1" in |
| | remove|purge) |
| | dpkg-divert --package xbase-agreg --rename --remove /usr/X11R6/bin/startx |
| | dpkg-divert --package xbase-agreg --rename --remove /usr/bin/startx |
| | |
| | ;; |
| | upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) |
| | ;; |
| | *) |
| | echo "postrm called with unknown argument \`$1'" >&2 |
| | exit 0 |
| | esac |
| | </pre> |
| | |
| | * lancer ensuite la série de commandes suivante (nécessite d'avoir installé au préalable le paquet "fakeroot") : |
| | |
| | <pre> |
| | $ cd /tmp/paquet |
| | $ find . -type f | grep -v "^./DEBIAN" | md5sum > DEBIAN/md5sums |
| | $ fakeroot dpkg-deb -b . ../nomdupaquet-1.0_all.deb |
| | </pre> |
| | |
| | |
| | * Le paquet est prêt. |
| | |
| | [[Utilisateur:fran.b|François Boisson]] |
| | |
| | [[Category:Paquets]] |