Mkd (Extracteur de documents)/Dépôt parrainé du paquet ''original'' mkd-131215
Les paquets d'installation des logiciels pour les systèmes d'exploitation linux permettent de sécuriser les systèmes grâce à des clés numériques. Ils permettent aussi de faciliter l'installation des applications.
Un paquet original est le premier paquet d'une série. Le paquet natif 131215 a été créé pour un nouveau dépôt ppa (Personnal packages)[1] personnalisé par l'équipe de maintenance de l'EELL (Éditeurs européens de logiciels libres)
Créer la hiérarchie des fichiers et répertoires de travail
modifier- Répertoires
- ~Packaging/mkd/mkd-131215/ répertoire de travail qui contient :
- les fichiers de commandes
Make-new-ppa, Buid-all, Rebuild-all. - le répertoire origine ./mkd-0~131215
Contiendra le Makefile de création du paquet et les documents README, NEWS, etc. - le répertoire des sources ./mkd-0~131215/src
Contiendra tous les fichiers nécessaires à la compilations des sources
./mkd-0~131215/src/find.inc.c
./mkd-0~131215/src/shell.c
./mkd-0~131215/src/asm.c
./mkd-0~131215/src/cpp.h
./mkd-0~131215/src/version.h
./mkd-0~131215/src/internationalisation.h
./mkd-0~131215/src/basic.h
./mkd-0~131215/src/tri.c
./mkd-0~131215/src/cpp.c
./mkd-0~131215/src/basic.c
./mkd-0~131215/src/fortran.h
./mkd-0~131215/src/fortran.c
./mkd-0~131215/src/mkd.h
./mkd-0~131215/src/shell.h
./mkd-0~131215/src/pascal.h
./mkd-0~131215/src/find.inc.h
./mkd-0~131215/src/mkd.c
./mkd-0~131215/src/asm.h
./mkd-0~131215/src/tri.h
./mkd-0~131215/src/pascal.c
- 4. le répertoire des binaires et des données ./mkd-0~131215/usr
On pourra prévoir de les créer avec un Makefile ou les placer dores et déjà dans la hiérarchie 'usr' lorsque ces fichiers ne nécessitent pas de nouvelle compilation : les manuels, langues, icônes etc. :
./mkd-0~131215/usr/share/mime/packages/mkd.xml
./mkd-0~131215/usr/share/doc
./mkd-0~131215/usr/share/man/fr.UTF-8/man1/mkd.1.gz
./mkd-0~131215/usr/share/man/fr
./mkd-0~131215/usr/share/man/de/man1/mkd.1.gz
./mkd-0~131215/usr/share/man/man1/mkd.1.gz
./mkd-0~131215/usr/share/icons/hicolor/256x256/apps/mkd.pngps
./mkd-0~131215/usr/share/icons/hicolor/16x16/apps/mkd.png
./mkd-0~131215/usr/share/icons/hicolor/32x32/apps/mkd.png
./mkd-0~131215/usr/share/icons/hicolor/48x48/apps/mkd.png
./mkd-0~131215/usr/share/locale/fr/LC_MESSAGES/mkd.mo
./mkd-0~131215/usr/share/locale/en/LC_MESSAGES/mkd.mo
./mkd-0~131215/usr/share/locale/de/LC_MESSAGES/mkd.mo
./mkd-0~131215/usr/bin
Notez que :
- le seul fichier qui nécessite d'être mis à jour et placé dans le répertoire usr/bin/, est le binaire mkd adapté au processeur. (i386, amd64, ...)
Création du sous répertoire debian
modifierLe répertoire ./mkd-0~131215/debian est créé à l'aide du fichier de commande 'Make-new-ppa' que nous avons placé au dessus du répertoire origine pour simplifier la création des divers paquets.
#!/bin/bash
# File Make new ppa
# ne pas lancer en sudo, et utiliser la Konsole
# créer le fichier orig.tar.gz
tar cvzf mkd-0~131215.tar.gz mkd-0~131215
# attention au souligné
# pas pour le natif : mv mkd-0~131015.tar.gz mkd_0~131015.orig.tar.gz
cd mkd-0~131215
dh_make -c GPL -e edeulo@free.fr -s -n -f mkd-0~131215.tar.gz -r CDBS
echo "Lorsque le répertoire debian a été créé, mettre les fichiers à jour:"
echo "Fichiers à mettre à jour:"
echo "changelog remplacer unstable par la version (precise ou saucy)"
echo "control, copyright, rules, watch"
echo "Il faudra ensuite lancer Build-all"
- Options dh_make
- -c GPL; general public licence (gpl2, gpl3, lgpl, lgpl2, lgpl3, artistic, apache, bsd ou mit)
- -e adresse électronique des mainteneurs
- -s seulement le binaire
- -n natif, ne pas générer d'archive .orig
- -f mkd-0~131215.tar.gz Ce sera l'archive originale
- -r CDBS directive pour créer le fichier de commande 'rules'
Fichiers nécessitant une explication
modifierdebian/changelog
modifiermkd (0~131215) saucy; urgency=low
* Initial Release.
-- Clara <email@mailserver> Thu, 19 Dec 2013 17:44:21 +0100
Notez que :
- à la création, l'option -n a initialisé la version "* Initial Release"
- nous avons modifié la première ligne pour préciser la version saucy (ubuntu 13.10)
- ici, dans ce cadre, l'adresse de courriel est masquée pour éviter les spams
debian/control
modifierSource: mkd
Section: unknown
Priority: extra
Maintainer: Clara <email@emailserver>
Build-Depends: cdbs, debhelper (>= 8.0.0)
Standards-Version: 3.9.4
Homepage: <insert the upstream URL, if relevant>
#Vcs-Git: git://git.debian.org/collab-maint/mkd.git
#Vcs-Browser: http://git.debian.org/?p=collab-maint/mkd.git;a=summary
Package: mkd
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Application for software maintenance.
mkd (commande unix), extracteur de documents.
.
mkd extrait la documenation logicielle incluse dans les fichiers sources.
.
mkd extract comments in source files and product maintainers documentation.
Notez que :
- le créateur de fichier a bien fait son travail ...
- nous avons ajouté la 'Description' qui sera affichée à l'installation par le gestionnaire d'archives
- d'autres champs peuvent être indispensables[2]
- si le copyright n'apparaît pas à l'installation avec le gestionnaire d'archives il est possible, si c'est indispensable, de l'ajouter à la fin la description longue.
debian/copyright
modifierFormat: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: mkd
Source: <http://edeulo.free.fr>
Files: *
Copyright: 1989-2001 Centre d'électronique de Montpellier <jpl@cem2.univ-montp2.fr>
1989-2013 Jean-Paul Louyot <emailjpl@mailserver>
License: GPL-3.0+
Files: debian/*
Copyright: 2013 Clara <emailclara@mailserver>
License: GPL-3.0+
License: GPL-3.0+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
.
This package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
.
On Debian systems, the complete text of the GNU General
Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
# Please also look if there are files or directories which have a
# different copyright/license attached and list them here.
# Please avoid to pick license terms that are more restrictive than the
# packaged work, as it may make Debian's contributions unacceptable upstream.
Notez que :
- l'option -c GPL a automatiquement créé la licence GPL-3+
- nous avons ajouté les droits de copie et les licences depuis l'origine du fichier
- ce droit de copie va apparaître dans les docs '/usr/share/doc/mkd/. ' et n'est pas vraiment nécessaire si on propose les fichiers HISTORY ou/et COPYING ou/et AUTHORS avec les droits détaillés.
debian/rules
modifier#!/usr/bin/make -f
include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/makefile.mk
# Add here any variable or target overrides you need.
# Cette classe est destinée à ceux qui ont uniquement un fichier Makefile (aucun autotools disponible) pour construire le programme. Vous avez uniquement besoin de quatre règles dans le Makefile :
# – une pour nettoyer le répertoire de construction (c’est-à-dire « mrproper »)
# – une pour construire votre logiciel (c’est-à-dire « myprog »)
# – une pour vérifier que votre logiciel fonctionne correctement (c’est-à-dire « check »)
# – une pour installer votre logiciel (c’est-à-dire « install »)
# Pour être honnête, la présence des règles d’installation n’est pas essentielle, mais cela aide toujours beaucoup lorsque vous les avez.
# The first operation, is to write the debian/rules. First, we add the include lines:
# Add here any variable or target overrides you need.
# if you detect authors’s loss of sanity, tell CDBS not to try running the nonexistent
# clean rule, and do the job yourself in debian/rules
DEB_MAKE_CLEAN_TARGET:= mrproper
DEB_MAKE_BUILD_TARGET:= mkd
DEB_MAKE_INSTALL_TARGET:= install
# no check for this software
##DEB_MAKE_CHECK_TARGET :=
# allow changing the makefile filename in case of emergency exotic practices
##DEB_MAKE_MAKEFILE:= MaKeFiLe
# example when changing environnement variables is necessary :
##DEB_MAKE_ENVVARS:= CFLAGS="-fomit-frame-pointer"
##DEB_BUILD_OPTIONS is checked for the following options :
##– noopt: utilise -O0 au lieu de -O2
##– nocheck: skip the check rule
# If your Makefile doesn’t support the DESTDIR variable, take a look in it and find the variable responsible for setting installation directory. If you don’t find some variable to do this, you’ll have to patch the file...
# C’est tout :)
Notez que :
- le fichier a été créé par l'option '-r CDBS'
- nous avons ajouté les commentaires de la notice
- notre nettoyeur s'appele 'mrproper' dans le Makefile d'empaquetage. on aurait pu utiliser le traditionnel 'clean'
- mkd est l'exécutable qu'il faut générer pour chaque configuration de processeur
- install va copier les fichiers ./mkd-0~131215/usr/* dans le répertoire ./mkd-0~131215/debian/mkd/usr/* .
A titre indicatif, il est possible d'utiliser une variante install DESTDIR=debian/mkd à condition de le prévoir; cette solution permet de créer un fichier temporaire de test avec install DESTDIR=debian/tmp/ (Pas vraiment utile !)
debian/doc
modifierNEWS
README
AUTHORS
COPYING
HISTORY
INSTALL
les fichiers NEWS à INSTALL seront copiés dans le répertoire ./mkd-0~131215/debian/mkd/usr/share/doc/mkd/ avant d'être recopié dans /usr/share/doc/mkd/. à l'installation du paquet.
./mkd-0~131215/debian/mkd/usr/share/doc/mkd/HISTORY
./mkd-0~131215/debian/mkd/usr/share/doc/mkd/NEWS.gz
./mkd-0~131215/debian/mkd/usr/share/doc/mkd/INSTALL
./mkd-0~131215/debian/mkd/usr/share/doc/mkd/AUTHORS
./mkd-0~131215/debian/mkd/usr/share/doc/mkd/changelog.gz
./mkd-0~131215/debian/mkd/usr/share/doc/mkd/COPYING
./mkd-0~131215/debian/mkd/usr/share/doc/mkd/copyright
./mkd-0~131215/debian/mkd/usr/share/doc/mkd/README
Notez que :
- ces fichier sont dans le répertoire origine
- ces fichiers ne sont pas tous indispensables. Les fichiers intéressant sont le plus souvent
- NEWS qui sont les nouveautés par rapport aux versions précédentes
- README qui sont les commentaires qui concernent ce paquet.
Vous pouvez ajouter :
- AUTHORS avec le droit de copie spécial à chaque contributeur
- COPYING même chose que Copyright, mais peut spécifier des particularités notamment si une partie du logiciel contient une autre source.
- HISTORY décrit l'historique et les péripéties du logiciel si il y a lieu
- INSTALL est généralement créé par un 'autotool'. Dans ce cas in est inutile de l'intégrer dans les docs, Dans notre cas on peut y préciser une autre manière d'installer le logiciel sans le paquet (qui ne sera donc pas automatiquement mis à jour)
On peut ajouter d'autres fichiers tels que :
- SURVEY souvent pour obtenir un soutien financier, mais ce peut être aussi un appel à contribution technique
- TRANSLATIONS demande d'aide pour traduire les messages et les manuels.
- ...etc.
debian/postinst
modifierCe fichier sera exécuté après l'installation du paquet et doit mettre les bases de données à jour.
#!/bin/sh -e
# file postinst for mkd debian installation
#
#
# POST INSTALL
#
echo " postinst : update icon cache "
gtk-update-icon-cache -t /usr/share/icons/hicolor
echo " postinst : install and update MIME database "
update-mime-database /usr/share/mime
# OPTIONS :
# update catman only if selected manuals exist in manpath :
# if [ -e $(MAN)"/man1/mkd.1.gz" ]; then catman -M $(MAN) 1 3; fi ;
# if [ -e $(MAN)"/de.UTF-8/man1/mkd.1.gz" ]; then catman -M $(MAN)/de.UTF-8 1; fi ;
# if [ -e $(MAN)"/de/man1/mkd.1.gz" ]; then catman -M $(MAN)/de 1 ; fi ;
# if [ -e $(MAN)"/fr.UTF-8/man1/mkd.1.gz" ]; then catman -M $(MAN)/fr.UTF-8 1; fi ;
# if [ -e $(MAN)"/fr/man1/mkd.1.gz" ]; then catman -M $(MAN)/fr 1 ; fi ;
#
# END POST INSTALL
#
Notez que :
- Si le manuel man1 du logiciel a été installé on peut aussi ajouter, en cas de nécessité, la mise à jour de la base de données 'whatis'. C'est en principe automatique ....
debian/postrm
modifierCe fichier sera exécuté après la désinstallation de l'application pour mettre les bases de données à jour.
#!/bin/sh -e
# file postrm for mkd debian installation
#
# POST RM
#
echo " postrm : update icon cache "
gtk-update-icon-cache -t /usr/share/icons/hicolor
echo " postrm : update MIME database "
update-mime-database /usr/share/mime
#
# END POST RM
#
Makefile d'empaquetage
modifier- Le fichier le plus important du répertoire origine est le Makefile
# file: Makefile pour version LINUX UNBUNTU 13.10 reprise de la version de janvier 2012 par Clara
#####################################################
### UBUNTU version for mkd_R_13.12 debian package ###
#####################################################
PGM = mkd
SRC = src
BINDIR = usr/bin
BINMODE = 755
SRCS = $(SRC)/mkd.c $(SRC)/asm.c $(SRC)/basic.c $(SRC)/cpp.c $(SRC)/fortran.c $(SRC)/pascal.c $(SRC)/shell.c $(SRC)/tri.c
HDRS = $(SRC)/version.h $(SRC)/mkd.h $(SRC)/asm.h $(SRC)/basic.h $(SRC)/cpp.h $(SRC)/fortran.h $(SRC)/pascal.h $(SRC)/shell.c $(SRC)/find.inc.c $(SRC)/find.inc.h $(SRC)/tri.h
OBJS = mkd.o asm.o basic.o cpp.o fortran.o pascal.o shell.o tri.o
LIBS =
CFLAGS = -O
LDFLAGS =
SPLINTFLAG = -weak
$(PGM): $(SRCS) $(HDRS)
-@echo "*********** update $(PGM) ***********"
$(CC) $(CFLAGS) -o $(PGM) $(SRCS)
@#$(CC) $(LDFLAGS) -o $(PGM) $(OBJS) $(LIBS)
-@echo " -- update $(BINDIR)/$(PGM):"
-@if [ -d $(BINDIR) ]; then \
mv -f $(PGM) $(BINDIR)/$(PGM);\
chmod $(BINMODE) $(BINDIR)/$(PGM);\
else \
echo "couldn't find $(BINDIR)";\
fi
install:
mkdir -p debian/mkd/usr/bin
cp -rf usr debian/mkd/.
mrproper:
rm -rf *~
rm -f $(PGM) $(BINDIR)/$(PGM)
rm -f $(OBJS)
1. nettoyage mrpropper
2. création de l'exécutable mkd
3. transfert des données et du binaire dans le répertoire debian/mkd/usr
- Les lettres majuscules définissent les macros habituelles dans les Makefiles
- La première directive $(PGM): $(SRCS) $(HDRS) va recompiler le binaire 'mkd' en fonction des processeurs : i386, amd64, etc. puis déplacer cet exécutable du répertoire courant vers le répertoire usr/bin
- La seconde directive va copier toute la hiérarchie du répertoire courant usr vers le répertoire debian/mkd/
- La troisième directive sert au nettoyage avant la création du paquet.
Création du paquet (debuild)
modifier#!/bin/bash
# File Buid-all-clara
echo " compilation "
cd mkd-0~131215
# clé de clara <emailclara@mailserver> sur le pc GE60 expire le 20 dec 2014 autorisée à déposer sur le ppa de JPL
debuild -S -sa -k49E6B949
cd ..
echo " put to distri server "
dput ppa:jean-paul-louyot/mkd mkd_0~131215-1_source.changes
echo " Attendre le résultat envoyé par courrier électronique ... "
echo " make local debian package "
cd mkd-0~131215
debuild -i -us -uc -b
cd ..
Notez que :
- ceci est la phase finale
- debuild -S -sa -k49E6B949 va créer les fichiers nécessaires à la recompilation des paquets sur le dépôt.
- dput ppa:jean-paul-louyot/mkd mkd_0~131215-1_source.changes. Il faut attendre quelque temps avant que le résultat nous parvienne en positif ou échec
- debuild -i -us -uc -b va créer un paquet local .deb
Échecs et mise à jour de paquets
modifierCréer et administrer un dépôt sur launchpad[3]
Éviter les échecs
modifierATTENTION : Le dépôt va utiliser l' archive d'origine dans toute la suite des procédures de mises à jour. Si vous avez modifié le Makefile par exemple, il est nécessaire de tout reprendre ou de faire un patch, car l'archive d'origine du dépôt ne va pas contenir le même Makefile, donc pas la même somme de contrôle.
Il est aussi possible de conserver, dans une archive native, le répertoire d'origine avec son sous répertoire debian; cela permet de conserver une mémoire des mises à jour .
- Il est à noter que
- les archives d'origine de série ne contiennent pas le répertoire debian
- le répertoire debian est contenu dans une archive séparée .debian.tar.gz
- Exemple de noms d'archives
- Archive du répertoire d'origine : <répertoire>-<version>.tar.gz
- Archive d'origine native : <répertoire>_<version>.tar.gz
- Archive d'origine de série : <répertoire>_<version>.orig.tar.gz
- Archive d'origine de série : <répertoire>_<version>-<n>.orig.tar.gz où <n> est une suite successive de série 1, 2, 3, etc.
Pour faire les essais il est préférable de lancer la commande 'Rebuild-all' (Clara pour le chiffrage du transfert)
#!/bin/bash
# File Rebuid-all-clara
echo " rm old files "
# rm old files
rm -f *.dsc
rm -f *.changes
rm -f *.build
rm -f *.upload
rm -f *.deb
rm -f mkd-0~131215/debian/*.ex
rm -f mkd-0~131215/debian/*.EX
echo " sauvegarde du répertoire debian"
echo " note d'option -n : les fichiers ne sont pas recopiés si ils existent"
# n'oubliez pas le ' .' après debian. choisir l' option -rf pour recréer les fichiers
cp -rn mkd-0~131215/debian .
# attention à la commande qui suit ...
# cette archive native de référence ne doit plus être récréée lors des mises à jour
# ---------------------------------
echo " re-créer le fichier natif .tar.gz pour tenir compte des modifications "
tar cvzf mkd-0~131215.tar.gz mkd-0~131215
#
# pour une mise à jour :
# -----------------------------------
# - attention au caractère souligné 'mkd_0'
# - mv mkd-0~131015.tar.gz mkd est l'original natif
# - mkd_0~131015.orig.tar.gz ne doit plus être changé
# echo " renommer le fichier original natif .tar.gz en .orig.tar.gz et ne plus le modifier "
# mv mkd-0~131015.tar.gz mkd_0~131015.orig.tar.gz
#
echo " dh_make va créer le répertoire debian avec de nouveaux fichiers si il a été supprimé "
echo " il ne sera pas recréé avec de nouveaux fichiers si il existe "
cd mkd-0~131215
dh_make -c GPL -e edeulo@free.fr -s -n -f mkd-0~131215.tar.gz -r CDBS
# cd..
echo " re-debuild -S -sa -k49E6B949 (Clara) "
# cd mkd-0~131215
debuild -S -sa -k49E6B949
# cd ..
echo " re-debuild -i -us -uc -b création du paquet local "
# cd mkd-0~131215
debuild -i -us -uc -b
cd ..
echo " Si tout s'est bien passé on peut envisager le dépôt "
echo " Entrer la commande 'Buid-all-clara' "
Pour éviter les échecs : Vérifier si tout se passe bien avant d'envoyer le fichier au dépôt.
Échecs
modifierLe transfert au dépôt ne se passe pas toujours très bien, il est rejeté. Il est nécessaire de corriger la construction du paquet.
Les rejets sont souvent dus aux commandes incluses dans le fichier Makefile.
Évitez d'utiliser des commandes susceptibles de renvoyer une valeur différente de zéro.
- Ecrivez rm -f <fichier> plutôt que rm <fichier>. rm -f renvoie zéro même si <fichier> n'existe pas.
- Supprimez le binaire dans la dépendance clean, faute de quoi le binaire ne sera pas mis à jour pour un autre processeur bien qu'il n'y ait aucune erreur de syntaxe.
- Vérifiez la validité des dépendances. N'écrivez pas clean : <fichier> ça n'a pas de sens.
- Veillez à ce que le contenu du répertoire soit propre, identique après compilation :
- De telle sorte que la somme de contrôle du répertoire soit la même après compilation; que tous les fichiers créés soient effacés.
- Effacer tous les fichiers '.o' (rm -f *.o) par exemple, ainsi que le nouvel exécutable qui a déjà été copié dans debian/mkd/usr/bin/
Launchpad renvoie des informations à l'auteur du transfert (Erreurs communes, la raison de l'échec, etc.)
- Rejected: Unable to find distroseries: unstable
- Dans debian/changelog il faut remplacer unstable par une version d'ubuntu : precise, ou version actuelle
- Rejected: Unable to find section: unknown
- Dans debian/control il faut remplacer unknown par la 'Sous-section' concernée[1] : devel pour nos applications
Si vous renvoyez le fichier tel quel avec la correction, il sera refusé si le fichier .upload se trouve dans votre répertoire:
- <UPLOADE_FILE> already exists in <LOCATION>
- Rejected because the logfile <package>_source on <host> .upload exist. Just remove the .upload file and re-run dput, or invoke dput with the flag -lf (-l run lintian before the upload; -f force an upload of an already uploaded package)
- Il faut supprimer le fichier .upload ou renvoyer le paquet corrigé avec les option -lf dput -lf [host [:arg]] package.changes
- Remarque : On peut éviter l'écriture du fichier .upload avec -option -U : dput -U
Résumé en cas d'échec :
- Si vous ne modifiez que les fichiers du répertoire debian dans une série
- Vous pouvez renvoyer les fichiers reconstruits après avoir effacé le fichier .upload
- → Dans une série, l'archive du répertoire debian est séparée. Suffixe: .debian.tar.gz
- Si vous modifiez un fichier du répertoire origine, contenant aussi le répertoire debian, il faut reconstruire le paquet !
- recharger l'original
- régénérer la source
- faire un patch ou reconstruire le paquet avec un numéro de version supérieur à la version en échec
- tester le transfert avec l'option dput -o, débugger avec l'option dput -d, simuler avec dput -s
- transférer le paquet source avec les changements (source.changes) avec dput -lf
- accessoirement, supprimer la version en échec sur launchpad. Cela peut arriver si on change de version Ubuntu dans le fichier changelog. (ATTENTION : La version n'apparaît plus, mais n'est jamais complètement effacée.)
Mise à jour de paquets
modifier- Cas traités
- 1 L'intention d'empaqueter (création de paquets multiples)
- 2 Patch (rustine)
- 3 Mettre à jour (création de paquets binaires simples)
- 4 Nouvelle version (Paquets natifs)
- 5 Dépôts sur Launchpad
Notes et références
modifier- Notes :
- Discussions[2] autour de l'empagetage debian et rpm ( mot de passe antispam : mkd )
- Références :