Product SiteDocumentation Site

Chương 5. Hệ thống gói: Công cụ và Nguyên tắc cơ bản

5.1. Cấu trúc của một Gói nhị phân
5.2. Package Meta-Information
5.2.1. Mô tả: tệp tin control
5.2.2. Kịch bản Cấu hình
5.2.3. Checksums, Danh sách Tệp Cấu hình
5.3. Cấu trúc của Gói nguồn
5.3.1. Định dạng
5.3.2. Cách sử dụng trong Debian
5.4. Thao tác các gói với dpkg
5.4.1. Cài đặt Gói
5.4.2. Xóa Gói
5.4.3. Truy vấn cơ sở dữ liệu của dpkg và kiểm tra các tệp .deb
5.4.4. Tệp log của dpkg
5.4.5. Hỗ trợ Multi-Arch
5.5. Cùng tồn tại với các Hệ thống Gói Khác
Như một người quản trị hệ thống Debian, bạn sẽ thường xuyên làm việc với các gói .deb, vì chúng chứa các đơn vị chức năng (ứng dụng, tài liệu, etc.) trong việc cài đặt và bảo trì. Vì vậy, là một ý tưởng tốt để biết nó là gì và làm sao đế sử dụng nó.
Chương này mô tả kiến trúc và nội dung của các gói “binary” và “source”. Định dạng các tệp tin .deb, sử dụng trực tiếp bởi dpkg, sau nữa là mã nguồn, cũng như hướng dẫn xây dựng các gói nhị phân.

5.1. Cấu trúc của một Gói nhị phân

Định dạng gói Debian được thiết kế sao cho nội dung của nó có thể giải nén trên bất kì hệ thống Unix nào bằng câu lệnh cơ bản ar, tar, and gzip (sometimes xz or bzip2). Tính năng dường như bình thường này lại quan trọng cho tính linh động và khôi phục thảm hoạ.
Thử tưởng tượng một ví dụ, rằng bạn đã lỡ xoá mất chương trình dpkg, và bạn không thể cài đặt các gói Debian. dpkg trở thành gói của chính nó, nó sẽ có vẻ như hệ thống của bạn được thực hiện cho... May mắn thay, bạn hiểu về định dạng của một gói và bạn có thể tải tệp *.deb của gói dpkg và cài đặt nó bình thường (xem sidebar Các công cụ dpkg, APT and ar). Nếu thiếu một hoặc nhiều các chương trình ar, tar hoặc gzip/xz/bzip2, bạn sẽ chỉ cần sao chép chương trình thiếu từ một hệ thống khác (vì mỗi gói là một chương trình hoàn chỉnh, không phụ thuộc, một bản sao là đủ). Nếu hệ thống của bạn đã bị thiếu tài nguyên cần thiết, và thậm chí hệ thống không làm việc (có thể các thư viện sâu của hệ thống bị thiếu?), bạn có thể thử các phiên bản tĩnh của busybox (đã cung cấp trong gói busybox-static package), mà thậm chí còn nhiều hơn, cung cấp các câu lệnh con trên chính nó như busybox ar, busybox tarbusybox gunzip.
Cái nhìn về nội dung trong tệp tin .deb
$ ar t dpkg_1.17.23_amd64.deb
debian-binary
control.tar.gz
data.tar.gz
$ ar x dpkg_1.17.23_amd64.deb
$ ls
control.tar.gz  data.tar.gz  debian-binary  dpkg_1.17.23_amd64.deb
$ tar tzf data.tar.gz | head -n 15
./
./var/
./var/lib/
./var/lib/dpkg/
./var/lib/dpkg/parts/
./var/lib/dpkg/info/
./var/lib/dpkg/alternatives/
./var/lib/dpkg/updates/
./etc/
./etc/logrotate.d/
./etc/logrotate.d/dpkg
./etc/dpkg/
./etc/dpkg/dpkg.cfg.d/
./etc/dpkg/dpkg.cfg
./etc/alternatives/
$ tar tzf control.tar.gz
./
./conffiles
./postinst
./md5sums
./prerm
./preinst
./control
./postrm
$ cat debian-binary
2.0
Như bạn có thể thấy, với góc nhìn qua tệp nén từ lệnh ar của một gói Debian gồm có ba tập tin:
  • debian-binary. Đây là một tệp văn bản đơn thuần mà chỉ ra phiên bản của tệp .deb đã sử dụng (từ năm 2015: version 2.0).
  • control.tar.gz. Đây là tệp nén chứa tất cả thông tin meta, giống như tên và phiên bản của gói. Một vài thông tin cho phép các công cụ quản lý gói xác định nếu nó có thể cài đặt hoặc gỡ bỏ được nó, ví dụ thể hiện danh sách các gói đã có trên máy tính.
  • data.tar.gz. Đây là tệp nén chứa tất cả các tệp tin đã được xuất từ gói; đây là nơi các tệp thực thi, tài liệu, vân vân., được lưu trữ. Vài các gói có thể sử dụng bởi chuẩn nén khách, trong trường hợp đó tệp sẽ có tên khác (data.tar.bz2 cho bzip2, data.tar.xz cho XZ).