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