Как создать файл debian / control, который отличается от версии Ubuntu?

1

У меня есть большой исходный код, который мы поддерживаем, создавая множество разных пакетов Ubuntu. Все эти пакеты должны основываться на выпусках Ubuntu LTS с 08.04 вперед. (Да, я знаю, что они старые и неподдерживаемые. Это для систем с пространственной привязкой, поэтому обновление до новой версии невозможно, но мне все равно нужно поддерживать программное обеспечение на них, обновляя для новых выпусков.) Я пытаюсь чтобы получить всю базу кода и работать на Trusty. Я с большим трудом обнаружил, что упаковка кода Python полностью изменилась. Начиная с Trusty, поддержка python и python-central исчезли, а dh_python2 - это то, что вам нужно использовать .

Моя проблема заключается в том, как создать рабочий файл debian / control. Build-Depends: для версий до 12.04 включительно должно быть python-central , тогда как для 14.04 и вперед он должен включать dh_python2 . Я не нашел никаких условий для условного текста в файле управления. Я пробовал найти способ обойти это, но пока ничего не работает.

Как это можно сделать?

EDIT:

У меня развернута обширная система buildbot, которая компилируется по многочисленным версиям Ubuntu, версиям CentOS и некоторым версиям OSX. Разделение на разветвленные пакеты для разных версий нарушит это. Поэтому я ищу решение, которое работает на одном исходном дереве. Я пытаюсь найти крючок на ранней стадии, что я мог бы использовать в dpkg-buildpackage, чтобы настроить вещи для каждой версии, но пока не нашел решения.

    
задан Jim Wright 22.04.2016 в 23:06
источник

2 ответа

2

Самый простой способ - использовать альтернативные пакеты в поле Build-Depends , f.e. %код%. У этого есть несколько причуд, первая зависимость, которая удовлетворяет решателю зависимости, будет выбрана. Вы также можете использовать версию Build-Depends с версией (например, если вы знаете, что некоторые более ранние версии пакетов были неполными), то есть Build-Depends: dh-python | python-central, [...] .

Более сложный способ, если вам нужно зависеть от пакета, который не существует в более ранней (или более поздней версии), заключается в том, чтобы добавить Build-Depends: dh-python (>= <correct_version) | python-central в качестве зависимости, а не только base-files (<< <version>) | real-package и настроить real-package , чтобы соответствовать версии в следующей версии. Если вам нужен пакет в старой системе, но не на новый, вы бы использовали <version> и использовали base-file (>= <version>) | real-package из версии Ubuntu, где вам не нужен <version> .

Например, для backporting real-package для Ubuntu 12.04 я изменил apache2 на libnghttp2-dev .

Я добавлю base-files (<< 7.2~) | libnghttp2-dev snippet из моего back-файла MySQL-5.6:

DPKG_VENDOR          ?= $(shell dpkg-vendor --query Vendor | tr [A-Z] [a-z])
DEB_DISTRIBUTION     = $(shell dpkg-parsechangelog | sed -ne 's/^Distribution: //p')

ENABLE_SYSTEMD = yes

ifeq (ubuntu,$(DPKG_VENDOR))
  ifeq ($(DEB_DISTRIBUTION),$(filter $(DEB_DISTRIBUTION),precise))
    $(warning Disabling systemd on $(DPKG_VENDOR) $(DEB_DISTRIBUTION))
    ENABLE_SYSTEMD = no
  endif
endif

[...]
%:
ifeq (yes,$(ENABLE_SYSTEMD))
        dh [email protected] --parallel --with systemd
else
        dh [email protected] --parallel
endif

и d/rules имеет

Build-Depends: [...], dh-systemd (>= 1.5) | base-files (<< 7.2ubuntu5~)
    
ответ дан oerdnj 24.04.2016 в 19:01
0

Вот сценарий, который я придумал, чтобы позволить коду строить любой релиз. В моем случае я создал файл control.pre_trusty и control.post_precise, а также rules.pre_trusty и rules.post_precise.

#! /bin/bash
#
# Do magic to allow building on different Ubuntu releases. This script is
# called by buildbot on the different systems prior to dpkg-buildpackage. Do
# what is needed to accomodate different build step requirements as
# Ubuntu changes.
# "pre" and "post" are not inclusive. For example, *.pre_precise files
# apply to hardy and lucid, but not precise or anything after.

RELEASE=$(lsb_release --release --short | tr -d '.')
export LANG=C   # so "cp" doesn't use fancy quoting, which messes up web page

#######################################################################
### we need to run this from the debian directory
#######################################################################
if [ -d debian ] ; then cd debian ; fi
if [ -d "*/debian" ] ; then cd */debian ; fi

#######################################################################
### copy files that apply to previous releases
#######################################################################
cp_pre_lucid ()
{
    for i in *.pre_lucid ; do
        if [ -f $i ] ; then cp -v -p $i $(basename $i .pre_lucid) ; fi
    done
}

cp_pre_precise ()
{
    for i in *.pre_precise ; do
        if [ -f $i ] ; then cp -v -p $i $(basename $i .pre_precise) ; fi
    done
}

cp_pre_trusty ()
{
    for i in *.pre_trusty ; do
        if [ -f $i ] ; then cp -v -p $i $(basename $i .pre_trusty) ; fi
    done
}

cp_pre_xenial ()
{
    for i in *.pre_xenial ; do
        if [ -f $i ] ; then cp -v -p $i $(basename $i .pre_xenial) ; fi
    done
}

#######################################################################
### copy files that apply to subsequent releases
#######################################################################
cp_post_hardy ()
{
    for i in *.post_hardy ; do
        if [ -f $i ] ; then cp -v -p $i $(basename $i .post_hardy) ; fi
    done
}

cp_post_lucid ()
{
    for i in *.post_lucid ; do
        if [ -f $i ] ; then cp -v -p $i $(basename $i .post_lucid) ; fi
    done
}

cp_post_precise ()
{
    for i in *.post_precise ; do
        if [ -f $i ] ; then cp -v -p $i $(basename $i .post_precise) ; fi
    done
}

cp_post_trusty ()
{
    for i in *.post_trusty ; do
        if [ -f $i ] ; then cp -v -p $i $(basename $i .post_trusty) ; fi
    done
}

#######################################################################
### process files for each release
#######################################################################
if [ "$RELEASE" -eq 804 ] ; then
    echo "Setup for Hardy 08.04"
    for i in *.hardy ; do
        if [ -f $i ] ; then cp -v -p $i $(basename $i .hardy) ; fi
    done
    cp_pre_lucid
    cp_pre_precise
    cp_pre_trusty
    cp_pre_xenial

elif [ "$RELEASE" -eq 1004 ] ; then
    echo "Setup for Lucid 10.04"
    cp_post_hardy
    for i in *.lucid ; do
        if [ -f $i ] ; then cp -v -p $i $(basename $i .lucid) ; fi
    done
    cp_pre_precise
    cp_pre_trusty
    cp_pre_xenial

elif [ "$RELEASE" -eq 1204 ] ; then
    echo "Setup for Precise 12.04"
    cp_post_hardy
    cp_post_lucid
    for i in *.precise ; do
        if [ -f $i ] ; then cp -v -p $i $(basename $i .precise) ; fi
    done
    cp_pre_trusty
    cp_pre_xenial

elif [ "$RELEASE" -eq 1404 ] ; then
    echo "Setup for Trusty 14.04"
    cp_post_hardy
    cp_post_lucid
    cp_post_precise
    for i in *.trusty ; do
        if [ -f $i ] ; then cp -v -p $i $(basename $i .trusty) ; fi
    done
    cp_pre_xenial

elif [ "$RELEASE" -eq 1604 ] ; then
    cp_post_hardy
    cp_post_lucid
    cp_post_precise
    cp_post_trusty
    echo "Setup for Xenial 16.04"
    for i in *.xenial ; do
        if [ -f $i ] ; then cp -v -p $i $(basename $i .xenial) ; fi
    done

else
    echo "ERROR: unknown Ubuntu LTS release number '$RELEASE'"
    exit 1
fi
    
ответ дан Jim Wright 25.04.2016 в 16:49