102.4 Bài 1
Chứng chỉ: |
LPIC-1 |
---|---|
Phiên bản: |
5.0 |
Chủ đề: |
102 Cài đặt Linux và Quản lý Gói |
Mục tiêu: |
102.4 Sử dụng Trình Quản lý Gói Debian |
Bài: |
1 trên 1 |
Giới thiệu
Rất lâu về trước khi Linux vẫn còn sơ khai, cách phổ biến nhất để phân phối phần mềm là sử dụng một tệp nén (thường là tệp lưu trữ .tar.gz
) cùng với mã nguồn mà người dùng sẽ tự giải nén và biên dịch.
Tuy nhiên, khi số lượng và độ phức tạp của phần mềm tăng lên, nhu cầu về cách phân phối phần mềm được biên dịch sẵn trở nên rất rõ ràng. Nói cho cùng thì không phải ai cũng có đủ tài nguyên về cả thời gian lẫn vật chất để tự biên dịch các dự án lớn như nhân Linux hoặc Máy chủ X.
Ngay sau đó, các nỗ lực trong việc tiêu chuẩn hóa cách phân phối các “gói” phần mềm này đã tăng lên và các trình quản lý gói đầu tiên đã ra đời. Những công cụ này giúp việc cài đặt, định cấu hình hoặc gỡ bỏ phần mềm khỏi hệ thống trở nên dễ dàng hơn rất nhiều.
Một trong số đó là định dạng gói Debian (.deb
) và công cụ gói của nó (dpkg
). Ngày nay, chúng được sử dụng rộng rãi không chỉ trên chính Debian mà còn cả trên các sản phẩm phái sinh của Debian như Ubuntu và những sản phẩm phái sinh từ Ubuntu.
Một công cụ quản lý gói khác cũng phổ biến trên các hệ thống dựa trên Debian là Công cụ Gói Nâng cao (apt
). Công cụ này có thể sắp xếp một cách hợp lý các khía cạnh của việc cài đặt, bảo trì, gỡ bỏ các gói và khiến cho những tác vụ này trở nên dễ dàng hơn.
Trong bài học này, chúng ta sẽ học cách sử dụng cả dpkg
và apt
để lấy, cài đặt, bảo trì và gỡ bỏ phần mềm trên hệ thống Linux dựa trên Debian.
Công cụ Gói Debian (dpkg)
Công cụ Gói Debian (dpkg
) là tiện ích thiết yếu để cài đặt, cấu hình, bảo trì và gỡ bỏ các gói phần mềm trên các hệ thống dựa trên Debian. Thao tác cơ bản nhất là cài đặt gói .deb
và nó có thể được thực hiện với:
# dpkg -i PACKAGENAME
Trong đó PACKAGENAME
là tên của tệp .deb
cần cài đặt.
Việc nâng cấp gói cũng được xử lý theo cùng một cách. Trước khi cài đặt gói, dpkg
sẽ kiểm tra xem phiên bản trước đó đã tồn tại trong hệ thống hay chưa. Nếu đã có, gói sẽ được nâng cấp lên phiên bản mới. Nếu không, một bản sao mới sẽ được cài đặt.
Xử lý các Phần Phụ thuộc
Thông thường, một gói có thể sẽ phải phụ thuộc vào các gói khác để có thể hoạt động được như mong muốn. Ví dụ: trình chỉnh sửa hình ảnh có thể cần tới thư viện để mở tệp JPEG hoặc một tiện ích có thể sẽ cần tới bộ công cụ tiện ích như Qt hoặc GTK cho giao diện người dùng của nó.
dpkg
sẽ kiểm tra xem các phần phụ thuộc đó đã được cài đặt trên hệ thống hay chưa và nếu chưa thì việc cài đặt gói sẽ không thực hiện được. Trong trường hợp này, dpkg
sẽ liệt kê các gói bị thiếu. Tuy nhiên, nó không thể tự xử lý các phần phụ thuộc. Việc tìm các gói .deb
với các phần phụ thuộc tương ứng và cài đặt chúng là tùy thuộc vào người dùng.
Trong ví dụ bên dưới, người dùng đang cố gắng cài đặt gói trình chỉnh sửa video OpenShot nhưng lại bị thiếu mất một số phần phụ thuộc:
# dpkg -i openshot-qt_2.4.3+dfsg1-1_all.deb (Reading database ... 269630 files and directories currently installed.) Preparing to unpack openshot-qt_2.4.3+dfsg1-1_all.deb ... Unpacking openshot-qt (2.4.3+dfsg1-1) over (2.4.3+dfsg1-1) ... dpkg: dependency problems prevent configuration of openshot-qt: openshot-qt depends on fonts-cantarell; however: Package fonts-cantarell is not installed. openshot-qt depends on python3-openshot; however: Package python3-openshot is not installed. openshot-qt depends on python3-pyqt5; however: Package python3-pyqt5 is not installed. openshot-qt depends on python3-pyqt5.qtsvg; however: Package python3-pyqt5.qtsvg is not installed. openshot-qt depends on python3-pyqt5.qtwebkit; however: Package python3-pyqt5.qtwebkit is not installed. openshot-qt depends on python3-zmq; however: Package python3-zmq is not installed. dpkg: error processing package openshot-qt (--install): dependency problems - leaving unconfigured Processing triggers for mime-support (3.60ubuntu1) ... Processing triggers for gnome-menus (3.32.0-1ubuntu1) ... Processing triggers for desktop-file-utils (0.23-4ubuntu1) ... Processing triggers for hicolor-icon-theme (0.17-2) ... Processing triggers for man-db (2.8.5-2) ... Errors were encountered while processing: openshot-qt
Như đã trình bày ở trên, OpenShot phụ thuộc vào các gói fonts-cantarell
, python3-openshot
, python3-pyqt5
, python3-pyqt5.qtsvg
, python3-pyqt5.qtwebkit
và python3-zmq
. Tất cả những gói này cần được cài đặt trước rồi mới có thể cài đặt OpenShot.
Gỡ bỏ Gói
Để xóa một gói, hãy truyền tham số -r
cho dpkg
, theo sau là tên gói. Ví dụ: lệnh sau sẽ xóa gói unrar
khỏi hệ thống:
# dpkg -r unrar (Reading database ... 269630 files and directories currently installed.) Removing unrar (1:5.6.6-2) ... Processing triggers for man-db (2.8.5-2) ...
Thao tác xóa cũng sẽ khởi động việc kiểm tra phần phụ thuộc và ta sẽ không thể xóa được gói trừ khi mọi gói khác phụ thuộc vào gói đó cũng bị xóa. Nếu vẫn cố làm như vậy, người dùng sẽ nhận được thông báo lỗi như bên dưới:
# dpkg -r p7zip dpkg: dependency problems prevent removal of p7zip: winetricks depends on p7zip; however: Package p7zip is to be removed. p7zip-full depends on p7zip (= 16.02+dfsg-6). dpkg: error processing package p7zip (--remove): dependency problems - not removing Errors were encountered while processing: p7zip
Chúng ta có thể chuyển nhiều tên gói cho dpkg -r
để có thể xoá tất cả cùng một lúc.
Khi một gói bị xóa, các tệp cấu hình tương ứng sẽ được để lại trên hệ thống. Nếu muốn xóa tất cả mọi thứ được liên kết với gói, hãy sử dụng tùy chọn -P
(purge - thanh lọc) thay vì -r
.
Note
|
Ta có thể buộc |
Lấy Thông tin Gói
Để lấy thông tin về gói .deb
(chẳng hạn như phiên bản, kiến trúc, trình bảo trì, phần phụ thuộc, v.v.), hãy sử dụng lệnh dpkg
với tham số -I
, theo sau là tên tệp của gói cần kiểm tra:
# dpkg -I google-chrome-stable_current_amd64.deb new Debian package, version 2.0. size 59477810 bytes: control archive=10394 bytes. 1222 bytes, 13 lines control 16906 bytes, 457 lines * postinst #!/bin/sh 12983 bytes, 344 lines * postrm #!/bin/sh 1385 bytes, 42 lines * prerm #!/bin/sh Package: google-chrome-stable Version: 76.0.3809.100-1 Architecture: amd64 Maintainer: Chrome Linux Team <chromium-dev@chromium.org> Installed-Size: 205436 Pre-Depends: dpkg (>= 1.14.0) Depends: ca-certificates, fonts-liberation, libappindicator3-1, libasound2 (>= 1.0.16), libatk-bridge2.0-0 (>= 2.5.3), libatk1.0-0 (>= 2.2.0), libatspi2.0-0 (>= 2.9.90), libc6 (>= 2.16), libcairo2 (>= 1.6.0), libcups2 (>= 1.4.0), libdbus-1-3 (>= 1.5.12), libexpat1 (>= 2.0.1), libgcc1 (>= 1:3.0), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.31.8), libgtk-3-0 (>= 3.9.10), libnspr4 (>= 2:4.9-2~), libnss3 (>= 2:3.22), libpango-1.0-0 (>= 1.14.0), libpangocairo-1.0-0 (>= 1.14.0), libuuid1 (>= 2.16), libx11-6 (>= 2:1.4.99.1), libx11-xcb1, libxcb1 (>= 1.6), libxcomposite1 (>= 1:0.3-1), libxcursor1 (>> 1.1.2), libxdamage1 (>= 1:1.1), libxext6, libxfixes3, libxi6 (>= 2:1.2.99.4), libxrandr2 (>= 2:1.2.99.3), libxrender1, libxss1, libxtst6, lsb-release, wget, xdg-utils (>= 1.0.2) Recommends: libu2f-udev Provides: www-browser Section: web Priority: optional Description: The web browser from Google Google Chrome is a browser that combines a minimal design with sophisticated technology to make the web faster, safer, and easier.
Liệt kê các Gói đã được cài đặt và Nội dung Gói
Để có được danh sách các gói đã được cài đặt trên hệ thống, hãy sử dụng tùy chọn --get-selections
như trong dpkg --get-selections
. Ta cũng có thể nhận danh sách của tất cả các tệp được cài đặt bởi một gói cụ thể bằng cách truyền tham số -L PACKAGENAME
cho dpkg
như dưới đây:
# dpkg -L unrar /. /usr /usr/bin /usr/bin/unrar-nonfree /usr/share /usr/share/doc /usr/share/doc/unrar /usr/share/doc/unrar/changelog.Debian.gz /usr/share/doc/unrar/copyright /usr/share/man /usr/share/man/man1 /usr/share/man/man1/unrar-nonfree.1.gz
Tìm ra Gói nào đang sở hữu một Tệp cụ thể
Đôi khi người dùng sẽ cần tìm ra gói nào đang sở hữu một tệp cụ thể trong hệ thống của mình. Chúng ta có thể thực hiện điều này bằng cách sử dụng tiện ích dpkg-query
, theo sau là tham số -S
và đường dẫn đến tệp được đề cập:
# dpkg-query -S /usr/bin/unrar-nonfree unrar: /usr/bin/unrar-nonfree
Cấu hình lại các Gói đã được cài đặt
Khi một gói được cài đặt, có một bước cấu hình được gọi là bước sau cài đặt mà trong đó, một tệp lệnh sẽ chạy để thiết lập mọi thứ cần thiết để phần mềm có thể chạy (như quyền, vị trí của tệp cấu hình, v.v). Điều này cũng có thể đặt ra một số câu hỏi cho người dùng về việc thiết lập các tùy chọn để chạy phần mềm.
Đôi khi, do tệp cấu hình bị hỏng hoặc không đúng định dạng, người dùng có thể sẽ muốn khôi phục cài đặt của gói về trạng thái “ban đầu”. Hoặc có thể họ sẽ muốn thay đổi câu trả lời mà mình đã đưa ra về các câu hỏi cấu hình ban đầu. Để thực hiện việc này, hãy chạy tiện ích dpkg-reconfigure
, theo sau là tên gói.
Chương trình này sẽ sao lưu các tệp cấu hình cũ, giải nén tệp cấu hình mới vào đúng thư mục và chạy tệp lệnh sau cài đặt do gói cung cấp (như thể gói đang được cài đặt lần đầu tiên). Hãy thử cấu hình lại gói tzdata
bằng ví dụ sau:
# dpkg-reconfigure tzdata
Công cụ Gói Nâng cao (apt)
Công cụ Gói Nâng cao (APT) là một hệ thống quản lý gói bao gồm một bộ công cụ giúp đơn giản hóa rất nhiều việc cài đặt, nâng cấp, gỡ bỏ và quản lý gói. APT cung cấp các tính năng như khả năng tìm kiếm nâng cao và xử lý tự động các phần phụ thuộc.
APT không phải là một biện pháp “thay thế” cho dpkg
. Ta có thể coi nó như một “giao diện người dùng” có khả năng hợp lý hóa các hoạt động và lấp đầy các khoảng trống trong chức năng của dpkg
(chẳng hạn như giải pháp xử lý các phần phụ thuộc).
APT sẽ hoạt động phối hợp với các kho phần mềm chứa các gói có sẵn để cài đặt. Các kho lưu trữ như vậy có thể là một máy chủ cục bộ hoặc máy chủ từ xa, hoặc (ít phổ biến hơn) thậm chí là đĩa CD-ROM.
Các bản phân phối Linux (chẳng hạn như Debian và Ubuntu) duy trì các kho lưu trữ của riêng chúng và các kho lưu trữ khác có thể được các nhà phát triển hoặc nhóm người dùng duy trì để cung cấp phần mềm không có sẵn từ các kho phân phối chính.
Có rất nhiều tiện ích tương tác với APT. Những tiện ích chính là:
apt-get
-
được sử dụng để tải xuống, cài đặt, nâng cấp hoặc xóa các gói khỏi hệ thống.
apt-cache
-
được sử dụng để thực hiện các hoạt động như tìm kiếm trong chỉ mục gói.
apt-file
-
được sử dụng để tìm kiếm các tệp bên trong các gói.
Ngoài ra còn có một tiện ích “thân thiện hơn” có tên đơn giản là apt
. Nó kết hợp các tùy chọn được sử dụng nhiều nhất là apt-get
và apt-cache
trong cùng một tiện ích. Nhiều lệnh dành cho apt
sẽ giống với các lệnh dành cho apt-get
; vì vậy, trong nhiều trường hợp, chúng có thể được hoán đổi cho nhau. Tuy nhiên, vì apt
không được cài đặt trên tất cả các hệ thống, người dùng được khuyến khích tìm hiểu cách sử dụng apt-get
và apt-cache
.
Note
|
|
Cập nhật Chỉ mục Gói
Trước khi cài đặt hoặc nâng cấp phần mềm bằng APT, ta nên cập nhật chỉ mục gói trước để truy xuất thông tin về các gói mới và gói cập nhật. Điều này được thực hiện bằng lệnh apt-get
, theo sau là tham số update
:
# apt-get update Ign:1 http://dl.google.com/linux/chrome/deb stable InRelease Hit:2 https://repo.skype.com/deb stable InRelease Hit:3 http://us.archive.ubuntu.com/ubuntu disco InRelease Hit:4 http://repository.spotify.com stable InRelease Hit:5 http://dl.google.com/linux/chrome/deb stable Release Hit:6 http://apt.pop-os.org/proprietary disco InRelease Hit:7 http://ppa.launchpad.net/system76/pop/ubuntu disco InRelease Hit:8 http://us.archive.ubuntu.com/ubuntu disco-security InRelease Hit:9 http://us.archive.ubuntu.com/ubuntu disco-updates InRelease Hit:10 http://us.archive.ubuntu.com/ubuntu disco-backports InRelease Reading package lists... Done
Tip
|
Thay vì |
Cài đặt và Gỡ bỏ các Gói
Với chỉ mục gói được cập nhật, bây giờ ta đã có thể cài đặt gói. Điều này được thực hiện với apt-get install
, theo sau là tên của gói cần cài đặt:
# apt-get install xournal Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: xournal 0 upgraded, 1 newly installed, 0 to remove and 75 not upgraded. Need to get 285 kB of archives. After this operation, 1041 kB of additional disk space will be used.
Tương tự, để xóa gói, hãy sử dụng apt-get remove
, theo sau là tên gói:
# apt-get remove xournal Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be REMOVED: xournal 0 upgraded, 0 newly installed, 1 to remove and 75 not upgraded. After this operation, 1041 kB disk space will be freed. Do you want to continue? [Y/n]
Hãy lưu ý rằng khi cài đặt hoặc gỡ bỏ các gói, APT sẽ thực hiện xử lý tự động các phần phụ thuộc. Điều này có nghĩa là mọi gói bổ sung cần thiết cho gói người dùng đang cài đặt cũng sẽ được cài đặt, và các gói phụ thuộc vào gói đang bị xóa cũng sẽ bị xóa. APT sẽ luôn hiển thị danh sách các mục sẽ được cài đặt hoặc gỡ bỏ trước khi hỏi xem người dùng có muốn tiếp tục hay không:
# apt-get remove p7zip Reading package lists... Done Building dependency tree The following packages will be REMOVED: android-libbacktrace android-libunwind android-libutils android-libziparchive android-sdk-platform-tools fastboot p7zip p7zip-full 0 upgraded, 0 newly installed, 8 to remove and 75 not upgraded. After this operation, 6545 kB disk space will be freed. Do you want to continue? [Y/n]
Hãy lưu ý rằng khi một gói đã bị xóa, các tệp cấu hình tương ứng sẽ được để lại trên hệ thống. Để xóa gói và bất kỳ một tệp cấu hình nào, hãy sử dụng tham số purge
thay vì remove
hoặc tham số remove
với tùy chọn --purge
:
# apt-get purge p7zip
hoặc
# apt-get remove --purge p7zip
Tip
|
Bạn cũng có thể sử dụng |
Sửa lỗi Phần Phụ thuộc bị hỏng
Có thể sẽ có “phần phụ thuộc bị hỏng” trên một hệ thống. Điều này có nghĩa là một hoặc nhiều gói đã được cài đặt phụ thuộc vào các gói khác chưa được cài đặt hoặc không còn tồn tại nữa. Điều này có thể xảy ra do lỗi APT hoặc do gói được cài đặt thủ công.
Để giải quyết vấn đề này, hãy sử dụng lệnh apt-get install -f
. Lệnh này sẽ cố gắng “sửa chữa” các gói bị hỏng bằng cách cài đặt các phần phụ thuộc bị thiếu, đảm bảo rằng tất cả các gói đều được nhất quán trở lại.
Tip
|
Bạn cũng có thể sử dụng |
Nâng cấp Gói
APT có thể được sử dụng để tự động nâng cấp mọi gói đã được cài đặt lên phiên bản mới nhất có sẵn từ kho lưu trữ. Điều này có thể được thực hiện bằng lệnh apt-get upgrade
. Trước khi chạy nó, hãy cập nhật chỉ mục gói bằng apt-get update
trước tiên:
# apt-get update Hit:1 http://us.archive.ubuntu.com/ubuntu disco InRelease Hit:2 http://us.archive.ubuntu.com/ubuntu disco-security InRelease Hit:3 http://us.archive.ubuntu.com/ubuntu disco-updates InRelease Hit:4 http://us.archive.ubuntu.com/ubuntu disco-backports InRelease Reading package lists... Done # apt-get upgrade Reading package lists... Done Building dependency tree Reading state information... Done Calculating upgrade... Done The following packages have been kept back: gnome-control-center The following packages will be upgraded: cups cups-bsd cups-client cups-common cups-core-drivers cups-daemon cups-ipp-utils cups-ppdc cups-server-common firefox-locale-ar (...) 74 upgraded, 0 newly installed, 0 to remove and 1 not upgraded. Need to get 243 MB of archives. After this operation, 30.7 kB of additional disk space will be used. Do you want to continue? [Y/n]
Phần tóm tắt ở cuối đầu ra sẽ cho ta biết có bao nhiêu gói sẽ được nâng cấp, bao nhiêu gói sẽ được cài đặt, gỡ bỏ hoặc giữ lại, tổng kích thước tải xuống và dung lượng đĩa bổ sung sẽ cần để hoàn tất thao tác. Để hoàn thành nâng cấp, ta chỉ cần trả lời Y
và đợi apt-get
hoàn thành nhiệm vụ của nó.
Để nâng cấp một gói duy nhất, chỉ cần chạy apt-get upgrade
, theo sau là tên gói. Như trong dpkg
, apt-get
trước tiên sẽ kiểm tra xem phiên bản trước của gói đã được cài đặt chưa. Nếu đã được cài đặt, gói sẽ được nâng cấp lên phiên bản mới nhất hiện có trong kho lưu trữ. Nếu không, một bản sao mới sẽ được cài đặt.
Tip
|
Bạn cũng có thể sử dụng |
Bộ nhớ Đệm Cục bộ
Khi cài đặt hoặc cập nhật một gói, tệp .deb
tương ứng sẽ được tải xuống thư mục bộ nhớ đệm cục bộ trước khi gói được cài đặt. Theo mặc định, thư mục này là /var/cache/apt/archives
. Các tệp đã tải xuống một phần sẽ được sao chép vào /var/cache/apt/archives/partial/
.
Khi cài đặt và nâng cấp các gói, thư mục bộ nhớ đệm có thể sẽ khá lớn. Để lấy lại dung lượng, ta có thể làm trống bộ nhớ đệm bằng cách sử dụng lệnh apt-get clean
. Thao tác này sẽ xóa nội dung của các thư mục /var/cache/apt/archives
và /var/cache/apt/archives/partial/
.
Tip
|
Bạn cũng có thể sử dụng |
Tìm kiếm Gói
Tiện ích apt-cache
có thể được sử dụng để thực hiện các thao tác trên chỉ mục gói (chẳng hạn như tìm kiếm một gói cụ thể hoặc liệt kê ra gói nào đang chứa một tệp cụ thể).
Để tiến hành tìm kiếm, hãy sử dụng apt-cache search
, theo sau là mẫu tìm kiếm. Đầu ra sẽ là danh sách tất cả các gói có chứa mẫu, có thể là trong tên gói, mô tả hoặc tệp được cung cấp.
# apt-cache search p7zip liblzma-dev - XZ-format compression library - development files liblzma5 - XZ-format compression library forensics-extra - Forensics Environment - extra console components (metapackage) p7zip - 7zr file archiver with high compression ratio p7zip-full - 7z and 7za file archivers with high compression ratio p7zip-rar - non-free rar module for p7zip
Trong ví dụ trên, mục nhập liblzma5 - XZ-format compression library
dường như không khớp với mẫu. Tuy nhiên, nếu chúng ta hiển thị đầy đủ thông tin (bao gồm cả mô tả) cho gói bằng tham số show
, ta sẽ tìm thấy mẫu ở đó:
# apt-cache show liblzma5 Package: liblzma5 Architecture: amd64 Version: 5.2.4-1 Multi-Arch: same Priority: required Section: libs Source: xz-utils Origin: Ubuntu Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: Jonathan Nieder <jrnieder@gmail.com> Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 259 Depends: libc6 (>= 2.17) Breaks: liblzma2 (<< 5.1.1alpha+20110809-3~) Filename: pool/main/x/xz-utils/liblzma5_5.2.4-1_amd64.deb Size: 92352 MD5sum: 223533a347dc76a8cc9445cfc6146ec3 SHA1: 8ed14092fb1caecfebc556fda0745e1e74ba5a67 SHA256: 01020b5a0515dbc9a7c00b464a65450f788b0258c3fbb733ecad0438f5124800 Homepage: https://tukaani.org/xz/ Description-en: XZ-format compression library XZ is the successor to the Lempel-Ziv/Markov-chain Algorithm compression format, which provides memory-hungry but powerful compression (often better than bzip2) and fast, easy decompression. . The native format of liblzma is XZ; it also supports raw (headerless) streams and the older LZMA format used by lzma. (For 7-Zip's related format, use the p7zip package instead.)
Chúng ta có thể sử dụng biểu thức chính quy với mẫu tìm kiếm cho phép thực hiện các tìm kiếm mang tính phức tạp (và chính xác) cao. Tuy nhiên, việc này nằm ngoài phạm vi của bài học này.
Tip
|
Bạn cũng có thể sử dụng |
Danh sách Nguồn
APT sử dụng danh sách các nguồn để biết được nơi nhận các gói. Danh sách này được lưu trữ trong tệp sources.list
nằm bên trong thư mục /etc/apt
. Tệp này có thể được chỉnh sửa trực tiếp bằng một trình soạn thảo văn bản như vi
, pico
, nano
hoặc bằng các tiện ích đồ họa như aptitude
hoặc synaptic
.
Một dòng điển hình bên trong sources.list
sẽ giống như sau:
deb http://us.archive.ubuntu.com/ubuntu/ disco main restricted universe multiverse
Cú pháp sẽ là loại lưu trữ, URL, bản phân phối và một hoặc nhiều thành phần, trong đó:
- Archive type
-
Một kho lưu trữ có thể chứa các gói có phần mềm sẵn sàng để chạy (gói nhị phân, loại
deb
) hoặc có mã nguồn của phần mềm này (gói nguồn, mãdeb-src
). Ví dụ trên cung cấp các gói nhị phân. - URL
-
URL cho kho lưu trữ.
- Distribution
-
Tên (hoặc tên mã) cho bản phân phối mà các gói được cung cấp. Một kho lưu trữ có thể lưu trữ các gói dành cho nhiều bản phân phối. Trong ví dụ trên,
disco
là tên mã của Ubuntu 19.04 Disco Dingo. - Components
-
Mỗi thành phần sẽ đại diện cho một tập hợp các gói. Các thành phần này có thể sẽ khác nhau tuỳ vào tưng bản phân phối Linux. Ví dụ: trên Ubuntu và các sản phẩm phái sinh của nó, chúng sẽ là:
main
-
chứa các gói mã nguồn mở được hỗ trợ chính thức.
restricted
-
chứa phần mềm nguồn đóng được hỗ trợ chính thức (chẳng hạn như trình điều khiển thiết bị cho thẻ đồ họa).
universe
-
chứa phần mềm mã nguồn mở do cộng đồng duy trì.
multiverse
-
chứa phần mềm không được hỗ trợ có bằng sáng chế hoặc là nguồn đóng.
Trên Debian, các thành phần chính là:
main
-
bao gồm các gói tuân thủ Nguyên tắc Phần mềm Tự do của Debian (DFSG) và không dựa vào phần mềm ngoại vi nguyên tắc này để hoạt động. Các gói được bao gồm ở đây được coi là một phần của bản phân phối Debian.
contrib
-
chứa các gói tuân theo DFSG nhưng phụ thuộc vào các gói khác không có trong
main
. non-free
-
chứa các gói không tuân thủ DFSG.
security
-
chứa các bản cập nhật bảo mật.
backports
-
chứa các phiên bản mới hơn của các gói nằm trong
main
.
Chu kỳ phát triển của các phiên bản Debian ổn định là khá dài (khoảng hai năm) và điều này đảm bảo rằng người dùng có thể nhận được các gói cập nhật mới nhất mà không phải sửa đổi kho lưu trữ lõi chính
.
Note
|
Bạn có thể tìm hiểu thêm về Nguyên tắc Phần mềm Tự do của Debian tại: https://www.debian.org/social_contract#guidelines |
Để thêm một kho lưu trữ mới để lấy các gói, ta chỉ cần thêm dòng tương ứng (thường được cung cấp bởi người duy trì kho lưu trữ) vào cuối sources.list
, lưu tệp và tải lại chỉ mục gói bằng apt-get update
. Sau đó, các gói trong kho lưu trữ mới sẽ có sẵn để có thể cài đặt bằng apt-get install
.
Hãy nhớ rằng các dòng bắt đầu bằng ký tự #
sẽ được coi là chú thích và bị bỏ qua.
Thư mục /etc/apt/sources.list.d
Bên trong thư mục /etc/apt/sources.list.d
, ta có thể thêm các tệp có kho lưu trữ bổ sung để APT sử dụng mà không cần sửa đổi tệp /etc/apt/sources.list
chính. Đây là những tệp văn bản đơn giản và có cùng cú pháp được mô tả ở trên cũng như phần mở rộng tệp .list
.
Ta có thể thấy được nội dung của tệp có tên /etc/apt/sources.list.d/buster-backports.list
ở dưới đây:
deb http://deb.debian.org/debian buster-backports main contrib non-free deb-src http://deb.debian.org/debian buster-backports main contrib non-free
Liệt kê Nội dung Gói và Tìm kiếm Tệp
Ta có thể sử dụng tiện ích có tên apt-file
để thực hiện nhiều thao tác hơn trong chỉ mục gói (ví dụ như liệt kê nội dung của một gói hoặc tìm gói chứa một tệp cụ thể). Tiện ích này có thể là chưa được cài đặt mặc định trong mọi hệ thống. Trong trường hợp này, thông thường, chúng ta có thể cài đặt nó bằng cách sử dụng apt-get
:
# apt-get install apt-file
Sau khi cài đặt, người dùng sẽ cần cập nhật bộ nhớ đệm gói được sử dụng cho apt-file
:
# apt-file update
Việc này thường chỉ mất vài giây. Sau đó, apt-file
đã sẵn sàng để sử dụng.
Để liệt kê nội dung của một gói, hãy sử dụng tham số list
, theo sau là tên gói:
# apt-file list unrar unrar: /usr/bin/unrar-nonfree unrar: /usr/share/doc/unrar/changelog.Debian.gz unrar: /usr/share/doc/unrar/copyright unrar: /usr/share/man/man1/unrar-nonfree.1.gz
Tip
|
Bạn cũng có thể sử dụng |
Chúng ta có thể tìm kiếm tất cả các gói cho một tệp bằng tham số search
, theo sau là tên tệp. Ví dụ: nếu muốn biết gói nào cung cấp tệp có tên libSDL2.so
, ta có thể sử dụng:
# apt-file search libSDL2.so libsdl2-dev: /usr/lib/x86_64-linux-gnu/libSDL2.so
Câu trả lời là gói libsdl2-dev
, cung cấp tệp /usr/lib/x86_64-linux-gnu/libSDL2.so
.
Sự khác biệt giữa apt-file search
và dpkg-query
là apt-file search
cũng sẽ tìm kiếm cả các gói đã bị gỡ cài đặt, trong khi dpkg-query
chỉ có thể hiển thị các tệp thuộc gói đã được cài đặt.
Bài tập Hướng dẫn
-
Lệnh để cài đặt gói có tên
package.deb
bằng cách sử dụngdpkg
là gì? -
Bằng cách sử dụng
dpkg-query
, hãy tìm gói chứa tệp có tên7zr.1.gz
. -
Bạn có thể xóa gói có tên
unzip
khỏi hệ thống bằng cách sử dụngdpkg -r unzip
nếu góifile-roller
phụ thuộc vào gói đó không? Nếu không, cách tốt nhất để làm điều này là gì? -
Bằng cách sử dụng
apt-file
, làm cách nào để có thể tìm ra gói nào chứa tệpunrar
? -
Bằng cách sử dụng
apt-cache
, lệnh hiển thị thông tin cho góigimp
là gì?
Bài tập Mở rộng
-
Hãy xét một kho lưu trữ chứa các gói nguồn Debian dành cho bản phân phối
xenial
được lưu trữ tạihttp://us.archive.ubuntu.com/ubuntu/
với các gói dành cho thành phầnuniverse
. Dòng tương ứng sẽ được thêm vào/etc/apt/sources.list
là gì? -
Trong khi biên dịch chương trình, bạn gặp phải thông báo lỗi cho biết rằng tệp tiêu đề
zzip-io.h
không có trong hệ thống. Làm cách nào để có thể tìm ra gói nào cung cấp tệp đó? -
Làm cách nào để có thể bỏ qua cảnh báo phụ thuộc và xóa gói bằng cách sử dụng
dpkg
ngay cả khi có các gói phụ thuộc vào gói đó trong hệ thống? -
Làm cách nào để có thể nhận thêm thông tin về gói có tên
midori
bằng cách sử dụngapt
? -
Trước khi cài đặt hoặc cập nhật các gói bằng
apt
, bạn nên sử dụng lệnh nào để đảm bảo rằng chỉ mục gói được cập nhật?
Tóm tắt
Trong bài học này, chúng ta đã học về:
-
Cách sử dụng
dpkg
để cài đặt và gỡ bỏ các gói. -
Cách liệt kê các gói đã được cài đặt và nội dung gói.
-
Cách cấu hình lại gói đã được cài đặt.
-
apt
là gì và cách cài đặt, nâng cấp và xóa các gói bằng cách sử dụng nó. -
Cách sử dụng
apt-cache
để tìm kiếm các gói. -
Cách tệp
/etc/apt/sources.list
hoạt động. -
Cách sử dụng
apt-file
để hiển thị nội dung của một gói hoặc cách tìm gói nào chứa một tệp cụ thể.
Các lệnh sau đã được thảo luận trong bài học này:
dpkg -i
-
Cài đặt một gói hoặc danh sách các gói được phân tách bằng dấu cách.
dpkg -r
-
Xóa gói hoặc danh sách gói được phân tách bằng dấu cách.
dpkg -I
-
Kiểm tra một gói, cung cấp thông tin chi tiết về phần mềm mà nó cài đặt và mọi phần phụ thuộc cần thiết.
dpkg --get-selections
-
Liệt kê mọi gói mà
dpkg
đã được cài đặt trên hệ thống. dpkg -L
-
In ra danh sách mọi tệp mà một gói cụ thể cài đặt.
dpkg-query
-
Với tên tệp được chỉ định, lệnh này sẽ in ra gói đã được cài đặt tệp.
dpkg-reconfigure
-
Lệnh này sẽ chạy lại tệp lệnh sau cài đặt gói để quản trị viên có thể thực hiện các điều chỉnh cấu hình cho quá trình cài đặt của gói.
apt-get update
-
Lệnh này sẽ cập nhật chỉ mục gói cục bộ để khớp với những gì có sẵn trong kho lưu trữ được định cấu hình trong thư mục
/etc/apt/
. apt-get install
-
Lệnh này sẽ tải xuống một gói từ một kho lưu trữ từ xa và cài đặt nó cùng với các phần phụ thuộc của nó. Nó cũng có thể được sử dụng để cài đặt một gói Debian đã được tải xuống.
apt-get remove
-
Lệnh này sẽ gỡ cài đặt các gói đã chỉ định khỏi hệ thống.
apt-cache show
-
Giống như lệnh
dpkg -I
, lệnh này có thể được sử dụng để hiển thị chi tiết về một gói cụ thể. apt-cache search
-
Lệnh này sẽ tìm kiếm cơ sở dữ liệu được lưu trong bộ nhớ đệm APT cục bộ của bạn để tìm một gói cụ thể.
apt-file update
-
Lệnh này sẽ cập nhật bộ nhớ đệm gói để lệnh
apt-file
có thể truy vấn nội dung của nó. apt-file search
-
Lệnh này sẽ tìm kiếm xem một tệp được bao gồm trong gói nào. Một danh sách tất cả các gói chứa mẫu sẽ được trả về.
apt-file list
-
Lệnh này được sử dụng để liệt kê nội dung của một gói giống như lệnh
dpkg -L
.
Đáp án Bài tập Hướng dẫn
-
Lệnh để cài đặt gói có tên
package.deb
bằng cách sử dụngdpkg
là gì?Truyền tham số
-i
chodpkg
:# dpkg -i package.deb
-
Bằng cách sử dụng
dpkg-query
, hãy tìm gói chứa tệp có tên7zr.1.gz
.Thêm tham số
-S
vàodpkg-query
:# dpkg-query -S 7zr.1.gz
-
Bạn có thể xóa gói có tên
unzip
khỏi hệ thống bằng cách sử dụngdpkg -r unzip
nếu góifile-roller
phụ thuộc vào gói đó không? Nếu không, cách tốt nhất để làm điều này là gì?Không.
dpkg
sẽ không xử lý các phần phụ thuộc và sẽ không cho phép bạn xóa gói nếu một gói đã được cài đặt khác phụ thuộc vào gói đó. Trong ví dụ này, trước tiên, bạn có thể xóafile-roller
(giả sử không có gì phụ thuộc vào nó) và sau đó làunzip
, hoặc là xóa cả hai cùng lúc với:# dpkg -r unzip file-roller
-
Làm cách nào để có thể tìm ra gói nào chứa tệp
/usr/bin/unrar
bằng cách sử dụng tiện íchapt-file
?Sử dụng tham số
search
, theo sau là đường dẫn (hoặc tên tệp):# apt-file search /usr/bin/unrar
-
Bằng cách sử dụng
apt-cache
, lệnh hiển thị thông tin cho góigimp
là gì?Sử dụng tham số
show
, theo sau là tên gói:# apt-cache show gimp
Đáp án Bài tập Mở rộng
-
Hãy xét một kho lưu trữ chứa các gói nguồn Debian dành cho bản phân phối
xenial
được lưu trữ tạihttp://us.archive.ubuntu.com/ubuntu/
với các gói dành cho thành phầnuniverse
. Dòng tương ứng sẽ được thêm vào/etc/apt/sources.list
là gì?Các gói nguồn thuộc loại
deb-src
; vì vậy, dòng tương ứng phải là:deb-src http://us.archive.ubuntu.com/ubuntu/ xenial universe
Dòng này cũng có thể được thêm vào bên trong tệp
.list
trong/etc/apt/sources.list.d/
. Tên sẽ tùy thuộc vào bạn nhưng nó phải có tính mô tả, chẳng hạn nhưxenial_sources.list
. -
Trong khi biên dịch chương trình, bạn gặp phải thông báo lỗi cho biết rằng tệp tiêu đề
zzip-io.h
không có trong hệ thống. Làm cách nào để có thể tìm ra gói nào cung cấp tệp đó?Sử dụng
apt-file search
để tìm gói nào chứa tệp không có trong hệ thống:# apt-file search zzip-io.h
-
Làm cách nào để có thể bỏ qua cảnh báo phụ thuộc và xóa gói bằng cách sử dụng
dpkg
ngay cả khi có các gói phụ thuộc vào gói đó trong hệ thống?Tham số
--force
có thể được sử dụng, nhưng bạn không bao giờ nên thực hiện điều này trừ khi bạn biết chính xác mình đang làm gì vì nó có rủi ro lớn (hệ thống sẽ ở trạng thái không nhất quán hoặc “bị hỏng”). -
Làm cách nào để có thể nhận thêm thông tin về gói có tên
midori
bằng cách sử dụngapt
?Sử dụng
apt-cache show
, theo sau là tên gói:# apt-cache show midori
-
Trước khi cài đặt hoặc cập nhật các gói bằng
apt
, bạn nên sử dụng lệnh nào để đảm bảo rằng chỉ mục gói được cập nhật?apt-get update
nên được sử dụng. Thao tác này sẽ tải xuống các chỉ mục gói mới nhất từ kho lưu trữ được mô tả trong tệp/etc/apt/sources.list
hoặc trong thư mục/etc/apt/sources.list.d/
.