Ich hab mal wieder meinen mrepo Server zu Hause neu eingerichtet. Eine Kleinigkeit die mich störte ist das einige Repository leider keinen Directorylisting haben (z.B. Google und Adobe). Dadürch kann mrepo diese Repos nicht einbinden. Naja, hie ein kleines Script das es ermöglicht die rpm-Dateien aus einem yum-Repo (Repomd) zu speichern, auch wenn keine Verzeichnisanzeige, bzw. keine index-Datei vorhanden ist.
#! /bin/bash
# written by Fabian Niesen 2009-09-16 http://kb.lowfyr.de
# No warranties, no copyright, just use it if you want.
# If you find english typos, just use them to, if you want ;)
# Script to mirror 3rd Partyrepositories
# Requirements: xmllib2
# Syntax for the Repositories:
# REPOnumber=reponame!repourl
TARGETDIR=/var/mrepo/3rdparty
REPO1=google-i386!http://dl.google.com/linux/rpm/stable/i386
REPO2=google-x86_64!http://dl.google.com/linux/rpm/stable/x86_64
REPO3=adobe-i386!http://linuxdownload.adobe.com/linux/i386
REPO4=adobe-x86_64!http://linuxdownload.adobe.com/linux/x86_64
if [ ! -d $TARGETDIR ] ; then
echo "Targetdir did not exist! Change TARGETDIR or try: mkdir "$TARGETDIR
exit 42
fi
### If you add REPOs, remember to adjust the for-statement ###
for REPO in $REPO1 $REPO2 $REPO3 $REPO4
###############################################
### do not change something below this line ###
###############################################
do
REPONAME=`echo $REPO |cut -f1 -d !`
REPOURL=`echo $REPO |cut -f2 -d !`
if [ ! -d $TARGETDIR/$REPONAME ]; then
mkdir $TARGETDIR/$REPONAME
fi
cd $TARGETDIR/$REPONAME
rm -f rpm.list primary.xml primary.xml.gz
wget -nc $REPOURL/repodata/primary.xml.gz
gunzip primary.xml.gz
xmllint primary.xml --format | grep "<location href" | cut -f2 -d """ >rpm.list
wget -i rpm.list -c -N --base=$REPOURL/
rm -f rpm.list primary.xml primary.xml.gz
done
Und in die mrepo-conf werden diese Repos so eingebunden (Wenn das Repo nach /var/mrepo/3rdparty/test gespeichert wird):
reponame = mrepo:///path-without-mrepopath test = mrepo:///3rdparty/test
Eingetragen sind bereits die Repositories für Google und Adobe.