Page 1 sur 1

[PKGBUILD] bonnes pratiques avec sudo (résolu)

Publié : mer. 25 mars 2015, 14:23
par ElMoribond
Bonjour,

J'ai fait un script Python qui nécessite que la base de données de man soit à jour pour fonctionner correctement.
La commande est simple: mandb.

Le truc c'est que cette commande doit être exécutée avec les privilèges root.
Donc la question que je me pose est faut-il inclure la commande suivante dans build()?
sudo mandb
Si oui, faut-il la faire précéder d'un message pour indiquer pourquoi un password est demandé?
Ou alors est-il préférable d'afficher un message pour inviter l'utilisateur à le faire tout seul, comme un grand?

PS:
Si je mets cette commande en dernière ligne de package() j'obtiens le message suivant:
ERROR: ld.so: object 'libfakeroot.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

Re: [PKGBUILD] bonnes pratiques avec sudo

Publié : mer. 25 mars 2015, 14:33
par benjarobin
Bonjour,
Beaucoup de points ne vont pas dans ton raisonnement :
- sudo n'est pas forcément configuré ou même installé.
- toucher au système depuis un PKGBUILD est juste interdit et n'a pas de sens : si tu donnes le paquet compilé à quelqu'un ces commandes ne seront pas faites sur son ordinateur
- le fichier .install du paquet est fait pour cela
- cette commande est déjà lancé périodiquement par le système que je sache

Re: [PKGBUILD] bonnes pratiques avec sudo

Publié : mer. 25 mars 2015, 15:22
par ElMoribond
Merci et bravo pour ta réactivité.
Je me doutais bien que ce n'était pas la bonne façon.

En suivant tes conseils j'ai regardé le proto.install que j'ai sur ma machine.
J'ai donc placé le .install dans le tar.gz de mon paquet.
Mais la commande n'est pas lancée lorsque je teste via:

Code : Tout sélectionner

sudo pacman -U progname-1.0-1-any.pkg.tar.xz
Dans le proto il est indiqué

Code : Tout sélectionner

## arg 1:  the new package version
#post_install() {
        # do something here
#}
Argument de qui, de quoi?
Dans la déclaration?, genre

Code : Tout sélectionner

post_install("1.0") {
  sudo mandb
}
J'ai essayé avec et sans.

Dans l'appel à .install? Il faut donc le copier et l'exécuter dans package()?

Code : Tout sélectionner

cp .install $pkgdir/usr/share/$pkgname/
chmod +x $pkgdir/usr/share/$pkgname/
$pkgdir/usr/share/$pkgname/.install
rm $pkgdir/usr/share/$pkgname/.install
Bref, je nage sur ce point.

https://wiki.archlinux.fr/PKGBUILD#install
N'est pas beaucoup plus clair/précis sur ce sujet.
benjarobin a écrit : - cette commande est déjà lancé périodiquement par le système que je sache
Exacte.
Mais le premier réflexe de l'utilisateur suite à l'installation de mon paquet sera de tester.
Par exemple en demandant d'afficher l'aide dudit paquet. Par exemple:
manpagesgui manpagesgui
Et dans ce cas...
Plouf plouf, soit il essaie avec une autre commande. Et se dira que je ne fournit pas de man page, un comble pour ce genre de prog.
Soit il pensera que le prog n'est pas fiable.
Soit...
Bref,
Tout le monde n'est pas au fait concernant mandb, généralement, on ne s'en occupe pas.

Re: [PKGBUILD] bonnes pratiques avec sudo

Publié : mer. 25 mars 2015, 15:35
par benjarobin
Oula, je te conseil de te documenter sur bash, au moins comment les fonctions bash fonctionnent.
De plus le mieux est de prendre un exemple : gnome-media-player
Ne pas oublier non plus la ligne dans le PKGBUILD déclarant le .install, souvent cette ligne est celle-ci

Code : Tout sélectionner

install=$pkgname.install

Re: [PKGBUILD] bonnes pratiques avec sudo

Publié : mer. 25 mars 2015, 19:05
par FoolEcho
ElMoribond a écrit : Mais le premier réflexe de l'utilisateur suite à l'installation de mon paquet sera de tester.
Par exemple en demandant d'afficher l'aide dudit paquet. Par exemple:
manpagesgui manpagesgui
Et dans ce cas...
Plouf plouf, soit il essaie avec une autre commande. Et se dira que je ne fournit pas de man page, un comble pour ce genre de prog.
Soit il pensera que le prog n'est pas fiable.
Soit...
Bref,
Tout le monde n'est pas au fait concernant mandb, généralement, on ne s'en occupe pas.
Tu places juste la commande mandb dans le .install en suivant le modèle (autre possibilité: indiquer à l'utilisateur de lancer la commande ou tout autre chose qui te paraît pertinente sur l'utilisation de ton script) et c'est tout. Ni sudo, ni autre chose. N'hésite pas à poster l'ensemble PKGBUILD ici pour vérification... :chinois:

Re: [PKGBUILD] bonnes pratiques avec sudo

Publié : jeu. 26 mars 2015, 11:24
par ElMoribond
Merci FoolEcho,

J'y suis arrivé et le paquet est dispo sur AUR.
Voici le PKGBUILD

Code : Tout sélectionner

# Maintainer: ElMoribond <elmoribond@gmail.com>
pkgname=manpagesgui
pkgver=1.0
pkgrel=1
pkgdesc="GUI manual pager"
arch=(any)
url="https://github.com/ElMoribond/manpagesgui"
license=("GPL3")
depends=("python>=3.4", "pyqt5-common>=5.4", "man-db>=2.7", "man-pages>=3.78")
source=("$pkgname-$pkgver.tar.gz")
md5sums=("21fba58c8d605cae6b9bcf39b9200746")
install=$pkgname.install

package() {
  cd $srcdir/$pkgname-$pkgver
  mkdir -p $pkgdir/usr/share/$pkgname
  mkdir -p $pkgdir/usr/share/man
  mkdir -p $pkgdir/usr/bin
  mkdir -p $pkgdir/usr/share/applications
  cp LICENSE $pkgdir/usr/share/$pkgname/
  cp README.md $pkgdir/usr/share/$pkgname/
  cp __init__.py $pkgdir/usr/share/$pkgname/
  cp $pkgname.py $pkgdir/usr/share/$pkgname/
  cp -r i18n $pkgdir/usr/share/$pkgname/
  cp -r png $pkgdir/usr/share/$pkgname/
  cp -r man/* $pkgdir/usr/share/man/
  cp $pkgname.desktop $pkgdir/usr/share/applications/
  chmod +x $pkgdir/usr/share/$pkgname/$pkgname.py
  ln -s /usr/share/$pkgname/$pkgname.py $pkgdir/usr/bin/$pkgname
}
et manpagesgui.install

Code : Tout sélectionner

post_install() {
  if [ ${LANG:0:2} == "fr" ]; then
    _NAME="Pages du manuel"
    _DESC="Naviguer dans les pages du manuel Linux"
  else
    _NAME="Manuel pages"
    _DESC="Navigate through the Linux manual pages"
  fi
  sed -i -- "s/Name=manPagesGui/Name=$_NAME/g" /usr/share/applications/manpagesgui.desktop
  sed -i -- "s/Comment=/Comment=$_DESC/g" /usr/share/applications/manpagesgui.desktop
  mandb --quiet
}

post_upgrade() {
  post_install $1
}
Si vous avez des remarques et/ou corrections n'hésitez pas.

Re: [PKGBUILD] bonnes pratiques avec sudo

Publié : jeu. 26 mars 2015, 11:50
par FoolEcho
ElMoribond a écrit :

Code : Tout sélectionner

  if [ ${LANG:0:2} == "fr" ]; then
    _NAME="Pages du manuel"
    _DESC="Naviguer dans les pages du manuel Linux"
  else
    _NAME="Manuel pages"
    _DESC="Navigate through the Linux manual pages"
  fi
  sed -i -- "s/Name=manPagesGui/Name=$_NAME/g" /usr/share/applications/manpagesgui.desktop
  sed -i -- "s/Comment=/Comment=$_DESC/g" /usr/share/applications/manpagesgui.desktop
Ceci doit être fait au niveau de la fonction prepare dans le PKGBUILD si tu y tiens. Mais en aucun cas en post installation sur des fichiers du système (même ceux issus du paquet en cours d'installation).

Re: [PKGBUILD] bonnes pratiques avec sudo

Publié : jeu. 26 mars 2015, 11:50
par benjarobin
C'est quoi cette horreur de patcher le fichier desktop depuis le .install ? Comme le dit FoolEcho c'est en plus une très mauvaise pratique !
Le format .desktop fournit déjà un moyen de fournir des descriptions associées à la locale courante. Il suffit de prendre n'importe quel .desktop d'une grosse application populaire comme exemple

Re: [PKGBUILD] bonnes pratiques avec sudo

Publié : jeu. 26 mars 2015, 11:54
par FoolEcho
+1. :chinois:
(je ne m'étais pas attardé sur la modification en elle-même :wink: )

Re: [PKGBUILD] bonnes pratiques avec sudo

Publié : jeu. 26 mars 2015, 12:16
par ElMoribond
Tout a fait exact, je ne sais pas ce qu'il m'a pris :oops: :oops: :oops:
Je vais corriger ça de suite.

Re: [PKGBUILD] bonnes pratiques avec sudo (résolu)

Publié : ven. 27 mars 2015, 23:03
par bobo
ah… sed… c'est addictif :rasta2: