Рецепты сборки на панели запуска: как правильно указать зависимости сборки для пакетов в одном и том же PPA?

Я пытаюсь собрать Code::Blocks IDE в Ubuntu 16.04, используя этот рецепт:

https://code.launchpad.net/~damien-moore/+recipe/codeblocks-16.01-release

Для этого нужен libwxgtk2.8-dev, которого нет в репозиториях 16.04, но я добавил сюда пакет:

https://launchpad.net/~damien-moore/+archive/ubuntu/codeblocks-stable/+packages

Но когда я строю, я получаю ошибку неудовлетворенной зависимости:

https://code.launchpad.net/~damien-moore/+archive/ubuntu/codeblocks-stable/+recipebuild/1126247

Вы можете увидеть контрольный файл здесь:

http://bazaar.launchpad.net/~damien-moore/+junk/codeblocks-16.01-release/view/head:/debian/control

Есть идеи, что я делаю не так?

1 ответ

Решение

Сообщения об ошибках, которые вы получаете от apt в подобной ситуации, немного вводят в заблуждение: фактически это говорит о том, что libwxgtk2.8-dev пакет присутствует, но не удаляется. Вы можете получить лучшую диагностику, настроив среду, в которой у apt есть свой PPA. sources.list (chdist инструмент может быть полезен здесь, чтобы не мешать нормальной обстановке или не беспокоиться о полной привязке или аналогичной информации) и интерактивном бурении:

$ chdist create codeblocks
Now edit /home/cjwatson/.chdist/codeblocks/etc/apt/sources.list
Run chdist apt-get codeblocks update
And enjoy.
$ cat >.chdist/codeblocks/etc/apt/sources.list <<EOF
deb [trusted=yes] http://ppa.launchpad.net/damien-moore/codeblocks-stable/ubuntu xenial main
deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse
EOF
$ chdist apt-get codeblocks update
# ignore GPG errors in the output, which don't matter for the purposes of
# inspection
$ chdist apt-get codeblocks install libwxgtk2.8-dev
Reading package lists... Done
Building dependency tree... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies.
 libwxgtk2.8-dev : Depends: libwxgtk2.8-0 (= 2.8.12.1+dfsg2-0~48~ubuntu16.04.1) but it is not going to be installed
                   Depends: libwxbase2.8-dev (= 2.8.12.1+dfsg2-0~48~ubuntu16.04.1) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Затем вы добавляете имена пакетов в командную строку, пока не получите более конкретное сообщение, чем "не будет установлено":

$ chdist apt-get codeblocks install libwxgtk2.8-dev libwxgtk2.8-0 libwxbase2.8-dev libwxbase2.8-0
Reading package lists... Done
Building dependency tree... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies.
 libwxbase2.8-0 : Depends: libwxbase2.8-0 (>= 2.8.12.1+dfsg2) but 2.8.12.1+dfsg2-0~48~ubuntu16.04.1 is to be installed
 libwxgtk2.8-0 : Depends: libwxbase2.8-0 (>= 2.8.12.1+dfsg2) but 2.8.12.1+dfsg2-0~48~ubuntu16.04.1 is to be installed
                 Depends: libwxgtk2.8-0 (>= 2.8.12.1+dfsg2) but 2.8.12.1+dfsg2-0~48~ubuntu16.04.1 is to be installed
E: Unable to correct problems, you have held broken packages.
$ dpkg --compare-versions 2.8.12.1+dfsg2-0~48~ubuntu16.04.1 gt 2.8.12.1+dfsg2 && echo yes || echo no
no

Таким образом, переводя на английский, пакеты wx в вашем PPA имеют внутренние зависимости как минимум 2.8.12.1+dfsg2, но версия, которую вы использовали для вашего прямого порта к xenial в вашем PPA, 2.8.12.1+dfsg2-0~48~ubuntu16.04.1 что (немного) на самом деле немного меньше, чем требуемая версия. Вам придется исправить номер версии или (более навязчиво) настроить зависимости, чтобы они были более либеральными.

Почему бы просто не скопировать исходный код и собранные бинарные пакеты из хитрости? Несмотря на то, что они были удалены из xenial, они, по-видимому, все еще можно установить, если просто скопировать их вперед, и это, безусловно, вариант наименьших усилий. Возьмите lp: ubuntu-archive-tools с помощью bzr и запустить:

$ ./copy-package --from ubuntu --from-suite wily --to ppa:damien-moore/ubuntu/codeblocks-stable --to-suite xenial -b wxwidgets2.8

Затем немного подождите, чтобы это скопировать и опубликовать, и все должно быть хорошо. Если это не удастся, я бы порекомендовал основывать ваш исходный пакет wxwidgets2.8 на одном из хитрых (2.8.12.1+dfsg2-2ubuntu2) и убедитесь, что номер версии, которую вы используете, сравнивается больше или равен этому.

Напомним, что ваша сборка должна была фактически регистрироваться Launchpad как сбой сборки, а не как ожидание зависимости, потому что мы не можем произвести однозначное ожидание зависимости в случае наличия зависимости сборки, которая может быть удалена. Я подал это как ошибка 1575965.

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