Публичные репозитории Uncom OS работают на аналогичной конфигурации, указанной ниже, что дает уверенность в работоспособности подхода для внутренних корпоративных нужд.
1. Установить пакет aptly
$ sudo apt install aptly
2. Создать локальный репозиторий
$ aptly repo create repo_name
3. Добавить .deb файлы в репозиторий
$ aptly repo add repo_name /path/to/debs/folder
4. Создать snapshot состояния репозитория
$ aptly snapshot create repo_name_snapshot from repo repo_name
5. Опубликовать репозиторий (требуется создать собственный GPG ключ)
$ aptly publish snapshot --skip-signing -distribution=local_repo -component=main -architectures=amd64,i386 repo_name_snapshot
6. Запустить простой локальный сервер для паблишинга репозитория
$ aptly serve
7. Команда выведет адрес репозитория примерно следующего вида
deb http://repo-domain-name-or-ip:8080/ local_repo main
8. Итоговый репозиторий можно прописать в /etc/apt/sources.list другой или текущей (локальной) машины, так как репозиторий публикуется в простом варианте без подписания GPG ключами, то надо дополнительно прописать выделенное жирным шрифтом
deb [trusted=yes] http://repo-domain-name-or-ip:8080/ local_repo main
9. После этого выполнить обновление данных о репозиториях
$ sudo apt update
Предложенный вариант настройки самый простой, дополнительно можно усовершенствовать окружение через подписания данных репозитория GPG ключом, использовать nginx/apache2 для расширенной настройки сервера, сконфигурировать firewall и т. д. Полная документация по aptly доступна по адресу https://www.aptly.info/doc/overview/
Также через aptly mirror create возможно создание зеркал репозиториев Uncom OS, далее на пользовательских компьютерах надо будет в файле /etc/apt/sources.list заменить список репозиториев с официальных на только что развернутые.
# Репозитории с собранными пакетами Uncom OS:
deb http://repository.uncom.tech/ andromeda-stage main-rebuild
deb http://repository.uncom.tech/ andromeda-rebuild main-rebuild
deb http://repository.uncom.tech/ andromeda-updates-rebuild main-rebuild
deb http://repository.uncom.tech/ andromeda-gnome45-rebuild main-rebuild
deb http://repository.uncom.tech/ andromeda-kernel6.8-rebuild main-rebuild
# Репозитории legacy (которые использовались на ранних стадиях проекта), а также, частичные зеркала репозиториев Ubuntu, и из других источников (например Яндекс Браузер и т.д.)
deb http://repository.uncom.tech/ andromeda-gnome45 main
deb http://repository.uncom.tech/ andromeda main
deb http://repository.uncom.tech/ andromeda-updates main
deb http://repository.uncom.tech/ andromeda-support main
aptly mirror create -architectures=amd64 andromeda http://repository.uncom.tech/ andromeda main
aptly mirror create -architectures=amd64 andromeda-updates http://repository.uncom.tech/ andromeda-updates main
aptly mirror create -architectures=amd64 andromeda-support http://repository.uncom.tech/ andromeda-support main
aptly mirror create -architectures=amd64 andromeda-rebuild http://repository.uncom.tech/ andromeda-rebuild main-rebuild
aptly mirror create -architectures=amd64 andromeda-updates-rebuild http://repository.uncom.tech/ andromeda-updates-rebuild main-rebuild
aptly mirror create -architectures=amd64 andromeda-gnome45-rebuild http://repository.uncom.tech/ andromeda-gnome45-rebuild main-rebuild
aptly mirror create -architectures=amd64 andromeda-kernel6.8-rebuild http://repository.uncom.tech/ andromeda-kernel6.8-rebuild main-rebuild
aptly mirror update andromeda && \
aptly mirror update andromeda-updates && \
aptly mirror update andromeda-support && \
aptly mirror update andromeda-rebuild && \
aptly mirror update andromeda-updates-rebuild && \
aptly mirror update andromeda-gnome45-rebuild && \
aptly mirror update andromeda-kernel6.8-rebuild
VERSION=20251127
aptly snapshot create snapshot-andromeda-$VERSION from mirror andromeda && \
aptly snapshot create snapshot-andromeda-updates-$VERSION from mirror andromeda-updates && \
aptly snapshot create snapshot-andromeda-support-$VERSION from mirror andromeda-support && \
aptly snapshot create snapshot-andromeda-rebuild-$VERSION from mirror andromeda-rebuild && \
aptly snapshot create snapshot-andromeda-updates-rebuild-$VERSION from mirror andromeda-updates-rebuild && \
aptly snapshot create snapshot-andromeda-gnome45-rebuild-$VERSION from mirror andromeda-gnome45-rebuild && \
aptly snapshot create snapshot-andromeda-kernel6.8-rebuild-$VERSION from mirror andromeda-kernel6.8-rebuild
aptly snapshot merge -latest local-$VERSION snapshot-andromeda-$VERSION snapshot-andromeda-updates-$VERSION snapshot-andromeda-support-$VERSION && \
aptly snapshot merge -latest local-rebuild-$VERSION snapshot-andromeda-rebuild-$VERSION snapshot-andromeda-updates-rebuild-$VERSION snapshot-andromeda-gnome45-rebuild-$VERSION snapshot-andromeda-kernel6.8-rebuild-$VERSION
Репозитории будут видны в локальной папке aptly/public и последующей раздаче по сети. Это может быть apache2, nginx или собственный минисервер внутри aptly. Можно использовать решение, которое будет вам удобно.
ВАЖНО: Отдавать репозитории можно HTTP, если использовать их подписание ключом - это будет безопасно, а также не потребует использования HTTPS сертификатов. Так как репозитории публичны, то скрывать содержимое трафика нет смысла, важно защитить его от подмены - это этого достаточно ключа для самого репозитория.
gpg --batch --gen-key <<EOF
Key-Type: RSA
Key-Length: 2048
Subkey-Type: RSA
Subkey-Length: 2048
Name-Real: Local Repo
Name-Email: repository@local.ru
Expire-Date: 0
%no-protection
%commit
%echo Key pair generated for local repository.
EOF
gpg --export repository@local.ru > "local-repository.gpg"
gpg --export-secret-keys --batch --pinentry-mode=loopback --armor repository@local.ru > "local-repository-private.gpg"
aptly publish snapshot -gpg-key="repository@local.ru" -distribution=local -component=main -architectures=amd64,i386 local-$VERSION && \
aptly publish snapshot -gpg-key="repository@local.ru" -distribution=local-rebuild -component=main-rebuild -architectures=amd64,i386 local-rebuild-$VERSION
deb http://repository.local.ru/ aukh-rebuild main-rebuild
deb http://repository.local.ru/ aukh main
Конфигурация для сервера может быть такой:
<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName repository.local.ru
DocumentRoot /home/repo/aptly/public
<Directory /home/repo/aptly/public>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/aptly_error.log
CustomLog ${APACHE_LOG_DIR}/aptly_access.log combined
</VirtualHost>
# Enable access to custom directory
sudo nano /etc/apache2/apache2.conf
# Add after line 174 and save
<Directory /home/repo/aptly/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
В настоящей инструкции мы не затрагиваем настройку домена http://repository.local.ru/ на компьютер с репозиториев. Если потребуется помощь - Вы можете обратиться в телеграмм канал поддержки Uncom OS https://t.me/uncomos