패키지 관리자

Package manager
시냅틱, 전체 기능을 갖춘 패키지 관리자의 예

패키지 관리자 또는 패키지 관리 시스템은 컴퓨터의 컴퓨터 프로그램을 일관성 있게 설치, 업그레이드, 구성 및 제거하는 프로세스를 자동화하는 소프트웨어 도구 모음입니다.[1]

패키지 관리자는 아카이브 파일에서 패키지, 소프트웨어 및 데이터의 배포를 다룬다.패키지에는 소프트웨어의 이름, 목적 설명, 버전 번호, 벤더, 체크섬(암호 해시 함수 선호), 소프트웨어가 제대로 실행되기 위해 필요한 종속성 목록 등의 메타데이터가 포함되어 있다.설치 시 메타데이터는 로컬 패키지 데이터베이스에 저장된다.패키지 관리자는 일반적으로 소프트웨어의 불일치 및 사전 요구 사항 누락 방지를 위해 소프트웨어 종속성 및 버전 정보의 데이터베이스를 유지 관리한다.소프트웨어 리포지토리, 이진 리포지토리 관리자, 앱 스토어와 긴밀하게 협력한다.

패키지 관리자는 수동 설치 및 업데이트의 필요성을 없애도록 설계되어 있다.이는 운영 체제가 일반적으로 수백 또는 심지어 수만 개의 개별 소프트웨어 패키지로 구성된 대기업에 특히 유용할 수 있다.[2]

역사

1994년경부터 초기 패키지 매니저는 자동 종속성[3] 해결책은 없었지만 이미 실행 중인 시스템에서 소프트웨어를 추가하고 제거하는 과정을 획기적으로 간소화할 수 있었다.[4]

1995년경, CPAN을 시작으로, 패키지 매니저는 리포지토리에서 패키지를 다운로드하여 종속성을 자동으로 해결하고 필요에 따라 설치하여 시스템에서 소프트웨어를 설치, 제거 및 업데이트하는 작업을 하기 시작했다.[5]

기능들

새 소프트웨어를 다운로드하는 데 사용되는 패키지 관리자 그림.수동 작업에는 사용권 계약에 동의하거나 일부 패키지별 구성 옵션을 선택하는 작업이 포함될 수 있다.

소프트웨어 패키지는 컴퓨터 프로그램과 그 배포에 필요한 메타데이터를 포함하는 아카이브 파일이다.컴퓨터 프로그램은 먼저 컴파일해서 만들어야 하는 소스 코드에 있을 수 있다.[6]패키지 메타데이터에는 패키지 설명, 패키지 버전 및 종속성(기타 미리 설치해야 하는 패키지)이 포함된다.

패키지 관리자는 사용자의 명령에 따라 소프트웨어 패키지를 검색, 설치, 유지 관리 또는 제거하는 작업을 담당한다.패키지 관리 시스템의 일반적인 기능은 다음과 같다.

공유 라이브러리의 문제

정적 라이브러리 연결 대신 동적 라이브러리 연결에 의존하는 컴퓨터 시스템은 패키지 및 애플리케이션 간에 컴퓨터 명령의 실행 가능한 라이브러리를 공유한다.이러한 시스템에서 서로 다른 버전의 라이브러리를 필요로 하는 서로 다른 패키지들 간의 복잡한 관계는 "의존적 지옥"으로 알려진 도전적인 구어체로 귀결된다.Microsoft Windows 시스템에서는 동적으로 연결된 라이브러리를 사용할 때 이를 "DLL 지옥"이라고도 한다.이러한 시스템에서는 우수한 패키지 관리가 필수적이다.[7]OPENSTEP의 Framework 시스템은 여러 버전의 라이브러리를 동시에 설치할 수 있도록 허용하고, 소프트웨어 패키지가 어떤 버전에 연결되었는지 지정함으로써 이 문제를 해결하려는 시도였다.

로컬로 컴파일된 패키지의 프런트 엔드

시스템 관리자는 패키지 관리 소프트웨어 이외의 도구를 사용하여 소프트웨어를 설치 및 유지관리할 수 있다.예를 들어, 로컬 관리자는 포장되지 않은 소스 코드를 다운로드하여 컴파일하고 설치할 수 있다.이로 인해 로컬 시스템의 상태가 패키지 관리자의 데이터베이스 상태와 동기화되지 않을 수 있다.로컬 관리자는 일부 종속성을 수동으로 관리하거나 변경 사항을 패키지 관리자에 통합하는 등의 추가 조치를 취해야 한다.

로컬로 컴파일된 패키지가 패키지 관리와 통합되도록 하기 위해 사용할 수 있는 도구가 있다.슬랙웨어 리눅스뿐만 아니라 .deb, .rpm 파일 기반의 배포에는 CheckInstall이 있으며, 겐투 리눅스 등의 레시피 기반 시스템과 아치 리눅스 등의 하이브리드 시스템의 경우 레시피를 먼저 작성할 수 있어, 패키지가 로컬 패키지 데이터베이스에 맞도록 한다.[citation needed]

구성 유지 관리

소프트웨어 업그레이드 시 특히 문제가 되는 것은 구성 파일의 업그레이드다.적어도 유닉스 시스템에서는 패키지 관리자가 파일 보관 유틸리티의 확장으로 시작되었기 때문에, 일반적으로 규칙을 적용하기보다는 구성 파일을 덮어쓰거나 보존할 수 있을 뿐이다.일반적으로 커널 구성에 적용되는 예외 사항(파손된 경우 재시작 후 컴퓨터를 사용할 수 없게 됨)이 있다.예를 들어, 이전 구성 파일이 사용하지 않도록 설정해야 하는 새 옵션을 명시적으로 사용하지 않도록 설정하지 않으면 구성 파일의 형식이 변경될 경우 문제가 발생할 수 있다.데비안dpkg과 같은 일부 패키지 관리자는 설치 중에 구성을 허용한다.다른 상황에서는 기본 구성을 사용하여 패키지를 설치한 다음 예를 들어, 헤드리스 설치에서 많은 수의 시스템으로 이 구성을 덮어쓰는 것이 바람직하다.이런 종류의 사전 구성 설치도 dpkg에서 지원한다.

리포지토리

사용자에게 자신의 시스템에 설치할 수 있도록 허용하는 소프트웨어의 종류에 대한 더 많은 제어권을 주기 위해(때로는 배포자 측의 법적 또는 편의적 이유 때문에) 소프트웨어는 여러 소프트웨어 저장소에서 다운로드되는 경우가 많다.[8]

업그레이드 억제

사용자가 업그레이드를 가져오기 위해 패키지 관리 소프트웨어와 상호 작용하는 경우, 실행할 작업 목록(보통 업그레이드할 패키지 목록, 가능하면 이전 버전과 새로운 버전 번호를 부여)을 사용자에게 제시하고, 사용자가 대량으로 업그레이드를 수용하거나 개별 패키지 f를 선택할 수 있도록 하는 것이 관례다.또는 업그레이드.많은 패키지 매니저는 특정 패키지를 절대로 업그레이드하지 않도록 구성하거나 소프트웨어의 패키지 제공자에 의해 정의된 바와 같이 이전 버전에서 중요한 취약성이나 불안정성이 발견되었을 때만 업그레이드하도록 구성할 수 있다.이 과정을 버전 핀딩이라고 부르기도 한다.

예를 들어,

  • yumexclude=openoffice*[9] 구문을 사용하여 이를 지원한다.
  • IgnorePkg= open[10] 오피스를 사용하는 pacman(두 경우 모두 open 오피스를 업그레이드하지 못하도록 함)
  • dpkgdselect는 패키지 선택에서 홀드 플래그를 통해 이를 부분적으로 지원한다.
  • APT는 복잡한 "핀링" 메커니즘을[11] 통해 보류 플래그를 확장한다(사용자도 패키지를[12] 블랙리스트에 올릴 수 있음)
  • 적성에는 "보유"와 "보유" 깃발이 있다.
  • portage는 package.mask 구성 파일을 통해 이를 지원한다.

계단식 패키지 제거

보다 발전된 패키지 관리 기능 중 일부는 대상 패키지에 의존하는 모든 패키지와 대상 패키지만 의존하는 모든 패키지도 함께 제거되는 "캐스캐딩 패키지 제거"[10] 기능을 제공한다.

명령어 비교

대부분의 패키지 관리자가 유사한 기능을 제공하므로 모든 특정 패키지 관리자마다 명령이 다르지만, 대체로 번역이 가능하다.

${PKG}패키지 이름.
액션 지퍼[13] 팩맨 적성이 있는 dnf (dnf) 포티지 닉스 홈브루
패키지 설치 zypper in ${PKG} pacman -S ${PKG} apt install ${PKG} dnf install ${PKG} emerge ${PKG} nix-env -i ${PKG} brew install ${PKG}
패키지 제거 zypper rm -RU ${PKG} pacman -R ${PKG} apt remove ${PKG} dnf remove --nodeps ${PKG} emerge -C ${PKG}또는
emerge --unmerge ${PKG}
nix-env -e ${PKG} brew rm ${PKG}
(rm의 속기다.remove또는uninstall)
패키지(및 고아) 제거 zypper rm -u --force-resolution ${PKG} pacman -Rs ${PKG} apt autoremove ${PKG} dnf remove ${PKG} emerge -c ${PKG}또는
emerge --depclean ${PKG}
nix-env -e ${PKG} && nix-env -u
brew rm ${PKG} &&\ brew autoremove
소프트웨어 데이터베이스 업데이트 zypper ref pacman -Sy apt update dnf check-update emerge --sync nix-channel --upgrade brew update
업데이트할 수 있는 패키지 표시 zypper lu pacman -Qu apt list --upgradable dnf check-update emerge -avtuDN --with-bdeps=y @world또는
emerge -u --pretend @world
(-D의 속기다.--deep그리고
-u의 속기다.--update.)
nix-channel --upgrade && \nix-env -u&&& \nix-collect-collect-collect-collect-
brew outdated
고아 및 구성 삭제 zypper rm -u pacman -Rsn $(pacman -Qdtq) apt autoremove dnf erase ${PKG} emerge --depclean nix-collect-garbage -d brew unlink ${PKG} && brew clean
쇼 고아 zypper pa --orphaned --unneeded pacman -Qdt package-cleanup -q --leaves --exclude-bin
(-q의 속기다.--quiet.)
emerge -caD또는
emerge --depclean --pretend
모두 업데이트 zypper up pacman -Syu apt upgrade dnf update emerge -u -D --with-bdeps=y @world nix-env -u && nix-collect-garbage brew upgrade

Arch Linux Pacman/Rosetta wiki는 광범위한 개요를 제공한다.[14]

유병률

dpk와 같은 패키지 매니저들은 1994년 초에 존재해왔다.[15]

바이너리 패키지를 지향하는 리눅스 배포판은 소프트웨어 관리 및 유지보수를 위한 주요 수단으로 패키지 관리 시스템에 크게 의존한다.안드로이드(리눅스 기반), iOS(유닉스 기반), 윈도폰 등 모바일 운영체제는 각 벤더의 앱스토어에 거의 독점적으로 의존하고 있어 전용 패키지 관리 시스템을 사용하고 있다.

설치 프로그램과의 비교

패키지 매니저는 흔히 '설치 매니저'라고 하는데, 이 때문에 패키지 매니저와 설치자 사이에 혼란이 생길 수 있다.차이점은 다음과 같다.

기준 패키지 관리자 설치 프로그램
배송됨 보통 운영체제는 각 컴퓨터 프로그램
설치 정보 위치 하나의 중앙 설치 데이터베이스 그것은 전적으로 설치자의 재량에 달려 있다.앱의 폴더 내 파일일 수도 있고, 운영 체제의 파일과 폴더 중 하나일 수도 있다.기껏해야 설치 정보를 노출하지 않고 제거자 목록에 자신을 등록할 수 있다.
유지 보수 범위 잠재적으로 시스템의 모든 패키지 함께 제공된 제품만
개발자 패키지 관리자 벤더 1개 여러 설치 프로그램 벤더
패키지 형식 소수의 잘 알려진 형식 앱 수만큼 많은 형식이 있을 수 있음
패키지 형식 호환성 패키지 관리자가 지원하는 한 사용할 수 있다.패키지 관리자의 최신 버전이 이를 계속 지원하거나 사용자가 패키지 관리자를 업그레이드하지 않는 경우. 설치 프로그램은 보관 형식을 사용하는 경우 항상 해당 보관 형식과 호환된다.그러나 설치자들은 모든 컴퓨터 프로그램과 마찬가지로 소프트웨어 부패의 영향을 받을 수 있다.

빌드 자동화 유틸리티와 비교

대부분의 소프트웨어 구성 관리 시스템은 소프트웨어 구축과 소프트웨어 배포를 별도의 독립적 단계로 취급한다.빌드 자동화 유틸리티는 일반적으로 사람이 읽을 수 있는 소스 코드 파일을 컴퓨터에 이미 저장한 후, 같은 컴퓨터나 원격 컴퓨터의 이진 실행 파일 패키지로 변환하는 프로세스를 자동화한다.나중에 일반적으로 일부 다른 컴퓨터에서 실행되는 패키지 관리자는 인터넷을 통해 미리 작성된 이진 실행 파일 패키지를 다운로드하여 설치한다.

그러나 두 종류의 도구는 공통점이 많다.

  • 예를 들어, 이진 구성 요소 간의 종속성을 처리하기 위해 패키지 관리자에서 사용되는 종속성 그래프 위상학적 정렬은 소스 구성 요소 간의 종속성을 처리하기 위해 빌드 관리자에서도 사용된다.
  • 예를 들어, 많은 makefiles는 실행 파일을 만들 뿐만 아니라 실행 파일을make install.
  • 예를 들어, 소스 기반 배포를 위한 모든 패키지 관리자(Portage, Sorcery, Homebru 등)는 사람이 판독할 수 있는 소스 코드를 이진 실행 파일로 변환하고 설치하는 것을 지원한다.

마악A-A-P와 같은 몇 가지 도구는 건물과 배치를 모두 처리하도록 설계되어 있으며, 빌드 자동화 유틸리티나 패키지 관리자 또는 둘 다로 사용할 수 있다.[16]

공통 패키지 관리자 및 형식

유니버설 패키지 관리자

바이너리 리포지토리 매니저로도 알려져 있으며, 소프트웨어 개발 과정에서 사용 및 생산되는 바이너리 파일, 아티팩트 및 패키지의 다운로드 및 저장을 최적화하기 위해 설계된 소프트웨어 툴이다.[17]이러한 패키지 관리자는 기업이 모든 패키지 유형을 취급하는 방식을 표준화하는 것을 목표로 한다.이들은 사용자에게 모든 아티팩트 유형에 보안 및 컴플라이언스 메트릭을 적용할 수 있는 기능을 제공한다.유니버설 패키지 매니저는 DevOps 툴체인의 중심에 있는 것으로 언급되어 왔다.[18]

패키지 형식

각 패키지 매니저는 자신이 관리할 수 있는 패키지의 형식과 메타데이터에 의존한다.즉, 패키지 관리자는 종속성과 같은 적절한 메타데이터와 함께 특정 패키지 관리자에 대해 번들링할 파일 그룹이 필요하다.종종 핵심 유틸리티 세트가 이러한 패키지의 기본 설치를 관리하고 여러 패키지 관리자가 추가 기능을 제공하기 위해 이러한 유틸리티를 사용한다.

예를 들어, yum은 백엔드로서 rpm에 의존한다.yum은 시스템 네트워크를 유지하기 위한 간단한 구성과 같은 기능을 추가함으로써 백엔드의 기능을 확장한다.또 다른 예로 시냅틱 패키지 매니저고급 패키징(apt) 라이브러리를 사용하여 그래픽 사용자 인터페이스를 제공하며, 이 라이브러리는 다시 핵심 기능을 위해 dpkg에 의존한다.

에일리언은 다른 리눅스 패키지 형식 에 변환하는 프로그램으로, 리눅스 Standard Base(LSB) 호환 .rpm 패키지, .deb, 스탬프(.slp), Solaris(.pkg) 및 슬랙웨어(.tgz, .txz, .tbz, .tlz) 패키지 간의 변환을 지원한다.

모바일 운영체제에서는 구글플레이안드로이드 애플리케이션 패키지(APK) 포맷을 소비하는 반면 마이크로소프트 스토어APPXXAP 포맷을 사용한다.(구글플레이와 마이크로소프트 스토어 모두 패키지 매니저가 eponymous package manager를 가지고 있다)

무료 오픈 소스 소프트웨어 시스템

무료 오픈 소스 소프트웨어의 성격에 따라 유사하고 호환 가능한 라이센스에 따른 패키지는 다수의 운영 체제에서 사용할 수 있다.이러한 패키지는 구성 가능하고 내부적으로 복잡한 패키징 시스템을 사용하여 결합 및 배포할 수 있어 소프트웨어의 많은 순열을 처리하고 버전별 종속성과 충돌을 관리할 수 있다.자유 및 오픈 소스 소프트웨어의 일부 포장 시스템도 자유 및 오픈 소스 소프트웨어로 출시된다.Mac OS X와 Windows와 같은 독점 운영 체제의 패키지 관리와 Linux와 같은 무료 및 오픈 소스 소프트웨어의 패키지 관리 사이의 일반적인 차이점은 무료 및 오픈 소스 소프트웨어 시스템이 동일한 메커니즘을 통해 타사 패키지도 설치 및 업그레이드하도록 허용하는 반면 Mac OS X의 패키지 관리자는그리고 Windows는 각각 애플과 마이크로소프트가 제공하는 소프트웨어만 업그레이드한다(Windows의 일부 타사 드라이버는 제외).타사 소프트웨어를 지속적으로 업그레이드하는 기능은 일반적으로 해당 리포지토리의 URL을 패키지 관리 구성 파일에 추가하여 추가된다.

애플리케이션 레벨 패키지 관리자

시스템 레벨 애플리케이션 관리자 외에도 기능이 제한된 운영 체제와 개발자가 최신 라이브러리를 필요로 하는 프로그래밍 언어를 위한 애드온 패키지 매니저가 있다.

시스템 레벨 패키지 매니저와 달리 애플리케이션 레벨 패키지 매니저는 소프트웨어 시스템의 작은 부분에 초점을 맞춘다.일반적으로 다음과 같은 시스템 수준 패키지 관리자가 유지 관리하지 않는 디렉토리 트리 내에 위치한다.c:\cygwin 또는 /opt/sw.[19]그러나 프로그래밍 라이브러리를 다루는 패키지 관리자의 경우는 그렇지 않을 수 있으며, 두 패키지 관리자가 모두 파일을 "소유"한다고 주장하여 업그레이드를 중단할 수 있기 때문에 충돌이 발생할 수 있다.

임팩트

Ian Murdock은 패키지 관리가 "Linux가 업계에 가져온 가장 큰 발전"이며, 그것이 운영 체제와 애플리케이션 사이의 경계를 허문다고 언급했으며, "새로운 혁신을 시장에 더 쉽게 밀어넣고 [...] OS를 진화하는 것"이라고 말했다.[20]

PackagingCon으로 알려진 패키지 매니저 개발자들을 위한 컨퍼런스도 있다.패키지 관리에 대한 서로 다른 접근 방식을 이해할 목적으로 2021년에 설립되었다.[21]

참고 항목

참조

  1. ^ "What is a package manager?". Archived from the original on 17 October 2017. Retrieved 19 December 2018.
  2. ^ "Software Distribution". Dell KACE. Archived from the original on 3 October 2015. Retrieved 11 July 2012.
  3. ^ "The history of *nix package management". Retrieved 12 October 2021.
  4. ^ "A review of InfoMagic's December 1994 Release". Retrieved 12 October 2021.
  5. ^ "The Timeline of Perl and its Culture".
  6. ^ Ludovic Courtes, 2013년 6월, Guix와의 기능 패키지 관리, 2013년 6월, 마드리드, 유럽 리스프 심포지엄
  7. ^ Tucker, Chris (15 March 2007). "OPIUM: Optimal Package Install/Uninstall Manager" (PDF). Proceedings of the 29th International Conference on Software Engineering - ACM Conferences. UC San Diego: 1. doi:10.1109/ICSE.2007.59. ISBN 978-0-7695-2828-1. S2CID 1279451. Retrieved 14 September 2011.
  8. ^ "Linux repository classification schemes". braintickle.blogspot.com. Retrieved 1 March 2008.
  9. ^ "CentOS yum pinning rpms". centos.org. Archived from the original on 2 November 2007. Retrieved 1 March 2008.{{cite web}}: CS1 maint : 부적합한 URL(링크)
  10. ^ a b "pacman(8) Manual Page". archlinux.org. Retrieved 1 March 2008.
  11. ^ "How to keep specific versions of packages installed (complex)". debian.org. Retrieved 1 March 2008.
  12. ^ "Apt pinning to blacklist a package". Archived from the original on 22 July 2011. Retrieved 19 August 2010.
  13. ^ "documentation/sles11". en.opensuse.org.
  14. ^ "Pacman/Rosetta - ArchWiki". wiki.archlinux.org. Retrieved 17 September 2017.
  15. ^ "dpkg version 0.93.15 source code". Archived from the original on 2 April 2015. Retrieved 19 December 2018.
  16. ^ Wealco Dolstra, "소프트웨어 구축소프트웨어 배포 통합"
  17. ^ Waters, John K. (8 September 2015). "JFrog Releases 'Universal' Artifact Repository". ADT Mag. Application Development Trends Magazine.
  18. ^ Decoster, Xavier (18 August 2013). "An Overview of the NuGet Ecosystem". CodeProject.com.
  19. ^ "Fink - Home". www.finkproject.org. Retrieved 2 September 2021.
  20. ^ "How package management changed everything". ianmurdock.com. Archived from the original on 23 February 2009. Retrieved 1 March 2008.
  21. ^ "PackagingCon 2021 - a conference for package manager developers and packagers". packaging-con.org. Retrieved 2 September 2021.

외부 링크