Problema de script Bash no postinstall do RPM

1

Eu criei um pacote rpm que extrai um projeto Node.js em uma pasta específica e criei um script postinstall que cd para essa pasta e executar um "npm install --production"

#!/bin/bash
cd /opt/project
npm install --production

O problema é que depois que o rpm descompacta o projeto eu recebo o seguinte erro:

/var/tmp/rpm-tmp.MbfpY5: line 3: npm: command not found
warning: %post(pack-0.0.0-1.noarch) scriptlet failed, exit status 127

É claro que o npm está instalado e, se eu executar o mesmo script manualmente, ele funciona. Eu li que o status de saída 127 também está relacionado a um bug nas políticas do selinux, mas eu tentei desativar o selinux completamente e recebi o mesmo erro.

Eu também tenho exatamente o mesmo código que um .deb e seu funcionamento impecável, mas não consigo fazê-lo funcionar no CentOS.

Alguma idéia de onde o problema pode estar?

Obrigado

    
por Cado 03.03.2015 / 10:28

1 resposta

0

Primeiro, você deve tentar se concentrar no erro

npm not found

Você diz que quando você executa o script, funciona - suponho que seja este:

#!/bin/bash
cd /opt/project
npm install --production 
  • você o executou como usuário normal ou como root?
  • quando você instala o rpm, eu acho que é como root.
  • você tentou colocar o caminho absoluto do npm no script ( onde está npm )

Se o último deles funcionar, o problema é que o npm não está na variável PATH da raiz. Você deve tentar verificar isso (como root):

#echo $PATH

Editar:

Portanto, a variável $ PATH é definida com os caminhos bons e quando você usa o caminho absoluto para npm, ela funciona. Isso significa que o shell não lê a variável PATH para encontrar o executável (em todo o exemplo de scriptlet que encontrei, eles sempre usam fullpath. Tente ver se você pode usar a expansão de comando com a qual:

#!/bin/bash
cd /opt/project
$(which npm) install --production
    
por 03.03.2015 / 21:50