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.
cd /etc
+
<source lang="bash">cd /etc
vi mrepo.conf
+
vi mrepo.conf</source>
 
Ajouter
 
Ajouter
hardlink = yes
+
<source lang="bash">hardlink = yes</source>
 
et modifier "mailto" vers un mail administrateur qui recevra les informations de modifications des dépôts.
 
et modifier "mailto" vers un mail administrateur qui recevra les informations de modifications des dépôts.
  
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
mv /var/www/mrepo /home/.sites/70/site4/web/
+
<source lang="bash">mv /var/www/mrepo /home/.sites/70/site4/web/</source>
  
 
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 :
cp /usr/share/doc/mrepo-0.8.7/dists/centos5.conf /etc/mrepo.conf.d
+
<source lang="bash">cp /usr/share/doc/mrepo-0.8.7/dists/centos5.conf /etc/mrepo.conf.d</source>
  
 
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
/etc/init.d/httpd restart
+
<source lang="bash">/etc/init.d/httpd restart
/etc/init.d/mrepo restart
+
/etc/init.d/mrepo restart
  
# mrepo -g -vvv
+
mrepo -g -vvv</source>
 
  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
# mkdir -p /home/sites/repos.domain.tld/web/monappli-i386/'''stable'''/
+
<source lang="bash">mkdir -p /home/sites/repos.domain.tld/web/monappli-i386/'''stable'''/
# mkdir -p /home/sites/repos.domain.tld/web/monappli-i386/'''updates'''/
+
mkdir -p /home/sites/repos.domain.tld/web/monappli-i386/'''updates'''/</source>
 
La mise à jour du dépôt se fera par
 
La mise à jour du dépôt se fera par
mrepo -ug -vvv
+
<source lang="bash">mrepo -ug -vvv</source>
  
 
= 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.
# gpg -gen-key
+
<source lang="bash">gpg -gen-key</source>
 
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 :
# gpg -list-keys
+
<source lang="bash">gpg -list-keys</source>
 
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)
# vi .rpmmacros
+
<source lang="bash">vi .rpmmacros</source>
 
   
 
   
 
  %_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é :
# rpm --resign /chemin/vers/le/depot/paquet.rpm
+
<source lang="bash">rpm --resign /chemin/vers/le/depot/paquet.rpm</source>
 
Vérifier la signature
 
Vérifier la signature
# rpm --checksig -v paquet.rpm
+
<source lang="bash">rpm --checksig -v paquet.rpm</source>
(il peut petre nécessaire d'importer la clé publique sur le système : rpm --import)
+
(il peut être 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
# gpg -export -a "Votre clé" > Public_key.txt
+
<source lang="bash">gpg -export -a "Votre clé" > Public_key.txt</source>
  
 
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 :
rsync --list-only rsync://apt.sw.be/pub/
+
<source lang="bash">rsync --list-only rsync://apt.sw.be/pub/</source>
 
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 !!!
mrepo -gvvv centos5
+
<source lang="bash">mrepo -gvvv centos5</source>
  
 
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:44

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 être 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