Outils personnels

Creation d'un dépôt de RPMs : Différence entre versions

De wikiGite

Ligne 5 : Ligne 5 :
 
= Configuration =
 
= Configuration =
 
Créer un virtualhost (ex. repos.domain.tld). Son emplacement sera indiquée dans la configuration de mrepo.
 
Créer un virtualhost (ex. repos.domain.tld). Son emplacement sera indiquée dans la configuration de mrepo.
<source lang="bash">cd /etc
+
cd /etc
vi mrepo.conf</source>
+
vi mrepo.conf
 
Ajouter
 
Ajouter
 
  hardlink = yes
 
  hardlink = yes
Ligne 20 : Ligne 20 :
  
 
De même, modifier /etc/httpd/conf.d/mrepo.conf pour refléter ce répertoire, et y copier /var/www/mrepo
 
De même, modifier /etc/httpd/conf.d/mrepo.conf pour refléter ce répertoire, et y copier /var/www/mrepo
<source lang="bash">mv /var/www/mrepo /home/.sites/70/site4/web/</source>
+
mv /var/www/mrepo /home/.sites/70/site4/web/
  
 
Il existe des exemples de configuration dans /usr/share/doc/mrepo-0.8.7/dists/. Copier un template proche de ce qu'on veut obtenir :
 
Il existe des exemples de configuration dans /usr/share/doc/mrepo-0.8.7/dists/. Copier un template proche de ce qu'on veut obtenir :
<source lang="bash">cp /usr/share/doc/mrepo-0.8.7/dists/centos5.conf /etc/mrepo.conf.d</source>
+
cp /usr/share/doc/mrepo-0.8.7/dists/centos5.conf /etc/mrepo.conf.d
  
 
Exemple court pour le dépôt d'une application spécifique :
 
Exemple court pour le dépôt d'une application spécifique :
Ligne 37 : Ligne 37 :
  
 
Relancer le tout, et créer les dépôts
 
Relancer le tout, et créer les dépôts
<source lang="bash">/etc/init.d/httpd restart
+
/etc/init.d/httpd restart
/etc/init.d/mrepo restart
+
/etc/init.d/mrepo restart
mrepo -g -vvv</source>
 
  
 +
# mrepo -g -vvv
 
  Verbosity set to level 3
 
  Verbosity set to level 3
 
  Using configfile /etc/mrepo.conf
 
  Using configfile /etc/mrepo.conf
Ligne 69 : Ligne 69 :
  
 
Il reste à créer le répertoire pour les paquets
 
Il reste à créer le répertoire pour les paquets
<source lang="bash">mkdir -p /home/sites/repos.domain.tld/web/monappli-i386/'''stable'''/
+
# mkdir -p /home/sites/repos.domain.tld/web/monappli-i386/'''stable'''/
mkdir -p /home/sites/repos.domain.tld/web/monappli-i386/'''updates'''/</source>
+
# mkdir -p /home/sites/repos.domain.tld/web/monappli-i386/'''updates'''/
 
La mise à jour du dépôt se fera par
 
La mise à jour du dépôt se fera par
<source lang="bash">mrepo -ug -vvv</source>
+
mrepo -ug -vvv
  
 
= Signer le dépôt =
 
= Signer le dépôt =
 
'''<span style="color:red">PROCEDURE NON TESTEE - A VALIDER</span>'''
 
'''<span style="color:red">PROCEDURE NON TESTEE - A VALIDER</span>'''
 
* Créer les clés DSA sur le serveur, avec l'utilisateur qui signera les paquets. Ici on reste root.
 
* Créer les clés DSA sur le serveur, avec l'utilisateur qui signera les paquets. Ici on reste root.
<source lang="bash"># gpg -gen-key</source>
+
# gpg -gen-key
 
Vérifier que que la clé publique est valide, au moins sur le système local :
 
Vérifier que que la clé publique est valide, au moins sur le système local :
<source lang="bash"># gpg -list-keys</source>
+
# gpg -list-keys
 
La clé publique (pub) a par exemple l'id 1F7A1AB2.
 
La clé publique (pub) a par exemple l'id 1F7A1AB2.
  
 
Créer un fichier .rpmmacros dans le répertoire de l'utilisateur (ici, toujours root)
 
Créer un fichier .rpmmacros dans le répertoire de l'utilisateur (ici, toujours root)
<source lang="bash"># vi .rpmmacros</source>
+
# vi .rpmmacros
 
   
 
   
 
  %_signature gpg
 
  %_signature gpg
Ligne 89 : Ligne 89 :
  
 
Il reste à signer les paquets du dépôt avec cette clé :
 
Il reste à signer les paquets du dépôt avec cette clé :
<source lang="bash"># rpm --resign /chemin/vers/le/depot/paquet.rpm</source>
+
# rpm --resign /chemin/vers/le/depot/paquet.rpm
 
Vérifier la signature
 
Vérifier la signature
<source lang="bash"># rpm --checksig -v paquet.rpm</source>
+
# rpm --checksig -v paquet.rpm
 
(il peut petre nécessaire d'importer la clé publique sur le système : rpm --import)
 
(il peut petre nécessaire d'importer la clé publique sur le système : rpm --import)
  
 
Et exporter la clé publique pour la mettre à disposition
 
Et exporter la clé publique pour la mettre à disposition
<source lang="bash"># gpg -export -a "Votre clé" > Public_key.txt</source>
+
# gpg -export -a "Votre clé" > Public_key.txt
  
 
Cette clé sera paramétrée sur le client dans yum.repos.d/<nom du depot>.repo
 
Cette clé sera paramétrée sur le client dans yum.repos.d/<nom du depot>.repo
Ligne 117 : Ligne 117 :
  
 
Au cas ou le répertoire cible n'est plus à la même place, on peut rechercher sur le partage rsync "pub" de dag avec :
 
Au cas ou le répertoire cible n'est plus à la même place, on peut rechercher sur le partage rsync "pub" de dag avec :
<source lang="bash">rsync --list-only rsync://apt.sw.be/pub/</source>
+
rsync --list-only rsync://apt.sw.be/pub/
 
puis en descendant petit à petit l'arborescence.
 
puis en descendant petit à petit l'arborescence.
  
 
Puis créer la base de RPMS. La copie des fichiers commence : plus de 10000 pour i386, ça peut être long !!!
 
Puis créer la base de RPMS. La copie des fichiers commence : plus de 10000 pour i386, ça peut être long !!!
<source lang="bash"># mrepo -gvvv centos5</source>
+
mrepo -gvvv centos5
  
 
Les paquets sont synchronisés (chemin BlueOnyx pour l'exemple) dans /home/sites/repos.domain.tld/'''web/centos5-i386/rpmforge''' et les metadonnées correspondantes dont créées dans /home/sites/repos.domain.tld/web/'''mrepo/centos5-i386/RPMS.rpmforge/'''.
 
Les paquets sont synchronisés (chemin BlueOnyx pour l'exemple) dans /home/sites/repos.domain.tld/'''web/centos5-i386/rpmforge''' et les metadonnées correspondantes dont créées dans /home/sites/repos.domain.tld/web/'''mrepo/centos5-i386/RPMS.rpmforge/'''.

Version du 20 mars 2012 à 16:40

Installation de MREPO sur CentOS/BlueOnyx

Mrepo est une création de Dag (http://dag.wieers.com). Les sources RPMFORGE doivent être installées (-> Dépôts complémentaires).

yum --enablerepo=rpmforge install mrepo hardlink++

Configuration

Créer un virtualhost (ex. repos.domain.tld). Son emplacement sera indiquée dans la configuration de mrepo.

cd /etc
vi mrepo.conf

Ajouter

hardlink = yes

et modifier "mailto" vers un mail administrateur qui recevra les informations de modifications des dépôts.

Si le DocumentRoot n'est pas /var/www (exemple : sur BlueOnyx), indiquer dans wwwdir le chemin vers de DocumentRoot du virtualhost.

Note BlueOnyx : supprimer le répertoire error et l'index.html créés automatiquement dans le répertoire web du virtualhost.

# packages directory
srcdir = /home/.sites/70/site4/web
# metadatas directory
wwwdir = /home/.sites/70/site4/web/mrepo

De même, modifier /etc/httpd/conf.d/mrepo.conf pour refléter ce répertoire, et y copier /var/www/mrepo

mv /var/www/mrepo /home/.sites/70/site4/web/

Il existe des exemples de configuration dans /usr/share/doc/mrepo-0.8.7/dists/. Copier un template proche de ce qu'on veut obtenir :

cp /usr/share/doc/mrepo-0.8.7/dists/centos5.conf /etc/mrepo.conf.d

Exemple court pour le dépôt d'une application spécifique :

### Name: MonAppli

[monappli]
name = MonAppli $release ($arch)
release = 3
stable = http://repos.domain.tld/$release/monappli/i386/RPMS/

### Additional repositories
updates = http://repos.domain.tld/$release/monappli/i386/RPMS/

Relancer le tout, et créer les dépôts

/etc/init.d/httpd restart
/etc/init.d/mrepo restart
# mrepo -g -vvv
Verbosity set to level 3
Using configfile /etc/mrepo.conf
Reading config file /etc/mrepo.conf
Setting option confdir in section [main] to: /etc/mrepo.conf.d
Setting option srcdir in section [main] to: /home/.sites/70/site4/web
Setting option wwwdir in section [main] to: /home/.sites/70/site4/web/mrepo
Setting option mailto in section [main] to: mail@domain.net
Setting option smtp-server in section [main] to: localhost
Setting option arch in section [main] to: i386
Setting option hardlink in section [main] to: yes
Reading config file /etc/mrepo.conf.d/monappli.conf
Reading config file /etc/mrepo.conf.d/rpmforge.conf
Setting option arch in section [centos5] to: i386 x86_64
monappli-i386: Generating monappli 3 (i386) meta-data
monappli-i386: Create repomd repository for stable

Saving Primary metadata
Saving file lists metadata
Saving other metadata
monappli-i386: Create repomd repository for updates

Saving Primary metadata
Saving file lists metadata
Saving other metadata

Sous /home/sites/repos.domain.tld/web/mrepo/monappli-i386/, trois répertoires de metadatas sont créés : "RPMS.all", "RPMS.stable" et "RPMS.updates"

Il reste à créer le répertoire pour les paquets

# mkdir -p /home/sites/repos.domain.tld/web/monappli-i386/stable/
# mkdir -p /home/sites/repos.domain.tld/web/monappli-i386/updates/

La mise à jour du dépôt se fera par

mrepo -ug -vvv

Signer le dépôt

PROCEDURE NON TESTEE - A VALIDER

  • Créer les clés DSA sur le serveur, avec l'utilisateur qui signera les paquets. Ici on reste root.
# gpg -gen-key

Vérifier que que la clé publique est valide, au moins sur le système local :

# gpg -list-keys

La clé publique (pub) a par exemple l'id 1F7A1AB2.

Créer un fichier .rpmmacros dans le répertoire de l'utilisateur (ici, toujours root)

# vi .rpmmacros

%_signature gpg
%_gpg_name 1F7A1AB2

Il reste à signer les paquets du dépôt avec cette clé :

# rpm --resign /chemin/vers/le/depot/paquet.rpm

Vérifier la signature

# rpm --checksig -v paquet.rpm

(il peut petre nécessaire d'importer la clé publique sur le système : rpm --import)

Et exporter la clé publique pour la mettre à disposition

# gpg -export -a "Votre clé" > Public_key.txt

Cette clé sera paramétrée sur le client dans yum.repos.d/<nom du depot>.repo

gpgcheck=1
gpgkey=http://repos.domain.tld/mrepo/centos5-i386/RPMS.rpmforge/repodata

Dépôt miroir de Dag/RPMforge

Création du dépôt et synchronisation

Créer /etc/mrepo.conf.d/rpmforge.conf :

### Name: RPMforge - Dag

[centos5]
name = CentOS $release ($arch)
release = 5
#arch = i386 x86_64 ia64 ppc s390 s390x alpha
arch = i386 x86_64
metadata = repomd yum repoview

### RPMforge repository
rpmforge = rsync://apt.sw.be/pub/freshrpms/dag/redhat/el5/en/i386/rpmforge/RPMS/

Au cas ou le répertoire cible n'est plus à la même place, on peut rechercher sur le partage rsync "pub" de dag avec :

rsync --list-only rsync://apt.sw.be/pub/

puis en descendant petit à petit l'arborescence.

Puis créer la base de RPMS. La copie des fichiers commence : plus de 10000 pour i386, ça peut être long !!!

mrepo -gvvv centos5

Les paquets sont synchronisés (chemin BlueOnyx pour l'exemple) dans /home/sites/repos.domain.tld/web/centos5-i386/rpmforge et les metadonnées correspondantes dont créées dans /home/sites/repos.domain.tld/web/mrepo/centos5-i386/RPMS.rpmforge/.

Un cron qui réplique à intervalle régulier garde ensuite le dépôt à jour :

30 2 * * * root /usr/bin/mrepo -q -ug

Paramétrage du client YUM

Dans /etc/yum.repos.d, créer un fichier monappli.repo :

### Name: RPMforge RPM Repository for CentOS/RHEL 5
### URL: http://rpmforge.net/
[maforge]
name = CentOS/RHEL $releasever - RPMforge
baseurl = http://repos.domain.tld/mrepo/centos5-i386/RPMS.rpmforge
enabled = 0
protect = 0
# Here we reuse the key from Dag RPMforge since the RPMs are signed with it
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1