Eigenes Repository einrichten
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