Как внедрить определенные пользователем -поля в управляющие файлы бинарных пакетов Debian

Используйте awk с флагом -F. Вам придется использовать эхо и канал в awk вот так:

for line in `cat /etc/group`
do
   col1=$(echo $line | awk -F':' '{print $1}')
   col2=$(echo $line | awk -F':' '{print $2}')

   # Then you can use col1, col2, etc...

   echo "column 1 = $col1"
   echo "column 2 =  $col2"
done
1
25.05.2021, 11:21
2 ответа

Можно изменить управляющие файлы бинарных пакетов из хука --hook-buildinfo, который вызывается сразу после вызова debian/rules build, используя dpkg-debдля их распаковки/переупаковки.

#!/bin/bash
#
# deb_insert_meta.sh
#
# Inserts CI metadata into all deb files in parent directory
# Intended for use with:
# `dpkg-buildpackage --hook-buildinfo='fakeroot deb_insert_meta.sh'`
# which is the first hook after the binary deb files are generated
# but before checksums for.changes are calculated
# Should be called with 'fakeroot' so that the repacked binaries
# have their content/control ownership/permissions preserved.

pushd.. > /dev/null || exit 1

    for deb_file in *.deb; do
        [ -e "$deb_file" ] || continue

        DEB_TMPDIR=$(mktemp -d)
        if [ -z "${DEB_TMPDIR}" ]; then
            echo "Failed to create a temporary work directory"
            exit 1
        fi

        dpkg-deb -R "${deb_file}" "${DEB_TMPDIR}"

        if [ -e "${DEB_TMPDIR}/DEBIAN/control" ]; then
            if [ -n "${CI_PROJECT_PATH}" ]; then
                echo "Git-Repo: ${CI_PROJECT_PATH}" >> "${DEB_TMPDIR}/DEBIAN/control"
            fi
            if [ -n "${CI_COMMIT_SHA}" ]; then
                echo "Git-Hash: ${CI_COMMIT_SHA}" >> "${DEB_TMPDIR}/DEBIAN/control"
            fi
            if [ -n "${CI_COMMIT_BRANCH}" ]; then
                echo "Git-Branch: ${CI_COMMIT_BRANCH}" >> "${DEB_TMPDIR}/DEBIAN/control"
            fi

            dpkg-deb -b "${DEB_TMPDIR}" "${deb_file}"

        fi

        rm -rf "${DEB_TMPDIR}"

    done

popd > /dev/null || exit 1

exit 0
0
28.07.2021, 11:29

Похоже, основная проблема заключается не во всех случаях debian/control. Исправление этого — всегда начинать с исходных пакетов, поскольку они должны предоставлять файл debian/control. Любой другой подход будет включать в себя запуск части сборки напрямую, поскольку dpkg-buildpackageтребует debian/control; например, вы можете запустить debian/rules build, а затем исправить debian/control(, который должен существовать на данный момент ), перед запуском debian/rules binary(, создающим бинарные пакеты ).

Чтобы контролировать, что входит в файл controlдвоичных пакетов, вы также можете добавить параметры для dpkg-gencontrol, , например. с помощьюdh_gencontrol:

override_dh_gencontrol:
        dh_gencontrol -- -Dfoo=bar

добавит запись Foo: barв файлы бинарных пакетов control. Это, вероятно, более полезно в вашем сценарии.

Для этого вам нужно изменить debian/rules; вы можете использовать dh_gencontrol, как указано выше, или dpkg-gencontrolнапрямую, если пакет не использует dh.

0
28.07.2021, 11:29

Теги

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