Localer Debian Mirror

Florian Lohoff flo at rfc822.org
Fri Nov 28 22:05:23 CET 2003


On Fri, Nov 28, 2003 at 09:08:01PM +0100, Hauke Homburg wrote:
> Hallo,
> 
> Ich möchte mir einen Debian Mirror einrichten.
> 
> Ich möchte folgendes machen:
> 
> Eine _komplette_ Verzeichnisstruktur von einem Server runterladen. Für stable.
> 
> Diese Verzeichnisstruktur per Cron Job mit einem Debian Server abgleichen. Um 
> davon zu installieren.
> 
> Ich überlege mir eine Distri mit jigdo runterzuladen. _Dann_ kann ich die CDs 
> in ein Verzeichnis kopieren. Ok. Aber wie? halte ich die aktuell? Ich meine 
> _komplett_ aktuell? Apt-move reicht nicht, apt-ftparchive auch nicht. Rsync 
> wird immer _alle_ Dateien vergleichen? Ich meine rsync wird sic h_nicht_ nach 
> den Packages Files richten?
> 
> Wie gehe ich am besten vor?

Das ist alles nicht soooo simple - Es gibt diverse debmirror script -
Einfach mal google befragen - Haben alle so ihre probleme - Ich wuerds
mal so probieren (In 5 Minuten zusammengehackt):


#!/bin/sh

DEST=/home/flo/projects/dmirror/debian
SRCHTTP=http://source.rfc822.org/debian
SRCDIRPARTS=1
SRCRSYNC=source.rfc822.org::debian
DIST="woody"
REPOSITORYS="main contrib non-free"
ARCHS="i386"

[ -d ${DEST} ] || mkdir -p ${DEST}

remflist=`tempfile`
locflist=`tempfile`
fdiff=`tempfile`
toget=`tempfile`
todel=`tempfile`

# Update Packages files and generate remote file whishlist
for dist in ${DIST}; do
	for repos in ${REPOSITORYS}; do
		for arch in ${ARCHS}; do 
			dpath=dists/${dist}/${repos}/binary-${arch}
			[ -d ${DEST}/${dpath} ] || mkdir -p ${DEST}/${dpath}

			# Sync uncompressed Packages file
			rsync -z -v ${SRCRSYNC}/${dpath}/Packages.gz \
				${DEST}/${dpath}

			gunzip -dc ${SRCRSYNC}/${dpath}/Packages.gz \
				>${SRCRSYNC}/${dpath}/Packages

			sed -n '/^Filename: / { s/Filename: //; p; }' \
				<${DEST}/${dpath}/Packages \
				>>${remflist}
		done
	done

	
	
done

# Sort remote files
sort -u ${remflist} >${remflist}.sort

# Find local files
find ${DEST}/pool -type f -print |\
	sort -u >${locflist}

# Diff local and remote files
diff ${remflist} ${locflist} >${fdiff}

# Sort out files to retrieve
sed -n '/^</ { s/^< //; p; }' \
	<${fdiff} \
	>${toget}

# Sort out files to delete
sed -n '/^>/ { s/^> //; p; }' \
	<${fdiff} \
	>${todel}

wget -P ${DEST} -B ${SRCHTTP}/ \
	-i ${toget} \
	--cut-dirs=${SRCDIRPARTS} \
	-nH -x

rm -f ${remflist} ${locflist} ${fdiff} ${toget}


Das dingen kann keine Sources (Unterschiedliches Fileformat) und wird
vermutlich auch ziemlich auf die nase fallen bei non-US und experimental
etc - Die liegen alle in anderen directorys. Eigentlich muesste man also
bei der remoteflist den ersten pfad bestandteil analysieren und dann
diese directories lokal scannen.

Weiterhin loescht das dingen im moment nicht d.h. fuer single shot 
mirror super. Ein delete koennte man mit

cat ${todel} | xargs -n 25 rm -f 

hinbekommen. Sollte man aber so nen paar sicherheitschecks einbauen ob 
die remoteflist nicht vielleicht empty ist

[ -z ${remflist ] || exit 1

Je nachdem fuer wen den mirror ist koennte man alternativ die "Packages"
und nicht die "Packages.gz" files mirrorn - Die nicht kompremierten
lassen sich besser rsyncen und hinterher kann man die einfach einpacken
in das Packages.gz file.

Flo
-- 
Florian Lohoff                  flo at rfc822.org             +49-171-2280134
                        Heisenberg may have been here.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://lug-owl.de/pipermail/linux/attachments/20031128/a9d0f8b0/attachment.sig>


More information about the Linux mailing list