Como posso criar um arquivo 'debian / controle' que difere com base no lançamento do Ubuntu? -- python campo com packaging campo com deb camp askubuntu Relacionado O problema

How can I create a 'debian/control' file that differs based on Ubuntu release?


3
vote

problema

português

Eu tenho muito código fonte que mantemos, produzindo muitos pacotes diferentes do Ubuntu. Todos esses pacotes precisam ser construídos no Ubuntu Lts lançamentos de Ubuntu 8,04 (Hardy Heron) para a frente. (Eu sei que estes são antigos e sem suporte. Estes são para sistemas de limite de espaço, portanto, atualizar para uma nova versão não é possível. No entanto, ainda tenho que manter o software neles, atualizando para novos lançamentos.)

Eu estou tentando obter toda a base de código e correr em Ubuntu 14.04 (Trusty Tahr). Eu descobri muito para o meu desalento que a embalagem do código Python mudou completamente. Como de confiança, o apoio de Python e a Python-Central desapareceram e DH_PYTHON2 é o que você tem que usar .

Meu problema é como criar um arquivo abcdefghjklmnabcdefghijklmn0 . O build-depende: para versões até e incluindo ubuntu 12.04 (Pangolim preciso) precisa incluir ABCDEFGHIJKLMNABCDEFGHIJKLMN1 , enquanto para 14.04 e encaminhar ele deve incluir ABCDEFGHIJKLMNABCDEFGHIJKLMN2 . 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?

Eu tenho um extenso sistema de buildbot e em execução que compila em várias versões do Ubuntu, versões centros e algumas versões do OS X. Dividir em pacotes ramificados para diferentes versões quebrariam isso. Então estou procurando uma solução que funcione em uma única árvore de origem. Estou tentando encontrar um gancho cedo que eu poderia usar em dpkg-buildpackage para definir as coisas por versão, mas ainda não encontrei uma solução.

english

I have great deal of source code that we maintain, producing many different Ubuntu packages. All of these packages need to build on Ubuntu LTS releases from Ubuntu 8.04 (Hardy Heron) forward. (Yes, I know these are old and unsupported. These are for space-bound systems, so updating to a new release is not possible. Yet I still have to maintain the software on them, while updating for new releases.)

I am trying to get the entire code base up and running on Ubuntuxc2xa014.04 (Trusty Tahr). I have discovered much to my dismay that the packaging of Python code has changed completely. As of Trusty, python-support and python-central have disappeared and dh_python2 is what you have to use.

My problem is how to craft a working debian/control file. The Build-Depends: for versions up to and including Ubuntuxc2xa012.04 (Precise Pangolin) needs to include python-central, while for 14.04 and forward it must include dh_python2. I have found no provision for conditional text in the control file. I've tried find a way around this, but so far nothing works.

How can this be done?

I have an extensive buildbot system up and running that compiles on numerous Ubuntu versions, CentOS versions, and some OSxc2xa0X versions. Splitting into branched packages for different versions would break that. So I'm looking for a solution that works on a single source tree. I'm trying to find a hook early on that I could use in dpkg-buildpackage to set things up per-version, but I haven't found a solution yet.

        
         
         

Lista de respostas

2
 
vote

A maneira mais fácil é usar pacotes alternativos no campo Build-Depends , f.e. Build-Depends: dh-python | python-central, [...] . Isso tem várias peculiaridades, a primeira dependência que satisfaz o solucionador de dependência será escolhida. Você também pode usar o Build-depende da versão (f.e. se você sabe que algumas versões anteriores dos pacotes estavam incompletos), isto é, Build-Depends: dh-python (>= <correct_version) | python-central .

A maneira mais complicada se você precisar depender do pacote que não existe no anterior (ou lançamento posterior) é adicionar base-files (<< <version>) | real-package como dependência em vez de apenas abcdefghijklmn5 e ajustar o <version> para corresponder à versão no próximo lançamento. Se você precisar de um pacote no sistema mais antigo, mas não em novo, você usaria base-file (>= <version>) | real-package e usar <version> da versão do Ubuntu, onde você não precisa do ABCDEFGHIJKLMNABCDEFGHIJKLMN9 < / código>.

Por exemplo para retrocesso Build-Depends0 para ubuntu 12.04 eu alterei Build-Depends1 para Build-Depends2 .

Vou adicionar Build-Depends3 snippet do meu backport mysql-5.6:

  Build-Depends4   

e Build-Depends5 tem

  Build-Depends6   
 

The easiest way is to use alternative packages in the Build-Depends field, f.e. Build-Depends: dh-python | python-central, [...]. That has several quirks, the first dependency that satisfy the dependency solver will get picked. You can also use versioned Build-Depends (f.e. if you know that some earlier versions of packages were incomplete), i.e. Build-Depends: dh-python (>= <correct_version) | python-central.

The more complicated way if you need to Depend on package that doesn't exists in earlier (or later release) is to add base-files (<< <version>) | real-package as a dependency instead of just real-package and tune the <version> to match the version in the next release. If you need a package on older system, but not on new, you would use base-file (>= <version>) | real-package and use <version> from Ubuntu release where you don't need the real-package.

For example for backporting apache2 for Ubuntu 12.04 I have changed libnghttp2-dev to base-files (<< 7.2~) | libnghttp2-dev.

I will add d/rules snippet from my MySQL-5.6 backport:

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 

and d/control has

Build-Depends: [...], dh-systemd (>= 1.5) | base-files (<< 7.2ubuntu5~) 
 
 
         
         
0
 
vote

Aqui está o script que eu inventei para permitir que o código construísse em qualquer lançamento. No meu caso, criei um arquivo Control.Pre_Trusty e Control.post_precise e uma regras.Pre_trusty e regras.post_precise.

  Build-Depends7   
 

Here is the script I came up with to allow the code to build on any release. In my case, I created a control.pre_trusty and control.post_precise file, and a rules.pre_trusty and 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 
 
 

Perguntas relacionadas

8  Faça um .DEB para um aplicativo Node.js  ( Make a deb for a node js application ) 
Como faço um .DEB para um aplicativo Node.js que instala o Node.js e seus módulos NPM necessários no DPKG -I? Qual é o lugar no sistema de arquivos onde eu ...

2  Como faço para especificar uma string para exibir no centro de software do Ubuntu ao criar um pacote com DPKG-Deb?  ( How do i specify a string to display in the ubuntu software center when creating ) 
Quando eu abrir pacotes * .deb baixados da Internet no centro do software do Ubuntu, ele exibe um nome "bom" para o pacote (incluindo espaços superiores e min...

2  Como posso criar um deb de binários?  ( How can i create a deb from binaries ) 
Eu tenho alguns arquivos binários: foo, bar.so e foo.lnk. Eu quero fazer um Deb que irá extrair foo para /usr/share/foo/foo , bar para o mesmo diretório e fo...

2  Serviço de construção de pacotes automatizados  ( Automated package build service ) 
Eu estou usando bacula para backup de meus servidores e clientes, mas as versões da Bacula no repositório oficial são muito antigas. Então eu compilei e insta...

3  Como você instala R 3.2.2 no Ubuntu 14.04 LTS?  ( How you install r 3 2 2 in ubuntu 14 04 lts ) 
Eu quero instalar uma versão de R que é mais recente que a no Ubuntu REPOS, mas mais antiga que a versão mais atual de cran. ( como instalar / atualizar r-bas...

8  Não é possível instalar o Google Chrome e libappindicator1  ( Unable to install google chrome and libappindicator1 ) 
Eu instalei recentemente o Ubuntu 16.04 no meu computador e tentei instalar o Google Chrome, mas eu não fui capaz. Aqui está o que recebi. $ sudo dpkg -i ~...

1  Instalando minecraft.deb. Tenta instalar, mas dá um loop de redirecionamento  ( Installing minecraft deb tries to install but gives a redirect loop ) 
Alguém sabe por que o pacote oficial minecraft.deb está fazendo isso comigo? . smb @ smb-lenovo-h430: ~ $ sudo gdebi '/home/smb/downloads/minecraft.deb' l...

3  LibreOffice RC1 Deb pacote dificuldades [duplicado]  ( Libreoffice rc1 deb package difficulties ) 
. Esta pergunta já existe : fechado 8 anos atrás . . Duplicado possível: Como faço para corri...

2  Como posso fazer upload para um PPA sem arquivo .Changes?  ( How can i upload to a ppa without changes file ) 
Então, estou desenvolvendo um aplicativo para o confronto do Ubuntu, e tão rapidamente ainda é muito buggy (eu tinha problemas para usá-lo), decidi fazer meu ...

1  Criar pacote de fonte PPA do pacote .deb existente  ( Create ppa source package from existing deb package ) 
Eu quero modificar alguns arquivos no pacote .deb e enviá-lo para o meu PPA, Isso é possível e como? Agradecemos antecipadamente ...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.