Distribuer votre appli XULRunner
2 - Linux
2.2 Empaqueter un deb
- 2.2.1 Synopsis
- 2.2.2 Fichiers Debian
- 2.2.3 Créer le deb
2.2.1 Synopsis
Ok, nous avons notre lanceur, et tous les fichiers nécessaires à l'intégration au bureau (voir le chapitre 2.1). Nous allons maintenant créer un paquet deb, pour les distributions basées sur Debian, comme Ubuntu.
La principale documentation pour la création de deb est Debian Policy Manual. et vous pouvez trouver également utile cette autre doc de Debian et celle ci d'Ubuntu.
Je suppose que notre appli ne contient pas de code compilé, mais si c'est le cas, compilez le simplement avant de créer le paquet. Nous créerons ce deb manuellement.
Nous allons utiliser debhelper et fakeroot. Nous devons créer quelques fichiers utilisés par les scripts debian, copier nos sources et fichiers de bureau aux bons emplacements, et exécuter quelques scripts.
Pour celà, nous devons installer debhelper et fakeroot.
sur Debian/Ubuntu:
apt-get install debhelper fakeroot
Sur Fedora, malheureusement debhelper n'est pas encore disponible dans les dépôts,
mais devrait l'être un jour, voir les bugs
#591190,
#591389,
#642160,
et #591332.
Sur OpenSuse il y a un paquet nommé 'deb' qui l'installe.
sur les autres distributions... faites le moi savoir ;)
Le deb créé installera myapp dans le dossier /usr/lib/
,
c'est l'emplacement standard sur Linux.
2.2.2 Fichiers Debian
pour construire notre deb, nous devons créer un dossier debian à coté de
notre application, contenant plusieurs fichiers utilisés par les
programmes de debhelper
Vous pouvez utiliser
dh_make
pour créer un tel squelette, mais ici nous allons créer ces fichiers nous-même :
|- samples_chapter_2/ |- myapp/ |- debian/ |- changelog |- compat |- control |- copyright |- menu |- postinst |- myapp.links
Le fichier changelog
est décrit en détail
ici dans la doc, il contient :
myapp (1.0-1) unstable; urgency=low * Initial release -- John Doe <johndoe@example.com> Fri, 26 Nov 2010 10:10:35 +0100
Note : soyez précis dans le format de ce fichier, il doit réellement être précis, voir la doc.
Note : la date doit être au format RFC822, vous pouvez l'obtenir avec date -R dans un terminal.
Le fichier compat
contient simplement la compatibilité de debhelper, soit juste 7
.
Le fichier control
est le plus important. Voici un exemple :
Source: myapp Section: Utilities Priority: extra Maintainer: John Doe <johndoe@example.com> Build-Depends: debhelper (>= 7) Standards-Version: 3.7.2 Homepage: <http://example.com/myapp/> Package: myapp Architecture: all Depends: xulrunner (>= 1.9.2) | firefox (>= 3.6) Description: simple Hello World. Powered by XULRunner.
Choisissez une Section
dans
cette liste.
Si votre application contient du code compilé, vous devez
supprimer la ligne Architecture: all
, car son but est
précisement de créer un paquet indépendant de la plateforme. Sans cette
entrée, le deb sera spécifique à l'architecture actuelle.
Si votre appli nécessite d'autres dépendances, ajoutez les séparés par une
virgule. Si l'appli contient du code compilé, vous pouvez vouloir utiliser
la valeur ${shlibs:Depends}
, ainsi à la construction du paquet
certaines dépendances seront calculées. Par exemple :
Depends: xulrunner (>= 1.9.2) | firefox (>= 3.6), ${shlibs:Depends}
Le format du champ Description
est décrit en détail dans
cette doc.
Le fichier copyright
peut contenir par exemple :
This package was debianized by John Doe <johndoe@example.com> on Sat, 16 Oct 2010 17:55:17 +0200 It was downloaded from <http://example.com/myapp/> Upstream Author(s): John Doe <johndoe@example.com> Copyright: <Copyright (C) 2010 John Doe> License: ***** BEGIN LICENSE BLOCK ***** Version: MPL 1.1/GPL 2.0/LGPL 2.1 The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is MyApp. The Initial Developer of the Original Code is John Doe. Portions created by the Initial Developer are Copyright (C) 2010 the Initial Developer. All Rights Reserved. Contributor(s): John Doe (johndoe@example.com) Alternatively, the contents of this file may be used under the terms of either the GNU General Public License Version 2 or later (the "GPL"), or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), in which case the provisions of the GPL or the LGPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of either the GPL or the LGPL, and not to allow others to use your version of this file under the terms of the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL or the LGPL. If you do not delete the provisions above, a recipient may use your version of this file under the terms of any one of the MPL, the GPL or the LGPL. ***** END LICENSE BLOCK *****
Le fichier menu
contient :
?package(myapp):needs="X11" section="Applications/Programming"\ title="MyApp" command="/usr/bin/myapp"
Choisissez une section
dans cette
liste.
Le fichier postinst
est un script lancé à la fin de l'installation du deb.
Il permet de reconstruire le cache des icônes système par exemple.
#!/bin/sh # postinst script for myapp # # see: dh_installdeb(1) set -e # summary of how this script can be called: # * <postinst> `configure' <most-recently-configured-version> # * <old-postinst> `abort-upgrade' <new version> # * <conflictor's-postinst> `abort-remove' `in-favour' <package> # <new-version> # * <postinst> `abort-remove' # * <deconfigured's-postinst> `abort-deconfigure' `in-favour' # <failed-install-package> <version> `removing' # <conflicting-package> <version> # for details, see http://www.debian.org/doc/debian-policy/ or # the debian-policy package case "$1" in configure) # for icons of the app if [ -x /usr/bin/gtk-update-icon-cache ]; then gtk-update-icon-cache -f /usr/share/icons/hicolor fi # uncomment only if the installed app handle some mime-type #if [ "$2" == "" ]; then # if [ -x /usr/bin/update-desktop-database ]; then # update-desktop-database /usr/share/applications # fi #fi ;; abort-upgrade|abort-remove|abort-deconfigure) ;; *) echo "postinst called with unknown argument \`$1'" >&2 exit 1 ;; esac # dh_installdeb will replace this with shell code automatically # generated by other debhelper scripts. #DEBHELPER# exit 0
Enfin, le fichier myapp.links
contient
les liens à créer après l'installation du deb.
/usr/lib/myapp/myapp.sh /usr/bin/myapp
2.2.3 Créer le deb
Ok, nous avons maintenant tous les fichiers nécessaires, nous pouvons
créer notre deb. Nous devons créer un dossier portant le même nom que
notre application dans le dossier debian
, et y copier
les fichiers de la même manière que sur le système final.
|- debian/ |- myapp/ |- usr |- lib |- myapp/ |- share |- applications/ |- myapp.desktop |- icons/ |- hicolor/ |- 16x16/ |- apps |- myapp.png |- 22x22/ |- apps |- myapp.png |- 32x32/ |- apps |- myapp.png |- 48x48/ |- apps |- myapp.png |- scalable/ |- apps |- myapp.svg
Et nous allons appliquer quelques script debhelper.
Voici un script shell complet, nommé build_deb.sh
, il crée
un dossier temporaire 'tmp
', et y copie nos fichiers debian,
notre application, et nos fichiers desktop, puis crée le deb :
#!/bin/bash # exit the script on errors set -e TMP_DIR=./tmp # get the absolute path of our TMP_DIR folder TMP_DIR=$(readlink -f -- "$TMP_DIR") # re-create the TMP_DIR folder rm -rfv "$TMP_DIR" mkdir -v "$TMP_DIR" #copy the debian folder into TMP_DIR cp -rv "./debian" "$TMP_DIR/" # create into TMP_DIR the folder where copy our app mkdir -pv "$TMP_DIR/debian/myapp/usr/lib" # and copy the app cp -rv "./myapp" "$TMP_DIR/debian/myapp/usr/lib/" # create the folder for the .desktop file and copy it mkdir -pv "$TMP_DIR/debian/myapp/usr/share/applications" cp -v "./data/myapp.desktop" \ "$TMP_DIR/debian/myapp/usr/share/applications/" # create the folder and copy our icons mkdir -pv "$TMP_DIR/debian/myapp/usr/share/icons/hicolor/16x16/apps" cp -v "./data/icons/icon16.png" \ "$TMP_DIR/debian/myapp/usr/share/icons/hicolor/16x16/apps/myapp.png" mkdir -pv "$TMP_DIR/debian/myapp/usr/share/icons/hicolor/22x22/apps" cp -v "./data/icons/icon22.png" \ "$TMP_DIR/debian/myapp/usr/share/icons/hicolor/22x22/apps/myapp.png" mkdir -pv "$TMP_DIR/debian/myapp/usr/share/icons/hicolor/32x32/apps" cp -v "./data/icons/icon32.png" \ "$TMP_DIR/debian/myapp/usr/share/icons/hicolor/32x32/apps/myapp.png" mkdir -pv "$TMP_DIR/debian/myapp/usr/share/icons/hicolor/48x48/apps" cp -v "./data/icons/icon48.png" \ "$TMP_DIR/debian/myapp/usr/share/icons/hicolor/48x48/apps/myapp.png" mkdir -pv "$TMP_DIR/debian/myapp/usr/share/icons/hicolor/scalable/apps" cp -v "./data/icons/icon48.svg" \ "$TMP_DIR/debian/myapp/usr/share/icons/hicolor/scalable/apps/myapp.svg" cd "$TMP_DIR" # clean eventual tempory files find . -type f -name *.*~ -exec rm {} \; # deb creation fakeroot dh_link fakeroot dh_fixperms fakeroot dh_installdeb # uncomment the following line if you have some compiled code and use ${shlibs:Depends} in control file #dh_shlibdeps fakeroot dh_gencontrol fakeroot dh_md5sums fakeroot dh_builddeb echo "deb created for myapp :)"
Pour créer notre deb, dans un terminal :
cd samples_chapter_2
sh ./build_deb.sh
En résultat nous avons finalement le fichier myapp_1.0-1_all.deb
dans le dossier samples_chapter_2 :) .
Vous pouvez télécharger tous les exemples de ce chapitre 2 (Linux) dans l'archive samples_chapter_2.tar.gz.
L'application myapp, de developer.mozilla.org, est dans le Domaine Public.
L'icône utilisée est issue du Tango Desktop Project, et est dans le Domaine Public.
Toutes les autres données ajoutées, et les fichiers en exemple, sont dans le Domain Public également.