Script de shell para mesclar o arquivo de propriedades (sed / awk / comm / diff) para upgrade de rpm

1

Estamos desenvolvendo um produto java instalado por meio do rpm. Temos um conjunto de arquivos de configuração que um usuário pode editar. Esses arquivos de configuração são arquivos de propriedades do Java no formulário:

com.acme.pkg1.setting=something customized 1
com.acme.pkg2.setting=something original 2

Esses arquivos são marcados no arquivo SPEC com% config (noreplace), portanto, após uma atualização, poderíamos ter um arquivo .rpmnew próximo a ele:

com.acme.pkg1.setting=something original 1
com.acme.pkg2.setting=something original 2
com.acme.pkg3.setting=something original 3

Existe uma maneira de mesclar esses arquivos de forma que apenas novas chaves sejam adicionadas ao arquivo original?

Minha ideia foi:

  1. filtre as chaves
  2. classifique as chaves
  3. use comm (1), algo como: comm -23 file.rpmnew.keys file.keys > new.keys
  4. extrair chave = valor de arquivo.rpmnew correspondente new.keys
  5. acrescentar resultado ao arquivo original

Como podemos conseguir tudo isso a partir de um script pós-atualização de rpm?

De preferência usando apenas utilitários padrão do Linux (comm, diff, sed, awk, grep, ...)?

    
por greyfairer 13.12.2011 / 18:27

1 resposta

3
  • Crie valores originais e brutos de destino sem configurações:

    sed "s/=.*//g" file_original.ini > file_original.raw
    sed "s/=.*//g" file_target.ini > file_target.raw
    
  • Suponho que o destino terá mais opções do que o original. Construa a diferença:

    grep -vf original.raw target.raw > newvals.dat
    
  • Adicione os novos valores:

    cp -p file_original.ini file_original.ini.rpmsave
    grep -f newvals.dat file_target.ini >>file_original.ini
    

Essa é a ideia básica. Ele precisa de muita manipulação de erros, limpar a criação de arquivos tmp e arrumar.

    
por 13.12.2011 / 20:57