apt-get install은 어떤 기능을 수행합니까?


60

뭐라고합니까 apt-get install ...명령은 무엇입니까?

apt-get install ...명령을 입력 하면 화면에 일부 텍스트가 나타나지만 정보가 충분하지 않습니다. 파일이 생성 / 편집되는지, 서비스가 시작되었는지, 기타 활동인지 알고 싶습니다.

어떤 있는가 .sh하면 실행 파일 apt-get install ...실행은? 그렇다면 해당 sh파일 의 내용을 어떻게 볼 수 있습니까?

이 질문의 이유는 최근에 tomcat7을 설치하려고했기 때문입니다 apt-get install tomcat7. 설치 tomcat7-admin(관리자 웹 응용 프로그램) 까지 서버가 모든 요청에 ​​응답하지 않게 될 때까지 모든 것이 잘 작동합니다 . 나는 이것을 여러 번 시도했지만 항상 발생합니다.




자세한 내용 은 wiki.debian.org/Apt 를 방문 하십시오
Pandya

2
14.04부터는 apt-get로 대체됩니다 apt. 교체는 아직 완료되지 않은,하지만 작동 install, upgradedist-upgrade다른 사람의 사이에서.
Paddy Landau

@PaddyLandau 교체 용 또는 추가 / 래퍼 유틸리티입니까?
muru

답변:


49

대부분 apt-get다음을 수행합니다.

  • 종속성을 확인하고 설치를 요청합니다.
  • 패키지를 다운로드하여 확인한 다음 dpkg설치하라는 메시지를 표시합니다.

dpkg 의지:

  • 패키지를 추출하고 컨텐츠를 올바른 위치에 복사하고 기존 파일 및 수정 사항을 확인하십시오.
  • 패키지 관리자 스크립트를 실행하십시오 . preinst,, postinstprerm( postrm이전에 패키지를 업그레이드하는 경우)
  • 트리거를 기반으로 일부 작업을 실행

일반적으로에있는 관리자 스크립트에 관심이있을 수 있습니다 /var/lib/dpkg/info/<package-name>.{pre,post}{rm,inst}. 이들은 일반적으로 쉘 스크립트이지만 어려운 규칙은 없습니다. 예를 들면 다음과 같습니다.

$ ls /var/lib/dpkg/info/xml-core.{pre,post}{rm,inst}
/var/lib/dpkg/info/xml-core.postinst
/var/lib/dpkg/info/xml-core.postrm
/var/lib/dpkg/info/xml-core.preinst
/var/lib/dpkg/info/xml-core.prerm

30

한마디로 : apt-get install시스템이 새로 설치된 소프트웨어 응용 프로그램을 성공적으로 실행할 수 있도록 필요한 모든 작업을 수행합니다.

더 길게:

예비 :

로부터 :

설치를 위해 지정된 패키지에 필요한 모든 패키지도 검색 및 설치됩니다.

이러한 패키지는 네트워크의 저장소에 저장됩니다. 따라서 apt-get필요한 모든 파일을 임시 디렉토리 ( /var/cache/apt/archives/) 로 다운로드하십시오 . 웹 또는 ftp 서버에서 다운로드됩니다. 그것들은 소위 sources.list; 리포지토리 목록 그때부터 그들은 하나씩 절차 적으로 설치됩니다.

첫 번째 것은 더 이상 의존성이없는 것들입니다. 따라서 다른 패키지를 설치할 필요가 없습니다. 이를 통해 이전에 종속성이 있었던 다른 패키지에 더 이상 종속성이 없습니다. 지정된 패키지가 설치 될 때까지 시스템은 계속 해당 프로세스를 계속 수행합니다.

각 패키지는 설치 절차를 거칩니다.

패키지 설치 :

데비안 기반 리눅스 배포판에서 우분투로서, 그 패키지는 deb- 데비안 바이너리 패키지 형식 이라는 지정된 표준화 된 형식 으로되어 있습니다.

이러한 패키지에는 시스템에 설치 될 파일이 포함되어 있습니다. 또한 제어 파일이 들어 있습니다 . 이 파일에는 패키징 시스템이 특정 상황에서 실행해야하는 스크립트가 포함되어 있습니다. 소위 관리자 스크립트 . 해당 스크립트는 다음과 같이 나뉩니다.

  • preinst: 시스템 파일 계층에 파일을 설치하기 전에
  • postinst: 설치 후
  • prerm: 제거하기 전에
  • postrm: 제거 후

새 패키지 설치 절차를 보여주는 흥미로운 그림이 있습니다.

설치

더 많은 제어 파일이 있으며 가장 중요한 것은 다음과 같습니다.

  • control: 종속성 목록 및 패키지를 식별하기위한 기타 유용한 정보
  • conffiles: 구성 파일 목록 (보통에있는 파일 /etc)
  • debian-binary: 현재 2.0 의 deb 패키지 버전을 포함합니다
  • md5sums: 확인을 위해 패키지에있는 각 파일의 md5sum 목록
  • templates: 설치 중 오류 설명 및 대화 상자가 있는 파일

11

실제 상황 에 맞게 하려면 Apt 소스를 가져와야합니다. 소스 리포지토리를 활성화 한 경우 매우 간단합니다.

apt-get source apt

apt-get명령 자체에 살고 있습니다 cmdline/apt-get.cc. 읽는 것은 고통 스럽지만 대부분 apt-get의 작업은 상당히 광범위하게 설명되어 있습니다. 그러나 설치는에있는 DoInstall기능을 통해 매핑 됩니다 apt-private/private-install.{cc,h}.

apt-get은 단지 동전의 한면이라는 것을 기억해야합니다.
dpkg실제 설치를 처리하고 있지만 직접 DoInstall알지 못합니다 dpkg. apt-get실제로 놀랍게도 패키지 관리자와 무관합니다. 모든 기능은 다음을 통해 추상화됩니다apt-pkg/package-manager.cc

나는 간략하게보고 있지만 거기에서 이것이 실제로 dpkg시스템에 어디에 부착되어 있는지 알 수 없습니다 . 이 중 일부는 자동 구성되어있는 것처럼 apt-pkg/aptconfiguration.cc보이지만 이것은 매우 잘됩니다. 이것을 풀기 위해 며칠을 보낼 수 있습니다.

그래도 소스 문서는 좋습니다. 각 파일을 살펴보고 실제로 일어나는 일을 해결하기 위해 헤더를 읽는 것보다 더 나쁜 일을 할 수 있습니다.


6

이 짧은 것보다 더 나은 환상적인 답변이 있지만 패키지 관리자가 변경 한 내용을 더 잘 이해하는 데 도움이되는 것은 Docker 입니다. 를 사용하여 컨테이너에서 변경 한 내용을 비교할 수 있으며 docker diff <container>모든 변경 사항이 표시됩니다. 이것은 apt-get install시스템에서 어떤 일을하는지보기 위해 후드 아래를 살펴볼 때 특히 유용 합니다. 빠른 검색은이를 구현하는 데 도움이되는 몇 가지 리소스 를 제공합니다.


1
포인트를 주셔서 감사합니다. Docker 컨테이너에서 firefox를 설치하고 다른 터미널 탭에서 컨테이너의 차이점을 면밀히 모니터링하고 컨테이너에서 모든 파일이 변경되는 것을 배웠습니다. 더 명확하게 이해하는 데 도움이되었습니다.
abhy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.