Inhaltsverzeichnis

Eigenes Repository einrichten

Repository Icon
Hat man mehrere Clienten im eigenen LAN zu betreuen, so ist es zweckmäßiger ein lokales Repository vorzuhalten. Die einzelnen Rechner, können sich dann über den schnellen LAN-Zugriff die Daten vom lokalen Repository holen, so z.B. bei der Erstinstallation und müssen nicht die WAN-Strecke benutzen. So spart man Übertragungstraffic und die Spiegelserver werden nicht unnötig mehrfach belastet.

Zielverzeichnis(se) anlegen

Als erstes legen wir unsere Zielpfade an, in denen später die Dateien abgelegt werden sollen.

Centos Base

# mkdir -p /var/www/repository/centos/5/addons/i386/repodata
# mkdir -p /var/www/repository/centos/5/addons/i386/RPMS
# mkdir -p /var/www/repository/centos/5/centosplus/i386/repodata
# mkdir -p /var/www/repository/centos/5/centosplus/i386/RPMS
# mkdir -p /var/www/repository/centos/5/contrib/i386/RPMS
# mkdir -p /var/www/repository/centos/5/contrib/i386/repodata
# mkdir -p /var/www/repository/centos/5/extras/i386/RPMS
# mkdir -p /var/www/repository/centos/5/extras/i386/repodata
# mkdir -p /var/www/repository/centos/5/fasttrack/i386/RPMS
# mkdir -p /var/www/repository/centos/5/fasttrack/i386/repodata
# mkdir -p /var/www/repository/centos/5/isos/i386
# mkdir -p /var/www/repository/centos/5/os/i386/CentOS/RPMS
# mkdir -p /var/www/repository/centos/5/os/i386/NOTES
# mkdir -p /var/www/repository/centos/5/os/i386/images/pxeboot
# mkdir -p /var/www/repository/centos/5/os/i386/images/xen
# mkdir -p /var/www/repository/centos/5/os/i386/isolinux
# mkdir -p /var/www/repository/centos/5/os/i386/repodata
# mkdir -p /var/www/repository/centos/5/updates/i386/RPMS
# mkdir -p /var/www/repository/centos/5/updates/i386/repodata

rpmforge

Für das rpmforge-Repository legen wir auch gleich noch im nächsten Schritt die Verzeichnisstruktur an:

# mkdir -p /var/www/repository/rpmforge/test/RPMS
# mkdir -p /var/www/repository/rpmforge/test/headers
# mkdir -p /var/www/repository/rpmforge/test/repodata
# mkdir -p /var/www/repository/rpmforge/base
# mkdir -p /var/www/repository/rpmforge/RPMS.test
# mkdir -p /var/www/repository/rpmforge/RPMS.dries
# mkdir -p /var/www/repository/rpmforge/dries/repodata
# mkdir -p /var/www/repository/rpmforge/dries/headers
# mkdir -p /var/www/repository/rpmforge/dries/RPMS
# mkdir -p /var/www/repository/rpmforge/dag/repodata
# mkdir -p /var/www/repository/rpmforge/dag/headers
# mkdir -p /var/www/repository/rpmforge/dag/RPMS

eigenes Repository

Für etwaig eigene Repositories legen wir zu guter Letzt auich noch die benötigten Verzeichnisse an.

# mkdir -p /var/www/repository/ws500
# mkdir -p /var/www/repository/wview

initiale Befüllung

Im nächsten Schritt befüllen wir das erste mal unsere lokalen Zielverzeichnisse, die wir im ersten Schritt angelegt haben. Je nach dem wieviel Bankbreite uns zur Verfügung steht, starten wir die nachfolgenden Befüllungen im angemessenen Abständen. Mit Rücksicht auf dem Quell-Spiegelserver verteilen wir diese ersten massiven Downloads über mehrere Tage. Auch wenden wir uns an den Server, der am besten erreichbar ist!

ISO-Images

 # /usr/bin/rsync -vart ftp-stud.fht-esslingen.de::centos/5.3/isos/ /var/www/repository/centos/5/isos/ --exclude x86_64/ --exclude SRPMS/
 # /usr/bin/rsync -vart ftp-stud.fht-esslingen.de::centos/5.3/os/ /var/www/repository/centos/5/os/ --exclude x86_64/ --exclude SRPMS/

Centos Base

# /usr/bin/rsync -vart ftp-stud.fht-esslingen.de::centos/5.3/updates/ /var/www/repository/centos/5/updates/ --exclude x86_64/ --exclude SRPMS/
# /usr/bin/rsync -vart ftp-stud.fht-esslingen.de::centos/5.3/extras/ /var/www/repository/centos/5/extras/ --exclude x86_64/ --exclude SRPMS/
# /usr/bin/rsync -vart ftp-stud.fht-esslingen.de::centos/5.3/centosplus/ /var/www/repository/centos/5/centosplus/ --exclude x86_64/ --exclude SRPMS/
# /usr/bin/rsync -vart ftp-stud.fht-esslingen.de::centos/5.3/fasttrack/ /var/www/repository/centos/5/fasttrack/ --exclude x86_64/ --exclude SRPMS/
# /usr/bin/rsync -vart ftp-stud.fht-esslingen.de::centos/5.3/addons/ /var/www/repository/centos/5/addons/ --exclude x86_64/ --exclude SRPMS/
# /usr/bin/rsync -vart ftp-stud.fht-esslingen.de::centos/5.3/contrib/ /var/www/repository/centos/5/contrib/ --exclude x86_64/ --exclude SRPMS/

rpmforge

 # /usr/bin/rsync -vart apt.sw.be::pub/freshrpms/pub/dag/redhat/el5/en/i386/ /var/www/repository/rpmforge/ --exclude RPMS.dag/ --exclude SRPMS.dag/ --exclude x86_64/ --exclude SRPMS/

täglicher automatischer Abgleich

Damit unser vorhandenes gespiegeltes Repository immer schön aktuell bleibt, werden wir nun einmal täglich automatisch die Dateien abgleichen lassen.

repository-sync-Script

Hierzu legen wir uns als erstes ein entsprechendes Script an. Mit dem editor unserer Wahl, so z.B. vim legen wir ein Script mit dem Namen sync-repository.sh im Verzeichnis /root/bin/ an.

# vim /root/bin/sync-repository.sh
sync-repository.sh
# sync-repository.sh: Script zum automatischen Abgleich verschiedener Repositories / Mirrors
#
# Copyright (C) 2009 Django
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Or, point your browser to http://www.gnu.org/copyleft/gpl.html
#
# The author can be reached at  django[aett]omni128mnet-mail[punkt]de
#
# The document-page is at http://dokuwiki.nausch.org/doku.php?id=centos:repo-one
#
#
#
# CentOS aktuell
#
# (!!! isos und os auskommentieren wenn 1. mirror gelaufen, da spaeter keine Aenderungen !!!)
/usr/bin/rsync -art ftp-stud.fht-esslingen.de::centos/5.3/isos/ /var/www/repository/centos/5/isos/ --exclude x86_64/ --exclude SRPMS/
/usr/bin/rsync -art ftp-stud.fht-esslingen.de::centos/5.3/os/ /var/www/repository/centos/5/os/ --exclude x86_64/ --exclude SRPMS/
#
echo "Syncing CentOS 5.3 Updates..."
/usr/bin/rsync -art ftp-stud.fht-esslingen.de::centos/5.3/updates/ /var/www/repository/centos/5/updates/ --exclude x86_64/ --exclude SRPMS/
echo "Syncing CentOS 5.3 Extras..."
/usr/bin/rsync -art ftp-stud.fht-esslingen.de::centos/5.3/extras/ /var/www/repository/centos/5/extras/ --exclude x86_64/ --exclude SRPMS/
echo "Syncing CentOS 5.3 Centosplus..."
/usr/bin/rsync -art ftp-stud.fht-esslingen.de::centos/5.3/centosplus/ /var/www/repository/centos/5/centosplus/ --exclude x86_64/ --exclude SRPMS/
echo "Syncing CentOS 5.3 Fasttrack..."
/usr/bin/rsync -art ftp-stud.fht-esslingen.de::centos/5.3/fasttrack/ /var/www/repository/centos/5/fasttrack/ --exclude x86_64/ --exclude SRPMS/
echo "Syncing CentOS 5.3. Addons..."
/usr/bin/rsync -art ftp-stud.fht-esslingen.de::centos/5.3/addons/ /var/www/repository/centos/5/addons/ --exclude x86_64/ --exclude SRPMS/
echo "Syncing CentOS 5.3. Contrib..."
/usr/bin/rsync -art ftp-stud.fht-esslingen.de::centos/5.3/contrib/ /var/www/repository/centos/5/contrib/ --exclude x86_64/ --exclude SRPMS/
#
#
# RPMForge Repository
#
echo "Syncing Repo RPM-Forge Repo..."
/usr/bin/rsync -art apt.sw.be::pub/freshrpms/pub/dag/redhat/el5/en/i386/ /var/www/repository/rpmforge/ --exclude RPMS.dag/ --exclude SRPMS.dag/ --exclude x86_64/ --exclude SRPMS/

Anschließend setzen wir noch die Ausführungsrechte an unserem Script.

 # chmod +x vim /root/bin/sync-repository.sh

täglichen cronjob

Für den automatischen Abgleich, tragen wir den Aufruf unseres Scriptes in die /etc/crontab ein, so dass täglich um 01:20 Uhr eine Aktualisierung unseres Datenbestandes vorgenommen werden kann.

# vim /etc/crontab

 # repository update
 # eingefügt am 21.06.2009
 20 1 * * *  root /root/bin/sync-repository.sh

V-Host Definition für unser Repository

Für den Zugriff via Web-Browser richten wir uns noch einen V-Host auf unserem Apache-Webserver ein. Hierzu tragen wir in die vim /etc/httpd/conf.d/vhosts.conf nachfolgende Konfigurationszeilen ein.

# vim /etc/httpd/conf.d/vhosts.conf
vhosts.conf
#
# repository
#
 
<VirtualHost *:80>
        ServerAdmin webmaster@nausch.org
        ServerName repository.nausch.org:80
        ServerAlias repository.nausch.org www.repository.nausch.org
        ServerPath /
        DocumentRoot "/var/www/repository"
        <Directory "/var/www/repository">
                Options Indexes FollowSymLinks
                AllowOverride None
                Order allow,deny
                Allow from all
        </Directory>
        # Hide file favicon.ico from indexes
        IndexIgnore favicon.ico
        # Hide file robots.txt from indexes
        IndexIgnore robots.txt
        # Hide directory repodata from indexes
        IndexIgnore repodata
        # Hide file mirrotlist from indexes
        IndexIgnore mirrorlist
        # Protect directory repodata from direct access
        <Directory "/var/www/repository/repodata">
                Options FollowSymLinks
                AllowOverride None
                Order deny,allow
                Deny from all
        </Directory>
        <Directory "/var/www/repository/centos">
                Options Indexes FollowSymLinks
                AllowOverride None
                Order Deny,Allow
                Deny from all
                Allow from 127.0.0.1
                Allow from 192.168.10.0/24
        </Directory>
        <Directory "/var/www/repository/rpmforge">
                Options Indexes FollowSymLinks
                AllowOverride None
                Order Deny,Allow
                Deny from all
                Allow from 127.0.0.1
                Allow from 192.168.10.0/24
        </Directory>
 
        DirectoryIndex index.html
        ErrorLog logs/repository_error.log
        CustomLog logs/repository_access.log combined
</VirtualHost>

Anschließend geben wir unserem neuen V-Host unserem Webserver bekannt, in dem wir diesen 1x durchstarten.

 # service httpd restart

/etc/yum.repos.d

Damit nun unsere Clienten auf unser eigenen lokales Repository zugreifen, definieren wir im Verzeichnis /etc/yum.repos.d unser eigenes Repository als Quelle. Zuerst aber sichern wir die Originaldateien, in dem wir diese umbenennen.

 # mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
 # mv /etc/yum.repos.d/rpmforge.repo /etc/yum.repos.d/rpmforge.repo.backup

Anschließend erstellen wir unsere eigenen Konfigurationsdateien.

# vim /etc/yum.repos.d/CentOS-LOCAL.repo

# CentOS-LOCAL.repo
#
# This file uses a new mirrorlist system developed by Lance Davis for CentOS.
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the 
# remarked out baseurl= line instead.
#
# Version für den Zugriff auf das lokale Centos-Repository

[base-LC]
name=CentOS-5 - Base
baseurl=http://repository.nausch.org/centos/5/os/i386/
priority=1
gpgcheck=1
gpgkey=http://repository.nausch.org/centos/5/os/i386/RPM-GPG-KEY-CentOS-5

#released updates 
[updates-LC]
name=CentOS-5 - Updates
baseurl=http://repository.nausch.org/centos/5/updates/i386/
priority=1
gpgcheck=1
gpgkey=http://repository.nausch.org/centos/5/os/i386/RPM-GPG-KEY-CentOS-5

#packages used/produced in the build but not released
[addons-LC]
name=CentOS-5 - Addons
baseurl=http://repository.nausch.org/centos/5/addons/i386/
priority=1
gpgcheck=1
gpgkey=http://repository.nausch.org/centos/5/os/i386/RPM-GPG-KEY-CentOS-5

#additional packages that may be useful
[extras-LC]
name=CentOS-5 - Extras
baseurl=http://repository.nausch.org/centos/5/extras/i386/
priority=1
gpgcheck=1
gpgkey=http://repository.nausch.org/centos/5/os/i386/RPM-GPG-KEY-CentOS-5
enabled = 1

#additional packages that extend functionality of existing packages
[centosplus-LC]
name=CentOS-5 - Plus
baseurl=http://repository.nausch.org/centos/5/centosplus/i386/
priority=2
gpgcheck=1
enabled=1
gpgkey=http://repository.nausch.org/centos/5/os/i386/RPM-GPG-KEY-CentOS-5

Das Gleiche machen wir nun für das rpmforge-Repository

# vim /etc/yum.repos.d/rpmforge-LOCAL.repo

# Name: RPMforge RPM Repository for Red Hat Enterprise 5 - dag
# URL: http://rpmforge.net/
# geändert auf locales Repository

[rpmforge-LC]
name = Red Hat Enterprise $releasever - RPMforge.net - dag
baseurl = http://repository.nausch.org/rpmforge/dag
enabled = 1
priority=10
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1

Mit einem yum clean all löschen wir erst einmal die alte Repository-Datenbank auf unserem Client.

 # yum clean all
 Loaded plugins: fastestmirror, priorities
 Cleaning up Everything
 Cleaning up list of fastest mirrors

Abschließend bauen wir die Datenbank neu auf:

# yum check-update
Loaded plugins: fastestmirror, priorities
Determining fastest mirrors
rpmforge-LC                                                                                                                                          | 1.1 kB     00:00     
primary.xml.gz                                                                                                                                       | 3.2 MB     00:00     
rpmforge-LC                                                    8863/8863
extras-LC                                                                                                                                            | 1.1 kB     00:00     
primary.xml.gz                                                                                                                                       | 100 kB     00:00     
extras-LC                                                      311/311
addons-LC                                                                                                                                            |  951 B     00:00     
primary.xml.gz                                                                                                                                       |  157 B     00:00     
base-LC                                                                                                                                              | 1.1 kB     00:00     
primary.xml.gz                                                                                                                                       | 878 kB     00:00     
base-LC                                                        2508/2508
adobe-linux-i386                                                                                                                                     |  951 B     00:00     
primary.xml.gz                                                                                                                                       |  11 kB     00:00     
adobe-linux-i386                                               17/17
updates-LC                                                                                                                                           |  951 B     00:00     
primary.xml.gz                                                                                                                                       | 222 kB     00:00     
updates-LC                                                     339/339
centosplus-LC                                                                                                                                        |  951 B     00:00     
primary.xml.gz                                                                                                                                       |  73 kB     00:00     
centosplus-LC                                                  111/111
491 packages excluded due to repository priority protections

Repository Metadaten für eigenes Repository generieren

Möchte man RPM-Pakete aus dem zuvor generierten Repository komfortabel einbinden, muss aus den RPM-Paketen in dem gewählten Verzeichnis noch ein gemeinsames metadata Repository generiert werden. Hierzu bedienen wir uns des Dienstprogrammes createrepo.

Installation

Wie soll es anders sein, funktioniert die Installation des benötigten Programms im gewohnten Rahmen via yum, welches wir als User root ausführen.

 # su -
 # yum install createrepo

Was uns das Paket createrepo alles mitbringt offenbart eine Blick, nach erfolgter Installation des Paketes, in das RPM.

# rpm -iql createrepo
Name        : createrepo                   Relocations: (not relocatable)
Version     : 0.4.11                            Vendor: CentOS
Release     : 3.el5                         Build Date: So 25 Mai 2008 08:20:52 CEST
Install Date: Mo 28 Dez 2009 23:42:06 CET      Build Host: builder15.centos.org
Group       : System Environment/Base       Source RPM: createrepo-0.4.11-3.el5.src.rpm
Size        : 221261                           License: GPLv2
Signature   : DSA/SHA1, So 15 Jun 2008 01:29:52 CEST, Key ID a8a447dce8562897
URL         : http://linux.duke.edu/projects/metadata/
Summary     : Erstellt ein einfaches Metadaten-Depot
Description :
Dieses Dienstprogramm wird ein gemeinsames metadata Repository aus einem
Verzeichnis von rpm Paketen generieren
/usr/bin/createrepo
/usr/bin/modifyrepo
/usr/share/createrepo
/usr/share/createrepo/dumpMetadata.py
/usr/share/createrepo/dumpMetadata.pyc
/usr/share/createrepo/dumpMetadata.pyo
/usr/share/createrepo/genpkgmetadata.py
/usr/share/createrepo/genpkgmetadata.pyc
/usr/share/createrepo/genpkgmetadata.pyo
/usr/share/createrepo/modifyrepo.py
/usr/share/createrepo/modifyrepo.pyc
/usr/share/createrepo/modifyrepo.pyo
/usr/share/createrepo/readMetadata.py
/usr/share/createrepo/readMetadata.pyc
/usr/share/createrepo/readMetadata.pyo
/usr/share/doc/createrepo-0.4.11
/usr/share/doc/createrepo-0.4.11/COPYING
/usr/share/doc/createrepo-0.4.11/ChangeLog
/usr/share/doc/createrepo-0.4.11/README
/usr/share/man/man8/createrepo.8.gz

createrepo

Die Metadaten für unser eigenes Repository legen wir dann mit dem Programm createrepo an.

 # createrepo /var/www/repository/public/

Möchten wir einzelne Pakete die im entsprechende Verzeichnis liegen ausnehmen, so können wir diese einfach „excludieren“.

createrepo -x mod_evasive-1.10.1-3.el5.i386.rpm /var/www/repository/public/
1/1 - dansguardian-2.10.1.1-1.0.el5.i386.rpm                                    
Saving Primary metadata
Saving file lists metadata
Saving other metadata

Einfacher geht es natürlich, wenn man in einer separaten Liste nur die Dateien aufführt, die in das Repository aufgenommen werden sollen. Hierzu legen wir uns eine entsprechende Datei an.

 # vim /root/nausch.repo

Darin hinterlegen wir unsere Dateiennamen in einer Liste.

# vim /root/nausch.repo

dansguardian-2.10.1.1-1.0.el5.i386.rpm

Anschließend rufen wir createrepo mit der Option -i auf.

# createrepo -i /root/nausch.repo /var/www/repository/public/
1/1 - dansguardian-2.10.1.1-1.0.el5.i386.rpm                                    
Saving Primary metadata
Saving file lists metadata
Saving other metadata