Creation d'un dépôt de RPMs
De wikiGite
Sommaire
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