Создание собственного/служебного репозитория#
Предупреждение
Установка пакетов из сторонних репозиториев (включая репозиторий Debian) может привести к нарушению работы ОС, и делается на свой страх и риск.
Создание структуры репозитория#
Установить пакет
reprepro:
sudo apt install reprepro
Создать каталог для размещения репозитория:
sudo mkdir <путь_к_репозиторию>
Создать в каталоге репозитория подкаталог
conf:
sudo mkdir <путь_к_репозиторию>/conf
Создать в подкаталоге
confфайлdistributionsследующего содержания:
Origin: Debian
Codename: <кодовое_имя_дистрибутива>
Suite: <ветка_дистрибутива>
Version: <версия_дистрибутива>
Architectures: <поддерживаемые_архитектуры>
Components: main contrib non-free
UDebComponents: main
SignWith: yes
где:
<кодовое_имя_дистрибутива>— кодовое имя дистрибутива:1.8_x86-64 — для Astra Linux Special Edition РУСБ.10015-01 очередное обновление 1.8;
<ветка_дистрибутива>— ветка дистрибутива:stable
current
unstable
<версия_дистрибутива>— номер версии (можно использовать номер очередного обновления и актуально оперативного обновления, например 1.8.1);<поддерживаемые_архитектуры>— архитектура дистрибутива. Наиболее часто употребляются:amd64 — для Astra Linux Special Edition РУСБ.10015-01 очередное обновление 1.8;
source — для репозиториев, содержащих исходные коды пакетов;
Components: компоненты дистрибутива. Обычно это:main - свободно распространяемое ПО;
contrib - свободно распространяемое ПО с зависимостями от несвободного ПО;
non-free - несвободное ПО.
UDebComponents: main - Udeb-пакеты;SignWith: yes— подпись репозитория. Эту строчку не нужно указывать, если не планируется подписывать репозиторий ключом gnupg.
Также можно использовать опцию Contents:, включающую автоматическую генерацию файлов со списками файлов, входящих в бинарные пакеты.
Предупреждение
Генерация списков файлов требует значительного времени.
Такие списки могут использоваться для дополнительного контроля состава репозитория.
Примечание
Помимо конфигурационного файла задать параметры генерации репозиториев можно с помощью параметров вызова команды reprepro или с помощью переменных окружения.
Подробное описание всех опций конфигурационного файла, параметров вызова команды и переменных окружения см. в справочной системе man: man reprepro
Для очистки ранее созданной базы данных репозитория можно использовать команду:
sudo reprepro -b <путь_к_репозиторию> clearvanished
Для инициализации нового репозитория выполнить команду:
sudo reprepro -b <путь_к_репозиторию> export
Наполнить репозиторий пакетами:
Добавление бинарного deb пакета:
sudo reprepro -b <путь_к_репозиторию> includedeb <кодовое_имя_дистрибутива> <путь_к_пакету/имя_пакета>.deb
Добавление всех пакетов deb из каталога
<путь_к_пакетам>:
sudo reprepro -b <путь_к_репозиторию> includedeb <кодовое_имя_дистрибутива> <путь_к_пакетам>/*.deb
Примечание
При появлении ошибки: No priority given for '<имя_пакета>', skipping выполнить добавление пакета с игнорированием приоритета с помощью опции -P:
sudo reprepro -P -V -b <путь_к_репозиторию> includedeb <кодовое_имя_дистрибутива> <путь_к_пакету/имя_пакета>.deb
Добавление бинарного udeb пакета:
sudo reprepro -b <путь_к_репозиторию> includeudeb <кодовое_имя_дистрибутива> <путь_к_пакету/имя_пакета>.udeb
Добавление пакета с исходным текстом:
sudo reprepro -b <путь_к_репозиторию> includedsc <кодовое_имя_дистрибутива> <путь_к_пакету/имя_пакета>.dsc
Удаление пакета:
sudo reprepro -b <путь_к_репозиторию> remove <кодовое_имя_дистрибутива> <имя_пакета_без_версии>
Использование неподписанного репозитория#
Предупреждение
Использование неподписанных репозиториев по умолчанию запрещено.
Рекомендуется использовать только подписанные репозитории.
См. далее Подписание репозитория.
Для того, чтобы разрешить использовать неподписанные репозитории следует в описание репозитория на компьютере, на котором выполняется установка, добавить параметр [trusted=yes].
При этом строка описания репозитория будет выглядеть так:
deb [trusted=yes] https://download.astralinux.ru/astra/stable/2.12_x86-64/repository stable contrib main non-free
Подробнее см. Подключение репозиториев с пакетами в ОС |AL| и установка пакетов.
Подписание репозитория#
Для подписания репозитория:
Сгенерировать gpg-ключ (RSA или DSA):
gpg --gen-key
Команда генерации ключа запросит:
имя пользователя;
адрес e-main пользователя;
пароль;
Ввести запрошенные данные и подтвердить создание ключа.
Убедиться, что в файле
/<путь_к_репозиторию>/conf/distributionsприсутствует строка:
SignWith: yes
Выполнить команду:
sudo reprepro --ask-passphrase -b <путь_к_репозиторию/имя> export
параметр --ask-passphrase запрашивает пароль для gpg-ключа.
Наполнить репозиторий добавляя пакеты, например:
sudo reprepro --ask-passphrase -b <путь_к_репозиторию/имя> includedeb <кодовое имя дистрибутива> <имя_пакета>.deb
Чтобы пользоваться подписанным репозиторием:
На компьютере где создавался репозиторий получить список ключей:
gpg --list-keys
gpg: проверка таблицы доверия
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: глубина: 0 достоверных: 1 подписанных: 0 доверие: 0-, 0q, 0n, 0m, 0f, 1u
gpg: срок следующей проверки таблицы доверия 2024-02-10
/home/le/.gnupg/pubring.kbx
---------------------------
pub rsa3072 2022-02-10 [SC] [ годен до: 2024-02-10]
ECBD2F097D49CD738EB378201623A5978DBFC107
uid [ абсолютно ] support <support@astralinux.ru>
sub rsa3072 2022-02-10 [E] [ годен до: 2024-02-10]
Выполнить экспорт ключа, используя адрес электронной почты:
sudo gpg --armor --output repo_gpg.key --export support@astralinux.ru
В результате будет получен файл repo_gpg.key в текущем каталоге, который необходимо скопировать на компьютер, где будет использоваться данный репозиторий, и добавить его в систему (для добавления ключа нужны привилегии суперпользовтаеля):
sudo apt-key add repo_gpg.key
Apache2 + reprepro#
Для предоставления доступа к репозиторию с помощью web-службы apache2:
Установить пакет:
sudo apt install apache2
Если репозиторий расположен вне каталога
/var/www/html, например, в каталоге/srv/repo, то создать символьную ссылку на репозиторий:
sudo ln -s /srv/repo /var/www/html/repo
В файл
/etc/apache2/sites-enabled/000-default.confпосле строкиDocumentRoot /var/www/htmlдобавить:
<Directory /var/www/html/repo>
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order Deny,Allow
Allow from all
</Directory>
Перезапустить службу apache2:
sudo systemctl restart apache2