apt-get은 실제로 어떻게 작동합니까?


34

좋아, 나는 apt-get {install|upgrade|remove} mypackages구성 데이터 파일 및 종속성뿐만 아니라 바이너리를 설치, 업그레이드 또는 제거 하는 데 사용할 수있는 방법을 이해합니다 (실제로 remove추가 플래그가 제공되지 않으면 바이너리 만 제거합니다).

나는 이것을 설명 할 때 어떻게 사용되는지 찾고 있지 man않지만, 그것이하고있는 일에 대해 높은 수준입니다. 최종 목표는 여러 원격 시스템에 일부 사용자 정의 소프트웨어 (make 파일로 작성)를 설치하고 관리 할 수있는 수단을 작성하는 것입니다. 프로세스에 대해 자세히 알아야합니다. 이 질문에 대한 답변이 사용 된 배포판을 기반으로하는 경우 데비안에 맞게 조정하십시오.

일반적으로 작동 방식 외에도 다음과 같은 구체적인 질문이 있습니다.

  1. apt 저장소에 액세스하는 클라이언트는 어떻게 파일을 추적합니까?
  2. 저장소가 동일한 운영 체제에서 호스팅되어야합니까 (즉, 적절한 저장소가 redhat에서 호스팅 될 수 있습니까)?
  3. 파일을 설치할 위치는 어떻게 지정됩니까? .deb파일에 의해 지정되어 있습니까?
  4. 원격 시스템이 저장소에 어떻게 액세스합니까? ftp (들)입니까 아니면 http (들)입니까?
  5. 리포지토리를 호스팅하는 머신이 특수 소프트웨어 (git 리포지토리의 gitlab과 같은)를 실행하고 있습니까? 아니면 일부 구조화 된 파일 시스템입니까?

답변:


47

https://wiki.debian.org/Packaging을 살펴보십시오 . 패키징 튜토리얼은 새로운 관리자 안내서의 일부뿐만 아니라 많은 도움이 될 것입니다.

당신의 질문에 관해서는, 순서대로 :

  1. 저장소에는 "목록"파일이 있습니다. 예를 들어, http://http.us.debian.org/debian/dists/stretch/main/binary-amd64/Packages.xz . apt-get update이 목록 파일을 다운로드하여에 저장합니다 /var/lib/apt/lists. 목록 파일에는 메타 데이터와 .deb를 찾을 수있는 상대 URL을 포함한 모든 패키지가 나열됩니다. (사람이 읽을 수있는 일반 텍스트 파일이므로 볼 수 있습니다).

  2. OS는 중요하지 않습니다. 원하는 경우 Windows에서 호스팅 할 수 있습니다. (Windows에서 원하지 않는 파일 이름에 문제가있을 수 있습니다.) (# 4 및 # 5 참조).

  3. 예, deb 파일 안에 있습니다. deb 파일은 실제로 (를 사용하여 ar) 아카이브 입니다. 내부에는 일부 tar 파일이 있습니다. 그중 하나가 (본질적으로)로 추출됩니다 /.

  4. 그것은 단지 HTTP (또는 HTTPS 또는 FTP 또는 ... apt-get은 많은 프로토콜을 지원합니다)입니다. 그러나 특별한 것은 없습니다. gpg로 서명 된 릴리스 파일이 있으며 HTTPS 없이도 무결성을 보장합니다. 데비안 미러는 주로 HTTP가 아닌 HTTP를 사용합니다. (몇몇은 기밀성을 위해 HTTPS를 지원합니다).

  5. 구조화 된 파일 시스템 일뿐입니다.

apt-get이 패키지 소스와 상호 작용하는 방법에 대한 빠른 고급 개요 :

  1. sources.list 파일에서 볼 소스를 구성합니다. 다음과 같은 줄을 고려하십시오.

    deb http://http.us.debian.org/debian/ stretch main
    

    deb이 파일은 .deb (바이너리) 파일을 가져 오기위한 소스입니다. URL 접두사, 스위트 / 릴리스 ( "스트레치") 및 구성 요소 ( "메인")가 있습니다.

  2. apt-get에는 아키텍처 목록이 있으며 dpkg에서 가져옵니다. 하자 말은 dpkg --print-architecture있다 amd64. apt-get은 URL 접두사, 단어 "dists", 제품군, 구성 요소 및 아키텍처를 결합하여 실제로 다운로드 할 URL을 작성할 수 있습니다. 그런 다음 "Packages.xz"와 같은 고정 된 파일 이름을 사용합니다. 위의 URL을 제공합니다 (# 1). 릴리스 파일 http://http.us.debian.org/debian/dists/stretch/Release 및 해당 서명 (.gpg가 추가 된 것과 동일)과 같이 이름 / 경로가 정의 된 파일이 몇 개 더 있습니다 . 이들은 모두 (압축 된) 일반 텍스트 파일입니다. 릴리스 파일에는 Packages.xz와 같이 apt-get이 다운로드 할 다른 파일에 대한 체크섬이 포함되어 있습니다.

  3. Packages.xz 파일은 해당 제품군 / 코드 이름 / 아키텍처의 모든 패키지를 나열 합니다 . 또한 해당 파일이 있는 경로를 제공합니다 . 예를 들어 pool/main/0/0ad/0ad_0.0.21-2_amd64.deb.

  4. apt-get에서 패키지 다운로드를 요청하면 패키지는 해당 위치 + 기본 URL을 사용하여 패키지를 다운로드하므로 패키지는 http://http.us.debian.org/debian/pool/main/0/0ad 에 있습니다 . /0ad_0.0.21-2_amd64.deb

  5. 다른 흥미로운 디렉토리는 source대신에 binary-amd64있습니다. 그것은 당신의 deb-src작품에 사용됩니다 ; 여기에는 소스 패키지에 대한 정보가 포함되어 있습니다 (그렇지 않으면 상당히 유사합니다).

  6. 리포지토리의 일부가 될 수있는 (예 : HTTP를 통해 사용 가능한) 다른 것들이 있습니다 (다른 모든 것들은 선택 사항입니다) : 다른 버전의 Packages.xz 파일 사이의 차이점; 패키지 설명 번역, 설치 가능한 모든 파일의 전체 목록 및 해당 패키지가 속하는 패키지 (Contents-amd64.gz, 예를 들어 apt-get이 아닌 apt-file에 의해 사용됨) 등. 그러나 당신은 http://http.us.debian.org/debian/dists/stretch/ ; 대부분은 일반 텍스트 파일입니다.

이 모든 파일은 일반 텍스트입니다. 이론적으로 손으로 만들 수 있습니다. 실제로 모든 사람 은 이러한 저장소 생성 도구 중 하나를 사용 합니다 . 여기서는 이것이 오래 전에 만들어진 선택 이었으므로 구식일지도 모릅니다. 우리는 mini-dinstall을 사용합니다. 이러한 도구의 출력은 일반 파일이거나 최악의 경우 심볼릭 링크입니다. 원하는 웹 서버로 동기화 할 수 있습니다.


나에게 이길 ;-). unix.stackexchange.com/q/285635/86440 은 사물의 무결성 측면 (포인트 4)을 다룹니다. 미러 쪽의 FTP 지원은 최근 IIRC에서 비활성화되었습니다.
Stephen Kitt

# 2와 관련하여 debian.org/doc/manuals/distribute-deb/… 는 다르게 설명합니다. 감사합니다
user1032531


1
@ user1032531 # 2. 패키지 만들기는 데비안에서 가장 잘 이루어집니다. 그러나 웹 서버는 무엇이든 될 수 있습니다. 일반적으로 빌드 호스트에서 패키지를 작성하고 전체 저장소 구조를 작성한 다음 웹 서버에 업로드합니다. # 5. 이러한 도구는 모든리스트 파일, 서명 된 릴리스 파일 등을 포함하여 구조화 된 파일 시스템을 구축하는 데 도움이됩니다 (데비안에서 가장 실행하기 쉬울 것입니다).
derobert

2
@FaheemMitha 패키지 (일부 압축의 경우 현대 apt는 .xz를 선호합니다)가 확실히 다운로드되어 제공됩니다 /var/lib/apt/lists/. 컨텐츠는 apt-file 및 auto-apt로 다운로드됩니다.
derobert
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.