Создание собственного/служебного репозитория#

Предупреждение

Установка пакетов из сторонних репозиториев (включая репозиторий Debian) может привести к нарушению работы ОС, и делается на свой страх и риск.

Создание структуры репозитория#

  1. Установить пакет reprepro:

sudo apt install reprepro
  1. Создать каталог для размещения репозитория:

sudo mkdir <путь_к_репозиторию>
  1. Создать в каталоге репозитория подкаталог conf:

sudo mkdir <путь_к_репозиторию>/conf
  1. Создать в подкаталоге 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;

    • 1.7_x86-64 — для Astra Linux Special Edition РУСБ.10015-01 очередное обновление 1.7;

    • 4.7_arm — для Astra Linux Special Edition РУСБ.10152-02 очередное обновление 4.7;

  • <ветка_дистрибутива> — ветка дистрибутива:

    • stable

    • current

    • unstable

  • <версия_дистрибутива> — номер версии (можно использовать номер очередного обновления и актуально оперативного обновления, например 1.7.5);

  • <поддерживаемые_архитектуры> — архитектура дистрибутива. Наиболее часто употребляются:

    • amd64 — для Astra Linux Special Edition РУСБ.10015-01 очередное обновление 1.6, 1.7, 1.8;

    • arm64 — для Astra Linux Special Edition РУСБ.10152-02 очередное обновление 4.7;

    • source — для репозиториев, содержащих исходные коды пакетов;

  • Components: компоненты дистрибутива. Обычно это:

    • main - свободно распространяемое ПО;

    • contrib - свободно распространяемое ПО с зависимостями от несвободного ПО;

    • non-free - несвободное ПО.

  • UDebComponents: main - Udeb-пакеты;

  • SignWith: yes — подпись репозитория. Эту строчку не нужно указывать, если не планируется подписывать репозиторий ключом gnupg.

Также можно использовать опцию Contents:, включающую автоматическую генерацию файлов со списками файлов, входящих в бинарные пакеты.

Предупреждение

Генерация списков файлов требует значительного времени.

Такие списки могут использоваться для дополнительного контроля состава репозитория.

Примечание

Помимо конфигурационного файла задать параметры генерации репозиториев можно с помощью параметров вызова команды reprepro или с помощью переменных окружения. Подробное описание всех опций конфигурационного файла, параметров вызова команды и переменных окружения см. в справочной системе man: man reprepro

  1. Для очистки ранее созданной базы данных репозитория можно использовать команду:

sudo reprepro -b <путь_к_репозиторию> clearvanished
  1. Для инициализации нового репозитория выполнить команду:

sudo reprepro -b <путь_к_репозиторию> export
  1. Наполнить репозиторий пакетами:

  1. Добавление бинарного deb пакета:

sudo reprepro -b <путь_к_репозиторию> includedeb <кодовое_имя_дистрибутива> <путь_к_пакету/имя_пакета>.deb
  1. Добавление всех пакетов deb из каталога <путь_к_пакетам>:

sudo reprepro -b <путь_к_репозиторию> includedeb <кодовое_имя_дистрибутива> <путь_к_пакетам>/*.deb

Примечание

При появлении ошибки: No priority given for „<имя_пакета>“, skipping выполнить добавление пакета с игнорированием приоритета с помощью опции -P:

sudo reprepro -P -V -b <путь_к_репозиторию> includedeb <кодовое_имя_дистрибутива> <путь_к_пакету/имя_пакета>.deb

  1. Добавление бинарного udeb пакета:

sudo reprepro -b <путь_к_репозиторию> includeudeb <кодовое_имя_дистрибутива> <путь_к_пакету/имя_пакета>.udeb
  1. Добавление пакета с исходным текстом:

sudo reprepro -b <путь_к_репозиторию> includedsc <кодовое_имя_дистрибутива> <путь_к_пакету/имя_пакета>.dsc
  1. Удаление пакета:

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

Подробнее см. Подключение репозиториев с пакетами в ОС Astra Linux и установка пакетов.

Подписание репозитория#

Для подписания репозитория:

  1. Сгенерировать gpg-ключ (RSA или DSA):

gpg --gen-key
  1. Команда генерации ключа запросит:

  • имя пользователя;

  • адрес e-main пользователя;

  • пароль;

  1. Ввести запрошенные данные и подтвердить создание ключа.

  2. Убедиться, что в файле /<путь_к_репозиторию>/conf/distributions присутствует строка:

SignWith: yes
  1. Выполнить команду:

sudo reprepro --ask-passphrase -b <путь_к_репозиторию/имя> export

параметр –ask-passphrase запрашивает пароль для gpg-ключа.

  1. Наполнить репозиторий добавляя пакеты, например:

sudo reprepro --ask-passphrase -b <путь_к_репозиторию/имя> includedeb <кодовое имя дистрибутива> <имя_пакета>.deb

Чтобы пользоваться подписанным репозиторием:

  1. На компьютере где создавался репозиторий получить список ключей:

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]
  1. Выполнить экспорт ключа, используя адрес электронной почты:

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:

  1. Установить пакет:

sudo apt install apache2
  1. Если репозиторий расположен вне каталога /var/www/html, например, в каталоге /srv/repo , то создать символьную ссылку на репозиторий:

sudo ln -s /srv/repo /var/www/html/repo
  1. В файл /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>
  1. Перезапустить службу apache2:

sudo systemctl restart apache2