LinuxFAQ.ru

Как создать local repository deb в Linux — пошаговое руководство

Создание локального deb-репозитория — удобный способ хранить и распространять пакеты внутри своей сети. Эта статья поможет системным администраторам и пользователям Linux понять, как правильно создать такой репозиторий с помощью dpkg-scanpackages и исключить типичные ошибки при работе с ним.

Почему появляется проблема с локальным deb-репозиторием

  • Отсутствие или некорректная индексация пакетов с помощью dpkg-scanpackages.
  • Неправильная структура каталогов внутри локального репозитория.
  • Отсутствие или неправильное оформление файла Release, что препятствует apt валидации репозитория.
  • Ошибки или опечатки в файле sources.list при добавлении локального репозитория.

Пошаговое решение

Шаг 1. Создание директории для локального репозитория

mkdir -p ~/localrepo/debs

Создаем структуру каталогов для хранения *.deb пакетов. В моем примере — домашняя папка пользователя в каталоге localrepo/debs. Можно выбрать любой другой путь, главное — соблюсти структуру.

Шаг 2. Копирование пакетов в рабочую директорию

cp /путь/к/пакетам/*.deb ~/localrepo/debs/

Копируем все необходимые *.deb файлы в каталог с пакетами. Убедитесь, что пакетами являются валидные deb-файлы, поскольку dpkg-scanpackages их будет обрабатывать.

Шаг 3. Генерация файла Packages с помощью dpkg-scanpackages

cd ~/localrepo
dpkg-scanpackages debs /dev/null | gzip -9c > debs/Packages.gz

Эта команда просматривает каталог debs и создает индекс пакетов. Файл Packages.gz нужен для пакетного менеджера apt. Опция /dev/null указывает, что мы не используем дополнительный файл overrides.

Шаг 4. Создание файла Release (опционально, но рекомендуется)

cd ~/localrepo
echo "Origin: LocalRepo" > Release
echo "Label: Local Repository" >> Release
echo "Suite: stable" >> Release
echo "Codename: local" >> Release
echo "Architectures: amd64" >> Release
echo "Components: main" >> Release
echo "Description: Local deb repository" >> Release

Файл Release описывает репозиторий и полезен для гарантий безопасности и аутентичности. Точный набор полей может зависеть от дистрибутива и настроек.

Шаг 5. Добавление локального репозитория в sources.list

echo "deb [trusted=yes] file:///home/username/localrepo debs/" | sudo tee /etc/apt/sources.list.d/localrepo.list

Здесь trusted=yes отключает проверку подписи, что удобно для локальных репозиториев. Замените /home/username/localrepo на актуальный путь к директории с пакетами.

Шаг 6. Обновление списка пакетов и проверка

sudo apt update

Команда обновит список пакетов, включая локальный репозиторий. Если ошибок не будет, значит добавление прошло успешно.

Альтернативные методы

Если dpkg-scanpackages не устраивает или нужно более продвинутое решение, рассмотрите:

  • Использование утилиты reprepro — мощный менеджер локальных репозиториев с возможностью управления ключами и дистрибутивами.
  • Создание локального HTTP-сервера (например, с помощью nginx или Apache) для репозитория. Тогда использовать в sources.list URL вместо file://.

Проверка результата

После sudo apt update выполните:

apt-cache policy

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

apt-cache search имя-пакета

Если пакеты из локального репозитория отображаются и устанавливаются командой sudo apt install имя-пакета без ошибок — значит всё настроено корректно.

Как избежать в будущем

  • Соблюдайте структуру каталогов: каталог с *.deb и внутри него индекс Packages.gz
  • Регулярно обновляйте индексы после добавления новых пакетов.
  • Для крупных репозиториев используйте автоматические инструменты, например, reprepro.
  • Проверяйте пути в sources.list на опечатки.

FAQ

Можно ли использовать dpkg-scanpackages для разных архитектур?
Да, но тогда необходимо создавать отдельные каталоги с пакетами для каждой архитектуры и индексировать их отдельно.

Что делать, если apt выдает ошибку о неподписанном репозитории?
Для локальных репозиториев можете добавить параметр [trusted=yes] в файл sources.list, чтобы отключить проверку подписи.

Как узнать путь до моего локального репозитория для sources.list?
Выполните realpath ~/localrepo, чтобы получить абсолютный путь.

Надеемся, этот материал помог вам создать и настроить локальный deb-репозиторий. Смотрите также: Как настроить ключи GPG для безопасных репозиториев в Debian и Ubuntu.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Свежие материалы