Подробный гайд по установке и настройке localrepo в ALT Linux - Часть 2

Подробный гайд по установке и настройке localrepo в ALT Linux: создание локального репозитория, добавление RPM-пакетов, генерация метаданных и подключение к APT.

2026.09.28                  


Подробный гайд по установке и настройке localrepo в ALT Linux - Часть 2Подробный гайд по установке и настройке 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-доступ

Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта