Создание репозитория 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).
#!/usr/local/bin/bash ## Script for Ubuntu two stage mirroring. v 1.0. vazhnov@jabber.ru ## Adapted from the "Mirror Synchronization Script Version 1.01 Updated 13 Feb 2007 by Peter Noble" ## About two stage mirroring: http://www.ubuntu.com/getubuntu/mirror/3 ## /usr/local/bin/ubuntu-mirror-sync.sh ## Point our log file to somewhere and setup our admin email log="/var/log/mirror/mirrorsync.log" adminmail="admin@my.domain" # Set to 0 if you do not want to receive email sendemail=0 # Subject is the subject of our email subject="Ubuntu Mirror Sync Finished" ## Setup the server to mirror remote="rsync://mirror.yandex.ru/ubuntu/" ## Setup the local directory / Our mirror local="/path/to/your/mirror" # Options to all rsync options_all_rsync=" --timeout=120 --checksum --compress " # Additional options to debug mode options_debug_rsync=" --verbose " ## Initialize some other variables complete="false" failures=0 stage_one_complete=0 status=1 pid=$$ ## Create a lock file containing the process ID's lockfile="/var/tmp/mirror.lock" if [ -f $lockfile ]; then echo "Lock file present. Exiting." exit fi echo $pid > $lockfile echo `date -j "+%Y-%m-%d_%H-%M-%S"` " - $pid - Started Ubuntu Mirror Sync" >> $log echo `date -j "+%Y-%m-%d_%H-%M-%S"` " - $pid - from $remote to $local " >> $log while [[ "$complete" != "true" ]]; do if [[ $failures -gt 0 ]]; then ## Sleep for 1 minutes for sanity's sake ## The most common reason for a failure at this point ## is that the rsync server is handling too many concurrent connections. if [[ $1 == "debug" ]]; then echo `date -j "+%Y-%m-%d_%H-%M-%S"` "sleeping 1 minute" else echo `date -j "+%Y-%m-%d_%H-%M-%S"` "sleeping 1 minute" >> $log fi sleep 1m fi if [[ $stage_one_complete == "0" ]]; then if [[ $1 == "debug" ]]; then echo `date -j "+%Y-%m-%d_%H-%M-%S"` " - $pid - Working on attempt number $failures" echo `date -j "+%Y-%m-%d_%H-%M-%S"` " - $pid - Started FIRST stage Ubuntu mirror sync" rsync --recursive --times --links --hard-links \ --stats \ --exclude "Packages*" --exclude "Sources*" --exclude "Release*" \ $options_debug_rsync $options_all_rsync $remote $local status=$? else echo `date -j "+%Y-%m-%d_%H-%M-%S"` " - $pid - Started FIRST stage Ubuntu mirror sync" >> $log rsync --recursive --times --links --hard-links \ --stats \ --exclude "Packages*" --exclude "Sources*" --exclude "Release*" \ $options_all_rsync $remote $local >> $log status=$? fi if [[ $status -ne "0" ]]; then complete="false" (( failures += 1 )) else stage_one_complete=1 fi fi if [[ $stage_one_complete == "1" ]]; then if [[ $1 == "debug" ]]; then echo `date -j "+%Y-%m-%d_%H-%M-%S"` " - $pid - Working on attempt number $failures" echo `date -j "+%Y-%m-%d_%H-%M-%S"` " - $pid - Started SECOND stage Ubuntu mirror sync" rsync --recursive --times --links --hard-links \ --stats --delete --delete-after \ --exclude "project/trace/${HOSTNAME}" \ $options_debug_rsync $options_all_rsync $remote $local status=$? else echo `date -j "+%Y-%m-%d_%H-%M-%S"` " - $pid - Started SECOND stage Ubuntu mirror sync" >> $log rsync --recursive --times --links --hard-links \ --stats --delete --delete-after \ --exclude "project/trace/${HOSTNAME}" \ $options_all_rsync $remote $local >> $log status=$? fi if [[ $status -ne "0" ]]; then complete="false" (( failures += 1 )) else echo `date -j "+%Y-%m-%d_%H-%M-%S"` " - $pid - Finished Ubuntu mirror sync" >> $log # Send the email if [[ -x /usr/bin/mail && "$sendemail" -eq "1" ]]; then mail -s "$subject" "$adminmail" <<OUTMAIL Summary of Ubuntu Mirror Synchronization PID: $pid Failures: $failures Finish Time: `date` Sincerely, $HOSTNAME OUTMAIL fi complete="true" fi fi done rm $lockfile exit 0
[править] Копирование с помощью debmirror
Если не нужно поднимать всё зеркало, можно воспользоваться утилитой debmirror, которая позволяет выбрать дистрибутивы, архитектуры и секции. Представляет из себя скрипт, написанный на perl'е.
Debmirror'у можно указать не загружать исходные коды, что сэкономит место. А если не закачивать пакеты для тестируемого дистрибутива, то сильно уменьшится объём изменений в репозитории.
Debmirror может работать через ftp, http, hftp или rsync. В случае, если в качестве метода копирования выбрать rsync, debmirror создаёт ему списки по 300-400 файлов (информацию берёт из индексных файлов), и rsync не тратит время на создание списка файлов, лежащих на удалённой стороне.
Debmirror разбивает работу на три шага:
- Загружает индексные файлы Packages.gz (или .bz2) и Sources.gz (или .bz2);
- Удаляет неизвестные файлы (опция --nocleanup позволяет пропустить этот шаг);
- Сканируются файлы 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.
--- debmirror.orig 2009-06-29 11:15:30.000000000 +0200 +++ debmirror 2009-06-29 11:19:44.000000000 +0200 @@ -376,7 +376,7 @@ use LWP::UserAgent; # Yeah, I use too many global variables in this program. -our ($debug, $progress, $verbose, $passive, $skippackages, $getcontents); +our ($debug, $nopkgbz2, $progress, $verbose, $passive, $skippackages, $getcontents); our ($ua, $proxy); our (@dists, @sections, @arches, @extra_dirs, @ignores, @excludes, @includes, @skip_installer); our (@excludes_deb_section, @limit_priority); @@ -421,6 +421,7 @@ my $help; GetOptions('debug' => \$debug, + 'nopkgbz2' => \$nopkgbz2, 'progress|p' => \$progress, 'verbose|v' => \$verbose, 'source!' => \$do_source, @@ -839,7 +840,7 @@ # Collect package lists my $failed = 0; -foreach my $ext (".bz2", ".gz", "") { +foreach my $ext ( $nopkgbz2 ? () : ".bz2" , ".gz" , "") { $failed = 0; process_dists(\&want_packages, $ext);
[править] Цифровые подписи
Если создавать в 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. Шаг за шагом):
Не забудьте поменять ServerAdmin и DocumentRoot. Необходимо создать каталог /var/log/apache, в который разрешить запись пользователю, из под которого будет запущен сервер Apache.
# ================================================= # Basic settings # ================================================= Listen 0.0.0.0:80 User apache Group apache ServerAdmin admin@your-domain.com UseCanonicalName Off ServerSignature Off HostnameLookups Off ServerTokens Prod ServerRoot "/usr/local" DocumentRoot "/path/to/your/mirror/" LoadModule authz_host_module libexec/apache22/mod_authz_host.so LoadModule auth_basic_module libexec/apache22/mod_auth_basic.so LoadModule log_config_module libexec/apache22/mod_log_config.so LoadModule mime_module libexec/apache22/mod_mime.so LoadModule dir_module libexec/apache22/mod_dir.so # Directory listings LoadModule autoindex_module libexec/apache22/mod_autoindex.so LoadModule alias_module libexec/apache22/mod_alias.so <IfModule mod_dir.c> DirectoryIndex index.html </IfModule> # ================================================= # HTTP and performance settings # ================================================= Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule prefork.c> MinSpareServers 5 MaxSpareServers 10 StartServers 5 MaxClients 150 MaxRequestsPerChild 0 </IfModule> # ================================================= # Access control # ================================================= <Directory /> Options FollowSymLinks +Indexes AllowOverride None Order allow,deny Allow from all </Directory> <Directory "/ubuntu/"> Order allow,deny Allow from all </Directory> # ================================================= # MIME encoding # ================================================= <IfModule mod_mime.c> TypesConfig /usr/local/etc/apache22/mime.types </IfModule> DefaultType text/plain <IfModule mod_mime.c> AddEncoding x-compress .Z AddEncoding x-gzip .gz .tgz AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType application/x-bzip2 .bz2 AddType application/x-tar .tgz </IfModule> # ================================================= # Logs # ================================================= ErrorLog "/var/log/apache/error.log" LogLevel warn <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> # You need to enable mod_logio.c to use %I and %O LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> CustomLog "/var/log/apache/access.log" combined </IfModule> # Fancy directory listings Include etc/apache22/extra/httpd-autoindex.conf
- /usr/local/etc/apache22/extra/httpd-autoindex.conf
по сравнению с оригинальным файлом, изменена только опция IndexOptions.
# # IndexOptions: Controls the appearance of server-generated directory # listings. # FancyIndexing HTMLTable VersionSort IndexOptions VersionSort FoldersFirst NameWidth=70 Charset=UTF-8 # We include the /icons/ alias for FancyIndexed directory listings. If # you do not use FancyIndexing, you may comment this out. # Alias /icons/ "/usr/local/www/apache22/icons/" <Directory "/usr/local/www/apache22/icons"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> # # AddIcon* directives tell the server which icon to show for different # files or filename extensions. These are only displayed for # FancyIndexed directories. # AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip AddIconByType (TXT,/icons/text.gif) text/* AddIconByType (IMG,/icons/image2.gif) image/* AddIconByType (SND,/icons/sound2.gif) audio/* AddIconByType (VID,/icons/movie.gif) video/* AddIcon /icons/binary.gif .bin .exe AddIcon /icons/binhex.gif .hqx AddIcon /icons/tar.gif .tar AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip AddIcon /icons/a.gif .ps .ai .eps AddIcon /icons/layout.gif .html .shtml .htm .pdf AddIcon /icons/text.gif .txt AddIcon /icons/c.gif .c AddIcon /icons/p.gif .pl .py AddIcon /icons/f.gif .for AddIcon /icons/dvi.gif .dvi AddIcon /icons/uuencoded.gif .uu AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl AddIcon /icons/tex.gif .tex AddIcon /icons/bomb.gif core AddIcon /icons/back.gif .. AddIcon /icons/hand.right.gif README AddIcon /icons/folder.gif ^^DIRECTORY^^ AddIcon /icons/blank.gif ^^BLANKICON^^ # # DefaultIcon is which icon to show for files which do not have an icon # explicitly set. # DefaultIcon /icons/unknown.gif # # AddDescription allows you to place a short description after a file in # server-generated indexes. These are only displayed for FancyIndexed # directories. # Format: AddDescription "description" filename # #AddDescription "GZIP compressed document" .gz #AddDescription "tar archive" .tar #AddDescription "GZIP compressed tar archive" .tgz # # ReadmeName is the name of the README file the server will look for by # default, and append to directory listings. # # HeaderName is the name of a file which should be prepended to # directory indexes. ReadmeName README.html HeaderName HEADER.html # # IndexIgnore is a set of filenames which directory indexing should ignore # and not include in the listing. Shell-style wildcarding is permitted. # IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
[править] lighttpd
Конфигурационный файл для FreeBSD, но должно работать и в других системах, нужно только убрать опцию server.event-handler.
/usr/local/etc/lighttpd.conf
server.modules = ( "mod_access", "mod_accesslog" ) server.document-root = "/path/to/your/mirror/" server.errorlog = "/var/log/lighttpd/error.log" index-file.names = ( "index.html", "index.htm" ) server.event-handler = "freebsd-kqueue" # needed on OS X mimetype.assign = ( ".pdf" => "application/pdf", ".sig" => "application/pgp-signature", ".spl" => "application/futuresplash", ".class" => "application/octet-stream", ".ps" => "application/postscript", ".torrent" => "application/x-bittorrent", ".dvi" => "application/x-dvi", ".gz" => "application/x-gzip", ".pac" => "application/x-ns-proxy-autoconfig", ".swf" => "application/x-shockwave-flash", ".tar.gz" => "application/x-tgz", ".tgz" => "application/x-tgz", ".tar" => "application/x-tar", ".zip" => "application/zip", ".mp3" => "audio/mpeg", ".m3u" => "audio/x-mpegurl", ".wma" => "audio/x-ms-wma", ".wax" => "audio/x-ms-wax", ".ogg" => "application/ogg", ".wav" => "audio/x-wav", ".gif" => "image/gif", ".jar" => "application/x-java-archive", ".jpg" => "image/jpeg", ".jpeg" => "image/jpeg", ".png" => "image/png", ".xbm" => "image/x-xbitmap", ".xpm" => "image/x-xpixmap", ".xwd" => "image/x-xwindowdump", ".css" => "text/css", ".html" => "text/html", ".htm" => "text/html", ".js" => "text/javascript", ".asc" => "text/plain", ".c" => "text/plain", ".cpp" => "text/plain", ".log" => "text/plain", ".conf" => "text/plain", ".text" => "text/plain", ".txt" => "text/plain", ".dtd" => "text/xml", ".xml" => "text/xml", ".mpeg" => "video/mpeg", ".mpg" => "video/mpeg", ".mov" => "video/quicktime", ".qt" => "video/quicktime", ".avi" => "video/x-msvideo", ".asf" => "video/x-ms-asf", ".asx" => "video/x-ms-asf", ".wmv" => "video/x-ms-wmv", ".bz2" => "application/x-bzip", ".tbz" => "application/x-bzip-compressed-tar", ".tar.bz2" => "application/x-bzip-compressed-tar", # default mime type "" => "application/octet-stream", ) server.tag = "lighttpd" accesslog.filename = "/var/log/lighttpd/access.log" url.access-deny = ( "~", ".inc" ) $HTTP["url"] =~ "\.pdf$" { server.range-requests = "disable" } server.pid-file = "/var/run/lighttpd.pid" ## virtual directory listings dir-listing.activate = "enable" ## select encoding for directory listings dir-listing.encoding = "utf-8" ## change uid to <uid> (default: don't care) server.username = "www" ## change uid to <uid> (default: don't care) server.groupname = "www"
[править] nginx
Если репозиторий один, то конфигурацию можно поместить в /etc/nginx/sites-enabled/default
:
server { … location / { root /path/to/your/mirror; autoindex on; } location /ubuntu/ { root /path/to/your/mirror; autoindex on; } … }
Если же зеркал репозиториев несколько (ru.archive.ubuntu.com, archive.canonical.com, security.ubuntu.com), то лучше создать отдельные конфигурационные файлы, например /etc/nginx/sites-enabled/archive.ubuntu.com.conf
:
server { listen [::]:80; server_name *.archive.ubuntu.com security.ubuntu.com; root /path/to/your/mirror/ubuntu; autoindex on; location /ubuntu/ { root /path/to/your/mirror; } }
[править] 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-адресов за сутки
[править] Ссылки
[править] Смотри также
- man rsync на русском языке
- mirror.yandex.ru
- debmirror во FreeBSD
- sisyphus-mirror — утилита для создания зеркала репозиториев Sisyphus, бранчей и конкретных дистрибутивов ALT Linux.
- Советы по созданию зеркала нескольких дистрибутивов
- Скачивание репозитория под Windows (программа на .NET)
[править] Официальные рекомендации
- https://wiki.debian.org/DebianRepository/Setup — overview of different tools to create Debian repository and mirror;
- Rsyncmirror (Community Ubuntu Documentation)
- Mirroring Ubuntu
- Two stage rsync mirroring of the Ubuntu archives
- Debmirror (Ubuntu Wiki) — на русском языке, в том числе по настройке cron и apache2.
- Настройка зеркала архивов Debian (рус.)
[править] Неофициальные источники
[править] Лицензия на текст
Текст доступен на условиях лицензии Creative Commons Attribution/Share-Alike