Создание репозитория Ubuntu

Материал из Xgu.ru

Перейти к: навигация, поиск

Содержание

[править] Введение

Структура репозитория Ubuntu в основном аналогична Debian'у, описание на русском языке можно найти здесь [1].

Если вы хотите сделать небольшой репозиторий из тех файлов, которые у вас уже есть — вам сюда [2] (команда dpkg-scanpackages). Если вы хотите "раскидать" файлы по иерархичной структуре pool'а, можно воспользоваться утилитой reprepro [3].

Debian использует «Проталкивающее Зеркалирование», Ubuntu также использует эту технологию [4].

[править] Типы репозиториев

Есть два типа репозиториев [5]:

Полные архивы занимают около 320 Гб и постепенно увеличиваются. Обновляются минимум один раз в 24 часа, но не чаще чем раз в 4 часа.

Релизы Ubuntu занимают около 40 Гб и остаются относительно неизменными в размерах. Обычно обновляются несколько раз в год с проверкой каждые 24 часа.

[править] Список серверов

Свежий список можно взять здесь https://launchpad.net/ubuntu/+archivemirrors

[править] Релизы Ubuntu

4.10 Warty Warthog
5.04 Hoary Hedgehog
5.10 Breezy Badger
6.06 LTS Dapper Drake
6.10 Edgy Eft
7.04 Feisty Fawn
7.10 Gutsy Gibbon
8.04 LTS Hardy Heron
8.10 Intrepid Ibex
9.04 Jaunty Jackalope
9.10 Karmic Koala
10.04 LTS Lucid Lynx
10.10 Maverick Meerkat
11.04 Natty Narwhal
11.10 Oneiric Ocelot
12.04 LTS Precise Pangolin
12.10 Quantal Quetzal
13.04 Raring Ringtail
13.10 Saucy Salamander
14.04 Trusty Tahr

Большая часть обновлений репозитория — изменения в тестируемом дистрибутиве (сейчас это 13.10).

[править] Копирование репозитория

Существует несколько способов создания зеркала репозитория. Ниже рассмотрены rsync и debmirror. Несмотря на кажущуюся простоту, зеркалирование rsync'ом менее управляемо, чем debmirror, который ещё и имеет все преимущества rsync'а.

[править] Копирование с помощью rsync

С помощью rsync можно создать полное зеркало репозитория Ubuntu.

Следуя официальным рекомендациям [6], чтобы пользователи имели меньше шансов получить ошибку "file not found", необходимо в начале обновить пакеты, потом информацию о них, и только после этого удалить устаревшие пакеты ("Two Staging mirroring").

Для постоянного применения рекомендуется следующий скрипт:

RSYNCSOURCE=rsync://archive.ubuntu.com/ubuntu
BASEDIR=/path/to/your/mirror/

rsync --recursive --times --links --hard-links \
      --stats \
      --exclude "Packages*" --exclude "Sources*" \
      --exclude "Release*" \
      ${RSYNCSOURCE} ${BASEDIR}

rsync --recursive --times --links --hard-links \
      --stats --delete --delete-after \
      --exclude "project/trace/${HOSTNAME}" \
      ${RSYNCSOURCE} ${BASEDIR}
  • При ручном запуске, можно добавить к каждой команде --verbose --progress — это даст более информативный вывод в ходе копирования.
  • В случае использования --progress, может пройти много времени перед первым выводом на экран. Это нормально для зеркало такого размера. (задержка настолько большая, что дождаться удалось только при синхронизации отдельных директорий)
  • Использование --compress не должно сказаться на процессе копирования файлов, но значительно ускоряет процесс начальной передачи списка файлов при использовании --progress, который занимает много времени.
  • Если добавить к каждой команде строку, указанную ниже, то будут скопированы только пакеты для i386, amd64 и исходные коды:
--exclude "*_alpha.deb" --exclude "*_arm.deb" --exclude "*_mips.deb" \
--exclude "*_mipsel.deb" --exclude "*_s390.deb" \
--exclude "*_ia64.deb" --exclude "*_powerpc.deb" --exclude "*_lpia.deb" \
--exclude "*_armel.deb" --exclude "*_sparc.deb" --exclude "*_hppa.deb"

На странице [7] дан скрипт, который перезапускает rsync в случае сбоя, и после завершения копирования высылает письмо со статистикой. Объединим его со скриптом выше ("Two stage rsync"):

Создайте каталог /var/log/mirror, и выставьте соответствующие права на него, чтобы скрипт мог писать в него лог. Не забудьте поменять "/path/to/your/mirror/" и путь к интерпретатору bash в первой строке скрипта (путь в вашей системе можно узнать командой whereis bash).


[править] Копирование с помощью debmirror

Если не нужно поднимать всё зеркало, можно воспользоваться утилитой debmirror, которая позволяет выбрать дистрибутивы, архитектуры и секции. Представляет из себя скрипт, написанный на perl'е.

Debmirror'у можно указать не загружать исходные коды, что сэкономит место. А если не закачивать пакеты для тестируемого дистрибутива, то сильно уменьшится объём изменений в репозитории.

Debmirror может работать через ftp, http, hftp или rsync. В случае, если в качестве метода копирования выбрать rsync, debmirror создаёт ему списки по 300-400 файлов (информацию берёт из индексных файлов), и rsync не тратит время на создание списка файлов, лежащих на удалённой стороне.

Debmirror разбивает работу на три шага:

  1. Загружает индексные файлы Packages.gz (или .bz2) и Sources.gz (или .bz2);
  2. Удаляет неизвестные файлы (опция --nocleanup позволяет пропустить этот шаг);
  3. Сканируются файлы Packages и Sources для построения полного списка файлов, на которые они ссылаются. Также к списку добавляются некоторые другие файлы. После debmirror проверяет наличие каждого файла в локальном зеркале и его соответствие размеру (или опционально md5sum). Недостающие файлы загружаются.

Список секций (--dist=) можно посмотреть на вышестоящем зеркале, в папке "ubuntu/dists/".

Пример для релиза 10,04, архитектуры i386 и amd64 и исходных кодов. Копирование с помощью rsync. Путь "/mirror_ubuntu" поменяйте на нужный:

debmirror --progress --verbose --nocleanup --source \
      --md5sums --host=mirror.yandex.ru --root=:ubuntu \
      --dist=lucid,lucid-backports,lucid-proposed,lucid-security,lucid-updates \
      --section=main,restricted,universe,multiverse \
      --method=rsync --arch=i386,amd64 /mirror_ubuntu

[править] Проблема bz2 gz

Патчим debmirror согласно инструкции [8], после чего можно запускать debmirror с опцией --nopkgbz2.


[править] Цифровые подписи

Если создавать в Ubuntu копию репозитория Debian, то debmirror будет ругаться на отсутствие ключей.

gpgv: Подпись создана Сбт 30 Янв 2010 04:18:35 YEKT ключом RSA с ID 55BE302B
gpgv: Не могу проверить подпись: открытый ключ не найден
gpgv: Подпись создана Сбт 30 Янв 2010 04:25:01 YEKT ключом DSA с ID F42584E6
gpgv: Не могу проверить подпись: открытый ключ не найден
gpgv: Подпись создана Сбт 30 Янв 2010 04:18:35 YEKT ключом RSA с ID 55BE302B
gpgv: Не могу проверить подпись: открытый ключ не найден
gpgv: Подпись создана Сбт 30 Янв 2010 04:25:01 YEKT ключом DSA с ID F42584E6
gpgv: Не могу проверить подпись: открытый ключ не найден
gpgv: Подпись создана Пнд 03 Май 2010 03:27:09 YEKST ключом RSA с ID 55BE302B
gpgv: Не могу проверить подпись: открытый ключ не найден
gpgv: Подпись создана Пнд 03 Май 2010 03:27:09 YEKST ключом RSA с ID 55BE302B
gpgv: Не могу проверить подпись: открытый ключ не найден
gpgv: Подпись создана Пнд 03 Май 2010 03:26:25 YEKST ключом RSA с ID 55BE302B
gpgv: Не могу проверить подпись: открытый ключ не найден
gpgv: Подпись создана Пнд 03 Май 2010 03:26:25 YEKST ключом RSA с ID 55BE302B
gpgv: Не могу проверить подпись: открытый ключ не найден

Ключи нужно добавить. Устанавливаем пакет debian-archive-keyring:

sudo apt-get install debian-archive-keyring

После этого у нас появится GnuPG архив ключей Debian в /usr/share/keyrings/. Импортируем их от имени того же пользователя, от которого будет запущен debmirror (процесс хорошо описан в man debmirror):

gpg --keyring /usr/share/keyrings/debian-archive-keyring.gpg --export \
    | gpg --no-default-keyring --keyring trustedkeys.gpg --import

Если же debmirror запущен в той операционной системе, где нет возможности установить GnuPG архив ключей Debian, можно их добавлять вручную по их ID (также описано в man debmirror):

gpg --no-default-keyring --keyring trustedkeys.gpg \
    --keyserver keyring.debian.org --recv-keys <key ID>

[править] Cron

Оптимальным является помещение в cron скрипта, регулярно проверяющего содержимое файла http://mirror.yandex.ru/ubuntu/project/trace/mirror.yandex.ru (или того зеркала, с которого вы будете копировать) в котором находится время и дата последней синхронизации. Если содержимое изменилось, то запустить синхронизацию.

[править] Предоставление доступа к репозиторию

Рекомендуется [9] предоставить доступ к репозиторию по http, ftp и rsync.

[править] http

Раздавать можно с помощью Apache, nginx, lighttpd.

[править] Apache2

Минимальная конфигурация Apache2 для выдачи файлов и формирования списков файлов (по мотивам статьи Защищаем Apache 2. Шаг за шагом):


[править] lighttpd


[править] nginx


[править] ftp

[править] rsync

[править] DNS

Если у вас своя сеть, в которой есть DNS сервер, можно "схитрить" и назначить на имена «*.archive.ubuntu.com» и "security.ubuntu.com" ip-адрес вашего репозитория. Так как сервер действует только в вашей сети, эти изменения получат только ваши клиенты. При установке дистрибутива будет достаточно указать страну "Россия", чтобы Ubuntu выставила в качестве репозитория "ru.archive.ubuntu.com" который, благодаря "хитрости", будет ссылаться на ip-адрес вашего локального репозитория. Адреса, на которые обращается уже установленная система, можно посмотреть в файле /etc/apt/sources.list.

Можно аналогично изменить зону для "ru.releases.ubuntu.com", если у вас есть копия http://mirror.yandex.ru/ubuntu-releases с ISO-образами дисков.

[править] BIND

В файл конфигурации named.conf прописываем:

zone "archive.ubuntu.com" {
        type master;
        file "master/all_to_192.168.1.1.master";
        allow-update {"none";};

zone "security.ubuntu.com" {
        type master;
        file "master/all_to_192.168.1.1.master";
        allow-update {"none";};
};

Создаём файлы с зонами. Вместо "admin.my.domain." подставьте ваш e-mail, заменив символ "@" на точку. Вместо «192.168.1.1» подставьте ip-адрес вашего сервера с репозиторием. Такой файл, если указать его для любой зоны, будет "возвращать" пользователю ip-адрес «192.168.1.1» на саму зону и любые поддомены.

Файл master/all_to_192.168.1.1.master:

$TTL 86400      ; 1 day
@       IN      SOA     ns      admin.my.domain. (
                2009091701      ; Serial
                10800           ; Refresh
                3600            ; Retry
                604800          ; Expire
                3600            ; Minimum TTL
        )
		A	192.168.1.1
*		A	192.168.1.1

применяем настройки командой

rndc reconfig

[править] Рассылки

Для того, чтобы быть в курсе официальных новостей, можно подписаться на рассылку [10].

[править] Статистика

Можно собирать следующую статистику:

  • Загрузка канала (upload, download);
  • Версии ОС (apt при закачке "подписывается", например: "Ubuntu APT-HTTP/1.3 (0.7.20.2ubuntu6)" — это 9.04)
  • Количество уникальных ip-адресов за сутки

[править] Ссылки

[править] Смотри также

[править] Официальные рекомендации

[править] Неофициальные источники

[править] Лицензия на текст

Текст доступен на условиях лицензии Creative Commons Attribution/Share-Alike Cc-by-sa.png