Sub-rotinas comuns em RPM

3

Eu tenho alguns códigos comuns que gostaria de executar na seção % pre e % post do meu arquivo de especificação rpm . Quando eu coloco uma sub-rotina na seção % pre , eu preciso adicionar a mesma sub-rotina à seção % post do RPM. É uma porcaria manter a mesma sub-rotina duas vezes. Aqui está um exemplo:

RPM arquivo de especificação % pre e % post seções:

%pre
log_file=/var/log/myrpminstall.log
#-------------------------------------
# Send text log_file
#-------------------------------------
log_it() {
  log_msg=$1
  echo -e $log_msg >> $log_file
}

log_it "pre section log information"

%post

log_it "Post section log informations"

Atualmente, quando a seção % post do rpm é executada durante uma instalação, recebo uma mensagem de erro:

/var/tmp/rpm-tmp.36557: line 5: log_it: command not found

Então, existe uma maneira de tornar uma sub-rotina como log_it acessível a todas as seções (função global) do RPM ? Atualmente, eu tenho que colocar a função log_it na seção % post se eu quiser usá-la lá.

    
por GoinOff 07.08.2014 / 18:06

1 resposta

5

A razão pela qual isso não funciona é porque cada scriptlet ( %post , %pre , etc.) é escrito como um script independente e passado para o bash / sh para execução. Assim, o shell que o executa desconhece qualquer função definida em outro scriptlet.

Eu recomendaria o uso de macros do RPM para essa finalidade. Você pode colocá-los em ~/.rpmmacros ou /etc/rpm/macros . Algo parecido com isto:

%define log \
log_it() { \
  log_msg=$1 \
  echo -e $log_msg >> $log_file \
}

%pre
%log

log_it test

%post
%log

log_it test

Veja o link para mais informações ou até /usr/lib/rpm/macros .

    
por 07.08.2014 / 23:42