저는 최근 Debian 기반 배포판에는 패키지 관리자를 통해 설치된 모든 응용 프로그램이 사용해야 하는 고정된 공통 종속성 및 라이브러리 세트가 있다는 것을 알게 되었습니다.
Windows에 비해 각 응용 프로그램은 일반적으로 자체 종속성을 제공하므로 Windows OS 설치는 동일한 종속성/라이브러리의 여러 인스턴스를 설치하며 각 응용 프로그램은 종속성 자체의 업데이트를 관리해야 합니다.
일부 개발자가 APT 패키지 관리자와 호환되는 소프트웨어를 만드는 것을 알고 있지만 "Windows" 방식으로 소프트웨어를 만드는 응용 프로그램 개발자도 많을 것이라고 생각합니다.
따라서 제 질문은 업스트림 개발자가 번들 종속성을 포함하는 대규모 모놀리식 설치를 배포하려는 의도로 소프트웨어를 만드는 경우 소프트웨어가 로컬 종속성 종속성 대신 공통 종속성 컬렉션을 사용하도록 APT 패키지 관리자가 소스 코드를 다시 작성해야 하느냐는 것입니다. ?
그렇다면 이런 일이 자주 발생합니까? 이것이 패키지 관리자의 주요 임무인가요?
답변1
따라서 제 질문은 업스트림 개발자가 번들 종속성을 포함하는 대규모 모놀리식 설치를 배포하려는 의도로 소프트웨어를 만드는 경우 소프트웨어가 로컬 종속성 종속성 대신 공통 종속성 컬렉션을 사용하도록 APT 패키지 관리자가 소스 코드를 다시 작성해야 하느냐는 것입니다. ?
전체 설치가 그렇지 않은 한 반드시 그런 것은 아닙니다.갈등기존 라이브러리나 파일 이름을 사용합니다. 즉, 시스템에 이미 하나 /lib/foobar
(버전 12)가 있고 모놀리식 패키지에 foobar
v.9가 필요하고 번들로 제공되는 경우 모놀리식 패키지는 해당 경로 이름이 이미 사용되기 때문에 foobar
파일 이름을 사용하여 v.9를 저장할 수 없습니다./lib/foobar
할 수 있다/lib/foobar_v9
, 또는 아마도 를 사용하십시오 .../monolithic_app_dir/lib/foobar
.
그렇다면 이런 일이 자주 발생합니까? 이것이 패키지 관리자의 주요 임무인가요?
예, 필요하다면 예방하세요정돈하다다양한 수준의 종속성 지옥은 패키지 관리자가 대부분 수행하는 작업입니다.
답변2
데비안 정책데비안 패키지를 만들 때 프로그램과 함께 번들로 제공되는 라이브러리, 도구 등은 패키지에서 분리되어야 합니다. 또한 Debian 정책에서는 라이브러리를 최소한 런타임 패키지(예: libfoo-version
)와 정적 라이브러리 및 헤더 파일이 포함된 개발 버전(예: libfoo-version-dev
)으로 분할하도록 요구합니다.
자신의 시스템에서 수행하는 작업은 자신의 사업이지만 모놀리식 애플리케이션을 패키징하는 데비안 개발자(DD)는 번들을 해제해야 합니다. 이는 데비안의 기존 라이브러리에 의존하거나 이를 위한 패키지를 생성하는 것을 의미합니다(아직 존재하지 않는 경우).
다른 배포판에는 다른 정책이 있을 수 있지만 대부분 공식 저장소의 패키지를 번들 해제해야 합니다. 번들링은 패키징의 요점을 무너뜨리고 특정 라이브러리를 사용하는 모든 프로그램에 라이브러리 보안 업데이트를 적용하는 것을 번거롭게 만들기 때문입니다.