Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails)

#1 Le 26/01/2014, à 19:26

Christophe C

Paquet debian et bug sur fichier postinst

Bonjour,

J'ai un bug sur un paquet debian, plus exactement sur son fichier postinst. je m'explique :

Le fichier postinst comprend :

#!/bin/bash
ps -e
sudo ln -s -f /usr/bin/plank-config.dockitem /home/chris/.config/plank/dock1/launchers/plank-config.dockitem 

Si je fait un sudo dpkg -i nom-du-paquet ou un gdebi-gtk nom-du-paquet.deb, ça marche nickel. Problème, le nom du user est en dur. Pas terrible.

Je modifie posinst pour qu'il soit plus générique :

#!/bin/bash
ps -e
sudo ln -s -f /usr/bin/plank-config.dockitem ~/.config/plank/dock1/launchers/plank-config.dockitem 

Si je fait un sudo dpkg -i nom-du-paquet ça marche très bien.
MAIS si je fais un gdebi-gtk nom-du-paquet.deb, le lien symbolique ne se crée pas. Je doit ajouter un sudo dpkg --configure -a, et là il se crée. le message d'erreur que me renvoie gdebi est :

Traceback (most recent call last):
  File "/usr/bin/gdebi-gtk", line 103, in <module>
    app.on_button_install_clicked(None)
  File "/usr/share/gdebi/GDebi/GDebiGtk.py", line 766, in on_button_install_clicked
    self.dpkg_action(widget, True)
  File "/usr/share/gdebi/GDebi/GDebiGtk.py", line 720, in dpkg_action
    dprogress.commit()
  File "/usr/share/gdebi/GDebi/GDebiGtk.py", line 928, in commit
    read += os.read(readfd,1).decode("utf-8")
  File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xc3 in position 0: unexpected end of data

Je précise que je n'ai pas de message d'erreur à la création du paquet, pas plus que d'erreur lintian.

J'avoue que le fait que cela passe avec un dpkg -i mais pas avec gdebi me semble fou. Si quelqu'un qui s'y connait peut m'aider, je serais bien content smile.

PS :
* postinst est bien en chmod 755
* j'ai remplacé ~ par $HOME, mais cela ne change rien

Dernière modification par Christophe C (Le 26/01/2014, à 19:29)


XL-WALLPAPER - changeur de fonds d'écran libre et très léger pour Xfce et LXDE.
Plank-config - Logiciel de configuration pour le dock Plank.

Hors ligne

#2 Le 26/01/2014, à 20:14

Christophe C

Re : Paquet debian et bug sur fichier postinst

Bon, je crois que je commence à comprendre : comme je suis en root, des variables comme $HOME ne renvoient plus /home/chris, mais /root.

Je suppose donc que le ~ fait la même chose ?? mais comment faire pour qu'un paquet debian place des fichiers dans le répertoire /.config/, alors ?

Dernière modification par Christophe C (Le 26/01/2014, à 20:15)


XL-WALLPAPER - changeur de fonds d'écran libre et très léger pour Xfce et LXDE.
Plank-config - Logiciel de configuration pour le dock Plank.

Hors ligne

#3 Le 26/01/2014, à 22:45

moths-art

Re : Paquet debian et bug sur fichier postinst

Tu n'as pas appris la relativité sous bash?
Si tu n'utilises que des chemins absolus, tu n'arriveras pas à tes fins...


Pour ton premier soucis, je dirais que ça vient de gdebi... (qui n'est qu'une surcouche de dpkg en python.)

Problème : y'a du parsing de fichiers et si les fichiers sont pas en utf-8, ça coince.
Y'a sans doute un fichier de ton app qui utilise un encodage différent et qui fout le dawa.

1. lance ceci à la racine de ton paquet:

file -i */*

et observe si un fichier affiche autre chose que du "charset=binary", "charset=utf-8", ou "charset=us-ascii"
Si oui, c'est sans doute le fichier posant problème.

2. si cette méthode ne met rien en exergue, il serait souhaitable d'éditer ton fichier "/usr/share/gdebi/GDebi/GDebiGtk.py" et via un "print" trouver quel fichier/ligne pose problème.

Enfin, si ton postinst ne sert qu'à des liens symboliques, ne serait pas préférable de mettre un fichier "monpaquet.links"?
(Ma question est peut-être naïve... je ne suis pas vraiment packager)

Si vraiment tu veux qu'on t'aide : est-il possible d'avoir accès aux sources (genre dépôt GIT) et ta config (version d'Ubuntu et gedebi)?

PS: Le credo du dev pour résoudre un bug c'est qu'il soit tout d'abord reproductible!

Hors ligne

#4 Le 29/01/2014, à 20:54

frenchy82

Re : Paquet debian et bug sur fichier postinst

Salut,

Si tu regardes sur ce lien
http://alp.developpez.com/tutoriels/deb … er-paquet/

dans la partie I-D. Les fichiers DEBIAN/postinst et DEBIAN/postrm

avec la commande touch tu peux creer un fichier dans le dossier choisi et d'y inserer ce que tu souhaites.
Tiu es obligé de faire un ln?

Hors ligne

#5 Le 01/02/2014, à 12:12

Christophe C

Re : Paquet debian et bug sur fichier postinst

Bonjour, désolé d'avoir traîné, je n'ai pas eu beaucoup de temps cette semaine. Et merci de vos interventions.

@moths-art :
- concernant la relativité, j'utilise ~/.config, ou $HOME/.config. Sans succès (ça marche très bien en script, mais pas dans le postinst utilisé avec gdebi). Tu pensais à autre chose ?
- Concernant un éventuel bug de gdebi, c'est possible (puisque mon postinst marche très bien avec dpkg -i), mais c'est de toute façon un bug que je dois contourner de façon générique (pas que chez moi), puisque mon .deb doit pouvoir s'installer ailleurs.
- "si ton postinst ne sert qu'à des liens symboliques, ne serait pas préférable de mettre un fichier "monpaquet.links"?"  Je n'ai pas compris ton idée ?
- Tester le chartset par un file -i : c'est clair que le pb vient de postinst -> je n'ai pas demessage d'erreur si je le supprime. Son chartset est charset=us-ascii, ce qui me semble normal, mais je vais voir comment le transformer en utf-8, à tout hasard. EDIT : non, ça ne change rien.

@frenchy82
- Oui, je connais ce site, mais je ne vois pas en quoi il m'aide sur ce coup là (il m'a aidé pour d'autres choses).
- utilisation de la commande touch : je croyais que cela ne servait qu'à modifier l'horodatage d'un fichier. Comment l'utiliser, dans le cas présent ?

Dernière modification par Christophe C (Le 01/02/2014, à 12:53)


XL-WALLPAPER - changeur de fonds d'écran libre et très léger pour Xfce et LXDE.
Plank-config - Logiciel de configuration pour le dock Plank.

Hors ligne

#6 Le 01/02/2014, à 12:27

frenchy82

Re : Paquet debian et bug sur fichier postinst

Bonjour,

La commande touch permet donc de creer un fichier (désolé si tout cela est deja tres clair pour toi)

touch ~/.config/plank/dock1/launchers/plank-config.dockitem

la commande echo permet de rajouter des lignes dans ce fichier nouvellement créé.
C'est pour cela que je me demandais si tu pouvais t'éviter de passer par le ln

Hors ligne

#7 Le 01/02/2014, à 12:32

jeanjd63

Re : Paquet debian et bug sur fichier postinst

Salut
Ce que je ne comprends pas c'est pourquoi tu passes par sudo pour dpkg (tu gardes ton environnement $USER) et pas avec gdebi (où j'ai raté qq chose).
@+

Hors ligne

#8 Le 01/02/2014, à 12:58

Christophe C

Re : Paquet debian et bug sur fichier postinst

@frenchy82 : Ah oui, je savais qu'on pouvais créer un fichier vide avec touch. Donc ensuite je peux le remplir, bien sur. Je n'avais pas compris ton idée. Je peux aussi faire un mv ou un cp. Mais en fait ce n'est pas le ln qui ne marche pas, c'est le chemin.

@jeanjd63 : je fais un sudo dpkg parce que sinon dpkg me le demande. Et je ne fait pas de sudo gdebi, parce que gdebi se met tout seul en sudo (il demande le mot de passe lors de l'installation du paquet). Ceci dit tu a raison : si je lance gdebi en sudo, l'installation marche très bien (dès lors pourquoi me demande t'il un mot de passe lors de l'install du paquet ?). M'enfin, gdebi est un prog graphique supposé fonctionner sans le lancer en mode console et en sudo !!

Ce que je conclu de tout cela c'est qu'il y a un pb sur le chemin puisqu'un postinst contenant sudo ln -s -f /usr/bin/plank-config.dockitem ~/.config/plank/dock1/launchers/plank-config.dockitem et lancé avec sudo gdebi ou sudo dpkg s'installe, quand il ne s'installe pas si je lance gdebi en mode normal (en console ou via un clic droit sur le .deb).

Donc je ne pige tjs pas ce que je dois faire, en fait. J'ai l'impression qu'il y a un bug dans gdebi, mais il doit forcément se contourner : les paquets habituels s'installent, après tout.

Dernière modification par Christophe C (Le 01/02/2014, à 13:01)


XL-WALLPAPER - changeur de fonds d'écran libre et très léger pour Xfce et LXDE.
Plank-config - Logiciel de configuration pour le dock Plank.

Hors ligne

#9 Le 01/02/2014, à 13:04

Christophe C

Re : Paquet debian et bug sur fichier postinst

Bon, ça plante aussi avec la logithèque, donc ce n'est surement pas seulement un bug de gdebi.
Je pense que ma méthode pour installer quelque chose dans les répertoires de config est mauvaise, tout simplement. Sauf que je n'arrive pas à trouver comment faire.


XL-WALLPAPER - changeur de fonds d'écran libre et très léger pour Xfce et LXDE.
Plank-config - Logiciel de configuration pour le dock Plank.

Hors ligne

#10 Le 01/02/2014, à 13:57

Christophe C

Re : Paquet debian et bug sur fichier postinst

j'ai retiré le sudo avant la commande ln, pour voir si cela changeait quelque chose, mais c'est exactement pareil. cela ne marche ni mieux ni moins bien.

Bizarrement, si je fais un echo $HOME >> toto.txt dans le postinst (pour voir ce que celui-ci utilise réellement comme valeur de $HOME), j'ai une adresse nickel de mon répertoire de config. Donc tout est juste .... mais cela ne marche pas.

Dernière modification par Christophe C (Le 01/02/2014, à 14:14)


XL-WALLPAPER - changeur de fonds d'écran libre et très léger pour Xfce et LXDE.
Plank-config - Logiciel de configuration pour le dock Plank.

Hors ligne

#11 Le 01/02/2014, à 15:15

frenchy82

Re : Paquet debian et bug sur fichier postinst

Re,

J'ai beau chercher et je n'ai pas l'impression que le paquet deb puisse gerer cela
http://ubuntuforums.org/archive/index.p … 43497.html

Il semble qu'il soit plus conseillé que ce soit ton code que gere cela. "A son lancement, Je cherche si le fichier existe dans le home sinon je vais le creer"

Hors ligne

#12 Le 01/02/2014, à 15:46

Christophe C

Re : Paquet debian et bug sur fichier postinst

Oui, j'avais lu d'autres trucs du même genre. Sauf que dans mon cas, j'ai vraiment besoin d'installer quelque chose dans le rep de config AVANT la 1er utilisation.

je veux bien croire que les paquets DEBIAN soient limités, mais pas au point de ne pas savoir gérer quelque chose d'aussi simple. Il doit bien y avoir une solution (ou pas smile ).
En fait, de ce que j'ai compris, c'est justement à cela que sert le fichier postinst : à contourner une limitation des paquets debian, qui ne savent installer des fichiers que dans les répertoires racines genre /usr/bin ou /usr/share. C'est là que passe le script de post install, qui gère alors autre chose.

Sauf que là, snif, ça marche pô.

Dernière modification par Christophe C (Le 01/02/2014, à 19:08)


XL-WALLPAPER - changeur de fonds d'écran libre et très léger pour Xfce et LXDE.
Plank-config - Logiciel de configuration pour le dock Plank.

Hors ligne

#13 Le 02/02/2014, à 18:44

moths-art

Re : Paquet debian et bug sur fichier postinst

En relisant le topic, je vois une incohérence massive!

Tu veux mettre un lien relatif dans ton home d'une cible présent dans /usr/bin?
D'une part, quand tu installes un paquet en root, c'est un peu criminel de forcer un lien pour un utilisateur en particulier, non?
Je vois vraiment pas l'intérêt???? (En plus, t'auras pas les droits pour l'éditer... sauf si tu fais un chmod derrière)

C'est vraiment contraire à la mentalité UNIX, non?

Si tu veux une config propre à un ensemble d'utilisateurs, tu l'as met dans /etc/.
Tu peux effectvivement avoir des fichiers de config dans /home/user/.config mais leur config surchargera la config dans /etc/.
L'idée d'une config en espace utilisateur étant d'avoir des configs différentes entre les différents utilisateurs.
Si tu fais un lien, tu écrases forcément la config communes à tous... intérêt nul.

En fait, de ce que j'ai compris, c'est justement à cela que sert le fichier postinst : à contourner une limitation des paquets debian...

Tu as raison mais ça ne sert pas à faire tout et n'importe quoi.
Si tu violes certains principes de base de sécurité, il ne sera jamais accepté par des packageurs debian ou ubuntu.

Donnes nous tes réels intentions et tu auras des réponses clairs.
Je ne connais pas plank par exemple : donnes nous des détails de ce soft, ton utilisation, pourquoi tu veux le packager (utilisation perso ou pour la communauté) etc.

Dernière modification par moths-art (Le 02/02/2014, à 18:45)

Hors ligne

#14 Le 03/02/2014, à 14:22

Christophe C

Re : Paquet debian et bug sur fichier postinst

Plank est un dock sans interface de config.
Je fais et je package un piti prog graphique de config.
J'ai besoin de placer une icone de lancement dans /.config, de façon à ce que le menu de config apparaisse sur le dock. Je ne pense pas que cela soit "criminel".
Il n'y a aucune gestion des icones de plank dans /etc/ (uniquement dans /.config), donc je ne surcharge rien.
Aucun pb de sécurité à mettre une icone automatiquement dans un dock.


XL-WALLPAPER - changeur de fonds d'écran libre et très léger pour Xfce et LXDE.
Plank-config - Logiciel de configuration pour le dock Plank.

Hors ligne

#15 Le 06/02/2014, à 20:14

moths-art

Re : Paquet debian et bug sur fichier postinst

Tu confonds finalité et procédure à mon sens.

Je ne connais aucun programme qui installe via postinst (ou autre chose) des fichiers dans l'espace utilisateur.
Pour Plank, il fait comme la majorité des softs : au premier lancement, il crée des fichiers dans ~/.config dont les fameux launchers.
C'est pas le paquet debian qui s'occupe de ça.

Pour savoir comment il s'y prend, il va falloir chercher un peu dans le code source... ou te rapprocher de l'équipe de dev.

Mais à mon humble avis, il vérifie si les app dans /usr/share/applications sont effectivement lancés et crée un fichier .dockitem dans l'affirmative.

Je ne saurais t'en dire plus... je pratique pas le Vala wink

Hors ligne

#16 Le 07/02/2014, à 14:23

Christophe C

Re : Paquet debian et bug sur fichier postinst

Oui, en fait il y a 3 questions un peu différentes.

- Est-ce que cela m'arrange ? Oui.
- Est-ce que c'est bien ? Je ne vois pas le problème à toucher l'espace utilisateur (que cela se fasse à l'install ou au 1er lancement, je ne vois pas vraiment de différence), mais on peut bien sur en discuter.
- Est-ce que c'est faisable ? Et bien en théorie oui, et en pratique non. J'avoue que je ne comprend pas (et je ne vois rien dans la doc debian) pourquoi un script postinst marche quand on le lance le paquet debian avec sudo dpkg, sudo gdebi, mais pas avec gdebi (qui demande pourtant le mot de passe) ni avec la logithèque (qui demande aussi un mot de passe). Il n'y a pas de logique que je comprenne dans la façon dont les prog marchent.

Au final c'est ce côté zarb qui m'agace : j'aime bien comprendre. Bon, enfin je pense que je vai laisser tomber. Ce n'est pas un drame, non plus.

Dernière modification par Christophe C (Le 07/02/2014, à 14:24)


XL-WALLPAPER - changeur de fonds d'écran libre et très léger pour Xfce et LXDE.
Plank-config - Logiciel de configuration pour le dock Plank.

Hors ligne

#17 Le 07/02/2014, à 14:46

moths-art

Re : Paquet debian et bug sur fichier postinst

Est-ce que cela m'arrange ? Oui.

Si c'est  un paquet que tu réserves simplement pour ton utilisation perso ou pour un parc que tu administres... c'est TA responsabilité donc tu peux faire en gros ce que tu veux...
Si tu veux un jour proposer ton taf à la communauté, tu ne peux pas faire ce que tu veux et je préfère te prévenir avant que tu partes dans une mauvaise voie.

- Est-ce que c'est bien ?

Je ne suis ni packager ni admin sys donc mes explications sont sous le couvert d'une connaissance limité.
Je comprend que pour toi la barrière entre soit toucher à l'espace utilisateur à l'install soit au lancement est subtile voir ridicule.
Grosso modo, dans le monde unix : l'utilisateur root est un utilisateur comme un autre... avec simplement la possibilité de mettre à dispo des programmes aux autres utilisateurs.
Il n'a en revanche pas plus de droit sur les données des autres utilisateurs.
Par conséquent, installer des fichiers de config à l'insu de l'utilisateur présente une aberration.

Dans le cas ou les fichiers de conf sont créé au premier lancement, l'utilisateur choisi délibérément de lancer le soft... la démarche est donc différente.

Est-ce que c'est faisable ?

C'est bien évidement faisable et pas quand théorie.
Vu que ton postinst est lancé en root, tu listes les utilisateurs et tu crées pour chacun le dossier de conf approprié avec ton fichier "plank-config.dockitem" qui va bien.
Ensuite, tu donnes les droits nécessaires. (chmod, chown)

Maintenant, ça nécessite des précautions : si un (ou plusieurs) de tes utilisateurs ont déjà une config, il ne faut sans doute pas l'écraser par la nouvelle.

Dernière modification par moths-art (Le 07/02/2014, à 14:51)

Hors ligne

#18 Le 07/02/2014, à 15:27

Christophe C

Re : Paquet debian et bug sur fichier postinst

Par conséquent, installer des fichiers de config à l'insu de l'utilisateur présente une aberration.
Dans le cas ou les fichiers de conf sont créé au premier lancement, l'utilisateur choisi délibérément de lancer le soft... la démarche est donc différente.

Oui, mais il a choisit d'installer le paquet, donc il n'y a pas tant de différence. Comme tu l'indique, je trouve le distinguo entre installer le prog volontairement et le lancer volontairement très subtile (on installe rarement un programme pour ne pas le lancer au moins 1 fois), mais je comprends le point de vue.

Comme indiqué précédement, je pense que je vais laisser tomber (et puis j'entend tes arguments), mais pour réagir sur ce que tu dis à la fin : je ne vais pas créer un répertoire utilisateur, mais utiliser le répertoire utilisateur que plank a déjà créé. Donc normalement je ne vais pas créer de droits (?). Ce qui me surprend c'est que qd je mets dans le postinst un echo $HOME >> toto.txt, il m'indique bien que $HOME est pour lui l'utilisateur par défaut (je me demandais s'il ne prenait pas Mr Root, mais ce n'est pas le cas).
Tu comprends pourquoi cela ne marche pas ? Je suis vraiment perplexe.

Dernière modification par Christophe C (Le 07/02/2014, à 15:28)


XL-WALLPAPER - changeur de fonds d'écran libre et très léger pour Xfce et LXDE.
Plank-config - Logiciel de configuration pour le dock Plank.

Hors ligne

#19 Le 07/02/2014, à 15:40

moths-art

Re : Paquet debian et bug sur fichier postinst

Oui, mais il a choisit d'installer le paquet

Ben non. C'est l'utilisateur "root" qui a choisit d'installer le paquet, pas l'utilisateur lambda.
C'est cette notion qui t'échappes : tu peux très bien avoir plusieurs utilisateurs et que 1 seul qui soit intéressé/utilisateur de plank.

Si tu fais appel à $(HOME) en tant qu'utilisateur root, cette variable doit te renvoyer "/root" : c'est effectivement un peu bizarre ton histoire...

Va falloir être plus explicite sur la procédure de création de ton paquet là.
T'as un dépôt ou une archive actuelle pour y jeter un coup d’œil?

Hors ligne

#20 Le 07/02/2014, à 18:55

frenchy82

Re : Paquet debian et bug sur fichier postinst

Bonjour,

Cela ne correspond peut être pas tout a fait a ta demande
http://manpages.ubuntu.com/manpages/pre … per.1.html

Mais cela peut être une piste et à verifier que le mv_conffile gere bien le $home

Hors ligne

Haut de page ↑