RPM インストール後の Bash スクリプトの問題

RPM インストール後の Bash スクリプトの問題

rpmパッケージを作成し、Node.jsプロジェクトを特定のフォルダに抽出し、インストール後にスクリプトを作成し、フォルダにCDを挿入して "npm install --product"を実行しました。

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

問題は、rpmでプロジェクトを解凍すると、次のエラーが発生することです。

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

もちろん、npmがインストールされており、同じスクリプトを手動で実行すると機能します。 127 の終了ステータスも selinux ポリシーのバグに関連していることを読みましたが、selinux を完全に無効にしようとしましたが、同じエラーが発生しました。

また、.debとまったく同じコードがあり、完全に動作しますが、CentOSでは動作させることはできません。

問題がどこにあるのかご存知ですか?

ありがとう

答え1

まず、エラーに集中する必要があります。

npmが見つかりません

スクリプトを実行するとうまくいくと言われました。私の考えは次のとおりです。

#!/bin/bash
cd /opt/project
npm install --production 
  • 通常のユーザーとして実行していますか、またはrootとして実行していますか?
  • rpmをインストールしたときにrootとしてインストールされていたようです。
  • npmの絶対パスをスクリプトに入れてみましたか(どこでnpm)

最後の方法がうまくいけば、問題はnpmがルートのPATH変数にないことです。 (root)確認してください:

#echo $PATH

編集する:

したがって、$ PATH変数は正しいパスに設定され、npmで絶対パスを使用すると機能します。これは、シェルが実行可能ファイルを見つけるためにPATH変数を読み取らないことを意味します(私が見つけたすべてのスクリプトレットの例では常にフルパスを使用します。コマンド拡張が有効になっていることを確認してください。

#!/bin/bash
cd /opt/project
$(which npm) install --production

関連情報