[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: rsync mirroring script



On Fri, Jan 25, 2002 at 09:22:33AM +0200, Oleg P. Philon wrote:
> > >   Помнится когда-то пробегал скрипт частичного мирроринга debian с
> > >   помощью rsync.
> > >   Если у кого есть - поделитесь пожалуйста!
> > >   Понятное дело, скрипт должен уметь работать с pool.
> > Могу предложить скрипты написаные мной на Perl`е.
> > Они скачивают все недостающие пакеты из файлов Packages.
> Пользуюсь пакетом mirror для этой же цели. После отладки и аккуратной
> настройки списка нежелательных файлов получается зеркалить исходники
> из пула по обычной выделенке 33600

У mirror одна проблема -- он использует Perl Net::FTP, который не умеет
ходить через HTTP proxy, а у нас весь тарелочный трафик ходит через
squid.

Для поддержания частичного зеркала (обновляющего только те пакеты,
которые у меня стоят), я делаю apt-get update -qq && apt-get
dist-upgrade -qq -d из cron, а потом с утра руками (делать
автоматическое обновление среди ночи я не решаюсь) apt-get dist-upgrade,
после чего своим собственным скриптом раскидываю по зеркалу (с apt-zip
мне так и не удалось подружиться, он у меня все время non-us и non-US
путает).

-- 
Дмитрий Бородаенко
#!/bin/sh

debian='/mnt/win/shelf/software/debian/dists/testing'

while [ "$1" ]; do
   [ -f "$1" ] || { echo "$1: no such file"; shift; continue; }
   package=`dpkg -f $1 package`
   version=`dpkg -f $1 version|sed -e 's/^.*://'`
   section=`dpkg -f $1 section`
   [ -z $section ] &&
       section=`gzip -dc $debian/override*|awk '/^'$package'[ 	]/{print $3}'`
   [ -z $section ] &&
       section=`dpkg --status $package|grep 'Section: '|cut -d' ' -f2`
#   if [ -z $section ]; then
#       target=`find $debian/ -name "$package_*" -print`
#       section=`dirname "$target"|sed -e 's/^.*\///'`
#   fi
   if [ -n "$section" ]; then
       dest=`echo $section|sed -e '/^[a-z0-9-]*$/d' -e 's/non-us/non-US/' \
           -e 's/^non-US$/non-US\/main/'`
       if [ -z "$dest" ]; then
           dir="$debian/main/binary-i386/$section"
       else
           dir="$debian/$dest/binary-i386"
       fi
       old=`find $debian/ -name ${package}_'*.deb' -print`
       target="$dir/${package}_${version}.deb"
       if [ -e "$target" ]; then
           echo "$package: version $version is already in archive!" >&2
	   rm $1; shift; continue
       fi
       [ -d "$dir" ] || mkdir -p $dir
       mv $1 $target 2>/dev/null || {
           echo "$package: can't move" >&2; shift; continue; }
       for i in $old; do
           [ -n "$i" -a "$i" != "$target" ] && rm $i
       done
       echo -n "$package "
   else
       echo "$package: section cannot be found" >&2
   fi
   shift
done
#!/bin/sh
cd /mnt/win/shelf/software/debian
dpkg-scanpackages dists/testing/main/binary-i386 dists/testing/override.testing.gz >dists/testing/main/binary-i386/Packages
dpkg-scanpackages dists/testing/contrib/binary-i386 dists/testing/override.testing.contrib.gz >dists/testing/contrib/binary-i386/Packages
dpkg-scanpackages dists/testing/non-free/binary-i386 dists/testing/override.testing.non-free.gz >dists/testing/non-free/binary-i386/Packages
dpkg-scanpackages dists/testing/non-US/main/binary-i386 dists/testing/override.testing.gz >dists/testing/non-US/main/binary-i386/Packages
dpkg-scanpackages dists/testing/non-US/contrib/binary-i386 dists/testing/override.testing.gz >dists/testing/non-US/contrib/binary-i386/Packages
dpkg-scanpackages dists/testing/non-US/non-free/binary-i386 dists/testing/override.testing.gz >dists/testing/non-US/non-free/binary-i386/Packages
dpkg-scanpackages dists/testing/local/binary-i386 dists/testing/override.testing.gz >dists/testing/local/binary-i386/Packages
for i in dists/testing/{main,contrib,non-free,local}/binary-i386/Packages; do gzip -c $i >$i.gz; done
for i in dists/testing/non-US/{main,contrib,non-free}/binary-i386/Packages; do gzip -c $i >$i.gz; done

Reply to: