Como criar um arquivo debian / control que difere com base no lançamento do Ubuntu?

1

Eu tenho muito código fonte que mantemos, produzindo muitos pacotes diferentes do Ubuntu. Todos esses pacotes precisam se basear nos lançamentos do Ubuntu LTS a partir de 08.04. (Sim, eu sei que eles são antigos e não suportados. Eles são para sistemas com espaço limitado, portanto não é possível atualizar para uma nova versão. Ainda tenho que manter o software neles, enquanto atualizo para novas versões.) Estou tentando para obter toda a base de código em execução no Trusty. Eu descobri muito para meu espanto que a embalagem do código Python mudou completamente. A partir do Trusty, o python-support e o python-central desapareceram e o dh_python2 é o que você precisa use .

Meu problema é como criar um arquivo debian / control. O Build-Depends: para versões até e inclusive 12.04 precisa incluir python-central , enquanto que para 14.04 e encaminhar ele deve incluir dh_python2 . Eu não encontrei nenhuma provisão para texto condicional no arquivo de controle. Eu tentei encontrar uma maneira de contornar isso, mas até agora nada funciona.

Como isso pode ser feito?

EDITAR:

Eu tenho um extenso sistema buildbot instalado e rodando, que compila em várias versões do Ubuntu, versões do CentOS e algumas versões do OSX. Dividir em pacotes ramificados para diferentes versões quebraria isso. Então, estou procurando uma solução que funcione em uma única árvore de origem. Estou tentando encontrar um gancho no início que eu poderia usar no dpkg-buildpackage para configurar as configurações por versão, mas ainda não encontrei uma solução.

    
por Jim Wright 22.04.2016 / 23:06

2 respostas

2

A maneira mais fácil é usar pacotes alternativos no campo Build-Depends , por exemplo, %código%. Isso tem várias peculiaridades, a primeira dependência que satisfaz o resolvedor de dependências será escolhida. Você também pode usar Dependências de compilação com versão (por exemplo, se souber que algumas versões anteriores de pacotes estavam incompletas), por exemplo, Build-Depends: dh-python | python-central, [...] .

A maneira mais complicada se você precisa Depender do pacote que não existe em versões anteriores (ou posteriores) é adicionar Build-Depends: dh-python (>= <correct_version) | python-central como uma dependência em vez de apenas base-files (<< <version>) | real-package e ajustar o real-package para corresponder ao versão no próximo lançamento. Se você precisa de um pacote no sistema mais antigo, mas não no novo, você usaria <version> e usaria base-file (>= <version>) | real-package do lançamento do Ubuntu, onde você não precisa do <version> .

Por exemplo, para backporting real-package para o Ubuntu 12.04, mudei apache2 para libnghttp2-dev .

Eu adicionarei base-files (<< 7.2~) | libnghttp2-dev snippet do meu backport do 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 $@ --parallel --with systemd
else
        dh $@ --parallel
endif

e d/rules tem

Build-Depends: [...], dh-systemd (>= 1.5) | base-files (<< 7.2ubuntu5~)
    
por oerdnj 24.04.2016 / 19:01
0

Aqui está o script que eu criei para permitir que o código seja compilado em qualquer versão. No meu caso, eu criei um arquivo control.pre_trusty e control.post_precise, e um rules.pre_trusty e 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
    
por Jim Wright 25.04.2016 / 16:49