Existe um formato estruturado de informações de versão para executáveis no nível do SO?

2

Estou procurando um formato estruturado de informações de versão para executáveis no nível do sistema operacional, como /usr/bin e /usr/local/bin . O problema que estamos tendo é a arquitetura inconsistente entre nossos ambientes PROD e TEST e estamos descobrindo que muitos executáveis em nossos ambientes inferiores tiveram patches aplicados enquanto PROD não, o que invalida muitos testes - coisas funcionam no TEST, mas não t no PROD devido a tais discrepâncias no sistema.

Portanto, gostaria de executar uma verificação de garantia do sistema para listar todos os executáveis e obter o número da versão, mas nada mais, e então produzir deltas. Alguns comandos não suportam a opção -version , mas mesmo aqueles que exibem um formato de texto livre bastante detalhado de uma narrativa de versão e o número da versão estão ocultos em algum lugar, sem a possibilidade de extraí-lo de forma programática.

Como alternativa, eu estava pensando em executar um nível de arquivo cksum para cada executável como uma opção de último recurso, mas eu esperava que houvesse uma maneira de extrair programaticamente campos relevantes de informações de versão.

Obrigado

    
por amphibient 20.12.2012 / 22:21

4 respostas

3

Estou inclinado a dizer que não há maneira fácil de fazer isso. Digo isso porque o controle de versão não é de forma alguma um procedimento padronizado no UNIX / Linux ou com qualquer um dos fornecedores, pelo menos no nível do programa.

Uma sugestão pode ser examinar as informações do pacote instalado que contêm informações de versão.

No entanto, se as pessoas instalarem produtos que não usam o gerenciador de pacotes padrão para sua distribuição, você também terá informações incorretas.

Para ter certeza absoluta, você provavelmente terá que fazer algum tipo de checksums de teste entre os sistemas.

    
por 20.12.2012 / 22:31
2

Como você já recebeu uma resposta do @mdpc, apenas forneço uma opinião sobre seu problema original. Eu não iria por este caminho, pois isso abre uma lata de worms e seus programas em geral devem ser executados em todos os sistemas (verifique também se o seu sistema ainda funciona se você executar em um local diferente). Você também não deve confiar nos próprios comandos / saída, mas usar a API apropriada para acessar / modificar as informações.

De qualquer forma, aqui estão algumas maneiras que podem ajudar a atenuar seu problema:

  1. Use o gerenciamento de configuração e especifique quais programas / bibliotecas precisam ser instalados na máquina. Você também pode especificar o número da versão. Outra grande coisa sobre o uso do gerenciamento de configuração é que você normalmente pode obter todas as informações sobre o seu sistema, ou seja, qual kernel está sendo executado, quantas NICs estão no sistema etc.
  2. Dependendo da linguagem de programação que você está usando, talvez você queira pesquisar ambientes virtualizados, ou seja, bundler para ruby ou virtualenv para python.
  3. Use chroots para configurar um ambiente para suas necessidades específicas ou (ainda melhor)
  4. Basta enviar seu ambiente como uma imagem da VM
por 20.12.2012 / 22:51
2

Pacotes são a resposta (você deve saber que vem do SunOS).

No CentOS você deve usar RPMs - nada mais.

Force seus desenvolvedores a entregar tudo como rpm - então você terá essas informações estruturadas em seu banco de dados RPM (que pode até ser consultado com ferramentas SNMP padrão).

    
por 20.12.2012 / 23:03
1

No que diz respeito ao Solaris 10, arquivos pertencentes ao sistema operacional e arquivos fornecidos por terceiros na forma de pacotes SVR4 já estão com versão / checksum e identificados. por exemplo. :

 # pkgchk -l -p /usr/bin/ls
Pathname: /usr/bin/ls
Type: regular file
Expected mode: 0555
Expected owner: root
Expected group: bin
Expected file size (bytes): 18700
Expected sum(1) of contents: 1763
Expected last modification: Mar 25 00:04:57 2010
Referenced by the following packages:
        SUNWcsu
Current status: installed

A maioria dessas informações está no arquivo /var/sadm/install/contents . Os arquivos que não foram instalados usando as ferramentas padrão, ou seja, arquivos fornecidos como tarball ou arquivo compactado, são desconhecidos do banco de dados do pacote, portanto, devem ser processados de maneira diferente. A comparação de checksums parece uma boa abordagem para detectar discrepâncias, já que não há padrão de qualquer maneira.

    
por 21.12.2012 / 02:23