# Faire un paquet version complète

**URL:** <https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662>\
**Category:** Trucs et Astuces\
**Created:** [Février 20, 2016, 3:05 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662 "2016-02-20T15:05:58Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 3:05 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/1 "2016-02-20T15:05:58Z")

</div>

Ce petit memento comporte 6 parties:

1. Fabrication d’un paquet élémentaire (vikings)
2. Fabrication d’un paquet plus compliqué avec compilation (cacheproc)
3. Exemple d’un paquet de scripts de mise à jour
4. Le rétroportage vite fait, bien ou mal fait
5. ./configure;make;make install et paquet debian…
6. Recompilation d’un paquet
7. Fabrication directe d’un paquet

Les sources et les résultats de ces paquets se trouve sur  
deb [boisson.homeip.net/sarge/](http://boisson.homeip.net/sarge/) ./  
deb [boisson.homeip.net/debian](http://boisson.homeip.net/debian) etch divers  
deb [boisson.homeip.net/source](http://boisson.homeip.net/source) ./

Un backport de checkinstall se trouve pour etch (i386 et amd64) sur

deb [boisson.homeip.net/debian](http://boisson.homeip.net/debian) etch divers

1) Un exemple très simple: vikings

On ne travaille PAS sous root

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.

- faire un répertoire /tmp/vikings-1.0
- Y mettre vik et le répertoire lost
- Faire

```auto
$ cd /tmp
$ cd vikings-1.0/
$ dh_make
```

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),  
Puis viennent les éditions

```auto
$ emacs debian/control 
```

Mettre à jour les champs Description, et éventuellement Depends. Ici, le paquet dépend de dosbox donc remplacer

```auto
Depends: ${shlibs:Depends}, ${misc:Depends}
```

par

```auto
Depends: dosbox
```

(la syntaxe est paquet, paquet, …)  
Faire

```auto
$ emacs debian/rules 
```

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

```auto

        $(MAKE) install DESTDIR=$(CURDIR)/debian/vikings
```

par

```auto
        cp -dpRf vik lost $(CURDIR)/debian/vikings/usr/games
```

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

```auto
        mkdir -p $(CURDIR)/debian/vikings/usr/games
        cp -dpRf vik lost $(CURDIR)/debian/vikings/usr/games
```

Pour créer le répertoire. Une autre méthode plus simple consiste à déclarer le répertoire dans debian/dirs

```auto
$ emacs debian/dirs 
```

(Y mettre usr/games et virer le reste). Faire

```auto

```

pour y mettre la licence. Ici j’ai complété par  
«It was downloaded from abandonnia». Faire de même pour README.debian  
Ces fichiers debian/README.debian et debian/copyright se retrouvent toujours et sont copiés sur /usr/share/doc//. Usuellement, on rajoute un fichier README de doc.

Faire enfin

```auto
$ fakeroot dpkg-buildpackage -us -uc
```

qui fabrique les paquets sources et le .deb.  
Supposons que damned, faute de frappe et le paquet plante, dans ce cas, repartir de sources propres:

```auto
$ 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
```

Le paquet vikings\_1.0-1\_i386.deb est cré dans la racine.

2) Un deuxième exemple: cacheproc

cacheproc est un petit programme recherchant des processus cachés, il est écrit en camllight. Il se compose de

```auto
-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
```

On procède comme ci dessus (dh\_make, etc), l’idéal étant de modifier le moins possible debian/rules en utilisant le Makefile.  
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)  
a) le fichier debian/control  
Outre les rubriques usuelles, rajouter camllight dans le Build-Depends:

`
Build-Depends: debhelper (>> 3.0.0), camllight
` (J’oublie tout le temps, dsl)  
b) mettre usr/bin dans debian/dirs (c’est là où seront les binaires)  
c) Dans debian/rules mettre

`
       $(MAKE) all
` au lieu de $(MAKE) dans le build-stamp et commenter le dh\_strip (les objets caml supporte mal le strip (=compression de l’exe)).  
Reste donc à faire le Makefile. J’utilise un Makefile «générique» que je modifie à la demande. Il contient

```auto
#!/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
```

Les lignes importantes sont INSTALL\_LIST\_BIN=… donnant la liste des binaires à obtenir. Les cibles sont clean, all et install.  
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…)  
installinstalle 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é).  
all renvoie sur 2 cibles, une par binaire. Chaque cible fabrique le binaire correspondant.  
Le reste est comme dans 1)

3) Un paquet de mise à 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

```auto
        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
```

puis on fait

```auto
$ chmod +x /etc/init.d/maj
$ update-rc.d maj defaults 99
```

/etc/apt/sources.list.lycee  
contient une ligne  
deb file:/home/ftp/ /  
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

`
tux.xpm autoexec.bat init.reg lomount maj Makefile repareW98 sources.list.lycee `  
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.  
Comme précédemment, l’installation des fichiers se fait par le Makefile:

```auto
#!/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
```

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.

Le fichier debian/control contient les paquets rajoutés sur les machines au fur et à mesure de leur évolution:

```auto
Source: lycee
[.....]
Package: lycee
Architecture: any
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
```

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).

Enfin, le fichier debian/postinst exécute les différents patchs éventuels:

```auto
...
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é"

    fi
        ;;
    abort-upgrade|abort-remove|abort-deconfigure)

    ;;

    *)
        echo "postinst called with unknown argument \`$1'" >&2
        exit 1
    ;;
esac
...
```

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

[u]4) Fabrication rapide de backports.[/u]

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:

Mettons que je parte de la version 0.80  
0) Récupération de l’arborescence debian de ce paquet

1. rapatriement de l’archive source clamav nouvelle
2. dépilage de cette archive et renommage du répertoire en clamav-0.80
3. Exécution de

```auto
$ dch -v backport-0.88-4
```

Le paquet sera dans la version backport-0.88  
4) Compilation

```auto
$ cd ../clamav-0.88-4
$ fakeroot dpkg-buildpackage -us -uc
```

C’est fini, les nouveaux paquets sont faits.

Voici les commandes tapés pour le passage de 0.88-2 à 0.88-4:

```auto
cd
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
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
```

C’est tout. Les sources obtenus me permettent de faire les paquets pour woody, sarge amd64, etc.

Il peut y avoir quelques soucis nécessitant des retouches de debian/rules

5) Fabrication d’un paquet via checkinstall.

[edit: 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

deb [boisson.homeip.net/debian](http://boisson.homeip.net/debian) etch divers

Pour contourner le bug, lancer checkinstall avec l’option --fstrans=no   
]  
Sinon, checkinstall ne peut construire correctement le pe paquet si l’installation se fait avec un programme bianire statique.  
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)…

Exemple scilab version 4 dont j’avais besoin en urgence (ci dessous de mémoire, c’est reconstitué).  
Chargement rapide des sources, configuration classique:

```auto
$ cd scilab-4.0
$ ./configure --prefix=/usr
$ make all
```

bref, du classique.  
Là commence checkinstall:

```auto
$ su
# checkinstall make install

checkinstall 1.5.3, Copyright 2001 Felipe Eduardo Sanchez Diaz Duran
           This software is released under the GNU GPL.

The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs? [y]: 

Preparing package documentation...OK

Installing with "make install"...

========================= Installation results ===========================

Copying documentation directory...
[....]
======================== Installation succesful ==========================

Copying files to the temporary directory...OK

Striping ELF binaries and libraries...OK

Compressing man pages...OK

Building file list...OK

Please write a description for the package.
End your description with an empty line or EOF.
>> 
```

là on tape la description du paquet suivi d’une ligne vide

```auto
>> Scilab version 4 du 9 juillet 2006
>>
```

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.

```auto
This package will be built according to these values: 
 le numéro et en remplissant
0 - Maintainer: [francois@boisson.pas.de.spam.merci]
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: []

Enter a number to change any of them or press ENTER to continue: 

*****************************************
 ****Debian package creation selected***
 *****************************************

Building Debian package...OK

Installing Debian package...

Erasing temporary files...OK

Writing backup package...OK

Deleting temp dir...OK

**********************************************************************

 Done. The new package has been installed and saved to
 /tmp/scilab/scilab_4.0_i386.deb

 You can remove it from your system anytime using: 

      dpkg -r scilab

**********************************************************************

# 
```

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:

```auto
/usr/local/bin/lsdepend:

#!/bin/sh
find . -type f | xargs ldd 2> /dev/null | 
 sed -e '1,$s/=.*//' |
 sed -e '1,$s/^ */dpkg -S /' | grep -v ":" |
 sed -e '1,$s/ (.*$//' |
 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 
```

On fait donc tout d’abord l’extraction des fichiers du paquet dans un répertoire (ici gre).

```auto
$ mkdir gre
$ cd gre
$ dpkg-deb -e ../scilab_4.0_i386.deb
$ dpkg-deb -x ../scilab_4.0_i386.deb .
```

La troisième commande fabrique un répertoire DEBIAN contenant un seul fichier control contenant

```auto
Package: scilab
Priority: extra
Section: agreg
Installed-Size: 104436
Maintainer: francois@boisson.pas.de.spam.merci
Architecture: i386
Version: 4.0-1
Description: Scilab version 4 du 9 juillet 2006
```

(La quatrième commande déplie l’archive des fichiers du paquet)  
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/

```auto
$ 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$ 
```

Le paquet maple4 est une hérésie non libre inutile (doublon) qu’on oublie, cela nous donne le champ Depends suivant:

```auto
Depends: libc6, tk8.4, tcl8.4, xaw3dg, libxmu6, libxt6, libxext6, libsm6, libice6, libx11-6, libncurses5, libg2c0, libgcc1, libxpm4
```

et le fichier DEBIAN/control suivant

```auto
Package: scilab
Priority: extra
Section: agreg
Installed-Size: 104436
Maintainer: francois@boisson.pas.de.spam.merci
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
```

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:

```auto
$ 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$ 
```

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…

6) Recompilation

Pour le coup c’est très simple. Il suffit de charger les sources, modifier éventuellement les options et recompiler le paquet. Soit donc pour le paquet paquet-1.23-6\_i386.deb

[code]$ apt-get source paquet

# apt-get build-dep paquet

$ cd paquet-1.23  
$ emacs debian/rules[/code]  
(là cercher les optons, regarder près de la cible  
configure\_stamp:  
ou  
build\_stamp:  
et les modifier)

`$ fakeroot dpkg-buildpackage -b -uc
$ cd ..
$ ls *.deb`

Le paquet est prêt.  
 7) Fabrication directe.

Un paquet peut être fait simplement. Pour cela

```
*

  Préparer l'arborescence des fichiers composant le paquet dans un répertoire /tmp/paquet.
*

  Faire un répertoire /tmp/paquet/DEBIAN
*

  Y mettre dedans un fichier control de la forme

```

`
Package: nomdupaquet
Priority: optional
Section: x11
Installed-Size: 4023
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
.`  
( attention au blanc devant Lancement et au «.» final, 4023 = nbre octets de l’arborescence mise (pas besoin d’être précis))  
\*

```
  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:
  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

  et bien sûr un fichier postrm supprimant la diversion en cas de retrait du paquet:

  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
*

  faire ensuite
  $ cd /tmp/paquet
  $ find . -type f | grep -v "^./DEBIAN" | md5sum > DEBIAN/md5sums
  $ su
  # chown -R root.root *
  # dpkg-deb -b . ../nomdupaquet-1.0_all.deb

*

  Le paquet est prêt.
```

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 3:05 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/2 "2016-02-20T15:05:59Z")

</div>

![:smt041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif) ![:smt041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif) ![:smt041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif) ![:smt041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif) ![:smt041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif) ![:smt041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif) ![:smt041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif) ![:smt041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif)

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 3:05 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/3 "2016-02-20T15:05:59Z")

</div>

Bon, ben entre scilab et un bon logiciel pour pondre du TeX wysiwyg, il ne me manque plus que de savoir si une debian gère bien le wifi du portable de mon père, et je le convertis. 😆

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 3:06 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/4 "2016-02-20T15:06:01Z")

</div>

Offre lui une carte DWL650 PCMCIA (pas la +, l’autre la vieille) et il sera comblé, il pourra frimer près de ses collègues en offrant un pont (Windows ne sait pas faire ça sauf avec quelques cartes MSI)

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 3:06 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/5 "2016-02-20T15:06:01Z")

</div>

Pour l’instant il fonctionne avec le stick fourni avec sa livebox.  
Mais je pense que surtout ce qui devrait le bluffer, c’est le fait de ne pas être obligé de réinitialiser sa pile ip toutes les demies heures: ça l’enerve un peu sous windows. 😆

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 4:34 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/6 "2016-02-20T16:34:16Z")

</div>

Rajout du 6…

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 20, 2016, 4:38 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/7 "2016-02-20T16:38:01Z")

</div>

ouf sa c’est un tutoriel :smt103 :smt055 ![:smt038](https://www.debian-fr.org/uploads/default/original/1X/08df484251490af77ba342c0331f3ee271065fe9.gif)

Mai petite question, c’est possible de faire 1 paquet de plusieurs paquet avec les fichier de la config actuel, pour prendre exemple on à 2 paquet ,samba,les\_codecs\_videos il faudrai construire donc 1 paquet avec les fichiers de configuration actuel qui ce trouve dans /etc ?

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 4:38 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/8 "2016-02-20T16:38:02Z")

</div>

déjà, tu peux réempaqueter tes paquets avec leur config:

[code]roc@roc:/$ aptitude show dpkg-repack  
Paquet : dpkg-repack  
État: non installé  
Version : 1.28  
Priorité : optionnel  
Section : admin  
Responsable : Joey Hess [joeyh@debian.org](mailto:joeyh@debian.org)  
Taille décompressée : 69,6k  
Dépend: perl, dpkg-dev  
Description : puts an unpacked .deb file back together  
dpkg-repack creates a .deb file out of a debian package that has already been installed. If any changes have been made to the package while it was unpacked  
(ie, files in /etc were modified), the new package will inherit the changes.

This utility can make it easy to copy packages from one computer to another, or to recreate packages that are installed on your system, but no longer  
available elsewhere, or to store the current state of a package before you upgrade it.

Marqueurs: admin::package-management, devel::debian, devel::packaging, implemented-in::perl, interface::commandline, role::program, scope::utility,  
suite::debian, works-with::software:package[/code]

---

<div class="post-metadata">

**Author:** ![thialme](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/50afbb/32.png) [@thialme](https://www.debian-fr.org/u/thialme)\
**Post date:** [Février 20, 2016, 4:47 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/9 "2016-02-20T16:47:37Z")

</div>

J’ajouterais qu’il est aussi important de vérifier l’empaquetage avec certains outils comme linda et lintian.

Au passage, il semble que mkdir -p ne soit pas considérée comme une commande portable. Le manuel make préconsie l’utilisation de -mkdir

[http://www.gnu.org/software/make/manual/make.html#Utilities-in-Makefiles](http://www.gnu.org/software/make/manual/make.html#Utilities-in-Makefiles)

De toute façon puisque c’est un paquet Debian, on ne risque pas d’être compatible avec beaucoup de choses (cf debhelper) 😉

J’ai essayé install -d -m 755 pour créer un répertoire et cela fonctionne bien, tout comme install -m 644 pour un simple fichier au lieu de la commande cp.

Autrement pour dpkg-buildpackages, si l’on veut signer ses paquets pour ensuite les charger dans un dépôt qui gère les signatures :

```auto
dpkg-buildpackage -rfakeroot -kthialme
```

Voila, c’était les petites remarques que je voulais faire.

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 4:56 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/10 "2016-02-20T16:56:25Z")

</div>

Rajout de la fabrication directe.

---

<div class="post-metadata">

**Author:** ![dimm](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/e9bcb4/32.png) [@dimm](https://www.debian-fr.org/u/dimm)\
**Post date:** [Février 20, 2016, 4:57 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/11 "2016-02-20T16:57:42Z")

</div>

On peut aussi créer des backports avec pbuilder: [Using pbuilder to backport Debian](http://edseek.com/~jasonb/articles/pbuilder_backports/index.html).

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 4:57 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/12 "2016-02-20T16:57:42Z")

</div>

Il apporte quoi?

---

<div class="post-metadata">

**Author:** ![dimm](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/e9bcb4/32.png) [@dimm](https://www.debian-fr.org/u/dimm)\
**Post date:** [Février 20, 2016, 4:57 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/13 "2016-02-20T16:57:43Z")

</div>

Par rapport à ta méthode je ne sais pas car je n’ai pas essayé.  
Si tout se passe bien avec les dépendances, c’est très simple de créer un backport. Après la mise en place de ton environnement, ça se résume à ça:

`$ apt-get source paquet
$ sudo pbuilder build paquet.dsc`  
Et le paquet est créé dans /var/cache/pbuilder/result/.

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 5:29 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/14 "2016-02-20T17:29:08Z")

</div>

Tant qu’à faire, j’ai compilé checkinstall pour etch i386 et mad64. Bizarrement sur amd64, il a fallu faire un paquet «from scratch». Pour tester le paquet, j’ai fait ce dernier avec checkinstall.

---

<div class="post-metadata">

**Author:** ![Sergio](https://www.debian-fr.org/user_avatar/www.debian-fr.org/sergio/32/3862_2.png) [@Sergio](https://www.debian-fr.org/u/Sergio)\
**Post date:** [Février 21, 2016, 6:26 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/15 "2016-02-21T18:26:59Z")

</div>

Ave à toi,

Je cherche à étudier ton tutorial qui visiblement fait autorité, seulement dès l’abord je ne parviens pas à comprendre ce qu’il faut exactement que je télécharge de Vikings, donc lequel des trois liens, et à l’intérieur du bon, que chercher. Any help etc…

A+

Sergio

---

<div class="post-metadata">

**Author:** ![anon96191775](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/71c47a/32.png) [@anon96191775](https://www.debian-fr.org/u/anon96191775)\
**Post date:** [Février 21, 2016, 6:27 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/16 "2016-02-21T18:27:00Z")

</div>

Ce ne sont pas des liens de téléchargement, mais des sources de paquets.  
Tu auras plus d’explication sur comment les utiliser dans cet article :  
[isalo.org/wiki.debian-fr/Source … \_les\_bases](https://isalo.org/wiki.debian-fr/Sources_de_paquets_:_les_bases)

---

<div class="post-metadata">

**Author:** ![Sergio](https://www.debian-fr.org/user_avatar/www.debian-fr.org/sergio/32/3862_2.png) [@Sergio](https://www.debian-fr.org/u/Sergio)\
**Post date:** [Février 21, 2016, 6:27 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/17 "2016-02-21T18:27:01Z")

</div>

Je vois bien ces explications sur les sources, mais j’en suis d’autant plus largué, c’est-à-dire que je vois bien le rapport de principe, mais non l’immédiat, l’opératif. Les premières choses pour démarrer ce paquet sont les suivantes :

[quote]- faire un répertoire /tmp/vikings-1.0

- Y mettre vik et le répertoire lost
- Faire

`$ cd /tmp
$ cd vikings-1.0/
$ dh_make
`[/quote]  
A un moment, il faut mettre Vik et un repertoire, que l’on appellera lost. Vik, je suppose que c’est soit un ensemble de sources en C ou autre, soit un tarball à ne pas toucher, mais assurément une partie logicielle à prendre quelque part, et probablement pas n’importe comment. Ce je voudrais savoir, en fait, c’est cela, et ensuite j’aurai la tête plus hors de l’eau et on pourra causer…

A+

Sergio

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 21, 2016, 6:28 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/18 "2016-02-21T18:28:11Z")

</div>

[quote]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.[/quote]Il s’agit ici d’un paquet tout simple où nulle construction n’est nécessaire. Seul l’installation des fichiers est à faire, pas leur construction. Si tu veux savoir ce qu’il y a dans vik, installe le paquet, tu auras le script. En gros c’est ça:

`dosbox -conf /usr/games/lost/dosbox.conf -c "mount C /usr/games/lost 
C:
vik
exit
"
`

---

<div class="post-metadata">

**Author:** ![Sergio](https://www.debian-fr.org/user_avatar/www.debian-fr.org/sergio/32/3862_2.png) [@Sergio](https://www.debian-fr.org/u/Sergio)\
**Post date:** [Février 21, 2016, 6:28 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/19 "2016-02-21T18:28:11Z")

</div>

Bon, s’il faut aller jusqu’à Dosbox je pense que je vais quand même craquer, et essayer de refaire ton dernier exemple, soit directement. Ceci étant, même en n’avançant pas d’un millimètre dans tous les tutoriaux que je glane, j’ai cru me rendre compte que les utilitaires (dh\_make, dpkg-deb, etc.) ne réagissent plus exactement comme ils le faisaient au moment de l’écriture desdits tutoriaux, ce qui va encore un peu compliquer.

Merci à toi !

---

<div class="post-metadata">

**Author:** ![Sergio](https://www.debian-fr.org/user_avatar/www.debian-fr.org/sergio/32/3862_2.png) [@Sergio](https://www.debian-fr.org/u/Sergio)\
**Post date:** [Février 21, 2016, 6:28 UTC](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662/20 "2016-02-21T18:28:22Z")

</div>

C’est très curieux, en suivant à la lettre ton dernier exemple, le septième, celui de la confection directe, pour un paquet que j’appelle d’ailleurs “direct”, je me retrouve avec ceci :

`root@CHE:/home/user/pkg/direct# dpkg-deb -b . ../direct-1.0_all.deb
dpkg-deb : erreur : analyse du fichier './DEBIAN/control' vers la ligne 9 paquet 'direct' :
 le nom de champ « Lancement » doit être suivi de deux points (:) 
root@CHE:/home/user/pkg/direct#`  
Le fichier “control” est strictement le tien, à l’exception de “nomdupaquet” qui devient “direct”. Même Aurore Dupin, baronne Dudevant, je l’ai conservée !  
Quand je disais que les utilitaires de maintenant réagissent différemment…

[Page suivante](https://www.debian-fr.org/t/faire-un-paquet-version-complete/4662.md?page=2)
