Créer son propre dépôt RPM Pour Mageia



Introduction



Pour les packageurs du dimanche, comme moi, il nous arrive de se faire des "petits" paquets, pour notre propre besoin.
Je ne détaillerai pas ici la création de paquets RPM's, se référer à l'article Compiler ses propres paquets rpm avec Mageia.

Le but de cet article étant de mettre en place son dépôt de RPM.

Prérequis



Et bien en premier lieu, il faut .... un serveur, relié à Internet. Il n'est pas nécessaire qu'il tourne sur Mageia. S'il tourne sur Mageia c'est un plus, pour générer les informations sur les médias. Sinon, il faudra disposer sur le serveur d'un serveur SSH, d'un client Mageia, sur lequel est installé SSHFS.

Dans mon cas, je vais illustrer avec un serveur qui n'est pas sous Mageia, il est sous Gentoo, et je dispose donc d'un client Mageia.


Bien organiser son architecture



Il est important de bien structurer les futurs dépôts.

Par exemple, lorsque j'ai créé l'arborescence des dépôts MLO, voici comment j'ai fait :
( C'est largement inspiré des dépôts officiels de Mageia :siffle:)

Code BASH :
tree -d /media/mlo/Mageia/3
 
/media/mlo/Mageia/3
|-- i586
|   |-- core
|   |   |-- media_info
|   |-- nonfree
|   |   |-- media_info
|   |-- tainted
|       |-- media_info
|-- SRPMS
|   |-- core
|   |   |-- media_info
|   |-- nonfree
|   |   |-- media_info
|   |-- tainted
|       |-- media_info
|-- Testing
|-- x86_64
    |-- core
    |   |-- media_info
    |-- nonfree
    |   |-- media_info
    |-- tainted
        |-- media_info
 
22 directories
 


Ce qu'il est important de retenir, c'est de faire un dépôt 32 bits et un autre 64 bits.

Il est préférable de créer trois sous dossiers (core, nonfree, tainted) afin de placer les paquets en fonction de leur licence. Ainsi, un pur utilisateur libre, pourra s'il le souhaite, ne pas utiliser nos paquets 'nonfree' et 'tainted'.

  1. Le dépôt Core comprend des paquets avec des logiciels libres et open-source, à savoir les paquets autorisés sous licence libres et open-source
  2. Le dépôt Nonfree (non-libres) comprend les paquets qui sont libres de charge/gratuit, c'est à dire que nous pouvons les redistribuer, mais ils contiennent du logiciel à source fermé (d'où le nom de Nonfree).
  3. Le dépôt Tainted (corrompu, contaminé) comprend les paquets sous différentes licences, celles qui sont libres et non libres, mais les principaux critères pour les paquets dans ce dépôt est qu'ils peuvent enfreindre des brevets et des lois sur le droit d'auteur (copyright) dans certains pays dans le monde (par exemple les codecs multimédia nécessaires pour lire des fichiers audio/vidéo de différents types, les paquets nécessaires pour lire les DVD vidéo du commerce ... etc).


Il existe des paquets dits noarch. Ceux-ci s'installent aussi bien sur une 32bits ou une 64bits. Le paquet est le même, les dépendances sont indépendantes de l'architecture.

Il y a deux solutions possibles :
  • Créer un dépôt supplémentaire noarch ou seront stockés ces paquets.
  • Ne pas créer de dépôt noarch et ainsi, placer ces paquets à la fois dans les dépôts 32 et 64 bits !


Enfin, créer un dépôt nommé SRPMS où nous stockerons les RPM Source (Source RPM).

J'ai créé un dépôt Testing pour tester lorsque j'en ressens le besoin quelques paquets, notamment vérifier en cas de dépendances que le paquet aille bien chercher ce dont il a besoin.
Ou bien, tester que l'applet de mise à jour de Mageia soit bien stimulé par une nouvelle version d'un paquet installé ;-)


Où placer les RPM ?



Les fichiers RPM sont à placer (si vous avez suivi mon architecture) dans le dossier $ARCH/$TYPE (où $ARCH correspond à i586 ou x86_64, et $TYPE correspond à core, nonfree, tainted).

Voici un exemple dans notre arborescence de quelques paquets RPM :

Code BASH :
 
tree /media/mlo/Mageia/3/x86_64/nonfree/ -L 1
/media/mlo/Mageia/3/x86_64/nonfree/
|-- get-java-oracle-1.7.0_21-2.nonfree.mga3.x86_64.rpm
|-- get-skype-4.2.0.11-2.nonfree.mga3.noarch.rpm
|-- get-skype-4.2.0.11-3.nonfree.mga3.noarch.rpm
|-- media_info
|-- neroaac-codec-1.5.1-3.nonfree.mga3.noarch.rpm
|-- shorten-3.6.1-4.nonfree.mga3.x86_64.rpm
|-- Teamviewer8-8.0.17147-1.nonfree.mga3.x86_64.rpm
 
1 directory, 6 files
 


Ne créez pas de dossier media_info, il est généré selon les explications du paragraphe suivant.

Générer les informations des médias



Une fois les RPM uploadés dans les dossiers, il reste à générer les médias. J'entends par là générer toutes les infrmations sur :
  • Qu'y a t il dans les dépôts
  • Quelles sont les informations du paquet
  • Quels sont les fichiers, le changelog ...


Pour cela, se placer dans le répertoire $ARCH/$TYPE et exécuter cette commande :

Code BASH :
genhdlist2 --xml-info --allow-empty-media .


Cela créera le dossier media_info.

Voici ce qui est généré (à l'exception du fichier pubkey dont j'expliquerai la signification plus bas dans l'article).

Code BASH :
tree /media/mlo/Mageia/3/x86_64/core/media_info
/media/mlo/Mageia/3/x86_64/core/media_info
|-- changelog.xml.lzma
|-- files.xml.lzma
|-- hdlist.cz
|-- info.xml.lzma
|-- MD5SUM
|-- pubkey
|-- synthesis.hdlist.cz
 
0 directories, 7 files
 


  • changelog.xml.lzma : Ce fichier XML (compressé) contient l'ensemble des modifications des paquets présent dans le dépôt (Il recense toutes les lignes du fichier SPEC du pavé %changelog)
  • files.xml.lzma : Ce fichier XML (compressé) contient l'ensemble des fichiers présents dans chaque paquet RPM présent dans le dépôt Il recense toutes les lignes du fichier SPEC du pavé %files)
  • hdlist.cz :
  • info.xml.lzma :
  • MD5SUM :
  • synthesis.hdlist.cz :


==> Il faut continuer la

Les scripts qui vont bien !




Générer l'arborescence



Voici le script que j'utilise pour générer mon arborescence :

Code BASH :
#!/bin/bash
 
#Script de génération de l'arborescence d'un dépôt RPM
#Auteur : Adrien.D - 26/05/2013
 
#Definition du nom du dépôt
DIST=4
 
#Chemin complet de la clé publique (0 si pas de clé publique)
PUB=0
 
 
#BEGIN#
 
#Pour chaque architecture on va
for ARCH in {i586,SRPMS,x86_64}
do
        #Créer chaque sous-dépôt
        for TYPE in {core,nonfree,tainted}
        do
                DIR="$DIST/$ARCH/$TYPE/media_info"
                echo $DIR
                mkdir -p "$DIR"
                if [ -e $PUB ]
                then
                        echo "copie $PUB dans $DIR"
                        cp "$PUB" "$DIR"
                fi
        done
done
 
#END#
 


Générer les informations des médias



Voici le script que j'utilise pour générer les fichiers d'information des médias :

La commande genhdlist2 doit fonctionner sur la machine où se lancera le script.

Code BASH :
 #!bin/bash
# Script de regénération des médias MLO by Adrien.D
# Date : 02/11/2013
 
 
DIST=$1
 
read -p "Rafraichir les médias de Mageia $DIST ? (Entrée pour continuer, Ctrl+C pour annuler)"
 
#Pour chaque architecture on va
for ARCH in {i586,SRPMS,x86_64}
do
#Créer chaque sous-dépôt
for TYPE in {core,nonfree,tainted}
do
DIR="$DIST/$ARCH/$TYPE"
echo $DIR
DIRM="$DIR/media_info"
echo "$DIRM"
genhdlist2 --xml-info --allow-empty-media --media_info-dir $DIRM $DIR
done
done
 
Cette page a été vue 11459 fois