Pages : 1
#1 Le 19/10/2015, à 12:54
- JujuLand
Fabrication d'un paquet deb
bonjour,
Je ne suis pas sûr d'être dans le bon forum.
Je suis en train de mettre en place un logiciel de mon cru, et je veux créer un deb pour avoir une installation facile à proposer(cas 2).
J'ai procédé comme indique dans ce tutoriel.
Ca fonctionne très bien (avec l'exemple notamment), mais je me posais quelques questions:
1) Est-il possible avec le deb d'installer un dossier dans /home/$SUSER, et comment ?
2) Est-il possible de modifier les droits (chown) du répertoire, ou d'un sous-répertoire créé dans /opt (par exemple), pour les positionner avec les droits de $USER, et comment ? Ou cela est-il à la charge du programme et devra donc être effectué au premier lancement de l'appli ?
Merci
A+
Dernière modification par JujuLand (Le 19/10/2015, à 12:55)
Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)
Hors ligne
#2 Le 19/10/2015, à 13:20
- jplemoine
Re : Fabrication d'un paquet deb
1) Est-il possible avec le deb d'installer un dossier dans /home/$SUSER, et comment ?
A priori, non. puisque $USER est root dans le cas d'un installation "dans le système".
Peut-être s'il est installé dans le home (installation non conforme à la méthode habituelle)
2) Est-il possible de modifier les droits (chown) du répertoire, ou d'un sous-répertoire créé dans /opt (par exemple), pour les positionner avec les droits de $USER, et comment ? Ou cela est-il à la charge du programme et devra donc être effectué au premier lancement de l'appli ?
Il est possible de faire beaucoup de chose avec le script de post installation : on doit pouvoir changer les propriétaires/droits d'un répertoire et/ou un fichier.
Attention : normalement, les sous-répertoires de 1er niveau de /opt appartiennent à root et ne sont accessible qu'en lecture (+ exécution pour certains fichiers).
Tu peux avoir un sous répertoire (typiquement upload) qui est accessible en écrtiture pour tout un chacun.
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#3 Le 19/10/2015, à 13:42
- JujuLand
Re : Fabrication d'un paquet deb
Bonjour,
ok, je limiterai donc la création de dossier dans le home/$user au strict minimim, et à partir du premier lancement de l'appli.
Quand au droits dans /opt, , je vais procéder comme j'ai fait manuellement sur mon ordi (et çà fonctionne très bien), et je verrai ensuite quels sous dossiers dont je devrai modifier les droits, bien sûr dans le script de post-install.
Je n'ai pas vu encore comment et où il était positionné, mais en visualisant un deb, je devrai bien trouver.
Concernant les droits des dossiers sis dans opt, je suppose que c'est un principe avant tout, non ?
Merci
A+
Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)
Hors ligne
#4 Le 20/10/2015, à 16:50
- JujuLand
Re : Fabrication d'un paquet deb
Bon, j'ai trouvé une doc en ligne très complète qui m'a permis d'avancer.
Pourtant, j'ai quelques problèmes:
1) Lors de l'install avec gdebi-gtk, quand l'install est terminée, gdebi-gtk n'ajoute pas le bouton Reinstaller, ou lorsque je quitte et relance gdebi-gtk, il ne semble pas voir que la version est déjà installée, et ne me propose pas le bouton Désinstaller.
Je pense que j'ai sans doute oublié quelque chose, mais je ne vois pas quoi ...
2) Lors de la désinstallation avec dpkg, il me donne un message d'avertissement, et ne me supprime pas le dossier de l'appli :
Suppression de maintsys-client ...
dpkg : avertissement : lors de la suppression de maintsys-client, le répertoire « /opt/Maintsys » n'était pas vide, donc il n'a pas été supprimé.
Traitement des actions différées (« triggers ») pour « desktop-file-utils »...
Traitement des actions différées (« triggers ») pour « bamfdaemon »...
Rebuilding /usr/share/applications/bamf.index...
Traitement des actions différées (« triggers ») pour « gnome-menus »...
La aussi, j'ai sans doute oublié quelque chose (peut-être la même raison que pour le premier problème).
Ou tout simplement à cause de mon postinst qui modifie les droits de suelsues sous-répertoires ?
3) Je n'ai trouvé nulle part comment générer le fichier md5sums dans DEBIAN
Merci de vos lumières.
A+
Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)
Hors ligne
#5 Le 20/10/2015, à 18:05
- JujuLand
Re : Fabrication d'un paquet deb
Pour le problème de suppression avec dpkg, j'ai trouvé :
Il faut mettre le contenu complet du dossier applicatif en root:root avant création du deb.
Pour le reste, je cherche encore ...
Autre problème :
Avec le paquet j'installe des outils qui sont utilisés par plusieurs programmes que j'utilise.
Comment les préserver lors de la désinstallation du paquet ?
Merci
Dernière modification par JujuLand (Le 20/10/2015, à 18:06)
Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)
Hors ligne
#6 Le 20/10/2015, à 20:27
- JujuLand
Re : Fabrication d'un paquet deb
Pour l'install, j'ai trouvé çà :
Remplacements : champ Replaces
Le champ Replaces indique que le paquet contient des fichiers également présents dans un autre
paquet, mais qu'il a légitimement le droit de les remplacer. En l'absence de cette précision, dpkg
échoue en précisant qu'il ne peut pas écraser les fichiers d'un autre paquet (en fait, il est possible
de lui forcer la main avec l'option --force-overwrite). Cela permet d'identifier les problèmes
potentiels et contraint le mainteneur à étudier la question avant de choisir d'ajouter ou non ce
champ.
L'emploi de ce champ se justifie dans le cas de changements de noms de paquets ou lorsqu'un
paquet est intégré dans un autre. Cela se produit également quand le mainteneur a décidé de
répartir différemment les fichiers entre divers paquets binaires produits depuis le même paquet
source : un fichier remplacé n'appartient plus à l'ancien paquet, mais uniquement au nouveau.
Si tous les fichiers d'un paquet installé ont été remplacés, il est considéré comme supprimé.
Enfin, ce champ incite aussi dpkg à supprimer le paquet remplacé en cas de conflit.
par contre, je n'ai rien trouvé pour la désinstallation.
Est-ce que çà existe ?
A+
Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)
Hors ligne
#7 Le 20/10/2015, à 21:10
- JujuLand
Re : Fabrication d'un paquet deb
Bon, c'est bon pour la préservation.
un script prerm que preserve les fichiers dans /tmp
un script postrm qui remet çà
et le tour est joué
Il me reste çà :
1) Lors de l'install avec gdebi-gtk, quand l'install est terminée, gdebi-gtk n'ajoute pas le bouton Reinstaller, ou lorsque je quitte et relance gdebi-gtk, il ne semble pas voir que la version est déjà installée, et ne me propose pas le bouton Désinstaller.
3) Je n'ai trouvé nulle part comment générer le fichier md5sums dans DEBIAN
Merci
A+
Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)
Hors ligne
#8 Le 20/10/2015, à 21:19
- JujuLand
Re : Fabrication d'un paquet deb
C'est ok pour md5sums ... j'avais du mal chercher. Les sites en anglais sont très fournis
Exécuter çà depuis le répertoire de travail:
$ find . -type f ! -regex '.*.hg.*' ! -regex '.*?debian-binary.*' ! -regex '.*?DEBIAN.*' -printf '%P ' | xargs md5sum > DEBIAN/md5sums
Plus que çà :
1) Lors de l'install avec gdebi-gtk, quand l'install est terminée, gdebi-gtk n'ajoute pas le bouton Reinstaller, ou lorsque je quitte et relance gdebi-gtk, il ne semble pas voir que la version est déjà installée, et ne me propose pas le bouton Désinstaller.
Merci
A+
Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)
Hors ligne
#9 Le 20/10/2015, à 21:40
- jplemoine
Re : Fabrication d'un paquet deb
il y a un utilitaire qui permet de s'assurer que le paquet est de bonne qualité : lintian <nom_du_fichier.deb>
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#10 Le 21/10/2015, à 12:22
- JujuLand
Re : Fabrication d'un paquet deb
Bon, en passant lintian, et en corrigeant un maximum d'erreurs:
- droits
- contenus
- ajouts de certains fichiers (changelog, copyright, ...)
je suis arrivé à mes fins.
Lintian me jette beaucoup moins d'injures , et gedbi-gtk me propose bien les boutons réinstaller et supprimer
Reste juste quelques types d'erreurs ou warning:
E: maintsys-client: unstripped-binary-or-object opt/Maintsys/MaintHelp
E: maintsys-client: unstripped-binary-or-object opt/Maintsys/Maintsys-client
E: maintsys-client: unstripped-binary-or-object opt/Maintsys/maintntx
E: maintsys-client: unstripped-binary-or-object usr/local/bin/Gradients
E: maintsys-client: unstripped-binary-or-object usr/local/bin/splash
Je ne comprends pas trop le terme de 'unstripped' et je ne vois pas trop ce que je peux y faire, vu que ce sont des fichiers compilés avec harbour.
E: maintsys-client: missing-dependency-on-libc needed by opt/Maintsys/MaintHelp and 4 others
De plus, ils sont linkés en mode static, et donc embarquant les fonctions (sans liens dynamiques avec des librairies).
Je ne vois donc pas trop le sens de ce message.
E: maintsys-client: dir-or-file-in-opt opt/Maintsys/
A lire la doc de lintian, il est dit qu'un paquet debian ne doit pas être positionner dans /opt, qui est réservé aux logiciels additionels.
C'est pourtant le cas ici ...
E: maintsys-client: dir-in-usr-local usr/local/bin/
E: maintsys-client: file-in-usr-local usr/local/bin/Maintsys-client.sh
W: maintsys-client: file-in-unusual-dir usr/local/bin/Maintsys-client.sh
E: maintsys-client: file-in-usr-local usr/local/bin/colors
W: maintsys-client: file-in-unusual-dir usr/local/bin/colors
A lire la doc de lintian, il est dit que les fichiers programmes dans être mis dans /usr/bin et non dans /usr/local/bin, en pointant le risque que /usr/local ne soit monté en lecture seule sur des serveurs distants ... mouais ...
Et dans la doc debian, qu'il est préférable de déposer une archive et de la décompacter ensuite dans postinst
C'est pas un peu neuneu, car le résultat sera bien le même, non ?
Merci de vos commentaires
A+
Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)
Hors ligne
#11 Le 22/10/2015, à 08:15
- JujuLand
Re : Fabrication d'un paquet deb
Bon, je progresse ...
J'ai ajouté libc6 dans les 'depends', çà enlève donc cette erreur ...
Ayant eu quelques problèmes lors de tests d'install, réinstall et suppression, j'ai généré deux paquets pour éviter ce postrm, et je les mets dans /usr/bin pour éviter les file-in-usr-local.
Enfin, je considère les erreurs de file-in-opt comme normales, vu que c'est un produit additionnel.
En fin de compte, il ne me reste que les 'unstripped-binary' dont je n'ai toujours pas compris le sens.
A+
Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)
Hors ligne
#12 Le 22/10/2015, à 13:10
- JujuLand
Re : Fabrication d'un paquet deb
Pour ne pas à avoir à taper des commandes en pagaille, j'ai fait un petit script (make-dev) à mettre dans /usr/bin ou /usr/local/bin ou ~/bin (si vous avez ca défini dans votre .profile) et qui permet de construire un paquet de manière assez simple.
Il fut evidemment en préalable avoir créé la structure qui devra recevoir le projet.
#!/bin/bash
export version="1.00"
export make_root="" # Répertoire racine d'où sera exécuté ce script
. colors
if [ "x$gBlu" == "x" ]; then
color="0"
else
color="1"
fi
if [ "x"$make_root == "x" ]; then
# clear
echo " "
if [ "$color" == "0" ]; then
echo " make-deb v $version"
echo " "
echo -e " Vous avez oublié de paramétrer la variable nécessaire à l'exécution de ce script."
else
echo -e "$gBlu make-deb$noColor v$gGre $version$noColor"
echo " "
echo -e " Vous avez oublié de$gRed paramétrer la variable$noColor nécessaire à l'exécution de ce script."
fi
echo " Veuillez procéder à ce paramétrage, avant de relancer ce script."
echo " "
echo " Après, vous pourrez lancer $0 de nouveau ..."
echo
echo "Appuyez sur une touche pour continuer ..."
read
sudo nano $(which $0)
exit
fi
error="n"
if [ "x"$1 == "x" ]; then
error="o"
fi
if [ "y"$5 == "y" ]; then
error="o"
fi
if [ $error == "o" ]; then
echo " "
if [ "$color" == "0" ]; then
echo "Syntaxe : make-deb <root-folder> <deb-name> <version> <architecture> <dossier appli> [<dossier appli>] [<dossier appli>]"
echo " "
echo " où : <root-folder> est le dossier de travail"
echo " <deb-name> est le nom du paquet sans la version, ni le type d'install"
echo " <version> est la version"
echo " <architecture> est l'architecture de destination (amd64, i386, all)"
echo " <dossier-appli> est le dossier ou sera installé l'application (exemple: /opt/Maintsys)"
else
echo -e "Syntaxe :$gBlu make-deb$gGre <root-folder>$gCya <deb-name> $gBlu <version>$gCyan <architecture>$gRed <dossier appli> [<dossier appli>] [<dossier appli>]$noColor"
echo " "
echo -e " où :$gGre <root-folder>$noColor est le dossier de travail"
echo -e " $gCya <deb-name>$noColor est le nom du paquet sans la version, ni le type d'install"
echo -e " $gBlu <version>$noColor est la version"
echo -e " $gCya <architecture>$noColor est l'architecture de destination (amd64, i386, all)"
echo -e " $gRed <dossier-appli>$noColor est le dossier ou sera installé l'application (exemple: /opt/Maintsys)"
fi
echo " avec possibilité des trois dossiers maximum"
echo " "
exit
fi
cd $make_root
cd $1
echo " "
echo -e "$gBlu make-deb$noColor v$gGre $version$noColor"
echo "make-deb v $version - JujuLand" > ../lintian.log
echo $2_$3_$4 |tee -a ../lintian.log
LANG=C date -R >> ../lintian.log
echo " "
echo Vous pouvez copier la date, en cas de besoin dans le changelog ...
if [ "$color" == "0" ]; then
echo " "
else
echo -e $gGre
fi
LANG=C date -R
if [ "$color" == "0" ]; then
echo " "
else
echo -e $noColor
fi
read
echo -----------------------------------
echo Edition de control
sudo nano DEBIAN/control
echo -----------------------------------
echo Edition de preinst
ok="n"
if [ -e DEBIAN/preinst ]; then
ok="o"
else
echo "Ajoute-t-on un preinst ? (o/N) "
read ok
fi
if [ "$ok" == "o" ]; then
sudo nano DEBIAN/preinst
fi
echo -----------------------------------
echo Edition de postinst
ok="n"
if [ -e DEBIAN/postinst ]; then
ok="o"
else
echo "Ajoute-t-on un postinst ? (o/N) "
read ok
fi
if [ "$ok" == "o" ]; then
sudo nano DEBIAN/postinst
fi
echo -----------------------------------
echo Edition de prerm
ok="n"
if [ -e DEBIAN/prerm ]; then
ok="o"
else
echo "Ajoute-t-on un prerm ? (o/N) "
read ok
fi
if [ "$ok" == "o" ]; then
sudo nano DEBIAN/prerm
fi
echo -----------------------------------
echo Edition de postrm
ok="n"
if [ -e DEBIAN/postrm ]; then
ok="o"
else
echo "Ajoute-t-on un postrm ? (o/N) "
read ok
fi
if [ "$ok" == "o" ]; then
sudo nano DEBIAN/postrm
fi
echo -----------------------------------
echo Edition de changelog
gzip -d -c usr/share/doc/$2/changelog.gz > DEBIAN/changelog
sudo rm usr/share/doc/$2/changelog.gz
sudo nano DEBIAN/changelog
sudo chown $USER:$USER usr/share/doc/$2
gzip -c -9 DEBIAN/changelog > usr/share/doc/$2/changelog.gz
sudo chown -R root:root usr/share/doc/$2
sudo chmod 644 usr/share/doc/$2/changelog.gz
sudo rm DEBIAN/changelog
echo -----------------------------------
echo Edition de copyright
sudo nano usr/share/doc/$2/copyright
echo -----------------------------------
if [ -e usr/share/applications/$2.desktop ]; then
echo Edition de $2.desktop
sudo nano usr/share/applications/$2.desktop
fi
echo -----------------------------------
echo Edition de readme.txt
sudo nano $5/readme.txt
if [ "x"$6 != "x" ]; then
echo -----------------------------------
echo Edition de readme.txt
sudo nano $6/readme.txt
fi
if [ "x"$7 != "x" ]; then
echo -----------------------------------
echo Edition de readme.txt
sudo nano $7/readme.txt
fi
echo -----------------------------------
echo Génération de md5sums ...
sudo chown $USER:$USER DEBIAN/md5sums
sudo find . -type f ! -regex '.*.hg.*' ! -regex '.*?debian-binary.*' ! -regex '.*?DEBIAN.*' -printf '%P ' | xargs md5sum > DEBIAN/md5sums
sudo chown root:root DEBIAN/md5sums
cd ..
echo ----------------------------------- |tee -a lintian.log
echo Création de $2_$3_$4.deb ... |tee -a lintian.log
dpkg -b $1/ $2_$3_$4.deb |tee -a lintian.log
echo " " |tee -a lintian.log
echo ----------------------------------- |tee -a lintian.log
echo Vérification par lintian ... |tee -a lintian.log
lintian $2_$3_$4.deb >> lintian.log
cat lintian.log |grep -v "dir-or-file-in-" |grep -v "dir-in-" |grep -v "file-in-" > $2_$3_$4.log
rm lintian.log
echo " "
echo -----------------------------------
echo Affichage du log ...
echo " "
gedit $2_$3_$4.log &
PS : Je masque certaines erreurs dans le log (dir-or-file-in-, dir-in-, file-in-)
Ce script utilise colors, un autre script qui permet colorier les textes dans un terminal.
A déposer comme le script précédent sans /usr/bin, /usr/local/bin ou ~/bin
Ajouter çà dans .profile pour ne pas avoir à le répéter :
. colors (point, expace, colors)
#!/bin/bash
# Définition des couleurs
# Arrière-plan
export bBla='\033[40m'
export bRed='\033[41m'
export bGre='\033[42m'
export bYel='\033[43m'
export bBlu='\033[44m'
export bMag='\033[45m'
export bCya='\033[46m'
export bWhi='\033[47m'
# Encre Normal
export fBla='\033[30m'
export fRed='\033[31m'
export fGre='\033[32m'
export fYel='\033[33m'
export fBlu='\033[34m'
export fMag='\033[35m'
export fCya='\033[36m'
export fWhi='\033[37m'
# Encre gras
export gBla='\033[1;30m'
export gRed='\033[1;31m'
export gGre='\033[1;32m'
export gYel='\033[1;33m'
export gBlu='\033[1;34m'
export gMag='\033[1;35m'
export gCya='\033[1;36m'
export gWhi='\033[1;37m'
# Sans couleur
export noColor='\033[0m'
# Déplacements sur l'écran:
export mho='\033[0H'
export men='\033[0F'
export mle='\033[0D'
export mri='\033[0C'
export mup='\033[0A'
export mdo='\033[0B'
A+
Dernière modification par JujuLand (Le 22/10/2015, à 13:13)
Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)
Hors ligne
Pages : 1