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

mirroring Debian the hard way



>>>>> Струков Аркадий <ark@bezopasnik.org> writes:

 > извините если чтото делаю не так - впервые задаю вопрос таким
 > способом

 > Вобщем поставили предо мной задачу создания собственного репазитария
 > дебиановского для архитектур i386 amd64 и самое то что удручает по
 > определенным причинам нету возможности использовать debmirror есть
 > только два варианта wget и rsync Но вот ни как не могу разобраться
 > как устроен дебиановский репазитарий

 > Какие надо разделы выкачивать ?

 > мне нужно софт обновлять и саму систему - чисто из собственного
 > репазитария

[…]

	Могу предложить следующую «технологию», основанную на
	инструменте grep-dctrl(1), позволяющем получить выборку из
	данных Packages- или Sources-файла.

	Во-первых, получаем файлы согласно списку, пример которого
	привожу отдельной MIME-частью (для Debian Wheezy; другие версии
	— аналогично.)  Файлам директории dists/ копируемого зеркала
	даются соответствующие имена в, e. g., /srv/debian/dists/ (в
	«местных» соглашениях — /home/public/debian/dists/.)

	Во-вторых, определяем относительные имена файлов для выбранных
	пакетов.  E. g., для всех пакетов архитектур amd64 и i386:

#!/bin/bash

prefix=/srv/debian
dists=${prefix}/dists

mirror=http://ftp.ru.debian.org/debian/
suites=wheezy
arches='amd64 i386'

packages_lists0 {
    local a s
    for a in $arches ; do
        for s in $suites ; do
            find "${dists}/${s}"/*/binary-"$a"/ \
                -type f -name Packages.bz2 -print0 \
                || return
        done
    done
}

filenames {
    grep-dctrl -s Filename -F Package --regex=. \
        <(packages_lists0 | xargs -r0 -- bzip2 -cd --) \
        | sed -e '/^Filename: /!d; s///'
}

	Наконец, убираем из полученного списка повторы (возникающие для
	пакетов с Architecture: all); проверяем на существование этих
	файлов, и формируем список URI для получения; подобно:

uris {
    local f g
    LC_ALL=C sort -u -t_ -k3,3 -k1 \
        | while read f ; do
              if test -e "${prefix}/${f}" ; then
                  continue
              fi
              printf %s\\n "${mirror%/}/${f}"
          done
}

	Полученный список отдаем GNU Wget, e. g. (добавив --cut-dirs=
	по-вкусу):

$ LC_ALL=C wget --background \
      --force-directories --timestamping --continue --server-response \
      --input-file=1317210506.uris 

	или Rsync, e. g. (соответственно убрав ${mirror%/}/ из аргумента
	printf в коде выше):

$ rsync -uv -rOtH --ignore-existing \
      --include=pool/ --include=pool/\*\*/ \
      --include-from=1317210685.files \
      -- rsync://ftp.de.debian.org/debian/ /srv/debian/ 

	При использовании Wget, получаемые файлы следует помещать во
	временную директорию, с последующим mv(1), дабы избежать
	возможности получения пользователем зеркала неполного файла.
	Напротив, такое ограничение не актуально для Rsync.

	Получить dists/-файлы можно и используя Rsync.  В этом случае,
	однако, их также следует получать отдельно и во временную
	директорию.  Опять-таки, с последующим ln(1) в целевую.

-- 
FSF associate member #7257
http://ftp.de.debian.org/debian/dists/wheezy/Release
http://ftp.de.debian.org/debian/dists/wheezy/Release.gpg
http://ftp.de.debian.org/debian/dists/wheezy/main/debian-installer/binary-all/Release
http://ftp.de.debian.org/debian/dists/wheezy/main/debian-installer/binary-all/Packages.bz2
http://ftp.de.debian.org/debian/dists/wheezy/main/debian-installer/binary-all/Packages.gz
http://ftp.de.debian.org/debian/dists/wheezy/main/binary-amd64/Release
http://ftp.de.debian.org/debian/dists/wheezy/main/binary-amd64/Packages.bz2
http://ftp.de.debian.org/debian/dists/wheezy/main/binary-amd64/Packages.gz
http://ftp.de.debian.org/debian/dists/wheezy/main/debian-installer/binary-amd64/Release
http://ftp.de.debian.org/debian/dists/wheezy/main/debian-installer/binary-amd64/Packages.bz2
http://ftp.de.debian.org/debian/dists/wheezy/main/debian-installer/binary-amd64/Packages.gz
http://ftp.de.debian.org/debian/dists/wheezy/main/binary-i386/Release
http://ftp.de.debian.org/debian/dists/wheezy/main/binary-i386/Packages.bz2
http://ftp.de.debian.org/debian/dists/wheezy/main/binary-i386/Packages.gz
http://ftp.de.debian.org/debian/dists/wheezy/main/debian-installer/binary-i386/Release
http://ftp.de.debian.org/debian/dists/wheezy/main/debian-installer/binary-i386/Packages.bz2
http://ftp.de.debian.org/debian/dists/wheezy/main/debian-installer/binary-i386/Packages.gz
http://ftp.de.debian.org/debian/dists/wheezy/main/source/Release
http://ftp.de.debian.org/debian/dists/wheezy/main/source/Sources.bz2
http://ftp.de.debian.org/debian/dists/wheezy/main/source/Sources.gz
http://ftp.de.debian.org/debian/dists/wheezy/contrib/binary-amd64/Release
http://ftp.de.debian.org/debian/dists/wheezy/contrib/binary-amd64/Packages.bz2
http://ftp.de.debian.org/debian/dists/wheezy/contrib/binary-amd64/Packages.gz
http://ftp.de.debian.org/debian/dists/wheezy/contrib/binary-i386/Release
http://ftp.de.debian.org/debian/dists/wheezy/contrib/binary-i386/Packages.bz2
http://ftp.de.debian.org/debian/dists/wheezy/contrib/binary-i386/Packages.gz
http://ftp.de.debian.org/debian/dists/wheezy/contrib/source/Release
http://ftp.de.debian.org/debian/dists/wheezy/contrib/source/Sources.bz2
http://ftp.de.debian.org/debian/dists/wheezy/contrib/source/Sources.gz
http://ftp.de.debian.org/debian/dists/wheezy/non-free/binary-amd64/Release
http://ftp.de.debian.org/debian/dists/wheezy/non-free/binary-amd64/Packages.bz2
http://ftp.de.debian.org/debian/dists/wheezy/non-free/binary-amd64/Packages.gz
http://ftp.de.debian.org/debian/dists/wheezy/non-free/binary-i386/Release
http://ftp.de.debian.org/debian/dists/wheezy/non-free/binary-i386/Packages.bz2
http://ftp.de.debian.org/debian/dists/wheezy/non-free/binary-i386/Packages.gz
http://ftp.de.debian.org/debian/dists/wheezy/non-free/source/Release
http://ftp.de.debian.org/debian/dists/wheezy/non-free/source/Sources.bz2
http://ftp.de.debian.org/debian/dists/wheezy/non-free/source/Sources.gz

Reply to: