Локальный APT (Debian / Ubuntu) репозиторий на Centos 7
Репозиторий — место, где хранятся и поддерживаются какие-либо данные. Чаще всего данные в репозитории хранятся в виде файлов, доступных для дальнейшего распространения по сети.
Среди дистрибутивов Linux популярны репозитории с форматом метаданных YUM для дистрибутивов на базе RPM-пакетов, и репозитории с метаданными APT для дистрибутивов на основе DEB-пакетов.
Добавляем репозиторий EPEL и устанавливаем софт
1
2
$ sudo yum -y install epel-release
$ sudo yum -y install debmirror
Создаем каталог, где будет находиться репозиторий
1
$ mkdir -p /var/www/repo/debian
Запускаем синхронизацию и зеркалом Яндекса
1
$ debmirror --progress --i18n --method=rsync --host=mirror.yandex.ru --dist=buster --ignore-small-errors --ignore-release-gpg --exclude="games" --nosource --arch=amd64 /var/www/repo/debian
Автоматическое обновление репозиториев
Создаем скрипты для автоматического обновления локального зеркала с источником
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ nano /home/debmirror-debian.sh
#!/bin/sh
arch=amd64
section=main,contrib,non-free
release=buster,buster-updates
server=mirror.yandex.ru
inPath=debian
proto=rsync
outPath=/var/www/repo/debian/
debmirror --arch $arch \
--passive \
--progress \
--nosource \
--i18n \
--ignore-small-errors \
--ignore-release-gpg \
--exclude='games' \
--exclude='/Translation-.*\.bz2' \
--include='/Translation-en.*\.bz2' \
--include='/Translation-ru.*\.bz2' \
--section $section \
--host $server \
--dist $release \
--method $proto \
--root $inPath \
$outPath
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ nano /home/debmirror-debian-security.sh
#!/bin/sh
arch=amd64
section=main,contrib,non-free
release=buster/updates
server=mirror.yandex.ru
inPath=debian-security
proto=rsync
outPath=/var/www/repo/debian-security/
debmirror --arch $arch \
--passive \
--progress \
--nosource \
--i18n \
--ignore-small-errors \
--ignore-release-gpg \
--exclude='games' \
--exclude='/Translation-.*\.bz2' \
--include='/Translation-en.*\.bz2' \
--include='/Translation-ru.*\.bz2' \
--section $section \
--host $server \
--dist $release \
--method $proto \
--root $inPath \
$outPath
Используемые параметры:
nosourse
— не закачивать пакеты с исходным кодом (экономит место на диске);passive
— пассивный режим загрузки;i18n
— загружать перевод для описания пакетов;host
— URL репозитория;root
— путь к репозиторию на сайте (подкаталог, содержащий репозиторий);method
— метод скачивания (http, ftp, hftp, rsync);progress
— отображение состояния скачивания;dist
— версия дистрибутива ОС (lenny, squeeze, …);arch
— архитектура ОС (i386, amd64);section
— подраздел репозитория с пакетами (main,contrib,non-free; для Ubuntu — main,multiverse,univrese, …);cleanup
— принудительная очистка каталогов репозитория от неизвестного содержимого (неизвестных пакетов);ignore-release-gpg
— игнорировать отсутствие цифровой подписи (полезно при скачивании с некоторых интернет-зеркал официального репозитория, хотя и менее безопасно).
Делаем скрипты исполняемыми
1
2
$ sudo chmod +x /home/debmirror-debian.sh
$ sudo chmod +x /home/debmirror-debian-security.sh
Приписываем эти скрипты в crontab для автоматической синхронизации по расписанию
1
2
3
4
5
$ crontab -e
# ежедневно в два часа ночи
0 2 * * * /home/debmirror-debian.sh
# ежедневно в три часа ночи
0 3 * * * /home/debmirror-debian-security.sh
Для нормально работы с цифровой подписью надо установить GnuPG и импортировать подпись репозитория
Репозиторий на диске занимает приблизительно 150 Gb
Далее надо поднять вэб-сервер.
Пример конфигурации Nginx:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ sudo cat /etc/nginx/site-avaliable/repo.conf
server {
listen 80 default_server;
server_name _;
root /var/www/repo;
charset UTF-8;
default_type text/plain;
location / {
autoindex_exact_size off;
autoindex on;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
Некоторые ошибки, которые встречаются в процессе обновления локального репозитория с источником
При первом запуске, будут ошибки:
1
2
3
4
5
6
...
[GNUPG:] NO_PUBKEY 04EE7237B7D453EC
...
[GNUPG:] NO_PUBKEY 648ACFD622F3D138
...
[GNUPG:] NO_PUBKEY DCC9EFBF77E11517
1
2
3
$ gpg --no-default-keyring --keyring ~/.gnupg/trustedkeys.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 04EE7237B7D453EC
$ gpg --no-default-keyring --keyring ~/.gnupg/trustedkeys.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 648ACFD622F3D138
$ gpg --no-default-keyring --keyring ~/.gnupg/trustedkeys.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys DCC9EFBF77E11517
Посмотреть список gpg-ключей
1
2
$ gpg --list-keys
$ gpg --no-default-keyring --keyring ~/.gnupg/trustedkeys.gpg --list-key
Еще некоторые ошибки:
1
2
3
Errors:
Download of dists/sid/Release failed
Failed to download some Release or Release.gpg files!
Решение, редактируем файл /etc/debmirror.conf, комментируем строки
1
2
3
@dists="sid";
@sections="main,main/debian-installer,contrib,non-free";
@arches="i386";
Еще одна ошибка
1
firewall blocking port 11371
Решение
1
2
$ gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E084DAB9
$ gpg -a --export E084DAB9 | sudo apt-key add -
Добавить локальные репозитории на клиентские ПК / сервера
Добавляем локальный репозиторий на клиенте
1
2
3
4
$ sudo nano /etc/apt/suorces.list
deb http://192.168.1.21/debian buster main contrib non-free
deb http://192.168.1.21/debian buster-updates main contrib non-free
deb http://192.168.1.21/debian-security buster/updates main contrib non-free