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 
  • 일반 사용자로 실행하고 있습니까, 아니면 루트로 실행하고 있습니까?
  • rpm을 설치할 때 루트로 설치되었던 것 같습니다.
  • npm의 절대 경로를 스크립트에 넣어 보셨나요(어디서 npm)

마지막 방법이 작동한다면 문제는 npm이 루트의 PATH 변수에 없다는 것입니다. (루트로) 확인해 보세요:

#echo $PATH

편집하다:

따라서 $PATH 변수는 올바른 경로로 설정되며 npm에서 절대 경로를 사용할 때 작동합니다. 이는 쉘이 실행 파일을 찾기 위해 PATH 변수를 읽지 않는다는 것을 의미합니다(내가 찾은 모든 스크립틀릿 예제에서는 항상 전체 경로를 사용합니다. 명령 확장을 사용할 수 있는지 확인해 보십시오:

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

관련 정보