Como construir um pacote RPM binário entre distros?

6

Estou tentando construir um pacote RPM binário de distribuição cruzada que funciona sob o Fedora e o openSUSE. Estou usando uma tag Require: para definir os nomes dos pacotes de dependências. O problema é que os nomes dos pacotes são diferentes em cada repositório de distribuição GNU / Linux.

Leitura: link e uso de '% if 0% {? suse_version} 'declarações fornecem um arquivo .spec de distribuição cruzada. Ou seja, a lista de deps será determinada em tempo de compilação e não em tempo de instalação.

Existe uma maneira de definir uma lista condicional de deps dentro de um pacote RPM binário?

    
por Saleh 13.04.2011 / 07:34

3 respostas

1

Não. Não é assim que você faz isso. Você realmente precisa construir pacotes separados para cada distro. Isso exigirá um arquivo de especificação com aparência um pouco diferente para cada distribuição e, às vezes, versões diferentes de uma distribuição de você estão segmentando mais do que a versão atual.

Seus "condicionais" devem ir um degrau acima ... escolhendo qual RPM usar, não dentro do próprio RPM. Se você quiser, pode gerar esses arquivos de especificação a partir de um script com condicionais para automatizar esse processo, mas ao criar um pacote a partir de uma especificação, você precisará de uma especificação específica da distribuição.

    
por 13.04.2011 / 16:55
1

De jeito nenhum. desculpa. Você não pode fazer uma lista condicional de deps dentro do RPM. A única maneira de fazer isso é remover todos os deps específicos da distribuição do seu arquivo de especificação.

    
por 13.04.2011 / 14:13
0

Sim, isso é certamente possível, já que o link para a página wiki do openSUSE que você vinculou explica detalhadamente. Além disso, alguns fornecedores fazem isso, por ex. o pacote RPM do google-chrome para o Fedora / openSUSE (também funciona bem em outras distribuições de RPM) é um exemplo onde eles só têm um pacote de rpm que cobre as principais distribuições de rpm.

Mas você deve prestar atenção ao que você precisa. Você tem que distinguir entre Requires: em pacotes normais para, por exemplo, binários que você pode exigir. Esses têm que ser adicionados manualmente. Também Requer em nomes de arquivos (por exemplo, Requires: /usr/bin/sendmail ) são desconsiderados e também não são portáveis, já que algumas distros colocarão seus arquivos em locais ligeiramente diferentes.

Para Requires: não-verificados em pacotes de bibliotecas comuns, esses geralmente estão sempre errados. Eles são adicionados automaticamente durante o tempo de compilação do rpm . Existem casos muito raros em que uma determinada versão precisa ser imposta e onde a versão explícita do Requer precisa ser adicionada, principalmente em pacotes de bibliotecas. Isto é explicado, e. em link

    
por 11.12.2015 / 14:51