Вопрос или проблема
Я столкнулся с проблемой, пытаясь добавить новую версию пакета в свой собственный репозиторий 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 репозиториями.
- Поместите новый
.deb
файл в нужный каталог. -
Выполните команду добавления нового пакета:
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
. Эта опция позволит включить все версии пакетов в выходные файлы.
-
Воспользуйтесь командой:
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 и обеспечить доступность обеих версий для установки. Убедитесь, что в процессе соблюдаются все форматы и стандарты, чтобы избежать ошибок. Если у вас возникнут дополнительные вопросы, не стесняйтесь задать их.