Làm thế nào để apt-get thực sự làm việc?


34

Được rồi, tôi hiểu làm thế nào tôi có thể sử dụng apt-get {install|upgrade|remove} mypackagesđể cài đặt, nâng cấp hoặc xóa nhị phân cũng như các tệp dữ liệu cấu hình và phụ thuộc của chúng (thực ra, removesẽ chỉ xóa các nhị phân trừ khi được cung cấp thêm cờ).

Tôi không tìm kiếm làm thế nào nó được sử dụng như manmô tả này, nhưng mức độ cao những gì nó đang làm. Mục tiêu cuối cùng của tôi là tạo ra một phương tiện để tôi cài đặt và quản lý một số phần mềm tùy chỉnh (được tạo bởi một tệp tạo) trên nhiều máy từ xa và tôi cần tìm hiểu thêm về quy trình. Nếu câu trả lời cho câu hỏi này dựa trên phân phối nào được sử dụng, vui lòng điều chỉnh theo Debian.

Ngoài cách thức hoạt động chung, tôi có các câu hỏi cụ thể sau:

  1. Làm thế nào để máy khách đang truy cập vào kho apt theo dõi các tệp?
  2. Kho lưu trữ phải được lưu trữ trên cùng một hệ điều hành (tức là kho apt có thể được lưu trữ trên redhat) không?
  3. Làm thế nào là các vị trí để cài đặt các tập tin được chỉ định? Điều này được chỉ định bởi các .debtập tin?
  4. Làm thế nào là một máy từ xa truy cập vào kho lưu trữ? Nó chỉ là ftp (s) hay http (s)?
  5. Là máy đang lưu trữ kho lưu trữ chạy phần mềm đặc biệt (như gitlab cho kho git), hay đó chỉ là một số hệ thống tệp có cấu trúc?

Câu trả lời:


47

Bạn cần xem https://wiki.debian.org/Packaging - hướng dẫn đóng gói ở đó sẽ giúp bạn rất nhiều, cũng như các phần của hướng dẫn bảo trì mới.

Đối với câu hỏi của bạn, theo thứ tự:

  1. Kho chứa tập tin "danh sách". Ví dụ: http://http.us.debian.org/debian/dists/stretch/main/binary-amd64/Packages.xz . apt-get updatetải về các tập tin danh sách này, và lưu trữ chúng trong /var/lib/apt/lists. Các tệp danh sách liệt kê tất cả các gói bao gồm một loạt siêu dữ liệu và một URL tương đối để tìm .deb tại. (Chúng là các tệp văn bản thuần có thể đọc được của con người, vì vậy bạn chỉ cần nhìn vào nó).

  2. Hệ điều hành không thành vấn đề. Bạn có thể lưu trữ nó trên Windows, nếu bạn muốn. (Chà, bạn có thể gặp rắc rối với tên tệp mà Windows không thích.) (Xem thêm # 4 và # 5).

  3. Vâng, nó nằm trong tệp deb. Một tập tin deb thực sự là một kho lưu trữ (sử dụng ar). Bên trong là một số tập tin tar; một trong số đó là (về cơ bản) được trích xuất ra /.

  4. Đó chỉ là HTTP (hoặc HTTPS hoặc FTP hoặc ... apt-get hỗ trợ rất nhiều giao thức). Không có gì đặc biệt, mặc dù. Lưu ý rằng có các tệp Phát hành, được ký bằng gpg, đảm bảo tính toàn vẹn ngay cả với HTTPS. Gương Debian chủ yếu sử dụng HTTP, không phải HTTP. (Một vài HTTPS hỗ trợ để bảo mật).

  5. Nó chỉ là một hệ thống tập tin có cấu trúc.

Tổng quan nhanh, cấp cao về cách apt-get tương tác với nguồn gói:

  1. Bạn định cấu hình các nguồn cần xem trong tệp nguồn.list của bạn. Hãy xem xét một dòng như:

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

    debcho biết đây là nguồn cho các tệp geb .deb (binary); sau đó là tiền tố URL, bộ / phát hành ("kéo dài") và thành phần ("chính").

  2. apt-get có một danh sách các kiến ​​trúc, nó lấy từ dpkg. Hãy nói dpkg --print-architectureamd64. apt-get hiện có thể xây dựng các URL mà nó thực sự sẽ tải xuống từ đó, bằng cách kết hợp tiền tố URL, từ "dists", bộ, thành phần và kiến ​​trúc. Sau đó, nó xử lý một số tên tệp cố định, như "Gói.xz". Điều đó cung cấp cho URL ở trên (trong # 1). Có thêm một vài tệp có tên / đường dẫn được xác định, như tệp Phát hành http://http.us.debian.org/debian/dists/stretch/Release và chữ ký của nó (tương tự, với .gpg được thêm vào). Đây là tất cả các tệp văn bản thuần túy (có thể được nén). Tệp phát hành chứa tổng kiểm tra cho các tệp khác mà apt-get sẽ tải xuống, như Gói.xz.

  3. Tệp Gói.xz liệt kê tất cả các gói trong bộ / tên mã / kiến ​​trúc đó. Nó cũng đưa ra đường dẫn nơi tập tin đó được đặt; ví dụ pool/main/0/0ad/0ad_0.0.21-2_amd64.deb.

  4. Khi bạn yêu cầu apt-get tải xuống gói, nó sử dụng vị trí đó + URL cơ sở để tải xuống gói, vì vậy gói đó có tại http://http.us.debian.org/debian/pool/main/0/0ad /0ad_0.0.21-2_amd64.deb

  5. Các thư mục thú vị khác là sourcethay vì binary-amd64. Điều đó được sử dụng cho các deb-srcmục của bạn ; nó chứa thông tin về các gói nguồn (và mặt khác khá giống nhau).

  6. Có một số thứ khác (tất cả đều là tùy chọn, tôi tin) có thể là một phần của kho lưu trữ (nghĩa là có sẵn qua HTTP): khác nhau giữa các phiên bản khác nhau của tệp Gói.xz; bản dịch mô tả gói, danh sách đầy đủ của mọi tệp có thể cài đặt và gói đó thuộc về (Nội dung-amd64.gz, được sử dụng bởi ví dụ: tệp apt, không phải bởi apt-get), v.v. nhưng bạn có thể thấy tất cả chúng bằng cách duyệt qua http://http.us.debian.org/debian/dists/stretch/ ; hầu hết trong số chúng là các tệp văn bản đơn giản.

Tất cả các tập tin này là văn bản đơn giản. Về lý thuyết, chúng có thể được tạo ra bằng tay. Trong thực tế, mọi người đều sử dụng một trong những công cụ tạo kho lưu trữ này . Ở đây, và tôi cảnh báo đây là một lựa chọn đã được đưa ra từ lâu, vì vậy có thể đã lỗi thời, chúng tôi sử dụng mini-dinstall. Đầu ra của những công cụ đó là các tệp thông thường hoặc tệ nhất là các liên kết tượng trưng. Bạn có thể đồng bộ hóa chúng với bất kỳ máy chủ web nào bạn muốn.


Đánh tôi với nó ;-). unix.stackexchange.com/q/285635/86440 bao gồm khía cạnh toàn vẹn của sự vật (điểm 4). Hỗ trợ FTP ở phía gương đã được khử kích hoạt gần đây IIRC.
Stephen Kitt

Về # 2, debian.org/doc/manuals/distribution-deb/ các bang khác nhau. Cảm ơn
user1032531

Liên quan đến số 5, quan điểm của wiki.debian.org/DebianRep repository / từ
user1032531

1
@ người dùng1032531 # 2. Tạo các gói được thực hiện tốt nhất trên Debian. Nhưng máy chủ web của bạn có thể là bất cứ điều gì. (Thông thường, bạn tạo gói trên máy chủ xây dựng của mình, thậm chí có thể là toàn bộ cấu trúc kho lưu trữ, sau đó tải nó lên máy chủ web.) # 5. Những công cụ này giúp bạn xây dựng hệ thống tệp có cấu trúc, bao gồm tất cả các tệp danh sách, tệp phát hành đã ký, v.v. (Chúng cũng có thể dễ chạy nhất trên Debian).
derobert

2
Các gói @FaheemMitha (của một số nén, thích apt hiện đại .xz) chắc chắn được tải xuống, kết thúc /var/lib/apt/lists/. Nội dung được tải xuống bởi apt-file và auto-apt.
derobert
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.