Auteur Sujet: Syntaxes et formalitées pour la construction d'un paquet  (Lu 351 fois)

tnut

  • Administrator
  • Hero Member
  • *****
  • Messages: 622
  • Karma: 4
    • NuTyX distribution
Syntaxes et formalitées pour la construction d'un paquet
« le: lun. avril 17 07:59:28 2017 »
Bon allez je me lance, je propose de mettre ici ce post verrouillé "afficher en premier" et d'y mettre toutes les syntaxes, les règles, les définitions necessaire pour la construction d'un paquet. N'hésitez pas à proposer des améliorations, à poser des questions sur les points obscures. J'en tiendrai compte le plus possible. L'idée ensuite est d'en faire une page officielle (ENFIN) sur le site.

Aller c'est parti:

1. Le dossier

Le dossier d'un paquet doit s'appeler par le nom du paquet, la longueur du nom du dossier (et donc le nom du paquet) ne doit pas dépasser 50 caractères.
- Il ne peut pas contenir de majuscules, ne peut pas commencer par un chiffre.
- Il doit commencer par une lettre minuscule
- Il peut contenir les 26 lettres a à z, les 10 chiffres 0 à 9, et les trois symboles -, _  et +

Exemple: /usr/ports/mes_paquets/xmms

Ici le nom du paquet DOIT être xmms

2. Le contenu du dossier

On trouve dans le dossier  /usr/ports/mes_paquets/xmms au minimum un fichier qui s'appelle Pkgfile
On peut également trouver un script de pré-installation et un script de post-installation. Ils devront prendre le nom du paquet en préfix, donc toujours avec xmms comme nom de paquet:

- xmms.pre-install
- xmms.post-install

On peut également trouver un ficher README. Il prendra également le nom du paquet en préfix

- xmms.README

3. Le contenu du fichier Pkgfile

3.1 Les dépendances

Les dépendances sont spécifiées dans une ligne de commentaire sous la forme:

# Depends on: glibc gtk2 glib libvorbis python
3.2 Les variables à notre disposition

Une recette suit toujours un modèle choisi qui dépendra du genre de paquet que l'on souhaite produire.
Les variables sont alors utiles pour personnaliser notre modèle choisi à moindre effort et en faire une recette spécifique.

3.2.1 Les variables indispensables

version=versiondupaquet
release=nième tentative

3.2.2 Les variables vivements recommandées

# Même si la variable name n'est pas obligatoire, elle est vivement recommandée pour améliorer la clarté du Pkgfile
name=nomdupaquet
# Un ou plusieurs alias peuvent être spécifiés
# Dans tous les cas, à utiliser avec prudence. Il faut s'assurer qu'aucun paquet existant ne porte le nom d'un des alias.
# Contrairement au nom, un alias peut contenir des majuscules.
alias=(nom1 nom2 nom3)
# Une description peut contenir 110 caractères maximum,
# pensez à être court et précis dans la description du paquet
description="Description du paquet"

# Informations  disponible sur le net
url="http://www.siteinternetdupaquet.com"
packager="celui@qui.fait.lepaquet.com"
maintainer="celui@qui.maintient.le.paquet.en.amont.com"
group=nom_du_groupe_du_paquet

# Dépendances non détectées automatiquement et devant être spécifiées pour le fonctionnement du paquet
run=( python)
source=(http://downloads.siteinternetdupaquet.com/$name.$version.tar.xz)

3.2.2 Les variables disponible

Toutes les variables définies dans le fichier de configuration /etc/pkgmk.conf peuvent être réutilisées et donc redéfinies.
Consultez le man de pkgmk.conf

PKGMK_KEEP_SOURCES="no"
PKGMK_GROUPS=()
PKGMK_COMPRESSION_MODE="xz"
PKGMK_NO_STRIP="yes"

3.3 Les fonctions à notre disposition

Les fonctions disposent de deux variables spécifiques qui ne doivent pas être définies. Ces deux variables sont également prédéfinies dans le fichier
fichier de configuration /etc/pkgmk.conf par l'intermédiaire de variable PKGMK_WORK_DIR (dossier parent de SRC et de PKG)

- SRC est la variable qui définie le dossier racine de travail.
- PKG est la variable qui définie le dossier racine des fichiers à empaqueter

3.3.1 La fonction  build()  est obligatoire

Voici un des modèles qui sera le plus utilisé
build() {
  cd $name-$version
  ./configure --prefix=/usr
  make
  make DESTDIR=$PKG install
}

3.3.1 Les autres fonctions reconnues en option

prepare() {
...
}
package() {
...
}
man(){
...
}
devel() {
...
}
service() {
...
}
doc() {
...
}
lib() {
...
}
« Modifié: mer. avril 19 21:28:58 2017 par tnut »

guy_

  • Jr. Member
  • **
  • Messages: 55
  • Karma: 3
Re : Syntaxes et formalitées pour la construction d'un paquet
« Réponse #1 le: lun. avril 17 09:52:17 2017 »
Bonjour tnut,

Au point 3.2, je pense qu'il faudrait remplacer
   PKGMK_COMPRESS_MODE="no"
par
   PKGMK_COMPRESSION_MODE="no"

Bàt,

Guy
   
« Modifié: lun. avril 17 10:48:36 2017 par tnut »

tnut

  • Administrator
  • Hero Member
  • *****
  • Messages: 622
  • Karma: 4
    • NuTyX distribution
Re : Syntaxes et formalitées pour la construction d'un paquet
« Réponse #2 le: lun. avril 17 10:33:36 2017 »
Merci Guy_,

ajusté
« Modifié: lun. avril 17 10:48:31 2017 par tnut »

Sipo

  • Jr. Member
  • **
  • Messages: 81
  • Karma: 3
Re : Syntaxes et formalitées pour la construction d'un paquet
« Réponse #3 le: lun. avril 17 11:06:07 2017 »
Super idée...cette page  8)

tnut

  • Administrator
  • Hero Member
  • *****
  • Messages: 622
  • Karma: 4
    • NuTyX distribution
Re : Syntaxes et formalitées pour la construction d'un paquet
« Réponse #4 le: lun. avril 17 11:55:57 2017 »
Merci Sipo,

il est grand temps de documenter cette histoire si on veut des nouveaux packagers

pierre^

  • Full Member
  • ***
  • Messages: 152
  • Karma: 2
Re : Syntaxes et formalitées pour la construction d'un paquet
« Réponse #5 le: lun. avril 17 14:54:26 2017 »
pourrait-on détailler ce que peut faire et ne pas faire "prepare()" et à quoi sert-elle exactement ?
« Modifié: lun. avril 17 15:27:52 2017 par tnut »

tnut

  • Administrator
  • Hero Member
  • *****
  • Messages: 622
  • Karma: 4
    • NuTyX distribution
Re : Syntaxes et formalitées pour la construction d'un paquet
« Réponse #6 le: lun. avril 17 14:59:23 2017 »
Elle est dispo pour interprêter l'eventuelle fonction qui porte le même nom dans un PKGBUILD de archlinux. Sinon sous NuTyX, j'en vois pas l'intérêt, j'avoue
« Modifié: lun. avril 17 15:27:59 2017 par tnut »

Sipo

  • Jr. Member
  • **
  • Messages: 81
  • Karma: 3
Re : Syntaxes et formalitées pour la construction d'un paquet
« Réponse #7 le: mar. avril 18 10:29:16 2017 »
Petite question : peut-on dire à cards de procéder à une installation local d'un paquet .cards.tar.xz, et ce, sans pointer sur le dépot ?

pierre^

  • Full Member
  • ***
  • Messages: 152
  • Karma: 2
Re : Syntaxes et formalitées pour la construction d'un paquet
« Réponse #8 le: mar. avril 18 12:35:48 2017 »
un simple cards -h et plus directement cards install -h te donnera la réponse :-)

EDIT: il semble que cards install paquet soit en maintenance ... en attendant tu peux utiliser pkgadd
« Modifié: mar. avril 18 12:44:01 2017 par pierre^ »

Sipo

  • Jr. Member
  • **
  • Messages: 81
  • Karma: 3
Re : Syntaxes et formalitées pour la construction d'un paquet
« Réponse #9 le: mar. avril 18 16:57:58 2017 »
Haa, ok...j'me disais "me*de...ça marche pas..." :o Merci Pierre  ;)

tnut

  • Administrator
  • Hero Member
  • *****
  • Messages: 622
  • Karma: 4
    • NuTyX distribution
Re : Syntaxes et formalitées pour la construction d'un paquet
« Réponse #10 le: dim. avril 23 17:04:19 2017 »
Bug corrigé dans cards 2.2.1,  on peut maintenant installer une collection et/ou un nom et/ou un fichier sans devoir passer un paramètre spéciale, juste via la commande get.

Un exemple est toujours plus parlant:

get /var/lib/pkg/depot/xfce4-extra/xfce4-terminal/xfce4-terminal1486668413x86_64.cards.tar.xz mate konsoleOù:
/var/lib/pkg/depot/xfce4-extra/xfce4-terminal/xfce4-terminal1486668413x86_64.cards.tar.xz est un fichier
mate est une collection
konsole est un nom


Sipo

  • Jr. Member
  • **
  • Messages: 81
  • Karma: 3
Re : Syntaxes et formalitées pour la construction d'un paquet
« Réponse #11 le: lun. avril 24 12:53:52 2017 »
Cool.