Page 1 sur 1
[PKGBUILD] Problème avec un fichier (Résolu)
Publié : dim. 16 août 2015, 17:35
par Maximilien LIX
Hello world !
Je me suis décidé à apprendre à faire un PKGBUILD pour AUR avec un petit programme que j'avais fait en bash. Admin, une commande que j'ai faite pour administrer son Archlinux avec une commande et quelques arguments.
Bon après avoir suivi les indications du wiki francophone et anglophone, et d'après ce tutoriel sur Open Classroom ->
https://openclassrooms.com/courses/crea ... -archlinux (Qui n'est plus à jour puisque si j'ai bien compris, la fonction package est maintenant obligatoire)
Voici l'architecture de mon archive:
admin-1.0.tar.gz
├── conf
│ └── admin.rc
├── doc
│ └── admin.1.gz
└── src
├── admin
└── admin-functions.sh
(admin et admin-functions.sh sont dans src)
J'ai compris que $srcdir représent le dossier qui contient les sources du programme et que $pkgdir représente la racine pour le paquet. Admin étant constitué de fichiers shells, je n'ai pas inclus de Makefile et je ne sais pas en quoi la fonction build() peut m'être utile. Du coup j'ai surtout utilisé package() pour faire ceci:
Code : Tout sélectionner
pkgname=admin
pkgver=1.0
pkgrel=1
pkgdesc="A cli tool to manage easly an archlinux system"
arch=('any')
url="https://gitlab.com/MaximilienLIX/admin"
license=('GNU-GPLv3')
groups=usr
provides=
depends=('bash' 'mkinitcpio' 'sudo' 'coreutils')
optdepends=('firefox: To manage profile and sqlite data base.' 'grub' 'syslinux')
makedepends=
conflitcs=
replaces=
backup=
install=
source=("$pkgname-$pkgver.tar.gz")
md5sums=('90bbce552e1223de5fc4ee2663f2f8fe')
package()
{
mkdir -p $pkgdir/usr/bin/
mkdir -p $pkgdir/etc/
mkdir -p $pkgdir/usr/local/man/man1
cp $srcdir/admin $pkgdir/usr/bin
cp $srcdir/admin-functions.sh $pkgdir/usr/bin
chmod +x -R $pkgdir/usr/bin
cp conf/admin.rc $pkgdir/etc
cp doc/admin.1.gz $pkgdir/usr/local/man/man1
}
Je veux que admin (qui est un script bash) et admin-functions.sh soient dans le répertoire /usr/bin et que admin.rc (qui contient des variables globales) soit dans /etc.
Problème ? Et bien après installation admin.rc se trouve dans /usr/bin et du coup le programme ne peut pas marcher. :/
Bon j'ai conscience que c'est perfectible et que ce PKGBUILD doit vous piquer les yeux, mais avez-vous une idée pour résoudre mon soucis ?
Bref, merci d'avoir lu ce post et à pluche !

Re: [PKGBUILD] Problème avec un fichier
Publié : dim. 16 août 2015, 20:12
par papajoke
Bonjour,
1) Normalement dans l'archive (à télécharger) on a déjà la bonne arborescence (/usr/bin/script, /usr/share/...)
2) dans package() on utilise plutôt la commande install à la place de mkdir/cp
3) manque $srcdir : cp $srcdir/conf/admin.rc $pkgdir/etc
4) groups=usr ?????
5) source=("$pkgname-$pkgver.tar.gz") ???? pas sur un serveur web donc uniquement pour toi !!! utilise ton dépôt gitlab
Tu as des milliers d'exemples en furetant dans aur web , sans rien installer, le lien "Voir le PKGBUILD "
Re: [PKGBUILD] Problème avec un fichier
Publié : dim. 16 août 2015, 21:31
par FoolEcho
Salut,
D'autres remarques au passage: pas formidable d'avoir à installer (imposer ?) sudo en tant que dépendance. Le script le nécessite ?

Selon les standards d'Arch, rien ne doit finir dans /usr/local. La documentation doit aller dans /usr/share/man s'il existe ou /usr/share/doc/$pkgname s'il s'agit d'autre chose.
coreutils et bash sont des éléments du groupe base, tu n'as pas besoin de les spécifier (pareil pour base-devel).
mkinitcpio non plus en tant que dépendance du kernel, quel qu'il soit (linux faisant aussi parti de base).
Ton fichier de conf devrait aller dans /etc/$pkgname (/etc est réservé aux seules configurations indispensables du système).
Standard_paquetage
Re: [PKGBUILD] Problème avec un fichier
Publié : jeu. 20 août 2015, 10:12
par Maximilien LIX
D'accord merci, je prends note. ^^
Bon pendant mes 6 heures de TGV j'en ai profité pour modifier mon PKGBUILD comme ceci:
Code : Tout sélectionner
# Maintainer: Maximilien Di Dio <mrgamerlix@gmail.com>
pkgname=admin
pkgver=1.0
pkgrel=1
pkgdesc="A cli tool to manage easly an archlinux system"
arch=('any')
url="https://gitlab.com/MaximilienLIX/admin"
license=('GNU-GPLv3')
provides=
depends=('sudo')
optdepends=('firefox: To manage profile and sqlite data base.' 'grub' 'syslinux')
makedepends=('git')
conflitcs=
replaces=
backup=
install=
source=("$pkgname-$pkgver.tar.gz")
md5sums=('98426e545e112871830ab9fdd7d0b806')
package()
{
mkdir -p "$pkgdir/usr/bin/"
mkdir -p "$pkgdir/etc/$pkgname/"
mkdir -p "$pkgdir/usr/share/doc/$pkgname/"
cp "$srcdir/src/admin" "$pkgdir/usr/bin"
cp "$srcdir/src/admin-functions.sh" "$pkgdir/usr/bin"
chmod +x -R "$pkgdir/usr/bin"
cp "$srcdir/conf/admin.rc" "$pkgdir/etc/$pkgname/"
cp "$srcdir/doc/admin.1.gz" "$pkgdir/usr/share/doc/$pkgname/"
}
Après installation ma commande fonctionne bel et bien mais j'ai encore quelques questions. cp et mkdir ne sont pas recommandé mais comment dois-je utiliser install ?
Au lieu de ça:
Code : Tout sélectionner
mkdir -p "$pkgdir/usr/bin/"
cp "$srcdir/src/admin" "$pkgdir/usr/bin"
je devrais faire cela ?:
De plus, chez moi j'avais essayé avec mon dépôt GIT mais je ne vois pas comment je peux l'utiliser en tant que source.
Devrais-je faire comme ceci ?:
Merci.

Re: [PKGBUILD] Problème avec un fichier
Publié : jeu. 20 août 2015, 15:18
par Xorg
Attention à la variable
license
, il ne faut pas écrire n'importe quoi dedans ! Comme tu aurais dû le voir
ici, il faut un nom de fichier tel qu'il apparaît dans
/usr/share/licenses/common, donc ce n'est pas GNU-GPLv3 mais GPL3 qui est valide.
Ensuite, sache que tu n'es pas obligé de mettre des variables vides, s'il n'y a rien après le symbole égal, tu peux supprimer la variable.
Pour la commande
install
, c'est simple ; tu as l’option
-d
qui permet uniquement de créer un répertoire, ou l'option
-D
qui crée le répertoire et installe le fichier, ou tout simplement tu n'utilises pas d'options. On peut faire de différentes façons la même chose :
Code : Tout sélectionner
install -d "$pkgdir/usr/bin/"
install -m755 "$srcdir/src/"{admin,admin-functions.sh} "$pkgdir/usr/bin"
Ou bien :
Code : Tout sélectionner
install -Dm755 "$srcdir/src/admin" "$pkgdir/usr/bin/admin"
install -Dm755 "$srcdir/src/admin-functions.sh" "$pkgdir/usr/bin/admin-functions.sh"
C'est un peu en fonction de ce que tu as besoin de faire, la première solution étant un peu plus simple et plus naturelle (ça ressemble plus à ce que tu avais écrit).
Tu peux utiliser
-v
pour voir ce qu'il se passe si tu veux tester.
Concernant la partie Git, ne mélange pas tout. Sois tu fais un paquet versionné (toi par exemple, c'est la version 1.0), ou soit tu fais un paquet
-git
qui te permettra d'avoir les sources datant du dernier commit publié. Dans ton cas, tu n'as pas tagué de version sur ton dépôt Git, donc tu vas devoir faire un paquet nommé
admin-git
.
Ça donne ça en clair :
Code : Tout sélectionner
source=(git+https://gitlab.com/MaximilienLIX/admin.git)
md5sums=('SKIP')
J'ai mis
git+https
car le clone avec
git://
ne fonctionne pas avec ton dépôt chez moi. Si
git+https://
ne fonctionne pas, mets simplement
https://
.

Re: [PKGBUILD] Problème avec un fichier
Publié : ven. 21 août 2015, 00:25
par Maximilien LIX
Bon et bien je pense que c'est la bonne !
Voici mon PKGBUILD:
Code : Tout sélectionner
# Maintainer: Maximilien Di Dio <mrgamerlix@gmail.com>
pkgname=admin
pkgver=1.0
pkgrel=1
pkgdesc="A cli tool to manage easly an archlinux system"
arch=('any')
url="https://gitlab.com/MaximilienLIX/admin"
license=('GPL3')
provides=
depends=('sudo')
optdepends=('firefox: To manage profile and sqlite data base.' 'grub' 'syslinux')
makedepends=('git')
source=("git+https://gitlab.com/MaximilienLIX/admin.git")
md5sums=('SKIP')
package()
{
install -d "$pkgdir/usr/bin/"
install -d "$pkgdir/etc/$pkgname/"
install -d "$pkgdir/usr/share/doc/$pkgname/"
install -m755 "$srcdir/$pkgname/src/"{admin,admin-functions.sh} "$pkgdir/usr/bin"
install "$srcdir/$pkgname/conf/admin.rc" "$pkgdir/etc/$pkgname/"
install "$srcdir/$pkgname/doc/admin.1.gz" "$pkgdir/usr/share/doc/$pkgname/"
}
Bizarrement je n'ai pas pu utiliser l'option -D :/ J'avais un message d'erreur type "/usr/bin n'est pas un répertoire". Bref merci beaucoup pour votre aide

je vais finaliser tout ça avec AUR4 ^^ (du moins bientôt, j'ai encore quelques modifications à faire.)
Re: [PKGBUILD] Problème avec un fichier (Résolu)
Publié : ven. 21 août 2015, 01:08
par Xorg
Le
-D
c'est spécial, tu ne peux mettre qu'un seul nom de fichier en source, et tu es obligé de mettre un nom de fichier en destination, même si c'est le même. La destination avec
-D
, ça crée tout les répertoires, sauf ce qui est le plus à droite qui est toujours traité comme un fichier.
Va te créer un fichier nommé
rep dans
/tmp.
Va te créer un fichier nommé
fichier dans
/tmp/rep.
Mais comme tu as fait ça va très bien, c'était juste pour que tu saches que le
-D
existe.
Par contre attention, le mode par défaut est 755 quand tu n'utilises pas
-m
, alors ça fait que tu as installé ton fichier de configuration et ta page de manuel en mode exécutable. Il faut que tu utiles
-m644
pour les fichiers non-exécutables.
Dans le
/usr/share/doc/
, on ne met pas de pages de manuel. Les pages de manuel s'installent dans
/usr/share/man/manX pour celle en anglais, et
/usr/share/man/fr/manX
pour celles en français par exemple.
Re: [PKGBUILD] Problème avec un fichier (Résolu)
Publié : ven. 21 août 2015, 16:32
par Maximilien LIX
Ah bah je rectifie alors ^^
Mais pour la doc je dois donc faire ceci ?
Code : Tout sélectionner
install -m644 "$srcdir/$pkgname/doc/admin.1.gz" "$pkgdir/usr/share/man/manX/"
Re: [PKGBUILD] Problème avec un fichier (Résolu)
Publié : ven. 21 août 2015, 20:03
par Xorg
Maximilien LIX a écrit :Code : Tout sélectionner
install -m644 "$srcdir/$pkgname/doc/admin.1.gz" "$pkgdir/usr/share/man/manX/"
X c'est une variable que tu dois adapter.
Code : Tout sélectionner
install -m644 "$srcdir/$pkgname/doc/admin.1.gz" "$pkgdir/usr/share/man/man1/"
Au moins
man admin
fonctionnera.

Re: [PKGBUILD] Problème avec un fichier (Résolu)
Publié : sam. 22 août 2015, 23:38
par Maximilien LIX
D'accord, je me disais bien
Bon et bien voici le PKGBUILD final alors :
Code : Tout sélectionner
# Maintainer: Maximilien Di Dio <mrgamerlix@gmail.com>
pkgname=admin
pkgver=1.0
pkgrel=1
pkgdesc="A cli tool to manage easly an archlinux system"
arch=('any')
url="https://gitlab.com/MaximilienLIX/admin"
license=('GPL3')
depends=('sudo')
optdepends=('firefox: To manage profile and sqlite data base.' 'grub' 'syslinux')
makedepends=('git')
source=("git+https://gitlab.com/MaximilienLIX/admin.git")
md5sums=('SKIP')
package()
{
install -d "$pkgdir/usr/bin/"
install -d "$pkgdir/etc/$pkgname/"
install -d "$pkgdir/usr/share/man/man1/"
install -m755 "$srcdir/$pkgname/src/"{admin,admin-functions.sh} "$pkgdir/usr/bin"
install -m644 "$srcdir/$pkgname/conf/admin.rc" "$pkgdir/etc/$pkgname/"
install -m644 "$srcdir/$pkgname/doc/admin.1.gz" "$pkgdir/usr/share/man/man1/"
}
En espérant que ce soit la bonne

Re: [PKGBUILD] Problème avec un fichier (Résolu)
Publié : dim. 23 août 2015, 09:22
par FoolEcho
Maximilien LIX a écrit :En espérant que ce soit la bonne

Eh bien non.
Ton paquet étant issu d'un système de gestion de version (git), il doit répondre à certains standards sous Arch:
https://wiki.archlinux.org/index.php/VC ... elines#Git (nom du paquet suffixé par -git et gestion de la numérotation...).
Re: [PKGBUILD] Problème avec un fichier (Résolu)
Publié : dim. 23 août 2015, 23:44
par Maximilien LIX
ah là là mais c'est qu'ils sont exigeants les archers !
Bon et bien après modification, cela donne ça:
Code : Tout sélectionner
# Maintainer: Maximilien Di Dio <mrgamerlix@gmail.com>
pkgname=admin-git
_pkgname_simple=admin
pkgver=1.0
pkgrel=1
pkgdesc="A cli tool to manage easly an archlinux system"
arch=('any')
url="https://gitlab.com/MaximilienLIX/admin"
license=('GPL3')
depends=('sudo')
optdepends=('firefox: To manage profile and sqlite data base.' 'grub' 'syslinux')
makedepends=('git')
source=("git+https://gitlab.com/MaximilienLIX/admin.git")
md5sums=('SKIP')
pkgver() {
cd "$pkgname"
git describe --long | sed 's/\([^-]*-g\)/r\1/;s/-/./g'
}
package()
{
install -d "$pkgdir/usr/bin/"
install -d "$pkgdir/etc/$pkgname/"
install -d "$pkgdir/usr/share/man/man1/"
install -m755 "$srcdir/$_pkgname_simple/src/"{admin,admin-functions.sh} "$pkgdir/usr/bin"
install -m644 "$srcdir/$_pkgname_simple/conf/admin.rc" "$pkgdir/etc/$pkgname/"
install -m644 "$srcdir/$_pkgname_simple/doc/admin.1.gz" "$pkgdir/usr/share/man/man1/"
}
J'ai ajouté une variable avec un underscore pour ne pas la confondre avec les variables utilisées par défaut.

Re: [PKGBUILD] Problème avec un fichier (Résolu)
Publié : dim. 23 août 2015, 23:51
par benjarobin
La configuration ne devrait pas être dans /etc/admin-git mais bien dans /etc/admin. Il n'y a que le nom du paquet qui doit contenir le -git...
Bon après le nom du paquet peut éventuellement laisser à désirer (enfin je trouve)...
Re: [PKGBUILD] Problème avec un fichier (Résolu)
Publié : lun. 24 août 2015, 11:11
par Xorg
Je pense que ça serait bien que tu mettes la description pour les dépendances optionnelles (
grub et
syslinux), car sur la page
admin-git c'est marqué
(unknown), et du coup on ne comprend pas en quoi elles sont optionnelles. Il faudrait mettre une ligne (comme tu l'as fait avec
firefox) qui explique ce que ça apporte de plus, ça serait sans doute plus parlant.
Code : Tout sélectionner
optdepends=('firefox: To manage profile and sqlite data base.'
'grub: To do choucroute.'
'syslinux: To do tartiflette.')
Tu as encore des soucis dans ton PKGBUILD :
- tu utilises $pkgname au lieu de $_pkgname_simple à certains endroits, ce qui fait que ça ne fonctionne pas
- ton $pkgver est un nombre magique
Je te donne une version modifiée :
Code : Tout sélectionner
# Maintainer: Maximilien Di Dio <mrgamerlix@gmail.com>
pkgname=admin-git
_pkgname_simple=admin
pkgver=r48.5f5c372
pkgrel=1
pkgdesc="A cli tool to manage easily an archlinux system"
arch=('any')
url="https://gitlab.com/MaximilienLIX/admin"
license=('GPL3')
depends=('sudo')
optdepends=('firefox: To manage profile and sqlite data base.'
'grub: QUELQUE CHOSE'
'syslinux: QUELQUE CHOSE')
makedepends=('git')
source=("git+https://gitlab.com/MaximilienLIX/admin.git")
md5sums=('SKIP')
pkgver() {
cd "$_pkgname_simple"
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
package()
{
install -d "$pkgdir/usr/bin/"
install -d "$pkgdir/etc/$_pkgname_simple/"
install -d "$pkgdir/usr/share/man/man1/"
install -m755 "$srcdir/$_pkgname_simple/src/"{admin,admin-functions.sh} "$pkgdir/usr/bin/"
install -m644 "$srcdir/$_pkgname_simple/conf/admin.rc" "$pkgdir/etc/$_pkgname_simple/"
install -m644 "$srcdir/$_pkgname_simple/doc/admin.1.gz" "$pkgdir/usr/share/man/man1/"
}
Pour les explications, il faut que tu comprennes la subtilité de la différence entre $pkgname et $_pkgname_simple, ici on a utilisé que $_pkgname_simple, qui convient à nos besoins. $pkgname, c'est juste une formalité pour nommer correctement ton paquet au final.

Pour l'histoire du $pkgver, tu n'as pas de tag sur ton dépôt git, donc la version 1.0 n'a pas de sens car elle n'existe pas (il faut que tu la crées sinon). En l'absence de tag, on utilise le numéro de révision. Ça peut te sembler barbare tout ça, mais ça vient de
cette page; tu peux essayer toutes les commandes qui sont sur la page (à exécuter depuis ton dépôt local), et tu verras qu'uniquement celle avec le
printf
fonctionne.
Si vraiment tu veux utiliser un tag, tu devras faire sur ton dépôt :
Et là tu pourras mettre
pkgver=<version>
, et remettre
git describe --long | sed 's/\([^-]*-g\)/r\1/;s/-/./g'
dans la fonction
pkgver()
.

Re: [PKGBUILD] Problème avec un fichier (Résolu)
Publié : lun. 24 août 2015, 22:49
par Maximilien LIX
D'accord d'accord ^^ cependant, comment puis générer le nombre magique ? En fait si je comprends bien, c'est la fonction pkgver() qui le créer ?
https://wiki.archlinux.org/index.php/VC ... elines#Git
UP
C'est bon ! J'ai compris !
@benjarobin Oui oui je pense déjà à changer le nom. Il est vrai que 'admin' ça fait pas terrible.

Re: [PKGBUILD] Problème avec un fichier (Résolu)
Publié : mar. 25 août 2015, 00:03
par Xorg
J'ai dit nombre magique, mais c'est vrai que ce n'est pas tout à fait ça un nombre magique.
Généralement pour un paquet non-versionné (-git, -svn...), il y a une petite astuce pour obtenir le numéro de version via la fonction
pkgver()
: je laisse la variable $pkgver vide (
pkgver=
, et je lance la commande
updpgksums
, et ça va modifier le PKGBUILD et écrire
pkgver=r48.5f5c372
dedans. Oui, ça n'a pas de sens que de vouloir mettre à jour des sommes de contrôle qui n'existent pas, mais le résultat est là, ça permet de lancer la fonction
pkgver()
.
En fait, la fonction
pkgver()
sert surtout à être appelée quand on fait un
yaourt -Syu --devel
, avec tu peux mettre à jour les paquets non-versionnés si des sources plus récentes sont disponibles (par exemple si tu publies un nouveau commit dans ton dépôt).
Je pense qu'on a fait le tour de tout, ça me paraît tout bon. Félicitation, tu as écrit ton premier PKGBUILD.
Prochaine étape pour ajouter du piment :
le paquet .deb.

Re: [PKGBUILD] Problème avec un fichier (Résolu)
Publié : mar. 25 août 2015, 23:37
par Maximilien LIX
ah ah pourquoi pas
En plus il me semble que apt-get existe pour archlinux x)
Re: [PKGBUILD] Problème avec un fichier (Résolu)
Publié : mer. 26 août 2015, 01:10
par Xorg
Non mais je blague vraiment pour le .deb, c'est juste que j'ai déjà voulu essayer de faire un .deb, et quand tu ouvres le lien que j'ai donné plus haut, c'est juste indigeste comme documentation.
Oui, tu trouves
dpkg et
apt sur AUR par exemple. J'avoue que je ne comprends pas trop l'intérêt (il ne faut pas installer des paquets sous Arch avec ces logiciels), mais pourquoi pas.
Après, pour blablater sur la création des paquets, j'ai trouvé
cet article qui explique comment créer un .deb, ça paraît plus abordable que le premier lien.
Pour rester dans les grandes familles de paquet, j'ai trouvé
ça sur comment créer un .rpm, et ça ressemble aux PKGBUILDs je trouve.
Je dis ça car pour partager des petits logiciels (dans le sens où ils n'existent pas dans les dépôts) dans la grande famille GNU/Linux, ça me paraît intéressant d'être capable d'écrire différents types de paquets.
À titre personnel, je trouve ça fort dommage qu'il n'existe pas un unique gestionnaire de paquets pour toutes les distributions, sachant en plus que
Guix se prête bien au jeu. Mais je comprends tout-à-fait que, pour le besoin des distributions, elles utilisent leurs propres paquets et leurs propres dépôts (sinon il n'y aurait plus de distributions au final !), donc je comprends pourquoi Guix penne à percer. L'idéal serait de pouvoir faire cohabiter deux gestionnaires de paquets dans une distribution (par exemple Pacman et Guix) sans que ça casse le système (par exemple, Pacman aurait, au minimum, la liste des fichiers qui auraient été installé par le biais de Guix).
Je divague, mais j'avais envie de parler de ça. Je ferrai mieux d'aller me coucher maintenant.

Publié : mer. 26 août 2015, 23:05
par Loubrix
il me semble que Dpkg et Apt sont dans AUR pour permettre de créer des paquets Debian en étant sous ArchLinux...
Re: [PKGBUILD] Problème avec un fichier (Résolu)
Publié : mer. 26 août 2015, 23:15
par Maximilien LIX
Je suis tout à fait d'accord

l'idée d'un gestionnaire de paquet universel serait sympa mais bon, faut bien que les distributions se différencient les unes des autres sinon il n'y a pas de diversité et donc pas de choix pour l'utilisateur.
Après j'imagine que le fait que dpkg et apt soient dans AUR relève plus d'un défi technique, franchement j'ai pas spécialement envie de casser mon système à coup de paquets debian.

En ce qui concerne Fedora, j'ai beaucoup aimé ce système d'exploitation alors apprendre à faire un paquet rpm pour yum (oui je suis pas à jour ^^') pourrait être sympa.