102.5 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.5 Sử dụng Trình Quản lý gói RPM và YUM |
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
) với mã nguồn mà ta 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à Trình Quản lý Gói RPM và công cụ tương ứng của nó (rpm
) được phát triển bởi Red Hat. Ngày nay, chúng được sử dụng rộng rãi không chỉ trên chính Red Hat Enterprise Linux (RHEL) mà còn cả trên các thế hệ sau của nó như Fedora, CentOS, Oracle Linux và các bản phân phối khác (như openSUSE) và thậm chí cả các hệ điều hành khác (như AIX của IBM).
Các công cụ quản lý gói khác phổ biến trên các bản phân phối tương thích với Red Hat là yum
(YellowDog Updater Modified), dnf
(Dandified YUM) và zypper
. Những công cụ này có thể sắp xếp một cách hợp lý nhiều khía cạnh của việc cài đặt, bảo trì và gỡ bỏ các gói, khiến cho việc quản lý gói 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 rpm
, yum
, dnf
và zypper
để lấy, cài đặt, quản lý và gỡ bỏ phần mềm trên hệ thống Linux.
Note
|
Mặc dù sử dụng cùng một định dạng gói nhưng giữa các bản phân phối vẫn có những điểm khác biệt cục bộ. Vì vậy, một gói được tạo riêng cho openSUSE có thể sẽ không hoạt động được trên hệ thống RHEL và ngược lại. Khi tìm kiếm các gói, hãy luôn kiểm tra tính tương thích và cố gắng tìm một gói phù hợp nhất với bản phân phối của bạn nếu có thể. |
Trình Quản lý Gói RPM (rpm)
Trình Quản lý Gói RPM (rpm
) là công cụ thiết yếu để quản lý các gói phần mềm trên các hệ thống dựa trên (hoặc được dẫn xuất từ) Red Hat.
Cài đặt, nâng cấp và gỡ bỏ các Gói
Hoạt động cơ bản nhất là cài đặt một gói. Việc này có thể được thực hiện với:
# rpm -i PACKAGENAME
Trong đó PACKAGENAME
là tên của gói .rpm
cần cài đặt.
Nếu đã có phiên bản trước của gói trên hệ thống, ta có thể nâng cấp lên phiên bản mới hơn bằng tham số -U
:
# rpm -U PACKAGENAME
Nếu không có phiên bản nào được cài đặt trước đó thì một bản sao mới sẽ được cài đặt. Để tránh điều này và chỉ nâng cấp gói đã được cài đặt, hãy sử dụng tùy chọn -F
.
Trong cả hai thao tác, ta có thể thêm tham số -v
để nhận đầu ra chi tiết (thông tin khác được hiển thị trong quá trình cài đặt) và -h
để in các dấu thăng (#
) dưới dạng hỗ trợ trực quan nhằm theo dõi tiến trình cài đặt. Nhiều tham số có thể được kết hợp thành một; vì vậy, rpm -i -v -h
cũng giống như rpm -ivh
.
Để xóa một gói đã được cài đặt, hãy truyền tham số -e
(như trong “erase”) cho rpm
, theo sau là tên của gói cần xóa:
# rpm -e wget
Nếu gói đã được cài đặt phụ thuộc vào gói bị xóa, người dùng sẽ nhận được thông báo lỗi:
# rpm -e unzip error: Failed dependencies: /usr/bin/unzip is needed by (installed) file-roller-3.28.1-2.el7.x86_64
Để hoàn tất thao tác, trước tiên ta cần xóa các gói phụ thuộc vào gói mình muốn xóa (trong ví dụ trên là file-roller
). Ta có thể chuyển nhiều tên gói cho rpm -e
để xóa nhiều gói cùng một lúc.
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ó.
rpm
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 không thì nó sẽ không cài đặt gói. Trong trường hợp này, rpm
sẽ liệt kê những gì còn thiếu. Tuy nhiên, nó không thể tự xử lý các phần phụ thuộc.
Trong ví dụ bên dưới, người dùng đã cố gắng cài đặt gói cho trình chỉnh sửa ảnh GIMP nhưng lại bị thiếu một số phần phụ thuộc:
# rpm -i gimp-2.8.22-1.el7.x86_64.rpm error: Failed dependencies: babl(x86-64) >= 0.1.10 is needed by gimp-2:2.8.22-1.el7.x86_64 gegl(x86-64) >= 0.2.0 is needed by gimp-2:2.8.22-1.el7.x86_64 gimp-libs(x86-64) = 2:2.8.22-1.el7 is needed by gimp-2:2.8.22-1.el7.x86_64 libbabl-0.1.so.0()(64bit) is needed by gimp-2:2.8.22-1.el7.x86_64 libgegl-0.2.so.0()(64bit) is needed by gimp-2:2.8.22-1.el7.x86_64 libgimp-2.0.so.0()(64bit) is needed by gimp-2:2.8.22-1.el7.x86_64 libgimpbase-2.0.so.0()(64bit) is needed by gimp-2:2.8.22-1.el7.x86_64 libgimpcolor-2.0.so.0()(64bit) is needed by gimp-2:2.8.22-1.el7.x86_64 libgimpconfig-2.0.so.0()(64bit) is needed by gimp-2:2.8.22-1.el7.x86_64 libgimpmath-2.0.so.0()(64bit) is needed by gimp-2:2.8.22-1.el7.x86_64 libgimpmodule-2.0.so.0()(64bit) is needed by gimp-2:2.8.22-1.el7.x86_64 libgimpthumb-2.0.so.0()(64bit) is needed by gimp-2:2.8.22-1.el7.x86_64 libgimpui-2.0.so.0()(64bit) is needed by gimp-2:2.8.22-1.el7.x86_64 libgimpwidgets-2.0.so.0()(64bit) is needed by gimp-2:2.8.22-1.el7.x86_64 libmng.so.1()(64bit) is needed by gimp-2:2.8.22-1.el7.x86_64 libwmf-0.2.so.7()(64bit) is needed by gimp-2:2.8.22-1.el7.x86_64 libwmflite-0.2.so.7()(64bit) is needed by gimp-2:2.8.22-1.el7.x86_64
Người dùng có thể tìm các gói .rpm
với các phần phụ thuộc tương ứng và cài đặt chúng. Các trình quản lý gói như yum
, zypper
và dnf
có các công cụ có thể cho biết gói nào cung cấp một tệp cụ thể. Những điều đó sẽ được thảo luận trong phần sau của bài học này.
Liệt kê các Gói đã được cài đặt
Để có danh sách tất cả các gói đã được cài đặt trên hệ thống, hãy sử dụng rpm -qa
("qa" có thể được hiểu là query all - tức “truy vấn tất cả”).
# rpm -qa selinux-policy-3.13.1-229.el7.noarch pciutils-libs-3.5.1-3.el7.x86_64 redhat-menus-12.0.2-8.el7.noarch grubby-8.28-25.el7.x86_64 hunspell-en-0.20121024-6.el7.noarch dejavu-fonts-common-2.33-6.el7.noarch xorg-x11-drv-dummy-0.3.7-1.el7.1.x86_64 libevdev-1.5.6-1.el7.x86_64 [...]
Lấy Thông tin Gói
Để nhận thông tin về một gói đã được cài đặt (chẳng hạn như số phiên bản, kiến trúc, ngày cài đặt, trình đóng gói, tóm tắt, v.v.), hãy sử dụng rpm
với các tham số -qi
("qi" có thể được hiểu là query info - tức "`truy vấn thông tin `"), theo sau là tên gói. Ví dụ:
# rpm -qi unzip Name : unzip Version : 6.0 Release : 19.el7 Architecture: x86_64 Install Date: Sun 25 Aug 2019 05:14:39 PM EDT Group : Applications/Archiving Size : 373986 License : BSD Signature : RSA/SHA256, Wed 25 Apr 2018 07:50:02 AM EDT, Key ID 24c6a8a7f4a80eb5 Source RPM : unzip-6.0-19.el7.src.rpm Build Date : Wed 11 Apr 2018 01:24:53 AM EDT Build Host : x86-01.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://www.info-zip.org/UnZip.html Summary : A utility for unpacking zip files Description : The unzip utility is used to list, test, or extract files from a zip archive. Zip archives are commonly found on MS-DOS systems. The zip utility, included in the zip package, creates zip archives. Zip and unzip are both compatible with archives created by PKWARE(R)'s PKZIP for MS-DOS, but the programs' options and default behaviors do differ in some respects. Install the unzip package if you need to list, test or extract files from a zip archive.
Để có danh sách các tệp bên trong một gói đã được cài đặt, hãy sử dụng tham số -ql
("ql" có thể được hiểu là query list - tức “truy vấn danh sách”), theo sau là tên gói:
# rpm -ql unzip /usr/bin/funzip /usr/bin/unzip /usr/bin/unzipsfx /usr/bin/zipgrep /usr/bin/zipinfo /usr/share/doc/unzip-6.0 /usr/share/doc/unzip-6.0/BUGS /usr/share/doc/unzip-6.0/LICENSE /usr/share/doc/unzip-6.0/README /usr/share/man/man1/funzip.1.gz /usr/share/man/man1/unzip.1.gz /usr/share/man/man1/unzipsfx.1.gz /usr/share/man/man1/zipgrep.1.gz /usr/share/man/man1/zipinfo.1.gz
Nếu muốn lấy thông tin hoặc danh sách tệp từ gói chưa được cài đặt, ta chỉ cần thêm tham số -p
vào các lệnh ở trên, theo sau là tên của tệp RPM (FILENAME
). Vì vậy, rpm -qi PACKAGENAME
trở thành rpm -qip FILENAME
và rpm -ql PACKAGENAME
sẽ trở thành rpm -qlp FILENAME
như được minh họa bên dưới.
# rpm -qip atom.x86_64.rpm Name : atom Version : 1.40.0 Release : 0.1 Architecture: x86_64 Install Date: (not installed) Group : Unspecified Size : 570783704 License : MIT Signature : (none) Source RPM : atom-1.40.0-0.1.src.rpm Build Date : sex 09 ago 2019 12:36:31 -03 Build Host : b01bbeaf3a88 Relocations : /usr URL : https://atom.io/ Summary : A hackable text editor for the 21st Century. Description : A hackable text editor for the 21st Century.
# rpm -qlp atom.x86_64.rpm /usr/bin/apm /usr/bin/atom /usr/share/applications/atom.desktop /usr/share/atom /usr/share/atom/LICENSE /usr/share/atom/LICENSES.chromium.html /usr/share/atom/atom /usr/share/atom/atom.png /usr/share/atom/blink_image_resources_200_percent.pak /usr/share/atom/content_resources_200_percent.pak /usr/share/atom/content_shell.pak (listing goes on)
Tìm ra Gói nào sở hữu một Tệp cụ thể
Để biết gói đã được cài đặt nào sở hữu một tệp cụ thể, hãy sử dụng -qf
(qf" có thể được hiểu là query file - tức “truy vấn tệp”), theo sau là đường dẫn đầy đủ tới tệp:
# rpm -qf /usr/bin/unzip unzip-6.0-19.el7.x86_64
Trong ví dụ trên, tệp /usr/bin/unzip
thuộc về gói unzip-6.0-19.el7.x86_64
.
Trình Cập nhật YellowDog đã sửa đổi (YUM)
yum
ban đầu được phát triển dưới cái tên Trình Cập nhật Yellow Dog (YUP) - một công cụ để quản lý gói trên bản phân phối Yellow Dog Linux. Theo thời gian, nó đã được phát triển để quản lý các gói trên các hệ thống dựa trên RPM khác như Fedora, CentOS, Red Hat Enterprise Linux và Oracle Linux.
Về mặt chức năng, nó cũng tương tự như tiện ích apt
trong các hệ thống dựa trên Debian trên phương diện có thể tìm kiếm, cài đặt, cập nhật, xóa các gói và tự động xử lý các phần phụ thuộc. yum
có thể được sử dụng để cài đặt một gói duy nhất hoặc để nâng cấp toàn bộ hệ thống cùng một lúc.
Tìm kiếm Gói
Để cài đặt một gói, ta cần biết tên của nó. Đối với điều này, ta có thể thực hiện tìm kiếm với yum search PATTERN
, trong đó, PATTERN
là tên của gói cần tìm kiếm. Kết quả sẽ là một danh sách các gói có tên hoặc phần tóm tắt có chứa mẫu tìm kiếm được chỉ định. Ví dụ: nếu cần một tiện ích để xử lý các tệp nén 7Zip (có đuôi .7z
), chúng ta có thể sử dụng:
# yum search 7zip Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirror.ufscar.br * epel: mirror.globo.com * extras: mirror.ufscar.br * updates: mirror.ufscar.br =========================== N/S matchyutr54ed: 7zip ============================ p7zip-plugins.x86_64 : Additional plugins for p7zip p7zip.x86_64 : Very high compression ratio file archiver p7zip-doc.noarch : Manual documentation and contrib directory p7zip-gui.x86_64 : 7zG - 7-Zip GUI version Name and summary matches only, use "search all" for everything.
Cài đặt, nâng cấp và gỡ bỏ các Gói
Để cài đặt gói bằng yum
, hãy sử dụng lệnh yum install PACKAGENAME
, trong đó, PACKAGENAME
là tên của gói. yum
sẽ tìm gói và các phần phụ thuộc tương ứng từ một kho lưu trữ trực tuyến và cài đặt mọi thứ vào hệ thống.
# yum install p7zip Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirror.ufscar.br * epel: mirror.globo.com * extras: mirror.ufscar.br * updates: mirror.ufscar.br Resolving Dependencies --> Running transaction check ---> Package p7zip.x86_64 0:16.02-10.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ========================================================================== Package Arch Version Repository Size ========================================================================== Installing: p7zip x86_64 16.02-10.el7 epel 604 k Transaction Summary ========================================================================== Install 1 Package Total download size: 604 k Installed size: 1.7 M Is this ok [y/d/N]:
Để nâng cấp gói đã được cài đặt, hãy sử dụng yum update PACKAGENAME
, trong đó, PACKAGENAME
là tên của gói cần nâng cấp. Ví dụ:
# yum update wget Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirror.ufscar.br * epel: mirror.globo.com * extras: mirror.ufscar.br * updates: mirror.ufscar.br Resolving Dependencies --> Running transaction check ---> Package wget.x86_64 0:1.14-18.el7 will be updated ---> Package wget.x86_64 0:1.14-18.el7_6.1 will be an update --> Finished Dependency Resolution Dependencies Resolved ========================================================================== Package Arch Version Repository Size ========================================================================== Updating: wget x86_64 1.14-18.el7_6.1 updates 547 k Transaction Summary ========================================================================== Upgrade 1 Package Total download size: 547 k Is this ok [y/d/N]:
Nếu bỏ qua tên của gói, ta sẽ thể cập nhật tất cả các gói đang có sẵn các bản cập nhật trên hệ thống.
Để kiểm tra xem có bản cập nhật nào cho một gói cụ thể hay không, hãy sử dụng yum check-update PACKAGENAME
. Tương tự, nếu bỏ qua tên gói, yum
sẽ kiểm tra các bản cập nhật cho tất cả các gói đã được cài đặt trên hệ thống.
Để xóa gói đã được cài đặt, hãy sử dụng yum remove PACKAGENAME
, trong đó, PACKAGENAME
là tên của gói cần xóa.
Tìm ra Gói nào cung cấp một Tệp cụ thể
Trong ví dụ trước, chúng ta đã thảo luận về việc cài đặt trình chỉnh sửa hình ảnh gimp
không thành công do các phần phụ thuộc chưa được đáp ứng. Tuy nhiên, rpm
có thể hiển thị tệp nào bị thiếu nhưng sẽ không liệt kê tên gói cung cấp chúng.
Ví dụ: một trong những phần phụ thuộc bị thiếu là libgimpui-2.0.so.0
. Để xem gói nào cung cấp nó, ta có thể sử dụng yum whatprovides
, theo sau là tên của tệp cần tìm kiếm:
# yum whatprovides libgimpui-2.0.so.0 Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirror.ufscar.br * epel: mirror.globo.com * extras: mirror.ufscar.br * updates: mirror.ufscar.br 2:gimp-libs-2.8.22-1.el7.i686 : GIMP libraries Repo : base Matched from: Provides : libgimpui-2.0.so.0
Câu trả lời là gimp-libs-2.8.22-1.el7.i686
. Sau đó, ta có thể cài đặt gói bằng lệnh yum install gimp-libs
.
Điều này cũng khả thi đối với các tệp đã có trong hệ thống. Ví dụ: nếu muốn biết tệp /etc/hosts
đến từ đâu, ta có thể sử dụng:
# yum whatprovides /etc/hosts Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirror.ufscar.br * epel: mirror.globo.com * extras: mirror.ufscar.br * updates: mirror.ufscar.br setup-2.8.71-10.el7.noarch : A set of system configuration and setup files Repo : base Matched from: Filename : /etc/hosts
Câu trả lời là setup-2.8.71-10.el7.noarch
.
Nhận Thông tin về Gói
Để nhận thông tin về gói, chẳng hạn như phiên bản, kiến trúc, mô tả, kích thước, v.v., hãy sử dụng yum info PACKAGENAME
, trong đó, PACKAGENAME
là tên của gói cần lấy thông tin:
# yum info firefox Last metadata expiration check: 0:24:16 ago on Sat 21 Sep 2019 02:39:43 PM -03. Installed Packages Name : firefox Version : 69.0.1 Release : 3.fc30 Architecture : x86_64 Size : 268 M Source : firefox-69.0.1-3.fc30.src.rpm Repository : @System From repo : updates Summary : Mozilla Firefox Web browser URL : https://www.mozilla.org/firefox/ License : MPLv1.1 or GPLv2+ or LGPLv2+ Description : Mozilla Firefox is an open-source web browser, designed : for standards compliance, performance and portability.
Quản lý Kho Phần mềm
Đối với yum
, “repos” được liệt kê trong thư mục /etc/yum.repos.d/
. Mỗi kho lưu trữ sẽ được đại diện bởi một tệp .repo
như CentOS-Base.repo
.
Người dùng có thể thêm các kho bổ sung bằng cách thêm tệp .repo
vào thư mục được đề cập ở trên hoặc vào cuối /etc/yum.conf
. Tuy nhiên, cách được khuyến nghị để thêm hoặc quản lý các kho lưu trữ là sử dụng công cụ yum-config-manager
.
Để thêm kho lưu trữ, hãy sử dụng tham số --add-repo
, theo sau là URL tới tệp .repo
.
# yum-config-manager --add-repo https://rpms.remirepo.net/enterprise/remi.repo Loaded plugins: fastestmirror, langpacks adding repo from: https://rpms.remirepo.net/enterprise/remi.repo grabbing file https://rpms.remirepo.net/enterprise/remi.repo to /etc/yum.repos.d/remi.repo repo saved to /etc/yum.repos.d/remi.repo
Để có danh sách tất cả các kho lưu trữ có sẵn, hãy sử dụng yum repolist all
. Chúng ta sẽ nhận được một đầu ra tương tự như thế này:
# yum repolist all Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirror.ufscar.br * epel: mirror.globo.com * extras: mirror.ufscar.br * updates: mirror.ufscar.br repo id repo name status updates/7/x86_64 CentOS-7 - Updates enabled: 2,500 updates-source/7 CentOS-7 - Updates Sources disabled
Các kho lưu trữ "bị vô hiệu hóa" (disabled
) sẽ bị bỏ qua khi cài đặt hoặc nâng cấp phần mềm. Để kích hoạt hoặc vô hiệu hoá kho lưu trữ, hãy sử dụng tiện ích yum-config-manager
, theo sau là id của kho lưu trữ.
Trong kết quả ở trên, id của kho lưu trữ đã được hiển thị trên cột đầu tiên (repo id
) của mỗi dòng. Ta chỉ sử dụng phần đứng trước dấu /
đầu tiên; vì vậy, id cho repo CentOS-7 - Updates
là updates
chứ không phải updates/7/x86_64
.
# yum-config-manager --disable updates
Lệnh trên sẽ vô hiệu hóa repo updates
. Để kích hoạt lại nó, hãy sử dụng:
# yum-config-manager --enable updates
Note
|
Yum sẽ lưu trữ các gói đã tải xuống và siêu dữ liệu được liên kết trong một thư mục bộ nhớ đệm (thường là |
DNF
dnf
là công cụ quản lý gói được sử dụng trên Fedora và là một nhánh của yum
. Vì vậy, nhiều lệnh và tham số của chúng sẽ tương tự nhau. Phần này sẽ cung cấp cho bạn một cái nhìn tổng quan nhanh về dnf
.
- Tìm kiếm các gói
-
dnf search PATTERN
, trong đó,PATTERN
là phần đang cần được tìm kiếm. Ví dụ:dnf search unzip
sẽ hiển thị tất cả các gói chứa từunzip
trong tên hoặc mô tả. - Nhận thông tin về một gói
-
dnf info PACKAGENAME
- Cài đặt gói
-
dnf install PACKAGENAME
, trong đó,PACKAGENAME
là tên của gói cần cài đặt. Bạn có thể tìm thấy tên bằng cách thực hiện tìm kiếm. - Gỡ bỏ gói
-
dnf remove PACKAGENAME
- Nâng cấp gói
-
dnf upgrade PACKAGENAME
được dùng để chỉ cập nhật một gói. Hãy bỏ qua PACKAGENAME để nâng cấp tất cả các gói trong hệ thống. - Tìm ra gói nào cung cấp một tệp cụ thể
-
dnf provides FILENAME
- Lấy danh sách tất cả các gói đã được cài đặt trong hệ thống
-
dnf list --installed
- Liệt kê nội dung của một gói
-
dnf repoquery -l PACKAGENAME
Note
|
|
Quản lý Kho Phần mềm
Cũng giống như với yum
và zypper
, dnf
được dùng để làm việc với các kho lưu trữ phần mềm (repos). Mỗi bản phân phối sẽ có một danh sách các kho lưu trữ mặc định và quản trị viên có thể thêm hoặc xóa các kho lưu trữ nếu cần.
Để có danh sách tất cả các kho lưu trữ có sẵn, hãy sử dụng dnf repolist
. Để chỉ liệt kê các kho lưu trữ đã được kích hoạt, hãy thêm tùy chọn --enabled
và để chỉ liệt kê các kho lưu trữ đã bị vô hiệu hoá, hãy thêm tùy chọn --disabled
.
# dnf repolist Last metadata expiration check: 0:20:09 ago on Sat 21 Sep 2019 02:39:43 PM -03. repo id repo name status *fedora Fedora 30 - x86_64 56,582 *fedora-modular Fedora Modular 30 - x86_64 135 *updates Fedora 30 - x86_64 - Updates 12,774 *updates-modular Fedora Modular 30 - x86_64 - Updates 145
Để thêm một kho lưu trữ, hãy sử dụng dnf config-manager --add_repo URL
, trong đó, URL
là URL đầy đủ của kho lưu trữ. Để kích hoạt một kho lưu trữ, hãy sử dụng dnf config-manager --set-enabled REPO_ID
.
Tương tự như vậy, để vô hiệu hóa kho lưu trữ, hãy sử dụng dnf config-manager --set-disabled REPO_ID
. Trong cả hai trường hợp, REPO_ID
là ID duy nhất cho kho lưu trữ mà ta có thể nhận được bằng cách sử dụng dnf repolist
. Các kho lưu trữ đã thêm sẽ được kích hoạt theo mặc định.
Các kho lưu trữ được lưu trữ trong các tệp .repo
trong thư mục /etc/yum.repos.d/
với cùng một cú pháp được sử dụng cho yum
.
Zypper
zypper
là công cụ quản lý gói được sử dụng trên SUSE Linux và OpenSUSE. Về tính năng, nó cũng tương tự như apt
và yum
trong việc cho phép cài đặt, cập nhật và xóa các gói khỏi hệ thống với độ phân giải phụ thuộc tự động.
Cập nhật Chỉ mục Gói
Giống như các công cụ quản lý gói khác, zypper
được dùng để làm việc với các kho lưu trữ chứa các gói và siêu dữ liệu. Siêu dữ liệu này cần được làm mới theo thời gian để tiện ích biết về các gói mới nhất hiện có. Để làm mới, ta chỉ cần gõ:
# zypper refresh Repository 'Non-OSS Repository' is up to date. Repository 'Main Repository' is up to date. Repository 'Main Update Repository' is up to date. Repository 'Update Repository (Non-Oss)' is up to date. All repositories have been refreshed.
zypper
có tính năng tự động làm mới có thể được kích hoạt trên từng cơ sở kho lưu trữ, nghĩa là một số kho lưu trữ có thể được làm mới tự động trước khi cài đặt gói hoặc truy vấn và các kho lưu trữ khác có thể sẽ cần được làm mới theo cách thủ công. Bạn sẽ sớm tìm hiểu về cách kiểm soát tính năng này.
Tìm kiếm Gói
Để tìm kiếm một gói, hãy sử dụng toán tử search
(hoặc se
), theo sau là tên gói:
# zypper se gnumeric Loading repository data... Reading installed packages... S | Name | Summary | Type --+----------------+-----------------------------------+-------- | gnumeric | Spreadsheet Application | package | gnumeric-devel | Spreadsheet Application | package | gnumeric-doc | Documentation files for Gnumeric | package | gnumeric-lang | Translations for package gnumeric | package
Toán tử tìm kiếm cũng có thể được sử dụng để lấy danh sách tất cả các gói đã được cài đặt trong hệ thống. Để làm như vậy, hãy sử dụng tham số -i
mà không có tên gói (như trong zypper se -i
).
Để xem một gói cụ thể đã được cài đặt hay chưa, hãy thêm tên gói vào lệnh trên. Ví dụ: lệnh sau sẽ tìm kiếm trong số các gói đã được cài đặt để xác định tất cả các gói có chứa “firefox” trong tên:
# zypper se -i firefox Loading repository data... Reading installed packages... S | Name | Summary | Type --+------------------------------------+-------------------------+-------- i | MozillaFirefox | Mozilla Firefox Web B-> | package i | MozillaFirefox-branding-openSUSE | openSUSE branding of -> | package i | MozillaFirefox-translations-common | Common translations f-> | package
Để chỉ tìm kiếm trong số các gói không được cài đặt, hãy thêm tham số -u
vào toán tử se
.
Cài đặt, nâng cấp và gỡ bỏ các Gói
Để cài đặt gói phần mềm, hãy sử dụng toán tử install
(hoặc in
), theo sau là tên gói:
# zypper in unrar zypper in unrar Loading repository data... Reading installed packages... Resolving package dependencies... The following NEW package is going to be installed: unrar 1 new package to install. Overall download size: 141.2 KiB. Already cached: 0 B. After the operation, additional 301.6 KiB will be used. Continue? [y/n/v/...? shows all options] (y): y Retrieving package unrar-5.7.5-lp151.1.1.x86_64 (1/1), 141.2 KiB (301.6 KiB unpacked) Retrieving: unrar-5.7.5-lp151.1.1.x86_64.rpm .......................[done] Checking for file conflicts: .......................................[done] (1/1) Installing: unrar-5.7.5-lp151.1.1.x86_64 .....................[done]
zypper
cũng có thể được sử dụng để cài đặt gói RPM trên đĩa, đồng thời cố gắng đáp ứng các phần phụ thuộc của nó bằng cách sử dụng các gói từ kho lưu trữ. Để làm như vậy, ta chỉ cần cung cấp đường dẫn đầy đủ đến gói thay vì tên gói (chẳng hạn như zypper trong /home/john/newpackage.rpm
).
Để cập nhật các gói được cài đặt trên hệ thống, hãy sử dụng zypper update
. Như trong quá trình cài đặt, thao tác này sẽ hiển thị danh sách các gói sẽ được cài đặt/nâng cấp trước khi hỏi người dùng có muốn tiếp tục hay không.
Nếu chỉ muốn liệt kê các bản cập nhật có sẵn mà không cần cài đặt bất kỳ thứ gì, ta có thể sử dụng zypper list-updates
.
Để xóa gói, hãy sử dụng toán tử remove
(hoặc rm
), theo sau là tên gói:
# zypper rm unrar Loading repository data... Reading installed packages... Resolving package dependencies... The following package is going to be REMOVED: unrar 1 package to remove. After the operation, 301.6 KiB will be freed. Continue? [y/n/v/...? shows all options] (y): y (1/1) Removing unrar-5.7.5-lp151.1.1.x86_64 ........................[done]
Hãy nhớ rằng việc xóa một gói cũng sẽ xóa mọi gói khác phụ thuộc vào gói đó. Ví dụ:
# zypper rm libgimp-2_0-0 Loading repository data... Warning: No repositories defined. Operating only with the installed resolvables. Nothing can be installed. Reading installed packages... Resolving package dependencies... The following 6 packages are going to be REMOVED: gimp gimp-help gimp-lang gimp-plugins-python libgimp-2_0-0 libgimpui-2_0-0 6 packages to remove. After the operation, 98.0 MiB will be freed. Continue? [y/n/v/...? shows all options] (y):
Tìm ra Gói nào chứa một Tệp cụ thể
Để xem gói nào đang chứa một tệp cụ thể, hãy sử dụng toán tử tìm kiếm, theo sau là tham số --provides
và tên của tệp (hoặc đường dẫn đầy đủ đến tệp). Ví dụ: nếu muốn biết gói nào chứa tệp libgimpmodule-2.0.so.0
trong /usr/lib64/
, ta sẽ sử dụng:
# zypper se --provides /usr/lib64/libgimpmodule-2.0.so.0 Loading repository data... Reading installed packages... S | Name | Summary | Type --+---------------+----------------------------------------------+-------- i | libgimp-2_0-0 | The GNU Image Manipulation Program - Libra-> | package
Lấy Thông tin Gói
Để xem siêu dữ liệu nào được liên kết với một gói, hãy sử dụng toán tử info
, theo sau là tên gói. Lệnh này sẽ cung cấp kho lưu trữ gốc, tên gói, phiên bản, kiến trúc, nhà cung cấp, kích thước đã được cài đặt, việc nó được cài đặt hay không, trạng thái (nếu nó được cập nhật), gói nguồn và mô tả.
# zypper info gimp Loading repository data... Reading installed packages... Information for package gimp: ----------------------------- Repository : Main Repository Name : gimp Version : 2.8.22-lp151.4.6 Arch : x86_64 Vendor : openSUSE Installed Size : 29.1 MiB Installed : Yes (automatically) Status : up-to-date Source package : gimp-2.8.22-lp151.4.6.src Summary : The GNU Image Manipulation Program Description : The GIMP is an image composition and editing program, which can be used for creating logos and other graphics for Web pages. The GIMP offers many tools and filters, and provides a large image manipulation toolbox, including channel operations and layers, effects, subpixel imaging and antialiasing, and conversions, together with multilevel undo. The GIMP offers a scripting facility, but many of the included scripts rely on fonts that we cannot distribute.
Quản lý Kho Phần mềm
zypper
cũng có thể được sử dụng để quản lý kho phần mềm. Để xem danh sách tất cả các kho lưu trữ hiện được đăng ký trong hệ thống, hãy sử dụng zypper repos
:
# zypper repos Repository priorities are without effect. All enabled repositories share the same priority. # | Alias | Name | Enabled | GPG Check | Refresh ---+---------------------------+------------------------------------+---------+-----------+-------- 1 | openSUSE-Leap-15.1-1 | openSUSE-Leap-15.1-1 | No | ---- | ---- 2 | repo-debug | Debug Repository | No | ---- | ---- 3 | repo-debug-non-oss | Debug Repository (Non-OSS) | No | ---- | ---- 4 | repo-debug-update | Update Repository (Debug) | No | ---- | ---- 5 | repo-debug-update-non-oss | Update Repository (Debug, Non-OSS) | No | ---- | ---- 6 | repo-non-oss | Non-OSS Repository | Yes | (r ) Yes | Yes 7 | repo-oss | Main Repository | Yes | (r ) Yes | Yes 8 | repo-source | Source Repository | No | ---- | ---- 9 | repo-source-non-oss | Source Repository (Non-OSS) | No | ---- | ---- 10 | repo-update | Main Update Repository | Yes | (r ) Yes | Yes 11 | repo-update-non-oss | Update Repository (Non-Oss) | Yes | (r ) Yes | Yes
Ta có thể xem trong cột Enabled
để biết rằng kho lưu trữ có đã được kích hoạt hay vô hiệu hoá. Ta cũng có thể thay đổi điều này bằng toán tử modifyrepo
, theo sau là tham số -e
(kích hoạt) hoặc -d
(vô hiệu hoá) và bí danh của kho lưu trữ (cột thứ hai trong đầu ra ở trên).
# zypper modifyrepo -d repo-non-oss Repository 'repo-non-oss' has been successfully disabled. # zypper modifyrepo -e repo-non-oss Repository 'repo-non-oss' has been successfully enabled.
Ở trên chúng ta đã đề cập đến việc zypper
có khả năng tự động làm mới có thể được kích hoạt trên cơ sở của mỗi kho lưu trữ. Khi được kích hoạt, cờ này sẽ khiến zypper
chạy thao tác làm mới (giống như chạy zypper refresh
) trước khi làm việc với kho đã chỉ định. Điều này có thể được kiểm soát bằng các tham số -f
và -F
của toán tử modifyrepo
:
# zypper modifyrepo -F repo-non-oss Autorefresh has been disabled for repository 'repo-non-oss'. # zypper modifyrepo -f repo-non-oss Autorefresh has been enabled for repository 'repo-non-oss'.
Thêm và Xóa Kho lưu trữ
Để thêm kho lưu trữ phần mềm mới cho zypper
, hãy sử dụng toán tử addrepo
, theo sau là URL của kho lưu trữ và tên kho lưu trữ như dưới đây:
# zypper addrepo http://packman.inode.at/suse/openSUSE_Leap_15.1/ packman Adding repository 'packman' ........................................[done] Repository 'packman' successfully added URI : http://packman.inode.at/suse/openSUSE_Leap_15.1/ Enabled : Yes GPG Check : Yes Autorefresh : No Priority : 99 (default priority) Repository priorities are without effect. All enabled repositories share the same priority.
Trong khi thêm kho lưu trữ, người dùng có thể kích hoạt cập nhật tự động bằng tham số -f
. Các kho lưu trữ đã thêm sẽ được kích hoạt theo mặc định, nhưng ta có thể thêm và vô hiệu hóa một kho lưu trữ cùng lúc bằng cách sử dụng tham số -d
.
Để xóa kho lưu trữ, hãy sử dụng toán tử removerepo
, theo sau là tên kho lưu trữ (Bí danh). Để xóa kho lưu trữ được thêm vào trong ví dụ trên, lệnh sẽ là:
# zypper removerepo packman Removing repository 'packman' ......................................[done] Repository 'packman' has been removed.
Bài tập Hướng dẫn
-
Bằng cách sử dụng
rpm
trên hệ thống Red Hat Enterprise Linux, bạn sẽ cài đặt góifile-roller-3.28.1-2.el7.x86_64.rpm
có hiển thị thanh tiến trình trong quá trình cài đặt như thế nào? -
Bằng cách sử dụng
rpm
, hãy tìm xem gói nào chứa tệp/etc/redhat-release
. -
Bạn sẽ sử dụng
yum
như thế nào để kiểm tra các bản cập nhật cho tất cả các gói trong hệ thống? -
Bằng cách sử dụng
zypper
, bạn sẽ vô hiệu hoá kho lưu trữ có tên là repo-extras như thế nào? -
Nếu có một tệp
.repo
mô tả một kho lưu trữ mới thì tệp này sẽ được đặt ở đâu để DNF có thể nhận ra nó?
Bài tập Mở rộng
-
Bạn sẽ sử dụng
zypper
như thế nào để tìm ra gói sở hữu tệp/usr/sbin/swapon
? -
Làm cách nào để có thể lấy danh sách tất cả các gói đã được cài đặt trong hệ thống bằng cách sử dụng
dnf
? -
Bằng cách sử dụng
dnf
, lệnh để thêm kho lưu trữ tạihttps://www.example.url/home:reponame.repo
vào hệ thống là gì? -
Làm cách nào để có thể sử dụng
zypper
kiểm tra xem góiunzip
đã được cài đặt hay chưa? -
Bằng cách sử dụng
yum
, hãy tìm xem gói nào cung cấp tệp/bin/wget
.
Tóm tắt
Trong bài học này, chúng ta đã học về:
-
Cách sử dụng
rpm
để cài đặt, nâng cấp và gỡ bỏ các gói. -
Cách sử dụng
yum
,zypper
vàdnf
. -
Làm thế nào để có được thông tin về một gói.
-
Làm thế nào để có được một danh sách nội dung các gói.
-
Làm cách nào để tìm ra tệp đến từ gói nào.
-
Cách liệt kê, thêm bớt, kích hoạt và vô hiệu hoá kho phần mềm.
Các lệnh sau đã được thảo luận trong bài học này:
-
rpm
-
yum
-
dnf
-
zypper
Đáp án Bài tập Hướng dẫn
-
Bằng cách sử dụng
rpm
trên hệ thống Red Hat Enterprise Linux, bạn sẽ cài đặt góifile-roller-3.28.1-2.el7.x86_64.rpm
có hiển thị thanh tiến trình trong quá trình cài đặt như thế nào?Sử dụng tham số
-i
để cài đặt gói và tùy chọn-h
để bật “ký tự dấu thăng” hiển thị tiến trình cài đặt. Vì vậy, câu trả lời sẽ làrpm -ih file-roller-3.28.1-2.el7.x86_64.rpm
. -
Bằng cách sử dụng
rpm
, hãy tìm xem gói nào chứa tệp/etc/redhat-release
.Bạn đang muốn truy vấn thông tin về một tệp. Vì vậy, hãy sử dụng tham số
-qf
:rpm -qf /etc/redhat-release
. -
Bạn sẽ sử dụng
yum
như thế nào để kiểm tra các bản cập nhật cho tất cả các gói trong hệ thống?Sử dụng thao tác
check-update
không đi kèm tên gói:yum check-update
. -
Bằng cách sử dụng
zypper
, bạn sẽ vô hiệu hoá kho lưu trữ có tên là repo-extras như thế nào?Sử dụng thao tác
modifyrepo
để thay đổi các tham số của kho và tham số-d
để vô hiệu hoá nó:zypper modifyrepo -d repo-extras
. -
Nếu có một tệp
.repo
mô tả một kho lưu trữ mới thì tệp này sẽ được đặt ở đâu để DNF có thể nhận ra nó?Các tệp
.repo
cho DNF phải được đặt ở cùng một vị trí được YUM sử dụng, bên trong/etc/yum.repos.d/
.
Đáp án Bài tập Mở rộng
-
Bạn sẽ sử dụng
zypper
như thế nào để tìm ra gói sở hữu tệp/usr/sbin/swapon
?Sử dụng toán tử
se
(tìm kiếm) và tham số--provides
:zypper se --provides /usr/sbin/swapon
. -
Làm cách nào để có thể lấy danh sách tất cả các gói đã được cài đặt trong hệ thống bằng cách sử dụng
dnf
?Sử dụng toán tử
list
, theo sau là tham số--installed
:dnf list --installed
. -
Bằng cách sử dụng
dnf
, lệnh để thêm kho lưu trữ tạihttps://www.example.url/home:reponame.repo
vào hệ thống là gì?“configuration change” làm việc với các kho lưu trữ; vì vậy, hãy sử dụng
config-manager
và tham số--add_repo
:dnf config-manager --add_repo https://www.example.url/home: reponame.repo
. -
Làm cách nào để có thể sử dụng
zypper
kiểm tra xem góiunzip
đã được cài đặt hay chưa?Bạn cần thực hiện tìm kiếm (
se
) trên các gói (-i
) đã được cài đặt:zypper se -i unzip
. -
Bằng cách sử dụng
yum
, hãy tìm xem gói nào cung cấp tệp/bin/wget
.Để tìm hiểu kho nào cung cấp một tệp, hãy sử dụng
whatprovides
với tên tệp:yum whatprovides /bin/wget
.