Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/10/2007, à 14:34

Gide

Créer un package .deb à partir d'un exécutable

Bonjour,
Une méthode "quick and dirty" pour créer un .deb à partir d'un exécutable (bin).
Exemple avec SciDAVis : http://scidavis.sourceforge.net/

Après téléchargement et décompression de l'archive scidavis-0.1.0-linux.tar.bz2,
on obtient un répertoire scidavis-0.1.0.

jd@kubuntu:~/Downloads/SciDAVis$ ls
Makefile  scidavis-0.1.0  SciDAVis.desktop

On édite alors un fichier .desktop correspondant à l'entrée dans le menu

[Desktop Entry]
Categories=Qt;KDE;Education;Math;
Comment=
Comment[fr]=
Exec=/opt/scidavis/scidavis
GenericName=
GenericName[fr]=
Icon=/opt/scidavis/icon.png
MimeType=
Name=SciDAVis
Name[fr]=SciDAVis
Path=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
X-DCOP-ServiceType=
X-KDE-SubstituteUID=false
X-KDE-Username=

et un fichier Makefile dans lequel on crée la règle install:

install:
	mkdir /opt/scidavis
	cp -r ./scidavis-0.1.0/* /opt/scidavis
	cp SciDAVis.desktop ~/.local/share/applications/

Pour résumer : créer le répertoire de destination /opt/scidavis ; copier tous les fichiers dans ce répertoire et copier le fichier .desktop

Ensuite un sudo checkinstall va créer le .deb et l'installer :

checkinstall 1.6.1, Copyright 2002 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]: n

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

*** Warning: The package name "SciDAVis" contains upper case
*** Warning: letters. dpkg might not like that so I changed
*** Warning: them to lower case.

This package will be built according to these values:

0 -  Maintainer: [ root@kubuntu ]
1 -  Summary: [ Scientific Data Analysis and Visualization ]
2 -  Name:    [ scidavis ]
3 -  Version: [ 0.1.0 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ i386 ]
8 -  Source location: [ SciDAVis ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]

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

Installing with make install...

========================= Installation results ===========================
mkdir /opt/scidavis
cp -r ./scidavis-0.1.0/* /opt/scidavis
cp SciDAVis.desktop ~/.local/share/applications/

======================== Installation successful ==========================

Copying files to the temporary directory...OK

Striping ELF binaries and libraries...OK

Compressing man pages...OK

Building file list...OK

Building Debian package...OK

Installing Debian package...OK

Erasing temporary files...OK

Writing backup package...OK

Deleting temp dir...OK


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

 Done. The new package has been installed and saved to

 /home/jd/Downloads/SciDAVis/scidavis_0.1.0-1_i386.deb

 You can remove it from your system anytime using:

      dpkg -r scidavis

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

Voilà un .deb utilisable sur d'autres machines...
Des remarques ou améliorations ??

Dernière modification par Gide (Le 04/10/2007, à 21:52)

Hors ligne

#2 Le 01/10/2007, à 21:39

mr_pouit

Re : Créer un package .deb à partir d'un exécutable

Bonsoir,

Gide a écrit :
install:
	mkdir /opt/scidavis
	cp -r ./scidavis-0.1.0/* /opt/scidavis
	cp SciDAVis.desktop ~/.local/share/applications/

Pour résumer : créer le répertoire de destination /opt/scidavis ; copier tous les fichiers dans ce répertoire et copier le fichier .desktop

Le .desktop doit être installé dans /usr/share/applications/ pour être disponible pour tous les utilisateurs (là il n'est disponible que pour toi). Tu peux également utiliser la commande desktop-file-validate du paquet desktop-file-utils pour vérifier si ton .desktop est valide.

Voilà un .deb utilisable sur d'autres machines...

Pas vraiment : seulement sur des machines i386 (donc pas sur les systèmes ppc ou amd64). Ensuite, checkinstall n'ajoute pas les dépendances (cf. le fichier REQUIREMENTS de l'archive, ou encore la commande objdump -p <le_binaire> | grep NEEDED pour voir les dépendances requises), donc le programme ne fonctionnera pas sur un système qui ne les a pas. Et accessoirement, un paquet ne doit pas toucher à ~ et /opt en théorie.

Bref, ce sont toutes ces raisons qui font qu'il est préférable d'utiliser la méthode de création des paquets à partir des sources (cf. http://doc.ubuntu-fr.org/projets/ecole/paquets).

Mais cela dit, pour un usage local (par exemple entre les différentes machines chez soi), checkinstall est assez pratique. wink

Hors ligne

#3 Le 02/10/2007, à 08:08

Gide

Re : Créer un package .deb à partir d'un exécutable

Bonjour,
Merci pour ces remarques constructives.

Le .desktop doit être installé dans /usr/share/applications/ pour être disponible pour tous les utilisateurs (là il n'est disponible que pour toi). Tu peux également utiliser la commande desktop-file-validate du paquet desktop-file-utils pour vérifier si ton .desktop est valide.

Effectivement, c'est le but, mais il est intéressant de préciser pour ceux qui veulent le rendre disponible pour tous les utilisateurs.

seulement sur des machines i386 (donc pas sur les systèmes ppc ou amd64)

L'éxécutable ne fonctionne bien sûr que sur la plateforme pour laquelle il a été compilé. On ne peut rien y faire.

Ensuite, checkinstall n'ajoute pas les dépendances (cf. le fichier REQUIREMENTS de l'archive, ou encore la commande objdump -p <le_binaire> | grep NEEDED pour voir les dépendances requises)

C'est le problème majeur de checkinstall... 2 possibilités :
soit le binaire est compilé sur une distrib et on précise, soit on fait les .deb correspondant aux dépendances.

Par contre si quelqu'un sait comment inclure la liste des  dépendances dans l'archive .deb crée, je suis TRES intéressé...

il est préférable d'utiliser la méthode de création des paquets à partir des sources

Tout à fait d'accord ! Mais dans certains cas, les programmeurs ne nous facilitent pas la tâche...
SciDAVis est un fork de QtiPLot qui pose pas mal de problème à la compilation :
http://forum.ubuntu-fr.org/viewtopic.php?id=117856

Finalement, cela permet au minimum d'avoir un système "propre" : On peut facilement désinstaller les binaires qui en général trainent dans l'arborescence ....

a+

Dernière modification par Gide (Le 02/10/2007, à 08:12)

Hors ligne

#4 Le 03/10/2007, à 06:57

Bismut

Re : Créer un package .deb à partir d'un exécutable

mr_pouit a écrit :

Bref, ce sont toutes ces raisons qui font qu'il est préférable d'utiliser la méthode de création des paquets à partir des sources (cf. http://doc.ubuntu-fr.org/projets/ecole/paquets).

Oui, mais comment fait-on quand il n'y a pas de sources ?

Je développe en XUL/JS, et mon application est directement exécutable depuis mon répertoire de développement... il n'y a aucune dépendance.

Comment en faire un .deb ?

C'est la 1ère fois que je vois un tuto capable de créer un .deb de mon application, et ce n'est donc pas une bonne méthode ? Que faire dans ce cas ? Personne n'a jamais répondu à mes topics, sniff... sad


Mac Mini 2009 avec Archlinux
Asus EeePC S101 avec Archlinux
HTC Magic avec Android

Hors ligne

#5 Le 05/10/2007, à 18:30

mr_pouit

Re : Créer un package .deb à partir d'un exécutable

Bonjour,

Bismut a écrit :

Comment en faire un .deb ?

Tu peux essayer de regarder le packaging des extensions firefox/thunderbird (c'est en XUL ça aussi, non ?).

Hors ligne

#6 Le 06/10/2007, à 16:40

Bismut

Re : Créer un package .deb à partir d'un exécutable

Bah ça n'est pas vraiment le sujet. Mon appli. est en fait une extension Firefox autonome qui tourne grâce à XULRunner.
En gros, c'est comme Songbird, NVU ou autres...

Le déploiement .deb n'est pas développé sur la plateforme Mozilla, a priori c'est une particularité du système Debian ?

Je sais pas, un .deb c'est quoi ? un fichier compressé comprenant des infos sur la manière d'installer non ? Nom / Description / Destination,... non ?

J'en connais pas trop mais y a bien des logiciels qui marchent dans leur répertoire sous Linux ? Rainlendar par exemple se lance à partir de son répertoire dézippé... L'auteur ne fournit pas de .deb.
Comment en créer un à partir de ça ? c'est possible ?


Mac Mini 2009 avec Archlinux
Asus EeePC S101 avec Archlinux
HTC Magic avec Android

Hors ligne

#7 Le 17/10/2007, à 21:49

mr_pouit

Re : Créer un package .deb à partir d'un exécutable

Bismut a écrit :

Bah ça n'est pas vraiment le sujet. Mon appli. est en fait une extension Firefox autonome qui tourne grâce à XULRunner.
En gros, c'est comme Songbird, NVU ou autres...

Dans ce cas, essaie de regarder les paquets source de kompozer ou sunbird (apt-get source sunbird).

Je sais pas, un .deb c'est quoi ? un fichier compressé comprenant des infos sur la manière d'installer non ? Nom / Description / Destination,... non ?

Oui, c'est un tar qui contient 2 archives gz : une qui contient les fichiers et une qui contient les informations du paquet (nom, dépendances, description...).

J'en connais pas trop mais y a bien des logiciels qui marchent dans leur répertoire sous Linux ? Rainlendar par exemple se lance à partir de son répertoire dézippé... L'auteur ne fournit pas de .deb.
Comment en créer un à partir de ça ? c'est possible ?

Si c'est un binaire, alors c'est préférable de compiler plutôt que de packager le binaire fourni (car il ne fonctionnera pas sur toutes les plateformes). Mais sinon, il suffit de faire des {cp,mv,install} dans le debian/rules au lieu d'un {./configure,make,make install}.

Hors ligne

#8 Le 18/10/2007, à 19:38

Bismut

Re : Créer un package .deb à partir d'un exécutable

Ok, je comprends, c'est déjà plus clair... merci bien smile


Mac Mini 2009 avec Archlinux
Asus EeePC S101 avec Archlinux
HTC Magic avec Android

Hors ligne