Собственный репозиторий может понадобится для уменьшения сетевого траффика, при массовом обновлении компьютеров или в случае, если по тем или иным причинам, интернет канал не доступен на машине.
Создать собственный репозиторий (и управлять им) можно как полностью вручную (создать всю необходимую иерархию каталогов и метаданных), так и воспользовавшись специальной утилитой reprepro, которая сама создаст репозиторий согласно конфигурационного файла, который необходимо будет заполнить (этот способ и будет нам разобран).
Установим утилиту reprepo следующей командой:
sudo apt install reprepo
У меня пакет уже был установлен
Процедура создания и настройки репозитория заключается в:
1. Создании ключа для репозитория.
2. Создании структуры репозитория:
- создание каталога, в котором будет размещен репозиторий
- заполнение конфигурационного файла distributions
- создание структуры репозитория, согласно конфигурационного файла distributions
3. Экспорта открытого ключа репозитория
4. Скачивания и добавления в репозиторий необходимых deb-пакетов
5. Организации распространения пакетов по протоколу ftp или http (опционально)
Создание ключа для репозитория
Для создания ключа, необходимо выполнить команду sudo gpg --gen-key. Она в интерактивном режиме запросит информацию об вашем имени, электронной почте, и фразу-пароль (необходимо её запомнить, она понадобится для дальнейших шагов). При генерации ключей, она попросит вводить текст с клавиатуры, совершать движение мышью, печатать на клавиатуре или обращаться к дискам, для генерации случайных чисел и создания достаточного количества энтропии для повышения крипто стойкости ключа.
Создание структуры репозитория
Создадим каталог для репозитория, например, /srv/repo/localrepo и в нем каталог conf. После чего перейдем в каталог conf.
sudo mkdir -p /srv/repo/localrepo/conf
cd /srv/repo/localrepo/conf
Теперь необходимо создать конфигурационный файл distributions. Откройте любой редактор, введите или скопируйте текст из блока ниже и сохраните его как «distributions»:
sudo nano distributions
Codename: localrepo
Suite: stable
Version: 1.0
Origin: Debian
Label: localrepo Debian Repository
Description: localrepo Debian repository
Architectures: source amd64
Components: main
SignWith: yes
DebIndices: Packages Release . .gz .bz2
DscIndices: Sources Release . .gz .bz2
Contents: . .gz .bz2
Далее создадим структуру репозитория с помощью команды:
sudo reprepro --ask-passphrase -b /srv/repo/localrepo export
утилита попросит ввести фразу-пароль из предыдущего шага и после ввода создаст структуру репозитория
Структуру репозитория можно посмотреть утилитой tree, предварительно установив ее:
sudo apt install tree
tree
Экспорт открытого ключа собственного локального репозитория
Для экспорта открытого ключа собственного репозитория, необходимо из каталога /srv/repo/localrepo выполнить команду:
sudo gpg --armor --output repo_gpg.key --export
Добавления в репозиторий deb-пакетов
Добавим нужные нам пакеты в репозитории. Для начала скачаем deb-пакет (например, yandex-disk) в предварительно созданную в домашнем каталоге папку packages:
mkdir ~/packages
cd ~/packages
wget http://repo.yandex.ru/yandex-disk/yandex-disk_latest_amd64.deb
Затем разместим скачанный пакет в репозитории командой:
sudo reprepro --ask-passphrase -b /srv/repo/localrepo/ -C main includedeb stable ~/packages/yandex-disk_latest_amd64.deb
После ввода фразы-пароля он будет размещен в репозитории
Для проверки, что наш репозиторий работает, пока, обратимся к нему локально. Добавим наш репозиторий в файл /etc/apt/sources.list, добавим открытый ключ репозитория в хранилище ключей для apt, обновим локальный кэш и попробуем установить пакет.
- Добавим наш репозиторий в файл /etc/apt/sources.list:
echo "deb file:///srv/repo/localrepo localrepo main" | sudo tee --append /etc/apt/sources.list
Проверим, что ссылка на локальный репозиторий добавилась в конец файла /etc/apt/sources.list
- Добавим открытый ключ репозитория в хранилище ключей для apt:
sudo apt-key add /srv/repo/localrepo/repo_gpg.key
- Обновим локальный кэш пакетов
sudo apt update
- Произведем установку пакета yandex-disk_latest_amd64.deb
sudo apt install yandex-disk
Мы видим, что пакет устанавливается из локального репозитория.
---------------------------------------------------------------------------------------------
Распространение пакетов с помощью Apache2
Если нам нужно, чтобы производить установку с нашего локального репозитория могли и другие компьютеры в сети, то нужно развернуть web-сервер Apache2. Установить Apache2 со всеми зависимостями нужно из репозитория main (тот что сертифицируется) а остальные репозитории закоментировать, чтобы из них не были установлены пакеты других версий. Это можент вызвать неработоспособность Apache2.
- После чего обновляем индекс пакетов командой:
sudo apt update
- и производим установку apache2:
sudo apt install apache2
- После установки apache2 нужно в его конфигурационном файле отключить режим AstraMode:
sudo nano /etc/apache2/apache2.conf
- Затем необходимо перезапустить web-сервер и обязательно убедиться, что служба стартовала без ошибок:
sudo systemctl restart apache2.service
sudo systemctl status apache2.service
- Если репозиторий расположен вне каталога /var/www/html, как у нас, а, например, в каталоге /srv/repo, то нужно cоздать символьную ссылку на репозиторий:
sudo ln -s /srv/repo/localrepo /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
Require all granted
</Directory>
sudo nano /etc/apache2/sites-enabled/000-default.conf
- Затем необходимо перезапустить web-сервер и обязательно убедиться, что служба стартовала без ошибок:
sudo systemctl restart apache2
sudo systemctl status apache2
Настройка клиентов репозитория
Дальнейшие действия нужно производить на хостах, с которых Вы хотите удаленно подключаться с репозиторию и устанавливать пакеты. Нужно сказать, что локальный (теперь уже сетевой) репозиторий мы устанавливали на компьютер с именем host1 и IP: 10.0.2.15. Дальнейшие настройки будем производить на хосте repo IP: 10.0.2.9.
- Сначала нужно добавить открытый ключ (repo_gpg.key) репозитория в хранилище ключей для apt на компьютере repo IP: 10.0.2.9 как мы это делали на компьютере host1 когда разворачивали локальный репозиторий. Ключ лежит на компьютере host1 в папке /srv/repo/localrepo/.
- Перенесем ключ repo_gpg.key с компьютера host1 на компьютер repo в домашний каталог любым доступным Вам способом, например командой:
scp admin1@10.0.2.15:/srv/repo/localrepo/repo_gpg.key ~
- Теперь нужно добавить открытый ключ (repo_gpg.key) репозитория в хранилище ключей для apt на компьютере repo:
sudo apt-key add ~/repo_gpg.key
- Добавим на компьютере repo в файл /etc/apt/sources.list последнюю строчку - deb http://10.0.2.15/repo/ localrepo main. Таким образом мы добавили ссылку на сетевой репозиторий компьютера host1.
- Далее обновим индекс пакетов, командой:
sudo apt update
- Теперь мы можем установить пакет из сетевого репозитория командой:
sudo apt install yandex-disk
Пакет успешно установлен из сетевого репозитория.