우리는 Python을 사용하여 라즈베리파이 애플리케이션을 개발하고 있습니다. 우리는 Linux에서 애플리케이션을 배포한 경험이 많지 않으며 출시 후 이 애플리케이션을 업데이트하는 방법을 알아내야 합니다. 우리는 두 가지 접근 방식을 생각해 냈습니다.
- 사용자 정의 개인 저장소를 만들고 애플리케이션을 위한 .deb 패키지를 만듭니다.
- 패키지된 앱의 특정 URL을 확인하고 압축을 풀고 이전 앱을 다시 작성하는 스크립트를 만듭니다.
우리가 취해야 할 접근 방식을 추천해주실 수 있나요?
답변1
저는 확실히 apt 패키지(.deb)를 선택하겠습니다. 귀하의 애플리케이션은 대상 시스템에서 관리하기가 더 쉬워지고 소프트웨어 제공에 대해 더 큰 확신을 갖게 될 것입니다. APT는 견고한 시스템입니다.
APT는 모든 소프트웨어 종속성이 해결되었는지 확인합니다. "배터리 소유" Python에는 시스템 소프트웨어 라이브러리에 대한 많은 종속성이 있습니다. 코드를 다운로드하고 애플리케이션을 덮어쓰는 경우 시스템에 애플리케이션이 의존할 수 있는 올바른 버전의 라이브러리가 포함되어 있는지 확인하는 검사가 없습니다. 이로 인해 애플리케이션이 잘못 작동하거나 전혀 작동하지 않을 수 있습니다.
APT는 또한 애플리케이션 패키지를 구축할 때 여러 가지 검사를 수행합니다. Python 패키지를 빌드하기 위한 많은 APT 도구와 하위 시스템이 있습니다.
나는 당신이 자신만의 유통 시스템을 만들려고 한다면, 자신만의 코드를 더 많이 개발해야 하고 장기적으로 더 많은 물류 문제에 직면하게 될 것이라고 믿습니다.
단점은 APT 시스템에서 Python 패키지를 빌드하는 방법을 배워야 한다는 점인데, 이는 복잡할 수 있지만 그만한 가치가 있다고 생각합니다.
15년 넘게 Debian 및 Ubuntu 사용자, 개발자, 관리자 및 패키지 작성자로서 저는 관련 위험 때문에 공급업체가 APT 시스템 외부에 소프트웨어를 제공하려는 것을 좋아하지 않습니다.
답변2
"업데이트를 확인하는 일부 스크립트"는 확실히 수상해 보입니다. 추가 조항이 필요하고 기본적으로는 없는 필수 업데이트 권한이 필요하며 모든 종류의 문제에 직면하고 바퀴를 재발명하게 됩니다. 나는 패키지 시스템 외부에서 내 시스템에 대한 업데이트 수행을 엄격히 거부합니다. 단, 내 자신의 소스 저장소에서 소프트웨어를 업데이트하고 내가 무엇을 하고 있는지 알고 있는 경우는 제외합니다. 수리할 수 없을 정도로 시스템을 손상시키는 것은 너무 위험합니다.
대상 시스템과 함께 제공되는 패키징 시스템(예: .deb 패키지)을 선택하거나 원하는 경우 저장소에서 사용할 수 있도록 하십시오. 이렇게 하면 사용자가 시스템 도구를 사용하여 간단한 작업으로 실제로 업데이트할 수 있습니다.sudo apt-get update; sudo apt-get upgrade