Pergunta

Eu tenho várias aplicações que gostaria de implantar usando rpm. Alguns dos arquivos no meu aplicativo implantações arquivos de substituição de outros pacotes implantados. Simplesmente incluindo os novos arquivos no pacote de implementação irá causar conflitos rpm.

Eu estou procurando a maneira correta de utilização rpm para atualizar / substituir arquivos já instalados.

Eu já venha com algumas soluções, mas nada parece muito certo.

  • Manter versões personalizadas dos rpms contendo os arquivos originais.

Esta parece ser uma grande quantidade de trabalho para um relativamente pequena recompensa, mesmo que ele se sente menos como um hack do que algumas das outras soluções possíveis.

  • Incluir os arquivos no rpm com outro nome e copiá-los na seção post.

Isso poderia funcionar, mas significará desarrumar o sistema com várias cópias dos arquivos. Também significa manutenção adicional na especificação rpm compilação para cada arquivo.

  • Use wget na seção pós para substituir os arquivos originais de algum servidor conhecido.

Este é semelhante à técnica de cópia, mas os arquivos não iria mesmo ao vivo na rpm. Isso pode agir como uma autoridade de configuração central agradável embora.

  • Implantar os arquivos como novos arquivos, em seguida, usar links simbólicos para substituir os originais.

Esta também é semelhante à técnica de cópia, mas com menos confusão. O problema aqui é que alguns arquivos não se comportam bem como links simbólicos.

Foi útil?

Solução

Para o melhor de meu conhecimento, RPM não é projetado para permitir a atualização / substituir arquivos existentes, então qualquer coisa que você vai ser um hack.

das opções que você lista, eu escolheria # 1 como o menos mau corte se os sistemas de destino são sistemas que eu admin (como você diz, é mais trabalho, mas é a solução mais limpa) e uma combinação de # 2 e # 4 (links simbólicos se possível, cópias, onde não) se eu estou criando as RPMs para os sistemas dos outros (para evitar ter que distribuir um monte de RPMs, mas eu tinha que fazer isso muito claro no docs que eu estou fazendo).

Você não descreveram quais arquivos precisam ser atualizados ou substituídos e como eles precisam ser atualizados. Dependendo das respostas a essas perguntas, você pode ter um par de outras opções:

  • Muitos programas são projetados para usar um único arquivo de configuração padrão e também para arquivos de configuração da garra de um subdiretório .d. Por exemplo, o Apache usa /etc/httpd/conf/httpd.conf e /etc/httpd/conf.d/*.conf, para que seus RPMs poderia soltar arquivos sob /etc/httpd/conf.d em vez de modificar /etc/httpd/conf/httpd.conf. E se os arquivos que você precisa para modificar são ficheiros de configuração que não seguem esse padrão, mas poderia ser feita, você pode sugerir para os mantenedores de pacotes que adicionar esta capacidade; isso não iria ajudá-lo imediatamente, mas faria futuros lançamentos mais fácil.
  • Para utilitários de linha de comando como sendmail e lpr que podem ser fornecidos por vários pacotes, o sistema alternatives (veja man alternatives) permite mais de 1 RPM que fornece esses utilitários para ser instalado lado a lado. Novamente, se os arquivos que você precisa para modificar são utilitários de linha de comando que não seguem esse padrão, mas poderia ser feita, você pode sugerir para os mantenedores de pacotes que adicionar esta capacidade.
  • mudanças Config file em sistemas que administram são melhor geridas através de uma ferramenta como Cfengine ou Puppet vez de através de RPMs personalizados. Eu acho que a Red Hat favorece Puppet.
  • Se eu estivesse criando as RPMs para sistemas I não administrar, eu consideraria usando uma ferramenta de terceiros, como bitrock e despejar todas as minhas coisas sob /opt apenas para que eu não teria de stomp no arquivos instalados por RPMs de outros administradores.

Outras dicas

Você também pode executar rpm -U --replacefiles --replacepkgs ..., o que lhe dará o que você quer.

Veja aqui para mais informações sobre RPM% directivas arquivos:

http: //www.rpm. org / max-rpm / S1-rpm-dentro-files-list-directives.html

Você pode usar os argumentos das seções% post e% pré nos scriptlets RPM para determinar se está a instalar, atualizar ou remover pacotes.

Se $ 1 é 0 - então nós estamos removendo material antigo. Segmentação 0 pacotes instalados. Se $ 1 é 1 - então nós estamos instalando novo material. Visando um total de um pacote a ser instalado. Se $ 1 é 2 ou mais -. Então estamos atualizando este pacote e US $ 1 representa o número de pacotes já instalados

Estas seções ajudar com o gerenciamento de arquivos entre as versões. Acompanhe o que você está fazendo entre as versões e considerar o que se poderia fazer se eles estavam a saltar uma versão ou dois.

Tem consideração por essas coisas e você deve ser bom para ir!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top