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: