저는 Pyinstaller를 사용하여 회사 내부용 Python 애플리케이션을 구축했습니다. 이제 사람들이 설치할 수 있도록 .deb 패키지로 내보내고 싶습니다. 파일 트리(.deb에 포함할 필요가 없는 소스 파일 제외)는 다음과 같습니다.
- DEBIAN/
- rules
- control
- /opt/ <-- I want my app to sit in /opt/
- dist/ <-- This is what I want to distribute essentially
- my_project <-- An executable Python app
- _internal/ <-- Shared libraries needed for Python app sit here
- shared_lib1.so
- shared_lib2.so
- .....
- resources/
- images/
- my_image.png
- info/
- info.json
- warning.txt
- configuration_files/
- configA.json
- configB.json
- logs/ <-- Logs generated by Python app
- my_project_log_20240125.log
- my_project_log_20240124.log
- ...
- /usr/
- share/
- applications/
my_project.desktop <-- Dekstop entry
.deb 파일은 한 가지 예외를 제외하고 원활하게 빌드 및 설치됩니다. 내 Python 애플리케이션에는 로그를 작성하기 위해 설치/재설치할 때마다 최소한 chmod 757 /opt/dist/logs가 필요합니다. 그렇지 않으면 "권한 거부" 사례가 발생합니다. 즉, 매번 수동으로 수행해야 합니다.
dpkg-deb를 사용하여 패키지를 빌드하기 전에 chmod 757 /opt/dist/logs를 설정하면 다음 오류가 발생합니다.
dpkg-deb error: control directory has bad permissions 757 (must be >=0755 and <=0775)
이는 응용 프로그램을 설치하는 사람이 /opt/dist/logs에 757 권한을 갖도록 설정하지 않고는 응용 프로그램을 실행하도록 할 수 없다는 의미입니다.
다른 사용자가 로그에 액세스해야 할 수도 있으므로 사용자에게 로컬로 로그를 쓰고 싶지 않습니다. 또한 모든 사용자가 애플리케이션을 실행할 수 있습니다. 즉, 모든 사용자가 이러한 로그에 쓸 수 있어야 합니다. 나는 한 디렉토리에 공유 라이브러리가 있고, 다른 디렉토리에 실행 파일이 있고, 세 번째 디렉토리에 로그가 있는 것처럼 내 파일이 여기저기에 흩어져 있는 것을 원하지 않습니다. 그렇지 않으면 필요한 것을 찾기가 어려울 것입니다. 어디에서나 필요합니다. 몇 달이 지나면 리소스 파일을 어디에 저장했는지 잊어버리고 모든 것이 한 곳에 있지 않기 때문에 검색해 보세요. 응용 프로그램이 Windows용으로 구축될 것이기 때문에 실행 파일과 관련하여 수행되어야 하는 로그 쓰기 경로를 조정하고 싶지 않습니다. 이는 Windows 및 Debian에 대해 여러 개의 서로 다른 로그 경로를 구현해야 한다는 것을 의미합니다. 이것은 고통스럽습니다.
누군가 내가 무엇을 할 수 있는지 말해 줄 수 있나요? .deb 파일을 만드는 방식이 근본적으로 잘못된 걸까요? Python 로그 파일을 작성하는 데 필요하더라도 권한을 자동으로 설정할 수 없으며, 실행 파일이 실행 파일이 배치된 것과 동일한 위치에서 로그를 검색하기 때문에 실행 파일과 함께 배치할 로그 파일이 필요합니다.