RPM là gì, 1 số ví dụ về lệnh rpm

  • Monday 31/10/2022

1. RPM là gì

Trong khi làm việc trong Linux, bạn có thể đã thấy các file RPM để tải xuống với phần mở rộng .rpm. Các file RPM được thiết kế để tải xuống và cài đặt độc lập, bên ngoài kho phần mềm.
RPM(Red Hat Package Manager) là một công cụ dùng để quản lý gói mặc định và mã nguồn mở mặc định cho các hệ thống dựa trên Red Hat (RHEL, CentOS và Fedora). Công cụ này giúp cho phép chúng ta có thể cài đặt, cập nhật, gỡ cài đặt, truy vấn, xác minh và quản lý các gói phần mềm trên hệ thống.
RPM trước đây được gọi là tệp .rpm gồm các chương trình và thư viện phần mềm được biên dịch cần thiết cho các gói. Tiện ích này chỉ hoạt động với các gói được xây dựng trên định dạng .rpm.

Điều kiện cần có

  • Một tài khoản người dùng có đặc quyền sudo
  • Truy cập vào cửa sổ dòng lệnh/cửa sổ Terminal (Menu > Applications > Utilities > Terminal, Ctrl-Alt-F2)
  • Trình quản lý gói RPM, DNF và YUM (tất cả được bao gồm theo mặc định)

Các file RPM được thiết kế để tải xuống và cài đặt độc lập, bên ngoài kho phần mềm

Chức năng cơ bản lệnh RPM:

  • Install: Sử dụng để cài đặt bất kỳ gói RPM.
  • Remove: Sử dụng để xóa hoặc hủy cài đặt bất kỳ gói RPM.
  • Upgrade: Sử dụng để cập nhật gói RPM hiện có.
  • Verify: Sử dụng để truy vấn bất kỳ gói RPM.
  • Query: Sử dụng để xác minh các gói RPM.

Với quyền root chúng ta có thể sử dụng lệnh rpm với các tùy chọn phù hợp để quản lý các gói phần mềm RPM.
RPM là công cụ miễn phí và được phát hành theo GPL (General Public License). RPM sẽ lưu giữ thông tin của tất cả các gói đã cài đặt trong /var/lib/rpm.
RPM xử lý các tệp .rpm chứa thông tin về các gói như: nó là gì, từ đâu đến, thông tin phụ thuộc, thông tin phiên bản…

Chúng ta có thể tìm gói RPM tại các trang web sau đây:

  • https://rpmfind.net/
  • https://www.redhat.com/en
  • https://freshrpms.net/
  • http://rpm.pbone.net/

Cấu trúc của một RPM package như sau

<name>-<version>-<release>.<architecture>.rpm

  • Ví dụ: telnet-0.12-34.el7_4.x86_64.rpm
  • telnet: Package name
  • 0.12: Package Version
  • 34.el7_8: Package release
  • x86_64: Package architecture
  • .rpm: Package type

rpm_la_gi

2. Cách cài đặt các file RPM

1. Tải xuống file cài đặt RPM
Bạn có thể cần cài đặt một công cụ phần mềm có tên là wget.
Để cài đặt wget trong Fedora, hãy nhập lệnh sau:
sudo dnf install wget

Để cài đặt wget trong CentOS, hãy nhập thông tin sau vào cửa sổ dòng lệnh:
sudo yum install wget

Bây giờ, bạn có thể sử dụng lệnh wget để tải xuống file .rpm mà mình muốn. Nhập lệnh sau:

wget http://some_website/sample_files.rpm

Hệ thống sẽ kết nối với trang web và tải file xuống thư mục làm việc hiện hành của bạn.
Lưu ý: Bạn có thể tra cứu địa chỉ của một file .rpm cụ thể trong trình duyệt web trên hệ thống khác.

Ngoài ra, đây là một cách tiện dụng để cài đặt các phiên bản phần mềm mới hơn hoặc phần mềm không chuẩn đặc biệt.

Bên cạnh đó, hãy cẩn thận khi cài đặt các gói phần mềm! Đảm bảo rằng bạn tin tưởng nguồn trước khi cài đặt.

Thông thường, một nhà phát triển sẽ bao gồm một phương pháp xác minh để đảm bảo rằng bạn đang nhận được phần mềm đích thực.

2. Cài đặt file RPM trên Linux
Cài đặt file RPM bằng lệnh RPM
Để cài đặt gói .rpm trên Fedora Linux, hãy nhập lệnh sau:
sudo rpm –i sample_files.rpm

Cũng như trong CentOS, switch -i yêu cầu RPM cài đặt phần mềm.
Một phương pháp khác là sử dụng tiện ích dnf để cài đặt gói:
sudo dnf localinstall sample_files.rpm

DNF là sự phát triển tiếp theo của trình quản lý gói yum.
Để cài đặt gói .rpm trong CentOS Linux, hãy nhập lệnh sau:

sudo rpm –i sample_files.rpm
Switch -i nói cho trình quản lý gói rằng bạn muốn cài đặt file.

Cài đặt file RPM với Yum
Ngoài ra, bạn có thể sử dụng trình quản lý gói yum để cài đặt các file .rpm.
Nhập lệnh sau:
sudo yum localinstall sample_files.rpm

Tùy chọn localinstall hướng dẫn yum nhìn vào thư mục làm việc hiện hành để tìm file cài đặt.
Lưu ý:

YUM là viết tắt của Yellowdog Updater Modified.
Thông thường, yum sẽ tìm đến các kho phần mềm đã kích hoạt để tìm các gói phần mềm mới và cài đặt.
Nhiều thông tin gần đây đề xuất sử dụng install thay vì localinstall, nhưng điều đó tùy thuộc vào bạn.

3. Xóa gói RPM
Trình cài đặt RPM có thể được sử dụng để gỡ bỏ (hoặc gỡ cài đặt) một gói phần mềm.
Nhập lệnh sau vào cửa sổ dòng lệnh:
sudo rpm –e sample_files.rpm
Tùy chọn -e hướng dẫn RPM xóa phần mềm.

4. Kiểm tra các RPM Dependency
Cho đến nay, hướng dẫn này giả định phần mềm không có dependency hoặc đã cài đặt chúng.
Kiểm tra file .rpm cho các dependency bằng cách sử dụng lệnh sau:
sudo rpm –qpR sample_files.rpm
Hệ thống nên liệt kê tất cả các dependency:
-q – Tùy chọn này yêu cầu RPM truy vấn file
-p – Tùy chọn này cho phép bạn chỉ định gói đích để truy vấn
-R – Phần này liệt kê các yêu cầu đối với gói
Nếu thiếu bất kỳ dependency nào, bạn có thể cài đặt chúng từ kho lưu trữ tiêu chuẩn bằng yum hoặc dnf. Nếu phần mềm của bạn yêu cầu phần mềm không chuẩn khác, nó thường sẽ được ghi chú trong hướng dẫn cài đặt.

5. Tải xuống các gói RPM từ kho lưu trữ
Một tính năng thú vị của trình quản lý gói yum là nó cho phép bạn tải xuống các file .rpm trực tiếp từ kho lưu trữ.

Điều này có thể hữu ích nếu bạn có băng thông hạn chế hoặc muốn sao chép một file đã tải xuống giữa các hệ thống.

Nó cũng có thể hữu ích nếu bạn truy cập Internet không liên tục và không muốn mất thời gian chờ đợi trình cài đặt hoàn tất.
Để tải xuống file .rpm từ kho lưu trữ, hãy nhập như sau:
sudo yumdownloaders packagename

Ví dụ, nếu muốn tải xuống các file cho Apache, bạn phải thay thế tên gói bằng httpd.
Sau đó, bạn có thể cài đặt file như trên.

3. Sử dụng RPM

3.1. Các ví dụ cơ bản với lệnh PRM

Ví dụ 1: Cài đặt gói RPM
Tên của tệp RPM gồm có các thành phần là: tên gói, phiên bản, phát hành và kiến ​​trúc.
Khi chúng ta thực hiện cài đặt RPM thì nó sẽ kiểm tra xem hệ thống có phù hợp với phần mềm mà gói RPM chứa hay không
Và tìm ra nơi cài đặt các tệp và cài đặt chúng trên hệ thống và thêm phần mềm đó vào cơ sở dữ liệu gói RPM đã được cài đặt.

Chúng ta chạy lệnh rpm với tùy chọn -i, -v, -h để cài đặt gói RPM wget như bên dưới:
[root@huongque ~]# rpm -ivh wget-1.19.5-7.el8_0.1.x86_64.rpm
Preparing… ########################################### [100%]
1:wget ########################################### [100%]

Trong đó các tùy chọn có ý nghĩa như sau:
-i: Cài đặt một gói.
-v: Hiển thị đầy đủ.
-h: Hiển thị dấu băm khi gói được giải nén.

Ví dụ 2: Truy vấn tất cả các gói RPM
Chúng ta có thể truy vấn tất cả các gói RPM đã dược cài đặt bằng cách sử dụng lệnh rpm cùng với các tùy chọn -q và -a:
[root@huongque ~]# rpm -qa
libstdc++-4.8.5-44.el7.x86_64
setup-2.8.71-11.el7.noarch
linux-firmware-20200421-80.git78c0348.el7_9.noarch
kernel-3.10.0-1127.el7.x86_64
ncurses-base-5.9-14.20130511.el7_4.noarch
kbd-1.15.5-16.el7_9.x86_64
lvm2-2.02.187-6.el7_9.5.x86_64
parted-3.1-32.el7.x86_64
grub2-2.02-0.87.0.1.el7.centos.9.x86_64

Trong đó ý nghĩa các tùy chọn như sau:
q: Dùng để truy vấn.
a: Dùng để hiển thi tất cả các gói đã cài đặt.
Khi chúng ta muốm tìm kiếm xem một gối PRM có được cài đặt trên hệ thống hay không thì chúng ta có thể kết hợp lệnh rpm và lệnh grep để tìm kiếm.

Ví dụ sau đây chúng ta sẽ xem gói python có được cài đặt trên hệ thống không.
[root@huongque ~]# rpm -qa | grep python
python-kitchen-1.1.1-5.el7.noarch
python-configobj-4.7.2-7.el7.noarch
libselinux-python-2.5-15.el7.x86_64
python-firewall-0.6.3-13.el7_9.noarch
dbus-python-1.1.1-9.el7.x86_64
python-pyudev-0.15-9.el7.noarch
python-gobject-base-3.22.0-1.el7_4.1.x86_64
python-linux-procfs-0.4.11-4.el7.noarch
python-libs-2.7.5-92.el7_9.x86_64
python-perf-3.10.0-1160.76.1.el7.x86_64

Qua đây chúng ta sẽ thấy các gói RPM liên qua tới python đã cài đặt sẽ hiển thị.

Ví dụ 3: Truy vấn 1 gói RPM cụ thể
Chúng ta có thể truy vấn một gói cụ thể và xác minh chúng đã được cài đặt chưa bằng việc kết hợp rpm với tùy chọn -q sau đó là tên của gói cần sác minh như bên dưới:
[root@huongque ~]# rpm -q wget
wget-1.14-18.el7_6.1.x86_64
Lưu ý: Để có thể truy vấn một gói, chúng ta cần sác định tên gói một cách chính xác.

Nếu tên gói không chính xác, thì lệnh rpm sẽ báo cáo rằng gói không được cài đặt.

Ví dụ 4: Xác định vị trí của gói thuộc các tệp
Lệnh sau, cung cấp vị trí của tất cả các tệp liên quan đến gói python 2.7.
[root@huongque ~]# rpm -qdf /usr/bin/python2.7
/usr/share/doc/python-2.7.5/LICENSE
/usr/share/doc/python-2.7.5/README
/usr/share/man/man1/python.1.gz
/usr/share/man/man1/python2.1.gz
/usr/share/man/man1/python2.7.1.gz

Trong đó tùy chọn d giúp chúng ta đề cập tới tệp liên quan tới gói.

Ví dụ 5: Hiển thị thông tin về gói RPM
Lệnh rpm giúp cho chúng ta có thể hiển thị rất nhiều thông tin về một pacakge bằng việc kết hợp lệnh rpm với tùy chọn q và tùy chọn i được cài đặt trên hệ thống:
[root@huongque ~]# rpm -qi python
Name : python
Version : 2.7.5
Release : 92.el7_9
Architecture: x86_64
Install Date: Sat 22 Oct 2022 01:13:26 AM +07
Group : Development/Languages
Size : 80835
License : Python
Signature : RSA/SHA256, Wed 29 Jun 2022 10:12:24 PM +07, Key ID 24c6a8a7f4a80eb5
Source RPM : python-2.7.5-92.el7_9.src.rpm
Build Date : Tue 28 Jun 2022 10:55:39 PM +07
Build Host : x86-02.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.python.org/
Summary : An interpreted, interactive, object-oriented programming language
Description :
Python is an interpreted, interactive, object-oriented programming
language often compared to Tcl, Perl, Scheme or Java. Python includes
modules, classes, exceptions, very high level dynamic data types and
dynamic typing. Python supports interfaces to many system calls and
libraries, as well as to various windowing systems (X11, Motif, Tk,
Mac and MFC).

Programmers can write new built-in modules for Python in C or C++.
Python can be used as an extension language for applications that need
a programmable interface.

Note that documentation for Python is provided in the python-docs
package.

This package provides the “python” executable; most of the actual
implementation is within the “python-libs” package.

Trong đó ý nghĩa các tùy chọn như sau:
i: Hiển thị thông tin của một package.
p: Chỉ định một package.

Ví dụ 6: Kiểm tra xem tệp RPM thuộc về gói nào.
Khi chúng ta có danh sách các tệp và chúng ta muốn biết gói nào sở hữu tất cả các tệp này thì lệnh rpm có thể giúp chúng ta xác định điều này.
Ví dụ: Khi chúng ta có tệp /usr/bin/python2.7 để có thể biết gói sở hửu tệp chúng ta thực thi lệnh sau:
[root@huongque ~]# rpm -qf /usr/bin/python2.7
python-2.7.5-92.el7_9.x86_64

Ví dụ 7: Để có thể liệt kê các gói RPM được cài đặt gần đây chúng ta sử dụng lệnh rpm với tùy chọn -qa dùng để truy vấn tất cả ), sẽ giúp chúng ta liệt kê tất cả các gói rpm được cài đặt gần đây như bên dưới:
[root@huongque ~]# rpm -qa –last
iwl5150-firmware-8.24.2.2-80.el7_9.noarch Sat 22 Oct 2022 01:15:08 AM +07
iwl6000g2a-firmware-18.168.6.1-80.el7_9.noarch Sat 22 Oct 2022 01:15:07 AM +07
iwl6000-firmware-9.221.4.1-80.el7_9.noarch Sat 22 Oct 2022 01:15:07 AM +07
iwl5000-firmware-8.83.5.1_1-80.el7_9.noarch Sat 22 Oct 2022 01:15:07 AM +07
iwl4965-firmware-228.61.2.24-80.el7_9.noarch Sat 22 Oct 2022 01:15:07 AM +07
iwl100-firmware-39.31.5.1-80.el7_9.noarch Sat 22 Oct 2022 01:15:07 AM +07
iwl6000g2b-firmware-18.168.6.1-80.el7_9.noarch Sat 22 Oct 2022 01:15:06 AM +07
iwl3160-firmware-25.30.13.0-80.el7_9.noarch Sat 22 Oct 2022 01:15:06 AM +07
iwl105-firmware-18.168.6.1-80.el7_9.noarch Sat 22 Oct 2022 01:15:06 AM +07
iwl1000-firmware-39.31.5.1-80.el7_9.noarch Sat 22 Oct 2022 01:15:06 AM +07

Ví dụ 8: Cách xóa gói RPM không phụ thuộc bằng cách sử dụng tùy chọn –nodeps không kiểm tra phụ thuộc:
[root@huongque ~]# rpm -ev –nodeps python
Preparing packages…
python-2.7.5-86.el7.x86_64
Lưu ý: Chúng ta cần xác định loại bỏ gói cụ thể nào đó nếu loại bỏ sai có thể ảnh hưởng các ứng dụng làm việc khác.

Ví dụ 9: Khi chúng ta muốn nhập khóa PRM-GPG-KEY để xác minh các gói RHEL/CentOS/Fedora

Chúng ta cần thực hiện như bên dưới lệnh này sẽ nhập RPM-GPG-KEY-CentOS-7:
[root@huongque ~]# rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

Ví dụ 10: Sau khi thực hiện thêm PRM-GPG-KEY chúng ta có thể hiển thị tất cả các PRM-GPG-KEY đã được nhập trên hệ thống
[root@huongque ~]# rpm -qa gpg-pubkey*
gpg-pubkey-f4a82eb5-53a7jj4b
gpg-pubkey-362c64e5-52ae7884

3.2. Dựng lại cơ sở dữ liệu RPM trên Centos7

Cơ sở dữ liệu RPM được tạo thành từ các tệp trong thư mục /var/lib/rpm/ đối với bản phân phối như RHEL, openSUSE, Oracle Linux…

Khi cơ sở dữ liệu RPM bị hỏng thì RPM sẽ không hoạt động chính xác, do đó các bản cập nhật không thể được áp dụng cho hệ thống của chúng ta, gặp phải lỗi trong khi cập nhật các gói trên hệ thống thông qua trình quản lý gói yum Hoặc không thể chạy bất kỳ lệnh rpm và lệnh yum nào thành công. T

rong phần này chúng ta sẽ tìm hiểu cách xây dựng lại cơ sở dữ liệu RPM bị hỏng trong CentOS 7.
Chúng ta sẽ nhận được một số lỗi thường gặp khi cơ sở dữ liệu RPM bị hỏng trong CentOS 7 như sau:
rpm command terminates with “cannot open Packages database in /var/lib/rpm

Hoặc
rpmdb: Lock table is out of available locker entries

Hoặc
rpmdb: /var/lib/rpm/Packages: unexpected file type or format
error: cannot open Packages index using db3 – Invalid argument (22)

Hoặc
error: rpmdbNextIterator: skipping h# 1601 Header V4 RSA/SHA1 signature: BAD, key ID 2842eef7

Trước tiên chúng ta cần bắt đầu bằng cách sao lưu cơ sở dữ liệu RPM hiện tại trước khi tiếp tục vì chúng ta có thể cần nó trong tương lai bằng cách thực thi các lệnh sau:
[root@huongque ~]# mkdir /backups/
[root@huongque ~]# tar -zcvf /backups/rpmdb-$(date +”%d%m%Y”).tar.gz /var/lib/rpm
tar: Removing leading `/’ from member names
/var/lib/rpm/
/var/lib/rpm/.dbenv.lock
/var/lib/rpm/Packages
/var/lib/rpm/Name
/var/lib/rpm/Basenames
/var/lib/rpm/Group
/var/lib/rpm/Requirename
/var/lib/rpm/Providename
/var/lib/rpm/Conflictname
/var/lib/rpm/Obsoletename
/var/lib/rpm/Triggername
/var/lib/rpm/Dirnames
/var/lib/rpm/Installtid
/var/lib/rpm/Sigmd5
/var/lib/rpm/Sha1header
/var/lib/rpm/.rpm.lock
/var/lib/rpm/__db.001
/var/lib/rpm/__db.002
/var/lib/rpm/__db.003

Tiếp theo, xác minh tính toàn vẹn của tệp chứ gói chính /var/lib/rpm/Packages đây là tệp cần xây dựng lại, nhưng trước tiên cần xóa tệp /var/lib/rpm/__db* để ngăn chặn các khóa cũ:
[root@huongque ~]# rm -f /var/lib/rpm/__db*
[root@huongque ~]# /usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages
BDB5105 Verification of /var/lib/rpm/Packages succeeded.

Nếu thực hiện các thao tác trên không thành công chúng ta nên tải cơ sở dữ liệu mới. Đồng thời xác minh tính toàn vẹn của gói mới tải:
[root@huongque ~]# cd /var/lib/rpm/
[root@huongque rpm]# mv Packages Packages.back
[root@huongque rpm]# /usr/lib/rpm/rpmdb_dump Packages.back | /usr/lib/rpm/rpmdb_load Packages
[root@huongque rpm]# /usr/lib/rpm/rpmdb_verify Packages
BDB5105 Verification of Packages succeeded.

Kiểm tra các tiêu đề cơ sở dữ liệu, truy vấn tất cả các gói đã cài đặt bằng cách sử dụng tùy chọn -q và -a quan sát lỗi nào được gửi đến stderror.
[root@huongque rpm]# rpm -qa >/dev/null

Sau đó chúng ta thực hiện xây dựng lại cơ sở dữ liệu RPM bằng lệnh sau:

[root@huongque rpm]# rpm -vv –rebuilddb
D: adding “103ff5d2e7b2345dc14b3115ceb8b18992ca52d” to Sha1header index.
D: closed db index /var/lib/rpm/Packages
D: closed db environment /var/lib/rpm
D: closed db index /var/lib/rpmrebuilddb.10598/Sha1header
D: closed db index /var/lib/rpmrebuilddb.10598/Sigmd5
D: closed db index /var/lib/rpmrebuilddb.10598/Installtid
D: closed db index /var/lib/rpmrebuilddb.10598/Dirnames
D: closed db index /var/lib/rpmrebuilddb.10598/Triggername
D: closed db index /var/lib/rpmrebuilddb.10598/Obsoletename
D: closed db index /var/lib/rpmrebuilddb.10598/Conflictname
D: closed db index /var/lib/rpmrebuilddb.10598/Providename
D: closed db index /var/lib/rpmrebuilddb.10598/Requirename
D: closed db index /var/lib/rpmrebuilddb.10598/Group
D: closed db index /var/lib/rpmrebuilddb.10598/Basenames
D: closed db index /var/lib/rpmrebuilddb.10598/Name
D: closed db index /var/lib/rpmrebuilddb.10598/Packages
D: closed db environment /var/lib/rpmrebuilddb.10598

Trong đó tùy chọn -vv cho phép hiển thị nhiều thông tin gỡ lỗi.
Khi đã cài đặt dcrpm chúng ta có thể sử dúng nó như sau:
[root@huongque dcrpm]# dcrpm

Sau khi chúng ta xây dựng lại cơ sở dữ liệu RPM bị hỏng trong CentOS 7 chúng ta có thể thực hiện lệnh rpm cũng như lệnh yum thành công.

Kết luận

Bài viết vừa rồi là toàn bộ các thông tin hướng dẫn bạn sử dụng RPM trên Linux cơ bản.

Qua bài trên, hy vọng bạn đã hiểu hơn về cách sử dụng lệnh rpm trên hệ điều hành Linux.

Ngoài ra, bài viết trên còn hổ trợ chúng ta trong việc xây dựng lại cơ sở dữ liệu RPM trên hệ điều hành Linux giúp cho chúng ta có thể khắc phục các sự cố liên quan việc sử dụng lệnh rpm cũng như sự cố liên quan đến lệnh yum trên hệ thống Linux.

Một điều không kém quan trọng hơn đó chính là chọn mặt gửi vàng, bạn hãy đến với P.A Việt Nam – Nhà đăng ký Tên miền trực thuộc VNNIC, được tổ chức Tên miền quốc tế ICANN công nhận. Nhà cung cấp Hosting, Máy Chủ Server lớn nhất Việt Nam.

Chúng tôi luôn hướng đến các dịch vụ tốt nhất cho khách hàng: dễ đặt mua, thanh toán nhanh, toàn quyền quản lý và điều chỉnh các tùy chọn theo ý muốn…

Đăng ký dịch vụ do P.A Việt Nam cung cấp tại: https://www.pavietnam.vn/

Thông tin kiến thức cơ bản vps-dedicated-colocation tại: https://kb.pavietnam.vn/category/vps-dedicated-colocation

P.A Việt Nam cung cấp đa dạng các cấu hình VPS và Dedicated tại: Cloud Server –  Cloud Server Pro  –  Máy Chủ Riêng

Tham khảo các Ưu đãi hiện có tại: https://www.pavietnam.vn/vn/tin-khuyen-mai/

Facebook: https://www.facebook.com/pavietnam.com.vn

rpm-la-gi-01