Подробный гайд по установке и настройке localrepo в ALT Linux - Часть 2
8. Установка пакетов из локального репозитория
sudo apt-get install myapp
Если нужно убедиться, что пакет берётся именно из локального репо:
apt-cache policy myapp
Вывод покажет приоритет и источник:
myapp:
Установлен: (нет)
Кандидат: 1.2.3-alt1
Таблица версий:
*** 1.2.3-alt1 500
500 file:/srv/localrepo main
100 /var/lib/rpm
9. Управление приоритетами (pinning)
Если один и тот же пакет есть в локальном и в официальном репозитории, задайте приоритет.
Создайте файл:
sudo nano /etc/apt/preferences.d/localrepo
Содержимое:
Package: *
Pin: release o=my-custom-repo
Pin-Priority: 900
Или для конкретного пакета:
Package: myapp
Pin: release o=my-custom-repo
Pin-Priority: 1001
Приоритет > 1000 позволяет «понизить» версию (установить более старую из локального репо).
10. Раздача репозитория по сети (опционально)
10.1 Через HTTP (nginx / apache / python)
Быстрый вариант для тестирования:
cd /srv
python3 -m http.server 8080
На клиентах в sources.list:
rpm http://192.168.1.10:8080/localrepo main
Для продакшена — nginx:
server {
listen 80;
server_name repo.internal.local;
location / {
root /srv;
autoindex on; # для отладки
}
}
sudo systemctl enable --now nginx
10.2 Права доступа
Убедитесь, что веб-сервер может читать репозиторий:
sudo chmod -R a+rX /srv/localrepo
11. Подпись пакетов и репозитория (GPG)
11.1 Подпись RPM
ALT использует rpm с GPG-подписью.
Подпишите пакет:
rpmsign --addsign --key-id "YOUR_KEY_ID" myapp-1.2.3-alt1.x86_64.rpm
11.2 Подпись репозитория
После localrepo update подпишите release:
cd /srv/localrepo/pkg/x86_64/base
gpg --default-key "YOUR_KEY_ID" \
--batch --yes \
-abs -o release.sig release
На клиентах импортируйте ключ:
sudo apt-key add /path/to/repo-key.asc
12. Автоматизация (скрипт-пример)
/usr/local/bin/update-localrepo.sh:
#!/bin/bash
set -euo pipefail
REPO_DIR="/srv/localrepo"
INCOMING="/srv/incoming"
echo "==> Копирование пакетов из $INCOMING в $REPO_DIR ..."
find "$INCOMING" -name '*.rpm' -print0 | \
xargs -0 -r localrepo add "$REPO_DIR"
echo "==> Очистка $INCOMING ..."
find "$INCOMING" -name '*.rpm' -delete
echo "==> Пересоздание метаданных ..."
localrepo update "$REPO_DIR"
echo "==> Готово. Не забудьте выполнить 'apt-get update' на клиентах."
sudo chmod +x /usr/local/bin/update-localrepo.sh
Запуск по расписанию (cron):
sudo crontab -e
# Каждый день в 02:00
0 2 * * * /usr/local/bin/update-localrepo.sh >> /var/log/localrepo-update.log 2>&1
13. Диагностика и устранение неполадок
| Проблема | Решение |
|---|---|
apt-get update не видит репозиторий |
Проверьте синтаксис в sources.list.d/: путь должен начинаться с file: или copy:, без лишних слешей |
genbasedir выдаёт ошибку |
Убедитесь, что структура каталогов (pkg/<arch>/RPMS, pkg/<arch>/base) существует. Пересоздайте: localrepo create |
Пакет не находится через apt-cache |
Перезапустите sudo apt-get update; проверьте, что .rpm лежит в RPMS/, а не в base/ |
| Конфликт версий | Настройте /etc/apt/preferences.d/ (раздел 9) |
Permission denied при localrepo update |
Запускайте через sudo; проверьте владельца: chown -R root:root /srv/localrepo |
| Репозиторий не читается по HTTP | Проверьте SELinux/AppArmor-контексты и chmod a+rX |
Полезные команды диагностики:
# Проверить, какие источники подключены
cat /etc/apt/sources.list /etc/apt/sources.list.d/*.list
# Подробный вывод при обновлении
apt-get -o Debug::pkgAcquire=1 update
# Посмотреть содержимое сгенерированного индекса
zcat /srv/localrepo/pkg/x86_64/base/pkglist.cz 2>/dev/null || \
cat /srv/localrepo/pkg/x86_64/base/pkglist
# Проверить целостность RPM
rpm -K myapp-1.2.3-alt1.x86_64.rpm
14. Полезные команды localrepo (шпаргалка)
localrepo create <путь> # создать репозиторий
localrepo add <путь> <файлы.rpm> # добавить пакеты
localrepo remove <путь> <имя> # удалить пакет по имени
localrepo update <путь> # пересоздать метаданные
localrepo list <путь> # показать список пакетов в репо
localrepo info <путь> # информация о репозитории
localrepo --help # справка
Набор подкоманд может немного отличаться в разных версиях пакета. Уточняйте: localrepo --help и man localrepo.
15. Краткий чек-лист
- [ ] Пакет
localrepoустановлен (apt-get install localrepo) - [ ] Репозиторий создан:
localrepo create /srv/localrepo - [ ] RPM-файлы помещены в
pkg/<arch>/RPMS/ - [ ] Метаданные сгенерированы:
localrepo update /srv/localrepo - [ ] Запись в
/etc/apt/sources.list.d/добавлена - [ ]
sudo apt-get updateпроходит без ошибок - [ ]
apt-cache policy <пакет>показывает ваш репо как источник - [ ] При необходимости настроен GPG и/или HTTP-доступ
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.