Como obter a versão a ser desinstalada dentro do scriptlet rpm?

0

Eu tenho o seguinte cenário:

  1. eu instalo a versão 1 de um pacote, ele faz operações personalizadas durante a pós-instalação (copiando alguns arquivos para um local)
  2. eu instalo a versão 2 do mesmo pacote
  3. Desejo desinstalar a versão 1. Para poder fazer a limpeza, preciso saber a versão exata durante a pós-desinstalação para limpar os arquivos que foram copiados.

Existe uma maneira de obter o número da versão em um scriptlet de rpm?

    
por MiN 21.08.2016 / 20:04

2 respostas

1

Os scripts % são chamados da versão relevante do arquivo rpm . Portanto, se você atualizar da versão 1.0 para a versão 1.1, os scripts pré / pós instalação serão executados a partir da versão 1.1 do rpm e os scripts pré / pós-desinstalação serão executados a partir da versão 1.0.

Isso facilita bastante para os scripts lidarem com a própria versão corretamente.

Por exemplo, aqui está um extrato de um arquivo SPEC

%pre
echo Pre called with version %{version}-%{release}

%post
echo Post called with version %{version}-%{release}

%preun
echo Pre-un called with version %{version}-%{release}

%postun
echo Post-un called with version %{version}-%{release}

Eles são muito simples, apenas para demonstrar isso. Quando você constrói o rpm, esses valores são incorporados na rpm

por exemplo

% rpm -q --scripts -p sweh-test-1.0-0.x86_64.rpm 
preinstall scriptlet (using /bin/sh):
echo Pre called with version 1.0-0
postinstall scriptlet (using /bin/sh):
echo Post called with version 1.0-0
preuninstall scriptlet (using /bin/sh):
echo Pre-un called with version 1.0-0
postuninstall scriptlet (using /bin/sh):
echo Post-un called with version 1.0-0

Agora vamos instalar a versão 1.0.0 deste pacote:

% sudo rpm -i sweh-test-1.0-0.x86_64.rpm 
Pre called with version 1.0-0
Post called with version 1.0-0

Até agora, muito esperado. Os scripts de pré / pós-instalação são executados.

Agora vamos atualizar para a versão 1.1:

% sudo rpm -U sweh-test-1.1-0.x86_64.rpm
Pre called with version 1.1-0
Post called with version 1.1-0
Pre-un called with version 1.0-0
Post-un called with version 1.0-0

Observe a ordem das chamadas e os números de versão; pre / post install são chamados e o release da versão corresponde à nova versão, e então pre / post uninstall são chamados com o número da versão antiga.

Então a idéia é que você não precisa derivar essa informação, você pode incluí-la diretamente no arquivo de especificação do rpm através do uso das macros % .

    
por 21.08.2016 / 20:35
1

Não diretamente. O banco de dados rpm é bloqueado enquanto sua instalação está em andamento. A maneira mais fácil seria fornecer essa informação como um arquivo de texto na rpm que você está mantendo.

    
por 21.08.2016 / 20:16

Tags