Страницы

2013-01-20

Alt Linux. Создание своей копии репозитория Sisyphus

Понадобилось мне собрать и запустить программу, написанную для .NET 2.0 в Alt Linux 6.0. Но MonoDevelop 2.4.2, имеющийся в репозитории p6 дистрибутива, не поддерживает отладку приложения (пропускает точки останова) - вести разработку в этой версии было неудобно. А mono сыпала ошибки, при работе с базой данных. Посоветовали мне взять версию MonoDevelop и mono из постоянно обновляемого репозитория Sisyphus (packages.altlinux.org/ или sisyphus.ru/).

Решил сначала оттестировать процесс перехода на нестабильный репозиторий в виртуальной машине. А для тестирования создать локальную копию репозитория. Чтобы не тянуть пакеты по сети каждый раз.

Размер Sisyphus

Согласно описанию на странице Фильтр пакетов для rsync сайта репозитория:
Sisyphus — постоянно изменяющийся репозиторий пакетов. Появляются новые сборки, обновляются старые. Для человека, поддерживающего актуальность своей копии репозитория, требуется постоянная синхронизация с Sisyphus. На данный момент размер репозитория составляет около 15 Гб.
После синхронизации получится несколько больший размер - 16 ГБайт (при этом многое было исключено, если не исключать ничего, получилось бы больше). Но в целом - соответствует правде. В 15 ГБайт можно уложиться, если исключить из списка синхронизируемых пактов большие пакеты, которые вряд ли понадобятся.

Инструмент для синхронизации репозитория

В списке рассылки пользователей Alt Linux высказывалось мнение, что содержимое репозиториев при доступе по различным протоколам отличается (что странно, адрес сервера один и тот же), речь шла о репозитории p6. Во всяком случае, ftp протокол не рекомендовалось использовать, а рекомендовалось http.

Проводя аналогию, думал, что для синхронизации Sisyphus буду использовать протокол http, то есть, wget. Примерно так:
cd /Develop/AltLinux/ && wget -m -e robots=off -R "index.html*" -np http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/

А потом нашел руководство www.altlinux.org/Mirror, прочитав которое выбрал скрипт sisyphus-mirror, скрывающий которые аспекты использования rsync и позволяющий максимально удобно создать зеркало репозитория.

Настройка sisyphus-mirror

Настройки по умолчанию хранятся в файлах:
  1. /etc/sisyphus-mirror/sisyphus-mirror.conf
  2. /etc/sisyphus-mirror/exclude
  3. /etc/sisyphus-mirror/include
Настройки по умолчанию можно переопределить, создав и заполнив файлы:
  1. ~/.sisyphus-mirror/config
  2. ~/.sisyphus-mirror/exclude
  3. ~/.sisyphus-mirror/include

Файл config

В конфигурационном файле по умолчанию заданы настройки:
SRCROOT=rsync://rsync.altlinux.org/ALTLinux
DESTROOT=/var/ftp/ALTLinux
LIST="Sisyphus"
ARCH="noarch i586 x86_64 x86_32"
ARGS="-rltmvH --delete-delay --delete-excluded --stats"
INTERACTIVE=0
TMPDEST=.new
EXCLUDE_FILE=/etc/sisyphus-mirror/exclude
INCLUDE_FILE=/etc/sisyphus-mirror/include
RSHOME="$HOME/.sisyphus-mirror"
 Другие настройки закомментированы. Настройки, которые будут переопределены в файле ~/.sisyphus-mirror/config, выделены. Содержимое файла ~/.sisyphus-mirror/config:
DESTROOT=/Develop/AltLinux
ARCH="noarch i586"
EXCLUDE_FILE=~/.sisyphus-mirror/exclude
INTERACTIVE=1 
SPEED=512

Репозиторий будет помещаться в каталог /Develop/AltLinux. Нужны пакеты для noarch и i586, остальные пока не нужны. Используется свой собственный фильтр из файла ~/.sisyphus-mirror/exclude. Ограничена скорость загрузки и включен интерактивный режим (вывод списка скачиваемых пакетов в окно консоли).

Файл exclude

 По умолчанию файл /etc/sisyphus-mirror/exclude содержит небольшой фильтр:
SRPMS
#*led-tc*
#*ice-wks*
#kernel-source-2.6.22*
И под этот фильтр не подпадает ни один пакет. В частности, чтобы исключить из списка загрузки каталог  SRPMS.classic, недостаточно написать SRPMS, надо написать, например, так (любой из вариантов):
  • SRPMS.classic
  • SRPMS.*
Чтобы лучше понять, что можно исключить надо посмотреть, что есть в репозитории для выбранных архитектур noarch и i586, например, тут:
Пакеты с исходными кодами и пакеты с отладочной информацией пока не нужны. Поэтому в файл exclude, перво наперво, добавляются строки:
SRPMS.classic
RPMS.debuginfo
Далее, анализ названий списка пакетов, показывает, что не понадобятся также пакеты удовлетворяющие маске:
*-dev-*
*-devel-*
*-debuginfo-*
*-demo-*
*-examples-*
*-headers-*
*-javadoc-*
*-src-*
*-source-*
*-sources-*
*-static-*
*-samples-*
*-tests-*
clipart-*

Также есть фильтр пакетов на странице Фильтр пакетов для rsync сайта репозитория, который поможет отфильтровать, например, игры и другие группы пакетов, которые не являются нужными в текущей ситуации, и от которых явно не зависят нужные пакеты.

Эти три группы фильтров заносятся в файл ~/.sisyphus-mirror/exclude.

Файл include

По умолчанию файл include имеет следующее содержимое:
list/**
.timestamp

Решил, что тут настраивать ничего не надо. Поэтому переопределять эти настройки не стал.

Запуск sisyphus-mirror

В консоли надо выполнить команду sisyphus-mirror 
В результате:
  1. Загрузится список пакетов.
  2. Загрузятся нужные пакеты из сетевого репозитория в локальный.
  3. Удалятся пакеты локального репозитория, которых больше нет в сетевом репозитории.
Наблюдать за процессом синхронизации можно по выводу программы в консоль:
sisyphus-mirror: Mirroring Sisyphus
Welcome to ALT Linux Team public rsync archive!

receiving file list ... done
Список загруженных пакетов
deleting Список удалённых пакетов

Number of files: 41816
Number of files transferred: 406
Total file size: 16899703581 bytes
Total transferred file size: 785537951 bytes
Literal data: 460000241 bytes
Matched data: 325537710 bytes
File list size: 3257029
File list generation time: 22.128 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 267073
Total bytes received: 463430202

sent 267073 bytes  received 463430202 bytes  424436.86 bytes/sec
total size is 16899703581  speedup is 36.45
sisyphus-mirror: Successfuly mirrored Sisyphus
sisyphus-mirror: All done

Определить сколько пакетов осталось скачать можно, например,  посчитав количество символических ссылок, которые пока не указывают на файлы: cd /Develop/AltLinux && du -L
Например, команда du -L выдаст такой список:
228M ./Sisyphus/noarch/base
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/qutim-lang-es-0.3.1.0-alt1.git20130117.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/wmfon-1.3-alt1.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/terminfo-extra-5.9-alt2.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/wmhaltlive-1.0-alt1.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/udev-rule-generator-197-alt1.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/qutim-lang-cz-0.3.1.0-alt1.git20130117.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/udev-rules-197-alt1.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/systemd-sysvinit-197-alt1.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/qutim-lang-ru-0.3.1.0-alt1.git20130117.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/wmhalt-1.3-alt1.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/rsyslog-docs-html-7.2.5-alt1.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/qutim-lang-fr-0.3.1.0-alt1.git20130117.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/zsh-completion-systemd-197-alt1.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/qutim-lang-sk-0.3.1.0-alt1.git20130117.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/udev-hwdb-197-alt1.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/systemd-analyze-197-alt1.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/wmtrashpy-0.93-alt1.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/qutim-lang-en-0.3.1.0-alt1.git20130117.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/qutim-lang-uk-0.3.1.0-alt1.git20130117.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/wmrand-1.0-alt1.noarch.rpm»
du: невозможно получить доступ к «./Sisyphus/noarch/RPMS.classic/qutim-lang-de-0.3.1.0-alt1.git20130117.noarch.rpm»
9,8G ./Sisyphus/noarch/RPMS.classic
10G ./Sisyphus/noarch
137M ./Sisyphus/i586/base
6,2G ./Sisyphus/i586/RPMS.classic
6,3G ./Sisyphus/i586
956K ./Sisyphus/files/noarch/RPMS
960K ./Sisyphus/files/noarch
1,5M ./Sisyphus/files/i586/RPMS
1,5M ./Sisyphus/files/i586
2,5M ./Sisyphus/files
17G ./Sisyphus
17G .

Из которого видно, что в текущий момент осталось скачать 21 пакет (определено, по количеству строк "du: невозможно получить доступ к").
После завершения синхронизации размер каталога получился 16 ГБайт:
[slowtest@localhost AltLinux]$ du
228M    ./Sisyphus/noarch/base
31M    ./Sisyphus/noarch/RPMS.classic
259M    ./Sisyphus/noarch
137M    ./Sisyphus/i586/base
16M    ./Sisyphus/i586/RPMS.classic
153M    ./Sisyphus/i586
9,8G    ./Sisyphus/files/noarch/RPMS
9,8G    ./Sisyphus/files/noarch
5,8G    ./Sisyphus/files/i586/RPMS
5,8G    ./Sisyphus/files/i586
16G    ./Sisyphus/files
16G    ./Sisyphus
16G    .