Особенности pdebuild и dpkg-checkbuilddeps: Unmet build dependencies

Если ответить кратко, то процитирую lists.debian.org:

>> >> dpkg-checkbuilddeps: Unmet build dependencies: python-all cdbs docbook-xsl
>> >> W: Unmet build-dependency in source
>> >> ...
>> >>
>> >> How can I make pbuilder fetch these required dependencies?
>
> pbuilder does install the necessary dependencies. But it does so
> *inside* the chroot. But before it runs the "clean" target in the
> debian rules file. So you need the build-dependencies at your system
> too. But there pdebuild won't install them. You have to change the
> pdebuild action orders:
>
> [snip]
>> dpkg-checkbuilddeps: Unmet build dependencies: python-all cdbs docbook-xsl
>> dpkg-buildpackage: warning: Build dependencies/conflicts unsatisfied;
>> aborting.
>> ...
>
> Read about the --use-pdebuild-internal switch:
> http://www.netfort.gr.jp/~dancer/software/pbuilder-doc/pbuilder-doc.html#pdebuild

Если ответить развернуто. Без использования --use-pdebuild-internal выполнение pdebuild приводит к выполнению следующего набора команд

    if ! dpkg-checkbuilddeps -B ; then
        log "W: Unmet build-dependency in source"
    fi
    echo "dpkg-buildpackage -S -us -uc -r${BUILDSOURCEROOTCMD} $DEBBUILDOPTS" | \
        perl -pe 's/(^|\s)-[AbBF](\s|$)/$1$2/g' | \
        /bin/bash
    ${PBUILDERROOTCMD} \
        ${PDEBUILD_PBUILDER} \
        --build \
        ${EXTRA_CONFIGFILE[@]/#/--configfile } \
        --buildresult "${BUILDRESULT}" \
        --debbuildopts "" \
        --debbuildopts "${DEBBUILDOPTS}" \
        "$@" \
        ../"${PKG_SOURCENAME}_${PKG_VERSION}".dsc

Таким образом pdebuild изначально проверяет присутствие зависимостей пакета на основной системе через вызов dpkg-checkbuilddeps -B. В случае не успешного завершения выполнение ограничивается исключительно предупреждением и продолжением выполнения сценария.

После этого предпринимается отчаянная попытка создания исходного (source) набора файлов вызовом команды dpkg-buildpackage -S -us -uc. Только в случае успешного завершения этого этапа будет выполнена команда pbuilder --build ... *.dsc, которая соберет в чистом chroot окружении пакет.

Подвох кроется в выполнении команды dpkg-buildpackage -S -us -uc, которая на одном из своих этапов выполняет команду в основной системе

fakeroot  debian/rules  clean

Для успешного завершения которой требуется установка всех Build-Dep на основной системе.

Необходимое лекарство кроется в $HOME/.pbuilderrc
USE_PDEBUILD_INTERNAL=yes
или указании ключа --use-pdebuild-internal при каждом запуске pdebuild.

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

Ваш e-mail не будет опубликован.