Как добавить новую версию существующего пакета apt

Вопрос или проблема

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

Я создал свой собственный репозиторий с .deb пакетом, используя reprepro. В /pool он ссылается на мой пакет. Я создал репозиторий с версией 0.1. Теперь я изменил скрипты и хочу обновить его до версии 0.2. Я добавил новый .deb файл в соответствующий /pool-запись. Затем я пытаюсь обновить файлы Package и Package.gz с помощью dpkg-scanpackages. Он добавляет новую версию моего пакета в файлы. Теперь, если я хочу установить более низкую версию пакета на другом ПК с помощью apt install Package=0.1, я получаю ошибку:

Версия 0.1 для пакета не найдена

Что я сделал не так? Как я могу добавить версионирование в свой репозиторий apt?

Спасибо за ответы

редактировать после комментария @Nmath:
хорошо, итак, вот мы и идем. Надеюсь, на этот раз это более конкретно:
Я создал рабочий apt-репозиторий с помощью reprepro. Я могу скачать пакет с помощью apt после настройки источника. Теперь я хочу опубликовать новую версию. Как я могу добавить новую версию в существующий репозиторий? В основном, я хочу добиться того, чтобы можно было использовать команду “apt install hello=0.1”, а также “apt install hello=0.2”, чтобы обе версии 0.1 и 0.2 были доступны.

Более конкретный пример:
Я создал программу Hello World. Я публикую ее через apt, так что вы можете использовать “apt install hello_marske”. Вы теперь можете использовать “hello_marske” как команду для вывода “Hello World”. Это теперь версия 0.1.
На следующем шаге я изменил скрипт Hello World, чтобы он принимал имя в качестве аргумента и выводил “Hello Marske” после использования “hello_marske marske”. Это теперь версия 0.2. Теперь я хочу, чтобы обе версии были доступны в качестве apt-репозитория. Таким образом, у пользователя есть возможность использовать “apt install hello_marske=0.1”, а также “apt install hello_marske=0.2”, в зависимости от того, какую функциональность хочет пользователь.

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

Возможно, следует добавить опцию -m для dpkg-scanpackages.

Как указано в man-страницах для dpkg-scanpackages:

-m, –multiversion
Включить все найденные пакеты в вывод.

Ответ или решение

Чтобы добавить новую версию существующего пакета в ваш собственный репозиторий APT, необходимо выполнить несколько шагов. Давайте разберёмся с процессом подробно.

Шаг 1: Подготовка нового пакета

Если вы уже создали и установили первую версию вашего пакета (например, hello_marske_0.1.deb), вам нужно создать новую версию с соответствующими изменениями. Например, после внесения изменений в код или скрипт, соберите новый .deb файл с версией 0.2, для чего используйте инструменты сборки, такие как dpkg-deb.

Шаг 2: Загрузка нового .deb файла в репозиторий

После того как вы создали hello_marske_0.2.deb, загрузите его в каталог, соответствующий вашему репозиторию APT. Обычно все пакеты хранятся в подкаталоге /pool/. Вам нужно поместить новый .deb файл в соответствующий подкаталог /pool/, например:

/your-repo/pool/main/h/hello_marske/hello_marske_0.2.deb

Шаг 3: Использование reprepro

reprepro – это инструмент, который позволяет управлять APT репозиториями.

  1. Поместите новый .deb файл в нужный каталог.
  2. Выполните команду добавления нового пакета:

    reprepro -b /path/to/your/repo/ includedeb <your-distro> /path/to/your/repo/pool/main/h/hello_marske/hello_marske_0.2.deb

    Замените <your-distro> на вашу дистрибутивную метку, например, stable.

Шаг 4: Обновление файлов индекса

Чтобы ваш репозиторий корректно отображал обе версии пакета, включите опцию -m в команде dpkg-scanpackages. Эта опция позволит включить все версии пакетов в выходные файлы.

  1. Воспользуйтесь командой:

    dpkg-scanpackages /path/to/your/repo/pool/main/h/hello_marske /dev/null | gzip -9c > /path/to/your/repo/dists/<your-distro>/main/binary-amd64/Packages.gz

    Убедитесь, что используете -m, если у вас есть несколько версий пакета.

Шаг 5: Проверьте работу репозитория

Теперь, когда ваши пакеты обновлены и индексы пересозданы, вы можете попробовать установить конкретную версию пакета на другом компьютере. Убедитесь, что настроен файл /etc/apt/sources.list для указания на ваш репозиторий:

deb [trusted=yes] file:///path/to/your/repo <your-distro> main

Теперь, после выполнения команды обновления APT:

sudo apt update

Вы должны иметь возможность установить конкретные версии вашего пакета следующим образом:

sudo apt install hello_marske=0.1

или

sudo apt install hello_marske=0.2

Шаг 6: Автоматизация обновлений

Для автоматизации проверки и загрузки новых версий пакета, вы можете использовать cron-скрипты или инструменты управления конфигурацией, такие как Ansible или Puppet, чтобы настроить периодическую проверку и установку обновлений.

Заключение

Теперь вы имеете полное представление о том, как добавить новую версию пакета в ваш репозиторий APT и обеспечить доступность обеих версий для установки. Убедитесь, что в процессе соблюдаются все форматы и стандарты, чтобы избежать ошибок. Если у вас возникнут дополнительные вопросы, не стесняйтесь задать их.

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

Капча загружается...