Сборка пакета deb для Ubuntu 18.04 и 20.04: проблемы с зависимостями

У меня есть двоичное приложение C ++, и я упаковываю его в пакет «deb» на моем Ubuntu 20.04. Этот пакет "deb" имеет несколько зависимостей, которые я определил:

$ dpkg -I my-package-1.0.0.deb 
new Debian package, version 2.0.
...
Package: my-package
Version: 1.0.0
Architecture: amd64
Depends: libfreetype6,libgcc-s1,libgl1,libglew2.1,libglvnd0,libglx0,...
...

Этот пакет работает хорошо, за исключением случаев, когда я пытаюсь установить его в Ubuntu 18.04:

$ sudo dpkg -i my-package-1.0.0.deb
Selecting previously unselected package my-package.
(Reading database ... 198305 files and directories currently installed.)
Preparing to unpack my-package-1.0.0.deb ...
Unpacking my-package (1.0.0) ...
dpkg: dependency problems prevent configuration of my-package:
 my-package depends on libgcc-s1; however:
  Package libgcc-s1 is not installed.
 my-package depends on libglew2.1; however:
  Package libglew2.1 is not installed.

Эти ошибочные пакеты (libgcc-s1, libglew2.1) не работают. существуют в Ubuntu 18.04 или существуют, но с другой версией. Поэтому у меня общий вопрос: можно ли создать пакет «deb», совместимый с несколькими версиями Ubuntu? Как ? Или единственное решение - создать пакет для каждой версии Ubuntu (и для каждого другого дистрибутива Linux)? Какая стратегия используется чаще всего для создания пакета "deb" при наличии зависимостей?

0
задан 24 August 2020 в 10:38

2 ответа

можно ли создать Пакет "deb" совместим с несколькими версиями Ubuntu? Как ? Или единственное решение - создать пакет для каждой версии Ubuntu (и для каждого другого дистрибутива Linux)? Какая стратегия используется чаще всего для создания пакета «deb» при наличии зависимостей?

Единственное решение - создать пакет для каждой версии Ubuntu (и для каждого другого дистрибутива Linux - даже если в этом случае вы, возможно, не будете создавать .deb , но .rpm или любой другой формат, используемый этими дистрибутивами)

Это действительно серьезный недостаток традиционной системы пакетов APT (и конкурирующих систем на Redhat и Arch). Ваше программное обеспечение должно быть скомпилировано для использования версий зависимостей, которые присутствуют в целевой системе.

Это одна из основных причин, по которой разрабатываются новые системы упаковки, такие как Snap, Flatpak и Appimage. Эти системы позволяют упаковать программное обеспечение Linux способом, который значительно меньше зависит от дистрибутива и версии дистрибутива.

0
ответ дан 4 January 2021 в 08:24

Откройте терминал и введите: В Ubuntu 18.04 скопируйте файл my-package-1.0.0.deb на свой рабочий стол. Откройте терминал и введите:

sudo apt update
cd ~/Desktop/
wget http://mirrors.kernel.org/ubuntu/pool/main/g/gcc-10/gcc-10-base_10-20200411-0ubuntu1_amd64.deb http://mirrors.kernel.org/ubuntu/pool/main/g/gcc-10/libgcc-s1_10-20200411-0ubuntu1_amd64.deb http://mirrors.kernel.org/ubuntu/pool/universe/g/glew/libglew2.1_2.1.0-4_amd64.deb
sudo apt install ./gcc-10-base_10-20200411-0ubuntu1_amd64.deb ./libgcc-s1_10-20200411-0ubuntu1_amd64.deb ./libglew2.1_2.1.0-4_amd64.deb
sudo apt install ./my-package-1.0.0.deb

Вышеупомянутые команды также будут работать во всех поддерживаемых в настоящее время версиях Ubuntu. Это удачная ситуация. В общем, не ожидайте, что один набор волшебных команд будет работать на всех поддерживаемых в настоящее время версиях Ubuntu, поскольку зависимости пакетов и требования к версиям зависимостей пакетов могут быть разными для одного и того же пакета в разных выпусках Ubuntu.

В Ubuntu 20.04 пакеты зависимостей уже доступен в репозиториях Ubuntu по умолчанию, так что действия еще проще. Откройте терминал, измените каталоги с помощью cd на каталог, содержащий my-package-1.0.0.deb, и введите:

sudo apt install ./my-package-1.0.0.deb
0
ответ дан 4 January 2021 в 08:24

Другие вопросы по тегам:

Похожие вопросы: