Développer pour Frugalware #4 : Créer son propre dépôt pour ses paquets

Ceci est une adaptation fait a partir du wiki de Frugalware pour une version http au lieu de ftp.

Vous savez désormais concevoir des FrugalBuild et compiler des paquets .fpm, vous pouvez donc si vous le désirez créer votre propre dépôt pour une utilisation personnelle ou publique.

Organisation du dépot

Le dépot doit suivre une certaine hierarchie. En effet au même niveau vous devez avoir deux dossiers, l’un contenant les FrugalBuilds répartie dans des dossiers portant le même nom que le groupe du paquet puis dans un dossier portant le même nom que le paquet lui étant associé et l’autre dossier doit contenir vos paquet FPM.

Exemple:

Appellons //source// le dossier avec les FrugalBuild et frugalware-i686 le dossier contennat les paquets FPM pour architecture i686. Supposons que vous ayez qu’un seul paquet, par exemple le jeu Ri-li. Voici à quoi devrait ressembler votre dépôt:

  /source
     |-----/games-extra
                |---/ri-li
                       |-------FrugalBuild  /frugalware-i686
      |-----ri-li-2.0.0-1-i686.fpm

Ensuite il vous faudra créer un fichier .fdb c’était un fichier de base de données nécéssaire à la synchronisation de pacman avec votre dépôt. Pour cela il vous utiliser la commande gensync

Il faut que gensync génère un fichier .fdb en se basant sur le contenu de du dossier source de notre exemple puis qu’il crée le fichier .fdb à l’intérieur du dossier frugalware-i686.

Voici un exemple de la commande à utiliser:

# gensync /chemin/source/ /chemin/frugalware-i686/monfichier.fdb /chemin/frugalware-i686/

Le fichier monfichier.fdb sera donc crée dans le dossier frugalware-i686.

  • Note: pour que gensync fontionne, assurez-vous d’avoir dans votre makepkg.conf la ligne suivante:
  export BUILDSCRIPT="FrugalBuild"

Mise en place du dépôt

Pour une utilisation personnelle, vous garder le contenu votre dépôt sur votre ordinateur ou même le graver sur un média amovibe (CD-Rom par exemple).

Pour une utilisation orienté publique le mieux est d’envoyer le contenu de votre dépôt sur un serveur ftp.

Ensuite vous devez activer votre dépôt avec pacman. Deux possibilités s’offrent à vous.

  • Pour une utilisation perso, vous pouvez éditer directement pacman-g2.conf
# nano /etc/pacman-g2.conf

et y ajoutez la ligne suivante:

exemple pour un dossier sur votre ordinateur

  [mondepot]  Server=file:///chemin/mondepot/frugaware-x86_64

sans le # devant [mondepot] sinon erreur de syntaxe

[mondepot] correspond au nom du fichier sync mondepot.fdb se trouvant dans /chemin/mondepot/frugaware-x86_64/

exemple pour un cd-rom

  Server=file:///mnt/cdrom.
  • Par contre pour un serveur ftp, au cas où vous aurez la possibilité d’avoir des mirroirs, le mieux serait de créer un fichier portant le nom de votre dépôt dans le dossier **/etc/pacman-g2/repos/**
# nano /etc/pacman-g2/repos/mondepot

Puis dans ce fichier vous y ajouter toutes les adresses ftp des mirroirs dans cette forme:

  Server = ftp://mon.adresse.org/chemindemondepot/dossieravecpaquets-i686

Puis dans pacman-g2.conf vous indiquer votre fichier mondepot ayant la liste des miroirs

# nano /etc/pacman-g2.conf

et ajoutez:

  Include = /etc/pacman-g2/repos/mondepot

Tester votre dépôt avec pacman

# pacman-g2 -Syu

puis essayer d’installer vos paquets comme d’habitude avec pacman

Version pour serveur http:

Voila la partie qui est interessante, la partie rajouté pour une utilisation avec un serveur http, dans mon cas apache.

  • créer un fichier portant le nom de votre dépôt dans le dossier **/etc/pacman-g2/repos/**
# nano /etc/pacman-g2/repos/mondepot

Puis dans ce fichier vous y ajouter toutes les adresses ftp des mirroirs dans cette forme:

  Server = http://mon.adresse.org/chemindemondepot/dossieravecpaquets-i686

Puis dans pacman-g2.conf vous indiquer votre fichier mondepot ayant la liste des miroirs

# nano /etc/pacman-g2.conf

et ajoutez:

  Include = /etc/pacman-g2/repos/mondepot

On demarre le serveur avec un

# systemctl start httpd.service
# systemctl enable httpd.service

Enfin on teste le tout en allant sur http://localhost/mespaquets/frugalware-x86_64/

Développer pour Frugalware #3 : faire un patch git

Faire un patch git

Préparation

Consulter la page sur comment Cloner le dépôt git

Par defaut, pour la suite des évènement, c’est Vim qui est considéré comme l’éditeur de texte par défaut. Pour passer à nano (plus simple d’emploi) il faut faire :

User terminal 48px.png
$ nano ~/.gitconfig

et ajouter

  [core]  editor = nano 

Réalisation du patch

1.Naviguez dans l’arborescence de votre git (/home/<nom utilisateur>/git/current/source/dossier groups= de votre FrugalBuild)
2.Nouveau dossier du nom de votre programme
3.Insérez dans ce dossier votre FrugalBuild
4.Ouvrez un terminal dans celui ci puis :

User terminal 48px.png
$ fblint -v

pour voir s’il n’y a pas d’erreur.

User terminal 48px.png
$ git add FrugalBuild

User terminal 48px.png
$ repoman rec

On vérifie le nom du paquet et on rajoute

  * new package 

Gitpatch-capture.png

User terminal 48px.png
$ git log

pour avoir le hash au-dessus de * new package

User terminal 48px.png
$ git format-patch <hash>

On obtient un fichier de la forme :

  0001-NomDuPaquet-VersionDuPaquet-Architecture.patch 

et c’est ce fichier qu’il faut adresser sur la Mailing-List -devel smile

Il est possible, également, d’obtenir le hash de votre commit via la commande suivante :

User terminal 48px.png
$ git format-patch HEAD~1

et vous obtiendrez également le fichier .patch comme mentionné plus haut.

Développer pour Frugalware #2 : création de paquets, entraînons nous avec un exemple simple

Pourquoi utiliser un environnement chroot pour compiler ses paquets ?
Tout simplement parce que le chroot permet de trouver les véritables dépendances pour votre paquet sans pour autant “sacrifier” votre système.
Le chroot, c’est une sorte de matrice qui joue le rôle de votre système dans votre système. Pour créer le chroot, il vous suffira juste d’installer les paquets nécessaires en tapant la commande suivante. Makepkg s’occupera de télécharger et d’installer ce qu’il faudra lorsque vous ferez votre premier FrugalBuild.

Par défaut, le chroot se situe dans le répertoire /var/chroot. Vous pouvez changer son emplacement en modifiant le fichier /etc/makepkg.conf

Essayez cette exemple simple et détaillé:

Exemple détaillé d’un FrugalBuild

Notre exemple

  # Compiling Time: 0.06 SBU  
# Maintainer: VMiklos <vmiklos@frugalware.org>
pkgname=cabextract
pkgver=1.2
pkgrel=1
pkgdesc="a program to extract Microsoft Cabinet files"  url="http://www.kyz.uklinux.net/cabextract.php"depends=('glibc')
groups=('apps')  archs=('i686' 'x86_64')
up2date="lynx -dump http://www.kyz.uklinux.net/cabextract.php |grep 'cabextract source code'|tr -s ' '|cut -d ' ' -f 6"  source=(http://www.kyz.uklinux.net/downloads/$pkgname-$pkgver.tar.gz)  sha1sums=('871b3db4bc2629eb5726659c147aecea1af6a6d0')  # optimization OK

Détaillons chaque élément…

# Compiling Time: SBU

  # Compiling Time:  SBU

Cette ligne signifie le temps de compilation, elle se rajoute automatiquement lors de la compilation ou par vérification via la commande fblint.

Maintainer et Contributor

  # Maintainer: VMiklos <vmiklos@frugalware.org>

Cette ligne indique le nom de mainteneur de paquet, si vous n’allez pas maintenir indiquez ceci:

  # Contributor: votrepseudo <votreemail@blabla.com>

pkgname

  pkgname=cabextract

Cette ligne indique le nom de paquet. Ce sera le nom utilisé dans vos commandes pacman une fois le paquet au dépôt.

pkgver

  pkgver=1.2

Cette ligne indique la version du programme cabextract, faîtes bien attention certains programmes ont des manières différentes de nommer ces numéros de version.

pkgrel

  pkgrel=1

Cette ligne indique la version du paquet. Si vous avez recompilé le paquet afin de corriger des choses…etc vous devez alors changer le 1 par 2 (et ainsi de suite).

pkgdesc

  pkgdesc="a program to extract Microsoft Cabinet files"

Cette ligne indique une courte description du programme en question.

url

  url="http://www.kyz.uklinux.net/cabextract.php"

Cette ligne indique la page web du programme.

depends (dépendances)

  depends=('glibc')

Cette ligne est très importante, elle indique les dépendances nécessaires au paquet. Dans cet exemple, glibc est nécessaire au fonctionnement de cabextract. Si votre paquet nécessite plusieurs dépendances il vous faudra toutes les indiquer entre guillemets et espacées par un espace. Pour trouver les dépendances d’un paquet utilisez la commande makepkg -a.

Le Groupe

  groups=('apps')

Cette ligne indique le groupe auquel appartient le paquet. Ne placez pas votre paquet dans les groupes apps, base, devel, lib, multimedia ou network, vous devez utiliser un groupe adéquat avec le suffixe -extra. Par exemple si vous faîtes un paquet d’un programme pour Gnome, prenez le groupe gnome-extra.

Architectures

  archs=('i686' 'x86_64')

Cette ligne indique l’architecture pour laquelle se destine votre paquet. Dans cet exemple les architectures sont i686 et x86_64.

L’up2date

  up2date="lynx -dump http://www.kyz.uklinux.net/cabextract.php |grep 'cabextract        source code'|tr -s ' '|cut -d ' ' -f 6"

Cette ligne est destinée au serveur de frugalware.org pour signaler aux mainteneurs la présence d’une nouvelle version du fichier source. Elle n’est pas toujours facile à faire, voici quelque exemples:

Pour une page comportant le lien vers le tarball en tar.gz, l’up2date devrait ressembler à ceci:

  up2date="lynx -dump http://adressedelapage/page.php |grep tar.gz | Flasttar"

Note: S’il y a plusieurs liens pour des tar.gz, pour que l’up2date sélectionne le premier lien, mettez grep -m1 tar.gz.

S’il n’y a pas de page mais juste un espace avec des tarball en tar.bz2,

  up2date="lynx -dump http://adressedelapage/ | Flasttarbz2"

Si vraiment vous n’y arrivez pas, vous pouvez bloquer l’up2date et indiquez aux développeurs de Frugalware qu’ils devront corriger la ligne, voilà ce qu’il faut mettre:

  up2date=$pkgver #need to be fixed

Source

  source=(http://www.kyz.uklinux.net/downloads/$pkgname-$pkgver.tar.gz)

Cette ligne indique l’URL de la source du programme. Ce fichier tar.gz sera téléchargé pour la compilation du paquet.

SHA1SUMS

  sha1sums=('094e3afb2fe8dfe82f63731cdcd3b999f4856cff')

Cette ligne indique le SHA1SUM du fichier source de la précédente ligne.

Avec la commande makepkg -g vous aurez le SHA1SUM du fichier source.

Ensuite arrive la partie build, dans l’exemple il n’y en a pas. Allez voir la section plus bas pour les détails.

# optimization OK

  # optimization OK

Cette ligne est rajouté automatiquement lors de la compilation ou par la commande fblint. Elle indique que la compilation a été faite par votre $CFLAGS ou $CXXFLAGS.

build

Dans l’exemple plus haut il n’y avait pas de partie build, tout simplement car par défaut si vous ne mettez rien, le build correspond à ceci:

  build() {          Fpatchall          Fmake "$@"            Fmakeinstall          if echo ${source[@]}|grep -q README.Frugalware; then          Fdoc README.Frugalware          fi  }

Les commandes sont indiquées entre { }.

Si votre paquet se compile avec les banales:

  ./configure  make  make install

…alors, là aussi, il n’est pas nécessaire de mettre un build, que c’est pratique… 😀

Nous avons vu sur cette page les fonctions classiques que comporte un FrugalBuild mais il en existe d’autres suivant les cas particuliers:

puis placez-vous dans le répertoire où se trouve le FrugalBuild. Et lancez la commande:

User terminal 48px.png
$ sudo makepkg -H

Ce n’est pas conseillé car vous risquez de passer à coté de certaines dépendances.

Il est recommandé de consulter toutes les commandes possibles avec Makepkg.

Allez plus loin

FrugalBuild

Un exemple vierge est disponible.

Si vous avez des difficultés avec votre FrugalBuild, n’hésitez pas à demander de l’aide sur ircou sur le forum.

Pour plus d’informations sur les FrugalBuild, n’oubliez pas le manuel en tapant :

User terminal 48px.png
$ man FrugalBuild

Composition d’un FrugalBuild

Avant d’aller plus loin, il vous faut déjà connaitre l’outil de base de la création de paquet. C’est-à-dire, le FrugalBuild. C’est grâce à lui que vous donnerez les “instructions” à makepkg pour qu’il puisse accomplir sa tâche.

Voici un FrugalBuild vierge :

Les explications

Les fonctions

Prêt à contribuer ?

Ne gardez pas vos paquets fpm que pour vous, vous pouvez les partager en les proposant aux développeurs.

Il suffit pour çà de vous inscrire sur la mailing list anglophone frugalware-devel:

Même si l’anglais vous rebutte, n’ayez crainte. Une fois souscris à la liste envoyez votre mail à

  • frugalware-devel AT frugalware POINT org

Avec votre FrugalBuild (et patches si besoin) attaché au mail en demande une « review ».

L’équipe de développement se fera un plaisir de vous répondre et vous aider si votre FrugalBuild comporte des erreurs.

Par la suite, il est préférable de cloner le dépôt git pour des raisons pratiques.

Une fois le FrugalBuild sans fautes, on vous demandera de faire un patch git

Développer pour Frugalware #1 : pré-requis

Je rassemble les differentes étapes pour contribuer a frugalware qu’on peut trouver sur le wiki (https://wiki.frugalware.org/index.php/Category:Développer).

Ceci est la partie 1, vous trouverez la suite, Développer pour Frugalware: 2 création de paquets, entraînons nous avec un exemple simple et Développer pour Frugalware: 3 faire un patch git.

Développer pour Frugalware

Comment devenir un développeur?

“Soyez impliqués ! 🙂 Téléchargez le FST (Arbre des sources de Frugalware) en utilisant la commande repoman upd, qui est disponible avec le paquet pacman-tools. Pour commencer à jouer avec les scripts Frugalbuilds, pour voir la structure, referez-vous au répertoire /docs/skel. Essayez de les améliorer, ou écrivez en un nouveau pour un programme non supporté. Puis ouvrez une demande “feature request” sur le Système de Suivi des Bugs et attachez vos correctifs à cette demande. A partir de là, tout viendra naturellement à vous :)”

Que font les développeurs?

“En bref, ce qu’ils veulent, s’ils sont réglo. Il peuvent maintenir des paquets: les construire si de nouvelles versions sont disponibles et mettre à jour les scripts FrugalBuild afin qu’ils fonctionnent correctement avec les nouvelles versions. Ils peuvent contribuer en créant des scripts pour des paquets jusqu’alors non inclus. Ils peuvent écrire des documentations, corriger des bugs, fournir du support, ou n’importe quoi d’autre en rapport avec la communauté Frugalware. Si vous souhaitez nous aider, mais ne souhaitez pas faire de modifications, vous pouvez contribuer en traduisant Frugalware dans votre langue ou une autre. Et évidement, nous acceptons les dons avec joie :)”

Qui développe Frugalware?

“Un groupe étonnant de volontaires, qui sont motivés par les utilisateurs pour faire cela. Ils le font également comme passe-temps, et ils travaillent toujours à avoir leurs connaissances à jour pour rendre Frugalware encore meilleur pour vous.”

Création de paquets

La création de paquets (ou empaquetage) se fait grâce à des scripts que l’on appelle des FrugalBuild.
Grâce à ces scripts, l’application nommé makepkg, va pouvoir télécharger les sources du logiciel que l’on veut empaqueter pour les compiler et simuler une installation des binaires obtenus, tout ça dans un environnement matrice que l’on appelle le chroot.
Si tout se passe bien, makepkg créera l’archive .fpm qui contiendra les fichiers binaires obtenus après la compilation pour que le logiciel soit installé grâce à pacman-g2.

Cependant, pour créer un paquet, il faut des pré-requis.

Pré-requis

Obtenir sa copie du FST

Installation des logiciels requis

Tout d’abord vous aurez au moins besoin de git et des outils inclus dans pacman-tools

Root terminal 48px.png
# pacman-g2 -S pacman-tools git lynx

Configuation de Sudo et Makepkg

Il est préférable (et plus pratique) d’utiliser makepkg avec sudo.

Root terminal 48px.png
# pacman-g2 -S sudo

Editez le fichier /etc/sudoers.

Vous pouvez créer un groupe d’utilisateurs nommé “devels” et y mettre votre compte utilistaeur dans ce groupe, il suffira alors d’ajouter au fichier sudoers:

  %devels ALL=NOPASSWD:/usr/bin/makepkg

Vous pouvez également donner les droits d’utiliser makepkg avec sudo à votre utilisateur, dans ce cas ce sera

  nom_d'utilisateur ALL=NOPASSWD:/usr/bin/makepkg

Attention plus de mot de passe vous sera demandé pour éxécuter la commande makepkg en tant qu’utilisateur.

Idéalement, il est bien d’avoir sa propre copie du FST (Frugalware Source Tree), c’est-à-dire, les sources du dépôt current. Ca vous permettra de voir les FrugalBuild qu’il y a et cela vous permettra de vous en inspirer. Mais il y a deux façons pour avoir sa copie :

Copie du FST dans le dossier par défaut

Vous pouvez l’obtenir en tant que root en tapant :

Root terminal 48px.png
# repoman upd

Ceci va créer la copie du FST dans le dossier par défaut:

  /var/fst

Le dossier par défaut est défini dans le fichier

  /etc/repoman

Vous pouvez changer le dossier par défaut, mais préférez alors la seconde solution.

Copie du FST dans un dossier personnel

Vous pouvez l’obtenir en tant qu’utilisateur en créant le fichier .repoman.conf dans votre répertoire /home pour lui ajouter cette ligne :

  fst_root=~/git

Comme ça, les sources iront directement dans le répertoire ~/git, ou un répertoire que vous aurez choisi en tapant :

User terminal 48px.png
$ repoman upd

A noter que vous pouvez également directement obtenir une copie du dépôt git avec:

Cloner le dépôt git

Cloner le dépôt git de Frugalware

Nous allons vous montrez comment cloner le depôt git pour avoir une copie du dépôt en local.

Dans notre exemple, nous prendrons le dépôt frugalware-current

Il existe d’autres dépôts dont une liste est disponible ici: http://git.frugalware.org/gitweb/gitweb.cgi

Créer un dossier dans votre $HOME puis placez vous dedans avec le terminal:

User terminal 48px.png
$ cd ~/git
  • Si vous êtes développeur Frugalware, vous avez donc une un accès à genesis, vous pourrer cloner de cette façon
User terminal 48px.png
$ git clone devil505@git.frugalware.org:/home/ftp/pub/frugalware/frugalware-current current
  • Si vous êtes juste contributeur, vous pouvez cloner en tant qu’anonyme

Ensuite on paramètre notre copie du dépôt:

User terminal 48px.png
$ cd currentgit config user.name « Pseudo »
git config user.email adresse@email.com
git config remote.origin.receivepack « sudo -u repo git-receive-pack »
git config branch.master.rebase true

Pour mettre à jour le dépôt:

User terminal 48px.png
$ git pull

Et ensuite ?

  • Les développeurs retrouveront leur copie locale du dépôt 😀
  • Les contributeurs pourront se servir de cette copie locale pour commençer à faire un patch git pour proposer leurs contributions au projet Frugalware.

Ensuite on s’attaque au frugalbuild dans le prochain article.