[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: %if no sistema de empacotamento debian





Em 24 de maio de 2010 11:51, Gustavo Franco <stratus@debian.org> escreveu:
Opa,

2010/5/24 Anderson Goulart <anderson@goulart.info>:
>
> Em 24 de maio de 2010 10:06, Tiago Bortoletto Vaz <tiago@debian.org>
> escreveu:
>>
>> Olá Anderson,
>>
>> On Mon, 24 May 2010 09:39:23 -0300, Anderson Goulart wrote
>> > Ae pessoal,
>> >
>> > Há alguma forma de fazer uma geração de pacotes condicionais? Algo como
>> > o
>> %if / %endif do SPEC para o rpm?
>> >
>> > A necessidade é a seguinte, imagine que eu tenha em um control mais de
>> > um
>> package declarado. Mas alguns desses packages só serão gerados caso o host
>> de
>> build tiver alguns requisitos. Isso pq tenho vários hosts que fazem build
>> do
>> mesmo pacote e, em alguns casos, dependendo do host/plataforma, alguns
>> .deb
>> são gerados e outros não.
>> >
>> > Eu pensei em gerar um control.in e criar umas macros para isso, mas não
>> achei a solução tão elegante. Alguém conhece uma outra forma?

Quais outros critérios além de plataforma você tem? O que você quis
dizer com host? Se fosse só plataforma, você poderia restringir
utilizando o campo Architecture na declaração dos pacotes mesmo[0].


Não é só arquitetura, mas é uma delas. O que eu queria era montar um source único que fosse capaz de compilar dependendo do que existe na máquina que estou fazendo o build. Por exemplo:

Imagine que um certo source deb gere dois pacotes:

nome-main e nome-java

Mas o nome-java é uma geração condicional. Ele só deve ser gerado caso eu tenha instalado na máquina de build o jdk, por exemplo. A idéia é quase que fazer um debian/control capaz de gerar N pacotes, dependendo de alguma variável de sistema, ou de algum parâmetro que eu especifique.

Ou seja, o número de pacotes gerados com o debuild depende do host (qual arquitetura ele é, quais variáveis de ambiente estão configuradas, quais pacotes estão instalados, etc), sempre com uma com uma opção default, que gere ao menos 1 pacote com o mínimo de configuração.

Com o RPM eu crio alguns %ifs e consigo com o mesmo source e o mesmo spec gerar o pacote para várias arquiteturas e várias distros (redhat, suse, mandriva, etc). Uma das consequências disso que falei acima seria criar um único source que gerasse pacotes para debian (stable, testing e sid) e para ubuntu.

Meu cenário é o seguinte: eu tenho um monte de VM, cada qual com sua configuração e distro instalada. E tenho um script de build que copia o source (no caso atual, src.rpm) para cada VM e automaticamente roda-se o rpmbuild. Como o SPEC é cheio de ifs, ele consegue reconhecer qual distro e qual conf eu tenho em cada máquina de build, gerando um ou mais RPMs para cada uma.

 
Em outras palavras, se você só quer garantir que amd64 compila "coisas
para amd64", é bem simples. Já se você precisa garantir que host foo
compila pacote asd e xyz, mas bar só compila zxc e qwe -- tudo a
partir de um mesmo fonte X. Quando você mandar o fonte X para outro
canto que não seja foo e bar você vai ter um FTBFS para um `set' de
pacotes ou outro. Presumo que era disso que o Tiago falava.


Imagino que era essa a idéia colocada por ele. Como parece que essas idéias confrontam com a Policy, isso já foi discutido em algum momento, já que elas poderiam reduzir o trabalho dos matenedores?
 
>> Como esta é uma situação que confrontaria com a policy (pois de certa
>> forma
>> 'legitimaria' um FTBTS), eu penso que não há uma implementação no Debian,
>> portanto a tua proposta na minha opinião é elegante o suficiente para algo
>> extra-oficial.
>>
>
> Só uma pergunta, o que é um FTBTS?

FTBFS = Fail To Build From Source.



thanks!
 


Abraços, global

Reply to: