Comment créer un fichier DEB manuellement?

46

Je veux créer un fichier DEB manuellement. Je voudrais juste fournir un dossier contenant des données à installer et un script à exécuter après l'installation.

Est-ce possible?

Marguerite
la source
Pas très bonne réponse que tu choisis?
Gigamegs
@ David, en fait je l'ai fait avec "dpkg-deb", c'est beaucoup plus facile, c'est pourquoi j'ai choisi Gilles, en listant les fichiers dans le dossier du paquet, cela me donne une vue claire du fichier à placer. Donc, je pense que sa réponse est meilleure ..
Daisy
J'ai également répertorié tous les fichiers du paquet.
Gigamegs
11
@ David je veux dire, affirmant que sa réponse est dérivée est une chose, mais "pas une très bonne réponse"? La réponse de Gilles est excellente. peu importe si votre réponse était première, la sienne est bien plus complète. Et il n’ya rien de mal à prendre une réponse existante et à la développer; c'est une bonne chose
Michael Mrozek

Réponses:

57

Faire un paquet source

Ma recommandation est de faire un paquet source. Installez build-essential , debhelper , dh-make . Allez dans le répertoire où se trouvent les fichiers que vous voulez installer (le nom du répertoire doit être de la forme $PACKAGE-$VERSION, par exemple myapp-4.2-1lors de votre première tentative d'empaquetage de Myapp V4.2) et exécutez-le dh_make --createorig. Répondez aux questions. Debhelper créera l'infrastructure de base nécessaire à la création d'un paquet en générant des fichiers dans un sous-répertoire appelé debian, à la fois des fichiers obligatoires et des modèles pour les fichiers facultatifs. Vous devrez peut-être modifier certains de ces fichiers:

  • Modifiez debian/rulespour créer ce qui doit être créé et installez les fichiers au bon endroit. Si vous avez juste besoin de copier des fichiers et de ne pas compiler, modifiez simplement le fichier debian/installpour spécifier quels fichiers doivent être installés où.
  • Cliquez debian/copyrightsur Modifier pour ajouter des informations sur la licence de votre package et des informations sur l'emplacement où obtenir la dernière version (le cas échéant).
  • Editez debian/changelogpour supprimer la référence à un ITP (cela ne concerne que si vous travaillez pour le projet Debian). Renommer debian/postinst.expour debian/postinstet ajouter vos commandes post-installation là - bas. Si vous mettez à jour ultérieurement votre paquet, exécutez-le debchange -ipour ajouter une entrée au journal des modifications ou éditez le fichier dans Emacs (avec dpkg-dev-el installé).

Exécuter dpkg-buildpackage -rfakeroot -us -ucpour construire le .debpackage (à supprimer -us -ucsi vous souhaitez signer le package avec votre clé PGP).

Faire un paquet binaire directement

Si vous décidez de créer directement un paquet binaire sans le construire à partir d'un paquet source, ce qui n'est pas vraiment facile car il n'y a pas autant d'outils pour faciliter le processus, vous aurez besoin d'une connaissance de base du format des paquets deb. Cela est décrit dans le Manuel de la stratégie Debian , en particulier ch. 3 (format des paquets binaires) , ch. 5 (fichiers de contrôle) , ch. 6 (scripts d'installation) et l' annexe B (manipulation des packages binaires) .

Vous assurez-vous que votre paquet installe les fichiers attendus /usr/share/doc/copyright(contenant la licence du contenu du paquet, ainsi que l'emplacement où se trouve la dernière version du paquet) et /usr/share/doc/changelog.Debian.gz(contenant le journal des modifications du paquet deb). Vous n'en avez pas besoin si vous n'utilisez le paquet qu'en interne, mais il est préférable de l'avoir.

Sur Debian et dérivés

Si vous avez les outils Debian disponibles, utilisez-les dpkg-debpour construire le paquet. Dans le répertoire contenant les données à installer, ajoutez un répertoire appelé DEBIANau plus haut niveau, contenant les fichiers de contrôle et les scripts de responsable.

$ ls mypackage-42
DEBIAN etc usr var
$ dpkg-deb -b mypackage-42

À la dure

Si vous ne possédez pas les outils Debian, créez une archive des fichiers que vous voulez grouper data.tar.gz, une archive distincte des fichiers de contrôle appelée control.tar.gz(sans sous-répertoires) et un fichier texte appelé debian-binarycontenant le texte 2.0.

cd mypackage-42
tar czf ../data.tar.gz [a-z]*
cd DEBIAN
tar czf ../../control.tar.gz *
cd ../..
echo 2.0 > debian-binary
ar r mypackage-42.deb debian-binary control.tar.gz data.tar.gz

Vous avez besoin d' au moins un fichier de contrôle avec les champs Package, Maintainer, Priority, Architecture, Installed-Size, Version, et toute déclaration de dépendance nécessaire.

Le script à exécuter après l'installation est appelé postinst. Assurez-vous de le rendre exécutable. Il va à côté control.

Conversion d'un paquet binaire à partir d'un format différent

Si vous avez déjà un paquet binaire d'une autre distribution, vous pouvez utiliser alien pour le convertir.

Gilles, arrête de faire le mal
la source
3
OMI c'est une copie de ma réponse? Qu'est-ce que tu penses?
Gigamegs
1
La réponse suppose que l’opérateur sait utiliser emacs. Emacs est-il vraiment nécessaire ici? Pour éditer les changelogs, je pense que l’on peut utiliser dch -i.
Faheem Mitha le
Qu'est- arce qui tarne fait pas ça ?
mmstick
@mmstick C'est un format différent. Je ne sais pas pourquoi les concepteurs du format deb ont choisi d'utiliser ar ici.
Gilles 'SO- arrête d'être méchant'
1
Si vous souhaitez modifier le nom et e - mail qui dh_make --createorigutilisations, vous devez export DEBEMAIL="[email protected]"et au export DEBFULLNAME="Firstname Lastname"préalable.
Ryan
10

Tout d'abord, vous devez créer un dossier de construction et une archive de vos fichiers: tar czvf data.tar.gz files

Ensuite, dans le dossier de construction, vous devez créer un fichier de contrôle avec les informations demandées:

 Package: xxxxxx
 Version: 0.0.1
 Section: user/hidden 
 Priority: optional
 Architecture: armel
 Installed-Size: `du -ks usr|cut -f 1`
 Maintainer: Your Name <[email protected]>
 Description: This is optional, but creates warnings if left out

Ensuite, vous pouvez ajouter indépendamment des scripts de shell preinst, postint, prerm et postrm pour contrôler le comportement du fichier .deb avant et après l'installation et avant et après son retrait, puis vous pouvez créer l'archive de contrôle avec tar: tar czvf control.tar.gz control preinst postinst prerm postrm

Ensuite , vous avez besoin d' un fichier debian-binaire: echo 2.0 > debian-binary. Dans votre dossier de construction, vous devriez maintenant avoir ces fichiers: debian-binary control.tar.gzet data.tar.gz.

Enfin, vous avez besoin d’un arpaquet pour créer le fichier .deb:ar -r xxx.deb debian-binary control.tar.gz data.tar.gz

Gigamegs
la source
1
A propos ar -r xxx.deb debian-binary control.tar.gz data.tar.gzil pourrait être utile de souligner l'ordre est important: le contrôle doit venir avant que les données.
Hibou57
@Bytemain, la réponse la plus votée semble en partie basée sur votre texte, mais elle ajoute des détails, et est mieux lisible. la séquence que nous pouvons copier / coller le rend particulièrement plus beau.
mariotomo
3

Je fais beaucoup de paquets, et en faire un complet n'est pas une mince affaire. Sur une note positive, les fichiers et les scripts sont beaucoup moins efficaces. Vous pouvez créer un tel paquet, très simplement, avec un outil appelé debreate .

Debreate est une interface graphique très simple, pour créer simplement des paquets DEB simples. Vous pouvez simplement spécifier quels fichiers, où ils vont, et si / quoi exécuter sur post / pré-installation / désinstaller. J'avais l'habitude de faire tous mes paquets de la manière standard, mais après avoir commencé à utiliser cet outil, je ne reviendrai que lorsque cela sera nécessaire.

JM Becker
la source
1

J'ai utilisé Zimbra 7 sur Debian avec ses paquets Ubuntu. (Je suis têtu, j'aime Debian> bUbuntu bien que Zimbra n'ait été publié que pour Ubuntu.) Je ne suis pas sûr de savoir comment j'ai résolu ce problème auparavant, je suis certain que je n'avais pas à le faire lorsque j'ai déjà installé cela auparavant!

mkdir new
for i in *.deb
 do echo `date`: working on $i
 ar x $i
 cd control
 rm * 2> /dev/null
 tar -xzpvf ../control.tar.gz
 tr "_" "-" < control > control2
 mv -v control2 control
 tar -czpvf ../control.tar.gz .
 cd ..
 ar r new/$i debian-binary control.tar.gz data.tar.gz
done
rm -rf debian-binary control.tar.gz data.tar.gz control

Tous vos nouveaux fichiers .deb seront dans new/.

Remarque : c'était sur squeeze - dpkg sur wheezy a --force-bad-version maintenant.

math
la source
1

Pour créer rapidement des packages, vous pouvez utiliser le programme checkinstall. Il installe le programme, surveille les modifications et en crée un paquet deb ou rpm.

indéfini
la source
Cela semble être une excellente option pour suivre les paquets que vous devez installer à partir des sources. Pouvez-vous offrir plus de détails? Par exemple, au cours de l'installation, vous pouvez modifier les liens symboliques, supprimer des fichiers, modifier des fichiers de configuration, ajouter des démons, etc. Pouvez-vous facilement modifier sa sortie pour ajouter des scripts prerm et postrm?
AatG
Regardez sur wiki.debian.org/CheckInstall Si vous voulez changer les choses pendant l'installation - le moyen le plus simple est de modifier Makefile pour changer la section d'installation. prerm / postrm - je n'ai pas trouvé le moyen de le modifier. Ce n'est que pour les petits programmes qu'il permet une désinstallation simple.
undefine
-4
$ apt-get install build-essential dh-make debhelper devscripts
$ wget http://nmap.org/dist/nmap-LAST.tar.bz2
$ tar xf nmap-LAST.tar.bz2
$ cd nmap-LAST
$ dh_make -s -e [email protected] -f ../nmap-LAST.tar.bz2
$ apt-get install libgtk2.0-dev flex bison libpcap0.8-dev \
  libpcre3-dev binutils-dev python-all-dev
$ dpkg-buildpackage
Killinks
la source