Création d'un dépôt RPM à base de Fedora
Introduction
Je vais partir du principe que nous allons créer un dépôt RPM pour Fedora 14 et CentOS/RHEL 5 dans /var/www/html/linux/. Voici l'arborescence :Chacun des chemins cités ci-dessus est un dépôt. Ainsi, dans ce qui suit on remplacera /path/myrepo par /var/www/html/linux/fedora/14/i386/ puis pour l'ensemble des commandes par /var/www/html/linux/fedora/14/x86_64/ et ainsi de suite pour chacune des architecture des distributions que concerne notre dépôt./var/www/html/linux/fedora/14/i386/
/var/www/html/linux/fedora/14/x86_64/
/var/www/html/linux/el5/5/i386/
/var/www/html/linux/el5/5/x86_64/
Vos rpm seront donc présents avant la génération de createrepo et repoview
Préparation des chemins contenant les RPM
su -lc 'mkdir -p /var/www/html/linux/fedora/14/i386/'
su -lc 'mkdir -p /var/www/html/linux/fedora/14/x86_64/'
su -lc 'mkdir -p
/var/www/html/linux/el5/5/i386/'
su -lc 'mkdir -p
/var/www/html/linux/el5/5/x86_64/'
Pour el5, on peut installer des pré-configuration lors de l'installation de l'OS, du coup, $releaseversion n'est pas forcément 5, mais peut être 5Workstation, 5client ou 5Server. Dans ce cas on en profite pour créer des liens symboliques :
su -lc 'ln -s /var/www/html/linux/el5/5/ /var/www/html/linux/el5/5Workstation
'su -lc 'ln -s /var/www/html/linux/el5/5/ /var/www/html/linux/el5/5Client
'
su -lc 'ln -s /var/www/html/linux/el5/5/ /var/www/html/linux/el5/5Server
'Installer un dépôt RPM
Installation d'un serveur web
Tout d'abord commençons par installer un serveur Apache :su -lc 'yum install httpd
'
Configuration du dépôt
Pour configurer notre dépôt, nous allons utiliser l'outil createrepo :su -lc 'yum install createrepo'
Créons dans /etc/httpd/conf.d/ un fichier de configuration pour notre dépôt dans Apache :su -lc 'vi /etc/httpd/conf.d/repository.conf'
<Directory /var/www/html/>
Options Indexes
Options Indexes FollowSymLinks
Order allow, deny
Allow from all
</Directory>
Création du dépôt
La commande de base pour créer une dépôt est createrepo :
createrepo /path/monrepo
Le plus souvent, on crée un dépôt en générant une base sqlite (cela nous sera utile pour repoview), pour cela, il faut utiliser l'option -d
:createrepo -d /path/monrepo
L'option -g
permet de prendre en compte un groupe de RPM définit dans un fichier comps.xml :createrepo -d -g /path/comps.xml /path/monrepo
Ainsi, nous pourrons utiliser les commandes yum grouptruc
avec notre dépôt !
L'option --unique-md-filenames
semble utile, notamment lorsque 'lon a plusieurs mirroir, permet ede donner un nom unique aux metadatas.
L'option --checksum sha
est indispensable pour le dépôt EL-5 (la
valeur par défaut, sha256, est ok pour fedora >= 11 et EL >= 6)
Donc au final on se retrouve avec :
createrepo --unique-md-filenames --checksum sha -d -g /path/comps.xml /path/monrepo
Génération de repoview
Un dépôt, c'est bien, de quoi le parcourir avec un design sympa, c'est mieux !
Installation de Repoview
su -lc 'yum install repoview'
Utiliser l'option -d sur la commande createrepo afin de créer la base sqlite qui sera utilisée par repoview.
Création des page html via repoview
Ensuite, c'est très simple on demande à repoview de créer les pages qui permettront de naviguer dans notre dépôt !repoview /path/monrepo
Pour terminer, assurons-nous de disposer des droits pour l'utilisateur apache :su -lc 'chmod o+rX /path/monrepo'
Exemple de fichier Comps.xml afin de créer des groupes de rpm
Si vous désirez installer l'ensemble de vos rpm dans votre repo, ou un sous-ensemble spécifique, vous devrez créer un fichier de groupes : comps.xml. Pour notre exemple, si nous voulions que myrpm.noarch.rpm soit installé par défaut et mybinrpm.i386.rpm soit une option, nous créerions un fichier de comps.xml comme ceci :<comps>
<!-- <meta> -->
<!-- Meta information will go here eventually -->
<!-- </meta> -->
<group>
<id>mygroup</id>
<name>MyGroup</name>
<default>true</default>
<description>Default RPMS from MyRepo</description>
<uservisible>true</uservisible>
<packagelist>
<packagereq type="default">myrpm</packagereq>
<packagereq type="optional">mybinrpm</packagereq>
</packagelist>
</group>
</comps>
Pensez à relancer createrepo afin que vos groupes soient accessibles par les personnes ayant votre dépôt de configuré !
Ajout de pages manquantes
Cette opération est effectuée qu'un seule fois à la création de l'arborescence, puis à l'ajout d'un release ou d'une distribution.Index principal dans /var/www/html/
Notre dépôt est prêt, reste à y ajouter quelques pages et feuilles de style !su -lc 'vi /var/www/html/index.html
Voici le contenu :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
<title>RepoView: MyRpo</title>
<link href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/css/repostyle.css" type="text/css" rel="stylesheet" />
<meta content="index,follow" name="robots" />
<link rel="shortcut icon" href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/favicon.ico" />
</head>
<body>
<div id="page">
<div id="top">
<h1><span><a href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/index.html">My - Packages</a></span></h1>
</div>
<p id="prelude"><a href="http://www.opti-time.com/">Site</a> | <a href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/index.html">Dépôt</a></p>
<div id="wrapper">
<div id="main">
<div id="content">
<h2>Download mirrors</h2>
<ul class="pkglist">
<li><a href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/index.html" class="inpage">http://monurl/linux/</a> - <strong>primary</strong></li>
</ul>
<h2>Distribution choice</h2>
<h3>Fedora - Maintained version</h3>
<ul class="pkglist">
<li>
<a href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/linux/fedora/14/index.html" class="inpage">Fedora 14 (Laughlin)</a> -
repository auto-configuration package : <a href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/linux/fedora/14/x86_64/my-repo-fedora-2.0-0.0.fc14.noarch.rpm">My-repository-fc-14.rpm</a>
</li>
</ul>
<h3>Enterprise Linux (RHEL / CentOS / Other clones)</h3>
<ul class="pkglist">
<li>
<a href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/linux/el5/5/index.html" class="inpage">Enterprise Linux 5.5</a> -
repository auto-configuration package : <a href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/linux/el5/5/x86_64/my-repo-el5-2.0-0.0.el5.noarch.rpm">My-repository-el-5.rpm</a>
</li>
</ul>
<h2>Other resources</h2>
<ul class="pkglist">
<li>
<a href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/linux/RPM-GPG-KEY-MyRepo.gpg" class="inpage">RPM-GPG-KEY-MyRepo</a>: the GnuPG public key of the key pair used to sign MyRepo's packages
</li>
</ul>
</div>
</div>
</div>
<div id="footer">
<ul id="w3c">
<li>
<a id="vxhtml" href="http://validator.w3.org/check/referer">XHTML 1.1 valide</a>
</li>
<li>
<a id="vcss" href="http://jigsaw.w3.org/css-validator/check/referer">CSS 2.0 valide</a>
</li>
</ul>
<p>
by <a href="http://mricon.com/trac/wiki/Repoview">Repoview</a> | Designed for <a href="http://www.myRepo.org/">MyRepo</a>
</p>
</div>
</div>
</body>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
</html>
su -lc 'vi /var/www/html/css/repostyle.css
Voici le contenu :
NB : Ce style est très fortement/probablement inspiré de celui qu'utilise Remi pour ses dépôts !ul, ul li {
list-style: none;
}
a:link, a:visited {
color: #000;
text-decoration: underline;
}
a:hover {
color: #000;
text-decoration: none;
}
.nav {
text-align: right;
color: gray;
font-size: small;
}
.nactive {
border-bottom: 1px dotted blue;
background-color: lavender;
color: blue;
font-size: small;
text-decoration: none;
}
.ninactive {
color: gray;
font-size: small;
}
.nlink {
text-decoration: none;
color: blue;
font-size: small;
}
.nlink:hover {
background-color: lavender;
border-bottom: 1px dotted blue;
font-size: small;
}
.inpage {
text-decoration: none;
color: blue;
}
.inpage:hover {
background-color: mistyrose;
color: red;
border-bottom: 1px dotted red;
}
.levbar {
position: absolute;
top: 0px;
left: 0px;
width: 11em;
height: 100%;
border-right: 4px dotted gray;
border-bottom: 4px dotted gray;
background-color: gainsboro;
}
.main {
position: absolute;
left: 13em;
width: 75%;
}
h1,h2,h3,h4,h5 {
border-bottom: 1px dotted gray;
border-top: 1px dotted gray;
background-color: whitesmoke;
font-weight: normal;
}
.pagetitle {
border-top: 1px dotted gray;
border-bottom: 1px dotted gray;
padding-top: 5%;
padding-bottom: 5%;
margin-top: 5%;
margin-bottom: 5%;
text-align: center;
width: 100%;
color: gray;
background-color: white;
}
dt {
font-weight: bold;
margin-top: 1%;
}
th {
background-color: whitesmoke;
text-align: left;
}
.field {
background-color: whitesmoke;
text-align: right;
}
.levbarlist {
list-style-type: none;
padding: 5%;
border-top: 1px dotted gray;
border-bottom: 1px dotted gray;
background-color: whitesmoke;
}
.pkglist {
padding-top: 2%;
padding-bottom: 2%;
list-style-type: circle;
}
.letterlist {
background-color: whitesmoke;
}
.letterlist a {
padding-left: 0.2em;
padding-right: 0.2em;
}
.footernote {
text-align: right;
font-size: small;
background-color: whitesmoke;
border-top: 1px dotted gray;
color: gray;
}
.repoview {
text-decoration: none;
color: gray;
border-bottom: 1px dotted gray;
font-size: small;
}
.repoview:hover {
background-color: lavender;
border-bottom: 1px dotted blue;
color: blue;
font-size: small;
}
Index de redirection dans /var/www/html/linux/
su -lc 'vi /var/www/html/linux/index.html'
Voici le contenu :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="refresh" content="0; url=../index.html" />
<title>Repository MyRepo</title>
<meta name="robots" content="noindex,follow" />
<link href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/../css/repostyle.css" type="text/css" rel="stylesheet" />
</head>
<body>
<p><a href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/../index.html">Packages MyRepo</a></p>
</body>
</html>
Index dans chacun des dépôts
Ici placez cet index autant de fois que de distributions supportée par votre dépôtsu -lc 'vi /var/www/html/linux/fedora/14/index.html'
Voici le contenu :
NB : changez donc fedora et 14 par el5 et 5 pour CentOS et RHEL.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
<title>Opti-Time - Fedora 14</title>
<link href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/i386/repoview/layout/repostyle.css" type="text/css" rel="stylesheet" />
<meta content="index,follow" name="robots" />
<link rel="shortcut icon" href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/../../favicon.ico" />
</head>
<body>
<div id="page">
<div id="top">
<h1><span><a href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/../../../index.html">MyRepo- Packages</a></span></h1>
</div>
<p id="prelude"><a href="http://www.myrepo.com/">Site</a> | <a href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/index.html">Dépôt</a></p>
<div id="wrapper">
<div id="main">
<div id="content">
<h2>Fedora 14 (Laughlin)</h2>
<h3>MyRepo</h3>
<ul class="pkglist">
<li>
<a href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/i386/repoview/index.html" class="inpage">i386</a>
</li>
<li>
<a href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/x86_64/repoview/index.html" class="inpage">x86_64</a>
</li>
</ul>
<!--<h3>MyRepo-test</h3>
<ul class="pkglist">
<li>
<a href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/test/i386/repoview/index.html" class="inpage">i386</a>
</li>
<li>
<a href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/test/x86_64/repoview/index.html" class="inpage">x86_64</a>
</li>
</ul>-->
</div>
</div>
<div id="sidebar">
<h2>fedora 14</h2>
<ul class="levbarlist">
<li>
<a href="http://www.slobberbone.net/dotclear/index.php?post/2011/08/17/../../../index.html" class="nlink" title="Back to distribution choice">Back to distribution choice</a>
</li>
</ul>
</div>
</div>
<div id="footer">
<ul id="w3c">
<li>
<a id="vxhtml" href="http://validator.w3.org/check/referer">XHTML 1.1 valide</a>
</li>
<li>
<a id="vcss" href="http://jigsaw.w3.org/css-validator/check/referer">CSS 2.0 valide</a>
</li>
</ul>
<p>
by <a href="http://mricon.com/trac/wiki/Repoview">Repoview</a> | Designed for <a href="http://www.myrepo.com/">MyRepo</a>
</p>
</div>
</div>
</body>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
</html>
Terminons par redonner la propriété du répertoire /var/www/html/ à apache :
su -lc 'chown -Rf apache:apache /var/www/html/'
su -lc 'chmod o+rX /path/monrepo'
Scripts de régénération automatique des dépôts
Tâche que vous allez vous trouvez à faire souvent, voici donc un script pour le dépôt el5.5 (effectué avec les droits root) :#!/bin/sh
Et pour Fedora 14 :chown -R apache:apache /var/www/html/linux/el5/
createrepo -g ~/comps.xml -d /var/www/html/linux/el5/5/i386/
createrepo -g ~/comps.xml -d /var/www/html/linux/el5/5/x86_64/
repoview /var/www/html/linux/el5/5/i386/
repoview /var/www/html/linux/el5/5/x86_64/
#permet d'avoir le même style que l'index.html
cp -f /var/www/html/css/repostyle.css /var/www/html/linux/el5/5/i386/repoview/layout/
cp -f /var/www/html/css/repostyle.css /var/www/html/linux/el5/5/x86_64/repoview/layout/
/etc/init.d/httpd reload
#!/bin/sh
chown -R apache:apache /var/www/html/linux/fedora/
createrepo -g ~/comps.xml -d /var/www/html/linux/fedora/14/i386/
createrepo -g ~/comps.xml -d /var/www/html/linux/fedora/14/x86_64/
repoview /var/www/html/linux/fedora/14/i386/
repoview /var/www/html/linux/fedora/14/x86_64/
#permet d'avoir le même style que l'index.html
cp -f /var/www/html/css/repostyle.css /var/www/html/linux/fedora/14/i386/repoview/layout/
cp -f /var/www/html/css/repostyle.css /var/www/html/linux/fedora/14/x86_64/repoview/layout/
/etc/init.d/httpd reload
Génération de la clé GPG et du fichier myrepo.repo
Pour finaliser votre dépôt, il vous faut une clé GPG qui va authentifier vos rpm présents sur le dépôt, je vous invite à lire GnuPG : Signature et Chiffrement afin de créer votre propre clé GPG.Ensuite, il va falloir ajouter la définition de votre dépôt et la clé GPG à chacun de vos "clients" de votre dépôt.
Voici le fichier qui sera dans /etc/yum.repo.d/
su -lc 'vi /etc/yum.repo.d/myrepo.repo'
Et comme un exemple est toujours mieux qu'un beau discours, voici le contenu de mon fichier myrepo.spec qui me permet de générer un rpm pour ajouter MyRepo ![MyRepo]
name=MyRepo Repository for Enterprise Linux $releasever - $basearch
baseurl=http://repository.opti-time.net:81/linux/el5/$releasever/$basearch/
enabled=1
#failovermethod=priority
metadata_expire=7d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-MyRepo.gpg
Bien-sur, il faudra en faire un pour Fedora 14, en remplaçant el5 par fcName: myrepo-repo-el5
Version: 1.0
Release: 0.0%{?dist}
Summary: This package is the repository of MyRepo
Group: Applications/ProjectManagement
License: GPL
URL: http://www.myrepo.org/linux/
Vendor: Slobberbone
Source0: %{name}.tar.gz
BuildRoot: %tmppath/%{name}-%{version}-%{release}-root-%(%_id_u -n)
BuildArch: noarch
%description
Repository RHEL / Centos for MyRepo
%prep
%setup -q
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}%sysconfdir/yum.repos.d/
mkdir -p %{buildroot}%sysconfdir/pki/rpm-gpg/
install -c -m 755 optitime.repo %{buildroot}%sysconfdir/yum.repos.d/
install -c -m 755 RPM-GPG-KEY-Opti-TimeSA.gpg %{buildroot}%sysconfdir/pki/rpm-gpg/
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root,-)
%sysconfdir/yum.repos.d/optitime.repo
%sysconfdir/pki/rpm-gpg/RPM-GPG-KEY-Opti-TimeSA.gpg
%changelog
* Wed Aug 17 2011 MyRepo <slobberbone@myrepo.org> 1.0-1.1
- initial release
Il ne faut pas oublier que lorsque vous mettez vos RPM sur le dépôt que ceux-ci soient signés grâce à la commande :
rpmsign --addsign monrpm.rpm