Используемые термины: Aptly , Linux .
В инструкции мы рассмотрим основные моменты для создания и управления репозиторием для пакетов Deb с помощью инструмента Aptly.
Установка программного обеспечения
Базовая настройка
Работаем с репозиторием
Работа с публикациями
Подключение к репозиторию
Поиск и работа с пакетами
Инструкцию по установке мы можем найти на официальном сайте . Давайте ее рассмотрим на примере Ubuntu и Rocky Linux.
Установку Aptly на Deb-системы выполнить, довольно, просто. Необходимо подключить репозиторий разработчика и выполнить установку.
echo «deb http://repo.aptly.info/release $(lsb_release -cs) main» > /etc/apt/sources.list.d/aptly.list
Для систем на базе Astra Linux, вместо $(lsb_release -cs) , мы должны указать точную редакцию, которой соответствует дистрибутив. Например, для Astra SE 1.7:
echo «deb http://repo.aptly.info/release buster main» > /etc/apt/sources.list.d/aptly.list
Импортируем GPG ключ репозитория:
apt install curl gnupg2
curl -fsS https://www.aptly.info/pubkey.txt | gpg2 —dearmor -o /etc/apt/trusted.gpg.d/aptly.gpg
После чего обновляем список пакетов:
apt update
Выполним установку:
apt install aptly
Для проверки введем команду:
aptly version
Мы должны увидеть что-то на подобие:
aptly version: 1.6.1
Для дистрибутивов на базе пакетов RPM предлагается для установки скачать и распаковать бинарник.
Для начала, нам понадобятся wget и tar:
yum install wget unzip
Переходим на страницу последнего релиза и копируем ссылку для загрузки архива:
Используя ссылку, скачиваем на наш компьютер архив:
wget https://github.com/aptly-dev/aptly/releases/download/v1.6.1/aptly_1.6.1_linux_amd64.zip
Распакуем архив:
unzip aptly_*_linux_amd64.zip
Раскидаем полученные файлы по своим местам:
mv aptly_*_linux_amd64/aptly /usr/bin/
mv aptly_*_linux_amd64/man/aptly.1.gz /usr/share/man/man1/
mkdir /usr/share/doc/aptly
mv aptly_*_linux_amd64/{AUTHORS,LICENSE,README.rst} /usr/share/doc/aptly/
Удаляем исходник:
rm -rf aptly_*_linux_amd64; rm -f aptly_*_linux_amd64.zip
Для проверки введем команду:
aptly version
Мы должны увидеть что-то на подобие:
aptly version: 1.6.1
Прежде чем начать работать с репозиторием, создадим конфигурационный файл:
vi /etc/aptly.conf
{
«rootDir»: «/opt/aptly»,
«downloadConcurrency»: 4,
«downloadSpeedLimit»: 0,
«architectures»: [],
«dependencyFollowSuggests»: false,
«dependencyFollowRecommends»: false,
«dependencyFollowAllVariants»: false,
«dependencyFollowSource»: false,
«dependencyVerboseResolve»: false,
«gpgDisableSign»: false,
«gpgDisableVerify»: false,
«gpgProvider»: «gpg»,
«downloadSourcePackages»: false,
«skipLegacyPool»: true,
«ppaDistributorID»: «ubuntu»,
«ppaCodename»: «»,
«FileSystemPublishEndpoints»: {
«pubtest»: {
«rootDir»: «/var/www/aptly»,
«linkMethod»: «symlink»,
«verifyMethod»: «md5»
}
},
«enableMetricsEndpoint»: false
}
* для нас важны опции:
Мы готовы начать работать с aptly.
Рассмотрим несколько действий:
1. И так, создадим репозиторий командой:
aptly repo create -comment=»Testing first repo» -component=»main» -distribution=»focal» test
* в данном примере будет создан новый репозиторий test.
** а также:
При необходимости, можно отредактировать параметры нашего репозитория командой:
aptly repo edit -comment=»New comment» test
Переименовать:
aptly repo rename test test-new-name
Удалить:
aptly repo drop test
Посмотреть список репозиториев можно командой:
aptly repo list
Ну и, более подробная информация о репозитории:
aptly repo show test
2. Добавление пакета в созданный ранее репозиторий:
aptly repo add test /tmp/deb/package-name_1.2.3_amd64.deb
* это простой вариант добавления пакета в репозиторий с именем test ; сам же пакет в нашем примере будет загружен из /tmp/deb/package-name_1.2.3_amd64.deb .
Мы должны будем увидеть что-то на подобие:
Loading packages…
[+] package-name_1.2.3_amd64 added
Посмотреть информацию о репозитории вместе со списком добавленных в него пакетов:
aptly repo show -with-packages test
Подробная информация о пакете:
aptly package show package-name_1.2.3_amd64
Но в данной информации сильно не хватает репозитория, в котором опубликован конкретный пакет. Ее можно увидеть, добавив опцию -with-references :
aptly package show -with-references package-name_1.2.3_amd64
Удалить пакет из репозитория можно командой:
aptly repo remove test package-name_1.2.3_amd64
* ниже мы рассмотрим способ поиска и удаления пакетов по параметрам.
Мы должны будем увидеть что-то на подобие:
Loading packages…
[-] package-name_1.2.3_amd64 removed
При работе с базой aptly мы просто добавляем в нее пакеты, но они не будут доступны при подключении к нашему репозиторию. Нам необходимо выполнить публикацию и предоставить веб-доступ. В данном разделе мы рассмотрим, как:
Начнем с публикации.
Для начала установим:
yum install rng-tools bzip2
* где:
Для публикации нам потребуется ключ gpg. Запускаем утилиту:
rngd -r /dev/urandom
Откроем файл:
vi ~/.gnupg/gpg.conf
Добавим строки:
use-agent
pinentry-mode loopback
Создаем ключ:
gpg —default-new-key-algo rsa4096 —gen-key —keyring pubring
Система запросит ввести имя и email. Как минимум, вводим имя:
Real name: pubtest
* данное имя может быть любым, поэтому лучше указать более понятное название для ключа aptly.
После появится окно ввода пароля для закрытого ключа. Придумываем новый и вводим его дважды.
Ключ создан, его можно увидеть командой:
gpg —list-keys
Теперь сделаем первую публикацию:
aptly publish repo test filesystem:pubtest:test
Система запросит пароль для GPG-ключа в отдельном окне.
Для успешного выполнения команды нужно, чтобы в репозитории был добавлен, хотя бы, один пакет.
После публикации в каталоге /var/www/aptly/test мы должны увидеть:
ls /var/www/aptly/test
dists pool
В папке dists метаданные для опубликованных дистрибутивах, pool — загруженные пакеты (в нашем примере симлинки на пул в основном каталоге — /opt/aptly).
Для удобства работы с нашим репозиторием можно опубликовать открытый ключ GPG — он будет необходим для подключения к репозиторию со стороны клиентов. Вводим:
gpg —export —armor > /var/www/aptly/test/pubtest.asc
Мы вернемся к данному ключу, когда будет настраивать подключение к репозиторию.
После изменений в основной базе пакетов, нам нужно обновлять настройки публикации. Это приводит к обновлению метаданных и актуализации пакетов в каталогах pool.
Синтаксис такой:
aptly publish update <дистрибутив> [<точка входа>]
Например:
aptly publish update focal filesystem:pubtest:test
Система должна запросить пароль для нашего GPG-ключа.
Также полезно запускать команду со следующими опциями:
aptly publish update -batch -force-overwrite -gpg-key=»${gpgkey}» -passphrase=»${gpgpass}» focal filesystem:pubtest:test
* где:
Мы теперь можем опубликовать репозиторий и обновить в нем данные. Но для получения доступа по веб, нам нужен веб-сервер.
Для получения доступа к репозиторию по http(s) нам нужно установить и настроить веб-сервер. В данном примере мы рассмотрим простой способ настройки NGINX.
Установка будет немного отличаться для Linux DEB и RPM. Рассмотрим процесс по-отдельности.
а) DEB:
apt update
apt install nginx
б) RPM:
yum install nginx
Если система вернет ошибку, что не может найти данный пакет, ставим:
yum install epel-release
NGINX установлен.
После установки веб-сервера, немного сконфигурируем его. Тут тоже процесс отличается для DEB и RPM.
Открываем файл:
а) на deb:
vi /etc/nginx/sites-enabled/default
б) на rpm:
vi /etc/nginx/nginx.conf
Далее процесс схож.
Находим и редактируем строку с директивой root:
root /var/www/aptly;
* в нашем примере мы определили корневую директорию для веб-публикаций /var/www/aptly .
Перезапускаем сервис и разрешаем автозапуск nginx:
systemctl restart nginx
systemctl enable nginx
Веб-сервер сконфигурирован.
В нашем примере мы не стали рассматривать процесс настройки https. Но в продуктивной среде правильнее настроить веб-доступ к репозиторию по защищенному каналу. Читайте дополнительно про получение бесплатного сертификата .
Настраиваем брандмауэр, если в нашей системе он используется. Нам нужно открыть порт 80 (и 443, если работаем по https). В зависимости от используемой утилиты управления netfilter, наши действия будут отличаться. Рассмотрим наиболее популярные инструменты — iptables и firewalld.
а) для iptables (как правило, на DEB):
iptables -I INPUT -p tcp —dport 80 -j ACCEPT
iptables -I INPUT -p tcp —dport 443 -j ACCEPT
Для сохранения правил вводим:
apt install iptables-persistent
netfilter-persistent save
б) для firewalld (как правило, на RPM):
firewall-cmd —permanent —add-port=80/tcp
firewall-cmd —permanent —add-port=443/tcp
И для сохранения:
firewall-cmd —reload
Наш сервер готов принимать запросы по http(s). Для проверки открываем браузер и вводим http://<IP-адрес нашего сервер> . Мы должны увидеть список каталогов (или один каталог).
Синтаксис для удаления публикации:
aptly publish drop <distribution> [[<endpoint>:]<prefix>]
Предположим, у нас была публикация дистрибуци focal в filesystem:pubtest:test. Тогда можно удалить ее командой:
aptly publish drop focal filesystem:pubtest:test
Рассмотрим кратко процесс настройки подключения к репозиторию и установки с него пакетов.
На системе, где планируем подключиться к репозиторию, создаем файл с настройками:
vi /etc/apt/sources.list.d/own_repo.list
* где own_repo — произвольное название для репозитория.
Добавляем строку следующего вида:
deb http(s)://<IP-адрес или hostname до нашего репозитория/точка входа> <distribution> <component>
Например:
deb https://repo.remontka.com/test focal main
Импортируем в систему ключ, который мы публиковали в предыдущем разделе:
wget —quiet -O — https://repo.remontka.com/test/pubtest.asc | apt-key add —
* скорректируйте полный путь на ваш.
Мы должны увидеть:
OK
Можно обновить список пакетов:
apt update
И пользоваться репозиторием.
Стоит обсудить еще одну важную для работы функцию — поиск пакетов. Осуществляется с помощью package query . Более подробнее про данный формат стоит почитать на официальной странице . Мы же рассмотрим несколько запросов для примера и способы их применения.
1. Поиск пакетов.
Синтаксис:
aptly package search [<package-query>]
Найти по версии:
aptly package search ‘Version (>>8.0.0-20220413)’
* в данном примере система выведет список пакетов, версия которых старше 8.0.0-20220413 .
По имени и версии:
aptly package search ‘Name (% *-dev), Version (>>8.0.0-20220413)’
* в этом примере будут найдены все пакеты, в имени которых на конце есть -dev и версия выше 8.0.0-20220413 .
2. Удаление пакетов.
Также с использованием package query мы можем находить и удалять из базы пакеты.
Синтаксис:
aptly repo remove <имя репозитория> <package-query>
Например, удалим пакеты, версия которых начинается на 8.
aptly repo remove -dry-run test ‘Version (% 8*)’
* обратите внимание, что мы используем флаг -dry-run , который позволит нам не удалять пакеты, а вывести на экран список того, что будет удалено, для окончательного удаления пишем команду без данного флага.
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…