RHEL8.2 시스템의 Python 애플리케이션에서 RPM을 빌드하려고 합니다.
스크립트의 shebang은 올바르게 설정되었지만 어떤 이유로 RPM이 빌드되면 #!/usr/bin/python3
shebang이 .#!/usr/libexec/platform-python -s
나는 거의 모든 것을 시도했습니다.
정의되지 않은 손상에 대한 문서를 따릅니다.https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/packaging_and_distributing_software/advanced-topics
%undefine __brp_mangle_shebangs
그러나 shebangs는 여전히 변경되었습니다.
사양 파일의 관련 부분은 다음과 같습니다.
%undefine __brp_mangle_shebangs
Name: myapp
Version: 2.0.0
Release: 1%{?dist}
summary: rpm for my APP
BuildArch: noarch
### Build Dependencies ###
BuildRequires: python3-setuptools
BuildRequires: python3-devel
%?python_enable_dependency_generator
%build
%py3_build
%install
%py3_install
%files
....
python*-rpm-macros
Shebang을 비슷한 것으로 설정하는 사양을 포함할 수 있지만 /usr/bin/python3.6
너무 제한적입니다. 우리 코드는 python3.6 이상에서 작동하므로 python3.8을 사용하는 시스템에 rpm을 배포하면 작동합니다.
/usr/bin/python3을 어떻게 설정하거나 python 스크립트에서 shebang을 변경하지 않고 그대로 두나요? rpm은 언제 패키징되었나요?
답변1
방금 같은 문제가 발생했습니다. 이것이 미래 세대를 위한 솔루션입니다.
Python 파일(또는 모든 파일)에 실행 권한이 설정되어 있으면 재구성이 시작됩니다. 따라서 패키징 시 파일을 실행 불가능하게 만들 수 있지만 설치 후에는 실행 가능하게 만들 수 있습니다.
- Python 파일에서 실행 권한을 제거합니다.
chmod -x script.py
- 사양 파일의 post 섹션을 다음과 같이 수정합니다.
%post
chmod +x /your/installation/path/script.py