나는 공식 저장소에서 찾을 수 없는 몇 가지 종속성을 갖는 데비안 패키지를 만들고 있습니다. 이러한 다른 패키지를 종속성으로 지정하는 것만으로는 문제가 해결되지 않습니다. 설치 자체에 apt-get update를 실행하고 소스 저장소(내 것이 아님)를 /etc/apt/sources.list.d에 추가하는 작업이 포함되기 때문입니다.
더: 이러한 패키지 중 하나는 Dart Language SDK입니다. deb를 가져와 dpkg를 사용하거나 Google 저장소 중 하나를 추가해야만 설치할 수 있습니다. 내 목표는 패키지 설치와 관련된 단계 수를 최소화하는 것과 깔끔한 패키지 배포 사이의 균형을 찾는 것입니다.
따라서 내 패키지의 사전 설치 스크립트에서 이러한 소스를 추가한 다음 apt-get update를 실행하고 싶지만 주요 문제는 패키지를 열고 설치할 때 dpkg가 잠긴다는 것입니다. 그렇다면 내가 원하는 것을 직접 달성할 수 있습니까? 아니면 다른 옵션/해결 방법이 있습니까?
답변1
나는 그것이 직접적으로 가능하다고 생각하지 않습니다.
그러나 사용자가 패키지를 설치했는데 아직 추가되지 않았기 때문에 저장소에서 가져온 것이 아닌 것 같습니다. 따라서 제가 제안하는 첫 번째 해결 방법은 일반적인 방법으로 수행하는 것입니다. 즉, 사용자가 저장소를 추가하도록 한 다음(또는 사용자에게 간단한 쉘 스크립트를 제공) 패키지를 정상적으로 설치하는 것입니다. 이것이 제가 선호하는 솔루션입니다. 쉘 스크립트를 실행하는 것은 패키지를 설치하는 것보다 어렵지 않습니다.
두 번째 해결 방법: 패키지를 설치 패키지로 만드세요. 저장소를 설정한 다음 사용자에게 (예를 들어 debconf 주석이나 기타 화면 프롬프트를 통해) 저장소에서 제공되는 실제 패키지를 설치하라고 지시합니다.
세 번째 해결 방법: 동일한 설치 패키지를 사용하지만 저장소에서 동일한 패키지 이름을 사용하고 더 높은 버전을 사용합니다(아마도 epoch 사용). 따라서 초기 설치 시 저장소가 설정되고 apt upgrade
그와 유사한 것이 실제 패키지를 가져옵니다.
넷째: 이것이 좋은 생각인지는 모르겠지만 postinst에서 dpkg 잠금을 기다리는 백그라운드 프로세스를 시작한 다음 설치를 완료합니다. 내 생각에는 at
이것이 batch
효과가 있거나 일반 /path/to/script &
추종자 에게만 disown
패키지 설치가 백그라운드에서 수행된다는 것을 사용자에게 알리고 싶을 수도 있습니다.
PS: GPG 키를 추가해야 할 수도 있습니다.