Translation(s): - Русский
Contents
Создание локального репозитория
С помощью утилиты apt-mirror
Подготовка и установка apt-mirror
Это основной способ зеркалирования, помимо официального ftpsync, т.к. он гораздо надёжней debmirror.
Устанавливаем пакет:
apt-get install apt-mirror
Создаём каталог /mnt/repo/debian и дополнительные mirror,var,skel. В нём будет создаваться локальный репозиторий пакетов. Желательно чтобы это был примонтированный логический раздел жёсткого диска, чтобы в случае переустановки дистрибутива с нуля, при форматировании корневого раздела (/), не лишиться репозитория совсем.
mkdir -p /mnt/repo/debian/{mirror,var,skel}
Настройка apt-mirror
Заранее предположим что нам нужны:
- Зеркало с готовыми к установке (бинарными) пакетами для amd64 jessie (stable)+ исходные тексты
- Зеркало с готовыми к установке (бинарными) обновлениями безопасности amd64 jessie (stable)+ исходные тексты
- Зеркало с готовыми к установке (бинарными) прочими обновлениями amd64 jessie (stable)+ исходные тексты
- Зеркало Backports, с готовыми к установке (бинарными) пакетами для amd64 jessie (stable)+ исходные тексты
- Зеркало необходимое для сетевой установки (udebs).
Примечание: Раскомментирование строк лишь заменяет настройки по умолчанию.
Редактируем конфигурационный файл /etc/apt/mirror.list:
############# config ################## # Базовый каталог, в нём будет создано локальное зеркало репозитория Debian set base_path /mnt/repo/debian # Пути к файлам зеркала, временным файлам и журналy выполнения apt-mirror # set mirror_path $base_path/mirror # set skel_path $base_path/skel # set var_path $base_path/var # set cleanscript $var_path/clean.sh # Архитектура, для которой создаётся зеркало. По умолчанию - это архитектура # системы, на которой работает apt-mirror (amd64,i386 или др.). Менять не ненужно, # т.к. ниже мы явно укажем и зеркало и архитектуру. # set defaultarch <running host architecture> # Пусть к скрипту постобработки, по-умолчанию отсутствует, пока нам не нужен. # set postmirror_script $var_path/postmirror.sh # Не запускать скрипт постобработки set run_postmirror 0 # Служебные параметры, не трогаем set nthreads 20 set _tilde 0 # ############# end config ############## # Зеркало с пакетами для amd64 jessie (stable)+ исходные тексты deb-amd64 http://httpredir.debian.org/debian jessie main contrib non-free deb-src http://httpredir.debian.org/debian jessie main contrib non-free # Зеркало с обновлениями безопасности amd64 jessie (stable)+ исходные тексты deb-amd64 http://security.debian.org/ jessie/updates main contrib non-free deb-src http://security.debian.org/ jessie/updates main contrib non-free # Зеркало с прочими обновлениями amd64 jessie (stable)+ исходные тексты deb-amd64 http://httpredir.debian.org/debian/ jessie-updates main contrib non-free deb-src http://httpredir.debian.org/debian/ jessie-updates main contrib non-free # Зеркало необходимое для сетевой установки (udebs) deb-amd64 http://httpredir.debian.org/debian jessie main/debian-installer # Backports deb-amd64 http://httpredir.debian.org/debian/ jessie-backports main contrib non-free deb-src http://httpredir.debian.org/debian/ jessie-backports main contrib non-free # Удаляем файлы не индексированные в Release clean http://httpredir.debian.org/debian clean http://security.debian.org # Запрещаем очистку выбранной папки skip-clean http://httpredir.debian.org/debian/dists/jessie/main/installer-amd64/
Если необходимо хранить несколько зеркал для разных выпусков и архитектур, то добавляем новые строки аналогично для jessie amd64
Далее нужно убедиться что все указанные в файле mirror.list каталоги существуют.
Запуск и автоматизация apt-mirror
Для ручного запуска создания/обновления зеркала выполняем команду:
# apt-mirror
После загрузки индексных файлов apt-mirror сообщит, какой объём пакетов нужно получить:
Downloading 176 index files using 20 threads... Begin time: Wed Jul 13 10:08:21 2016 [20]... [19]... [18]... [17]... [16]... [15]... [14]... [13]... [12]... [11]... [10]... [9]... [8]... [7]... [6]... [5]... [4]... [3]... [2]... [1]... [0]... End time: Wed Jul 13 10:08:34 2016 Processing tranlation indexes: [TTTTT] Downloading 47 translation files using 20 threads... Begin time: Wed Jul 13 10:08:34 2016 [20]... [19]... [18]... [17]... [16]... [15]... [14]... [13]... [12]... [11]... [10]... [9]... [8]... [7]... [6]... [5]... [4]... [3]... [2]... [1]... [0]... End time: Wed Jul 13 10:08:40 2016 Processing indexes: [SSSSPPPPP] 130.7 GiB will be downloaded into archive. Downloading 116807 archive files using 20 threads... Begin time: Wed Jul 13 10:08:46 2016 [20]...
Остаётся только дождаться завершения скачивания.
Для автоматической синхронизации и очистки зеркал нужно добавить строку в настройки cron и выставить подходящее время. Обновление официальных зеркал происходит каждые 6 часов: 3:00,9:00,15:00,21:00. Например так:
crontab -e 05 01 * * * apt-mirror >> /var/log/apt-mirror.log 05 03 * * * /mnt/repo/debian/var/clean.sh >> /var/log/apt-mirror.log
Настройка доступа к зеркалу
После завершения работы локальные копии всех указанных репозиториев окажутся в каталогах /mnt/repo/debian/mirror/имя_репозитория. Таким образом копия репозитория, которая была определена в файле mirror.list как:
deb-amd64 http://httpredir.debian.org/debian jessie main contrib non-free
окажется в каталоге /mnt/repo/debian/mirror/httpredir.debian.org/debian.
Доступ именно к этому каталогу можно открывать любым удобным для Вас способом - Web или FTP сервером. Для корректной работы обязательно необходимо добавить символические ссылки "stable","testing", "unstable" на те выпуски, которые вы зеркалируете (если они у вас есть).
Пример:
ln -s /media/repo/debian/mirror/httpredir.debian.org/debian/dists/jessie /media/repo/debian/mirror/httpredir.debian.org/debian/dists/jessie/stable
Далее очень желательно подписать вновь созданный репозиторий.
C помощью утилиты debmirror
Установка пакета:
# apt-get install debmirror
Создание каталога /mnt/repo/debian, в нём будет создаваться локальный репозиторий пакетов. Желательно чтобы это был примонтированный логический раздел жёсткого диска, чтобы в случае переустановки дистрибутива с нуля, при форматировании корневого раздела (/), не лишиться репозитория совсем.
# mkdir /mnt/repo/debian
Опции
-a |
тип архитектуры (i386, amd64 и т.п.) |
-d |
ветка дистрибутива (stable, testing, unstable) |
--nosource |
не закачивать пакеты с исходным кодом |
--i18n |
закачивать файлы переводов описаний пакетов |
-h |
адрес сетевого репозитория |
--method |
тип протокола передачи файлов (ftp, http, rsync) |
--progress |
показывать подробности загрузки |
/mnt/repo/ |
каталог, в котором будет создан ваш локальный репозиторий |
-v |
показывать, что сейчас происходит |
--nosource |
не скачивать исходные коды |
-s main,contrib,non-free |
секции, которые нужно скачать |
--ignore-release-gpg |
игнорировать проверку gpg-ключа |
--ignore-missing-release |
не прерывается, если нету файла Release |
По умолчанию debmirror создаёт зеркало из секций main, contrib, non-free, main/debian-installer.
Можно исключать секции ненужных вам пакетов:
--exclude-deb-section="games" - не будет зеркалировать все игры.
Имя секции обязательно в кавычках, иначе опция проигнорируется, это будет видно по общему объёму необходимых для скачивания пакетов выводимых программой в самом начале своей работы.
Принадлежность к определенной секции вашего пакета можно узнать по команде:
$ apt-cache show имя_пакета
Пример получения бинарного зеркала (без пакетов с исходным кодом) Debian Stable для amd64:
# debmirror --host=ftp.fi.debian.org/debian --dist=stable --arch=amd64 --method=ftp --ignore-release-gpg --nosource /mnt/repo/debian
C помощью утилиты reprepro
Установка пакета:
# apt-get install reprepro
Создание каталога /mnt/repo/debian, в нём будет создаваться локальный репозиторий пакетов. Желательно чтобы это был примонтированный логический раздел жёсткого диска, чтобы в случае переустановки дистрибутива с нуля, при форматировании корневого раздела (/), не лишиться репозитория совсем.
# mkdir /mnt/repo/debian
Cоздание каталога /mnt/repo/debian/conf и пустого конфигурационного файла distributions:
# mkdir /mnt/repo/debian/conf # touch /mnt/repo/debian/conf/distributions
В файл /mnt/repo/debian/conf/distributions указываем следующие параметры (пример для testing, архитектура i386):
Codename: squeeze Suite: stable Version: 6.x Origin: Debian Label: Debian 6.x Description: Debian Stable Repository Architectures: amd64 source Components: main contrib non-free SignWith: default DebIndices: Packages Release . .gz .bz2 DscIndices: Sources Release . .gz .bz2 Contents: . .gz .bz2
Описание параметров
Codename: squeeze |
кодовое имя дистрибутива: sarge, etch, lenny, squeeze и т.д. |
Suite: stable |
вертка дистрибутива: stable, testing ,unstable ,experimental |
Version: 6.x |
номер версии: squeeze - 6.x |
Origin: Debian |
возможно у вас не Debian, а его производная, например, Ubuntu, Kubuntu, если оригинал, то Debian |
Label: Debian 6.x |
смесь двух секций Origin и Version |
Description: Debian testing repository |
расшифровка, какой репозиторий |
Architectures: amd64 |
архитектура дистрибутива: i386, amd64 и т.д. |
Components: main contrib non-free |
компоненты дистрибутива: main - СПО, contrib - СПО с зависимостями от несвободного, non-free - несвободное ПО |
SignWith: default |
можно не указывать, если не планируете подписывать репозиторий ключём gnupg |
DebIndices: Packages Release . .gz .bz2 |
индексные файлы Packages для двоичных пакетов и файлы Release с контрольными суммами; 3 типа: несжатые, сжатые gzip, сжатые bzip |
DscIndices: Sources Release . .gz .bz2 |
тоже самое только для пакетов с исходным кодом |
Contents: . .gz .bz2 |
файлы со списком содержимого каждого пакета, пригодиться при поиске файлов в установленных и ещё неустановленных пакетах |
Дополнительные важные опции:
AlsoAcceptFor: unstable experimental |
другие ветки |
UDebComponents: main contrib non-free |
Udeb-пакеты |
Инициализация репозитория
Создаём каталоги, файлы, ссылки:
# cd /mnt/repo/debian # reprepro export # reprepro createsymlinks
Базовый каталог не задан, т.к. мы уже в нём находимся.
Теперь можно добавлять пакеты в локальный репозиторий из кэша уже скачанных вами пакетов:
# reprepro -b /mnt/repo/debian --ask-passphrase includedeb squeeze /var/cache/apt/archives/*.deb
Параметр -b задаёт базовый каталог репозитория, в нашем случае это /mnt/repo, если вы находитесь уже в нём, то его можно не задавать, т.к. reprepro ищет файл conf/distributions в текущем каталоге.
Добавление Дебиановских исходников в репозиторий. Они состоят обычно из 2-3 файлов, главным (управляющим) из которых является dsc-файл. Чтобы все файлы исходников добавились в репозиторий, нужно использовать includedsc, остальное аналогично.
Добавление дебиановских исходников вместе с собранным из них пакетом (пакетами). После сборки пакета (пакетов) из дебиановских исходников, кроме самих пакетов и исходников появляется файл *.changes там же, где и пакеты. В этом файле перечислены как сами собранные пакеты, так и исходники. Поэтому для добавления всех этих файлов можно воспользоваться такой командой (в общем виде):
# reprepro -C РАЗДЕЛ include ВЕТКА /путь/до/файла/имя_файла.changes
Параметр --ask-passphrase подпишет ваш репозиторий с помощью вашего ключа GnuPG. Его можно не указывать, если не планируете подписывать репозиторий ключём gnupg. На не подписанные репозитории, aptitude будет выдавать предупреждение, что он ненадежный. Для использования подписанного репозитория, надо сделать выгрузку вашего ключа, а на машине использующей репозиторий:
# apt-key add /tmp/имя_вашего_ключа.asc
Добавление пакетов расположенных на CD/DVD Debian
Они уже лежат в иерархии каталога pool на дисках, но reprepro не поддерживает рекурсивный поиск по подкаталогам, но это достаточно легко обойти шаблоном (pool/*/*/*/*.deb). Пример:
# reprepro -b /mnt/repo/debian --ask-passphrase includedeb squeeze /media/cdrom/pool/*/*/*/*.deb
Она найдёт и добавит всё пакеты.
Удаление deb-пакета из репозитория
# reprepro remove ветка имя_пакета
Удаление пакетов вместе с исходниками либо всех пакетов, относящихся к одному собранному приложению (это означает, что данные пакеты в репозитории лежат в одной папке, причем имя папки и будет указывать на имя приложения):
# reprepro removesrc ветка имя_приложения
Использование
Для использования репозитория нужно добавить его в файл /etc/apt/sources.list в виде следующей строки (в общем виде):
deb file:///путь_к_папке_репозитория/ ветка разделы например: deb file:///home/repository/ squeeze main contrib non-free
Подпись локального репозитория своим ключом
Генерирование ключа
Чтобы не было проблем с тем, что ключи созданы не там, рекомендуется все делать от учётной записи «root». Для генерирования ключа нужно выполнить команду:
# gpg --gen-key
Ответ на вопрос о типе ключа (обычно - 1):
Please select what kind of key you want: (1) DSA and Elgamal (default) (2) DSA (sign only) (5) RSA (sign only) Your selection?
Ответ на вопрос о длине ключа (тоже по умолчанию - 2048):
DSA keypair will have 1024 bits. ELG-E keys may be between 1024 and 4096 bits long. What keysize do you want? (2048)
Ответ на вопрос о сроке истечения ключа (0 - никогда не истекает):
Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Key is valid for? (0)
После этого может потребоваться подтвердить выбор:
Key does not expire at all Is this correct? (y/N) y
Далее ввести информацию о себе и подтвердить (буква O (не ноль)). Потом задать пароль и подтвердить его. После этого начинается генерация ключа, в течение которой просят попечатать чего-нить, подвигать мышкой или еще чего поделать. Это нужно для генерации уникального ключа.
По завершении генерации будет выведена информация о сгенерированном ключе, такая как: - ID ключа - короткий набор символов: pub 1024D/5A81CBE3 2008-04-27 - отпечаток - длинный набор символов: Key fingerprint = уникальный отпечаток - и ещё немного информации. Самой важной информацией является ID ключа и отпечаток.
Экспорт ключа
Выполнить:
# gpg --armor --export > mylocalkey.asc
Где mylocalkey.asc это имя файла, в который внесен данный экспорт (новый файл, он создатся в процессе).
Добавление ключа в apt
Команда выполняется из того же каталога, что и предыдущая (из того, где находится mylocalkey.asc):
# apt-key add mylocalkey.asc
После этого можно проверить наличие ключа в списке apt:
# apt-key list
Выведет все ключи, в том числе и созданный.
Если нужно удалить ключ из apt, то это выполняется командой:
# apt-key del ID_ключа
В этом случае ID_ключа будет 5A81CBE3 (см.выше).
Подписывание локального репозитория созданным ключом
Сначала нужно убедиться в том, что в локальном репозитории имеется файл Release (находится в каталоге /mnt/repo/debian/dists/ветка_дистрибутива). В этом файле хранится информация о репозитории.
Перейти в каталог, где находится файл Release и выполнить команду:
# gpg --armor -o Release.gpg -sb Release
Файл Release.gpg создан, он является подписью к созданному локальному репозиторию.