[Become a SuperUser] Debian vs Redhat: Package Management System
This post hasn't been updated for 3 years
Index
- Unix vs Linux. Nguồn gốc và sự khác biệt
- Debian vs Redhat: Package Management System
Lời mở đầu
Như trong bài viết trước, tôi đã đề cập đến khái niệm Linux Distribution, hay Linux Distro, với 2 nhánh chính mà các bạn nên biết, đó là Debian và Redhat.
Có khá nhiều điểm khác biệt giữa hai nhánh này, và bài viết này sẽ tập trung vào một trong số đó. Một trong những điểm bạn sẽ dễ dàng nhận ra ngay khi tiếp xúc với các Distro thuộc Debian hay Redhat: đó chính là package management.
Chú ý: Trong bài viết này, khi đề cập đến Debian, ta sẽ hiểu là Debian và các distro được xây dựng dựa trên Debian (Ubuntu, Linux Mint, Kali Linux ...), còn khi đề cập đến Redhat, ta sẽ hiểu là các Distro được xây dựng dựa trên các thành phần mà Redhat cung cấp (như Ret Hat Enterprise Linux, Fedora, CentOS ...)
Package Management là gì?
Trước đây, phần lớn các chương trình chạy trên Linux đều được phân phối dưới dạng source code, và người dùng sẽ cần phải tải chúng về, rồi build các file source code đó thành các chương trình, hay một số các chương trình cần thiết, với đầy đủ các trang documents, hay các configuration files ... Điều này đã gây ra ít nhiều khó khăn cho những người không quá quen thuộc với Linux.
Hiện tại thì hầu hết các nhà phát triển đều cung cấp các chương trình của mình dưới dạng prebuilt, với rất nhiều những config được thiết lập sẵn, và đã ở trạng thái sẵn sàng để có thể cài đặt trên Linux Distribution một cách dễ dàng, nhanh chóng. Những phần mềm (hay set các phần mềm), được cung cấp dưới dạng một file đóng gói duy nhất như vậy được gọi là package.
Package Management System hiểu đơn giản là một công cụ, hay hệ thống các công cụ, giúp người quản trị hệ thống có thể tìm kiếm, cài đặt, truy vấn và gỡ bỏ các packages một cách dễ dàng.
Các Distro Debian với các distro Redhat sử dụng các hệ thống package management khác biệt hoàn toàn với nhau. Nhìn chung thì những gì bạn có thể làm được với công cụ package manager trên Debian, thì bạn cũng có thể làm được với package manager trên Redhat. Tuy nhiên mỗi công cụ cũng có những đặc thù riêng, và không phải option nào cũng giống như nhau, sẽ trả ra kết quả như nhau.
Trên trang chủ của project Debian, có một đoạn miêu tả về package management như sau:
Much of why Debian is a strong Linux distribution comes from the core of Debian namely its package management. Everything in Debian – every application, every component – everything – is built into a package, and then that package is installed onto your system (either by the Installer, or by you).
Vâng, package management chính là thứ tạo nên sức mạnh của Debian (cũng như Redhat), là thứ khiến chúng trở nên phổ biến, và khiến vô vàn các distro khác chọn Debian (hay Redhat) làm nền tảng.
Hãy cùng tìm hiểu sâu về các hệ thống quản lý package, để thấy rõ hơn về sự khác biệt giữa Debian và Redhat nhé.
Debian Package Management
Hệ thống package management trên Debian gồm một số câu lệnh, hay các tools khác nhau, mà bạn nên biết đến như sau:
dpkg
dpkg-reconfigure
apt-get
apt-cache
apt
aptitude
Tìm hiểu về dpkg
Hãy bắt đầu bằng một câu chuyện như thế này.
Bạn đang sử dụng máy bàn với hệ điểu hành là Ubuntu. Bạn cần cài đặt Chrome, và khi vào trang chủ của Chrome để tải file về cài đặt, bạn chọn "Download Chrome for Linux". Đây sẽ là hình ảnh bạn thấy:
Vâng, để cài đặt cho Debian/Ubuntu bạn sẽ cần tải về một file. Còn để cài đặt cho Fedora/openSUSE, bạn cần một file khác. Lý do thì rất đơn giản thôi, mặc dù cùng là Linux, nhưng chúng sử dụng 2 hệ thống quản lý package khác nhau.
File dành cho Debian sẽ có phần mở rộng là .deb
(có lẽ là viết tắt của chữ debian).
Còn file dành cho Redhat (Fedora) sẽ có phần mở rộng là .rpm
(có lẽ là viết tắt của chữ Redhat Package Manager)
OK, đó là câu chuyện về cách phân biệt package cho Debian với Redhat. Còn giờ hãy quay trở lại với dpkg
. Rốt cuộc thì dpkg
là công cụ gì?
Hiểu một cách đơn giản là dpkg
, theo mình đoán là viết tắt của debian package, là công cụ cho phép bạn quản lý (cài đặt, tìm kiếm, xem thông tin, xoá) các file packages (.deb
) ở local.
Dưới đây là một số câu lệnh dpkg
hay được sử dụng:
-i
or–install
: Cài đặt file.deb
-r
or–remove
: Gỡ bỏ (uninstall) một package, nhưng giữ lại các file configuration của package đó-P
or–purge
: Gỡ bỏ package và các file configuration của nó-I
or–info
: Truy vấn thông tin về một file.deb
hay một package đã được cài đặt-l
or–list
: Truy vấn danh sách các packages đã được cài đặt-L
or–listfiles
: Truy vấn danh sách các files thuộc về các packages đã được cài đặt-S
or–search
: Tìm package mà một file thuộc về-s
or--status
: Hiện thị các thông tin về trạng thái của một package--help
: Xem thông tin về các câu lệnh khác :v
Ví dụ
~$ dpkg --version
Debian 'dpkg' package management program version 1.18.4 (amd64).
This is free software; see the GNU General Public License version 2 or
later for copying conditions. There is NO warranty.
~$ dpkg -L apache2
/.
/etc
/etc/logrotate.d
/etc/logrotate.d/apache2
/etc/apache2
/etc/apache2/sites-enabled
/etc/apache2/apache2.conf
/etc/apache2/mods-enabled
/etc/apache2/mods-available
/etc/apache2/mods-available/ssl.load
/etc/apache2/mods-available/ldap.load
/etc/apache2/mods-available/proxy_fcgi.load
/etc/apache2/mods-available/file_cache.load
... more ...
~$ dpkg -S /lib/systemd
colord, policykit-1, apache2, udev, systemd, uuid-runtime, rsync, plymouth, hdparm, friendly-recovery, ufw, rsyslog, ureadahead, cron, openssh-server, resolvconf, unattended-upgrades, php7.0-fpm, php-common, accountsservice, sudo, mysql-server-5.7, keyboard-configuration, console-setup-linux, ifupdown, dbus, apt: /lib/systemd
~$ dpkg -s apache2
Package: apache2
Status: install ok installed
Priority: optional
Section: httpd
Installed-Size: 488
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Version: 2.4.18-2ubuntu3.1
Replaces: apache2.2-bin, apache2.2-common
Provides: httpd, httpd-cgi
Depends: lsb-base, procps, perl, mime-support, apache2-bin (= 2.4.18-2ubuntu3.1), apache2-utils (>= 2.4), apache2-data (= 2.4.18-2ubuntu3.1)
Pre-Depends: dpkg (>= 1.17.14)
Recommends: ssl-cert
... more ...
~$ dpkg -I composer_1.0.0~beta2-1_all.deb
new debian package, version 2.0.
size 282670 bytes: control archive=8741 bytes.
1011 bytes, 17 lines control
23351 bytes, 260 lines md5sums
Package: composer
Version: 1.0.0~beta2-1
Architecture: all
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian PHP PEAR Maintainers <pkg-php-pear@lists.alioth.debian.org>
Installed-Size: 1618
Depends: ca-certificates, php-symfony-console (>= 2.5), php-symfony-filesystem (>= 2.5), php-symfony-finder (>= 2.4), php-symfony-process (>= 2.4), php-cli, php-common, php-json-schema (>= 1.6), php-json-schema (<< 2~~), php-composer-spdx-licenses (>= 1.0), php-composer-spdx-licenses (<< 2~~), php-composer-semver (>= 1.0), php-composer-semver (<< 2~~), jsonlint (>= 1.4), jsonlint (<< 2~~), php-cli-prompt (>= 1.0), php-cli-prompt (<< 2~~)
Recommends: git, mercurial
Suggests: php-zip
Section: php
Priority: optional
Homepage: https://getcomposer.org/
Description: dependency manager for PHP
Composer helps you declare, manage and install dependencies of PHP projects,
ensuring you have the right stack everywhere.
It behaves like Bundler (Ruby), npm (Node), etc.
Sau khi cài đặt xong một package bằng dpkg
, chúng ta có thể dùng lệnh dpkg-reconfigure
để thay đổi các tuỳ chọn đã thiết lập trong lúc cài đặt.
Tìm hiểu về apt
Như các bạn thấy, dpkg
chính là công cụ để cài đặt package .deb
, nhưng chắc hẳn bạn đang thắc mắc là trước nay có cần dùng đến câu lệnh đó đâu mà vẫn cài được phần mềm đó thôi.
Và câu trả lời là bạn đã sử dụng những phần mềm được xây dựng dựa trên dpkg
để giúp cho công việc được dễ dàng hơn.
apt
là một trong số đó.
apt is a commandline package manager and provides commands for searching and managing as well as querying information about packages. It provides the same functionality as the specialized APT tools, like apt-get and apt-cache, but enables options more suitable for interactive use by default.
Một số câu lệnh apt
thường dùng
list
Liệt kê danh sách các packages dựa trên tên packagesearch
Tìm kiếm thông qua - search in package descriptionsshow
Hiển thị thông tin chi tiết về packageinstall
Cài đặt packageremove
Xoá bỏ packageautoremove
Tự động xoá bỏ tất cả các package không được sử dụngupdate
Update packageupgrade
Upgrade hệ thống bằng cách cài đặt, upgrade packagesfull-upgrade
Upgrade hệ thống bằng cách xoá bỏ, cài đặt, upgrade packagesedit-sources
Chỉnh sửa file thông tin source
Chú ý: Hiện nay, ở các phiên bản Debian/Ubuntu mới, câu lệnh apt
có thể được sử dụng thay thế cho apt-get
, apt-cache
, và nó ngày được ưa chuộng và sử dụng rộng rãi hơn. Bài viết này cũng sẽ đề cập đến apt
là chính
Điểm khác biệt lớn nhất giữa dpkg
và apt
nằm ở chỗ, dpkg
chỉ có thể cài đặt file .deb
khi bạn đã có file đó ở trong máy (bằng một cách nào đó :v), còn apt
sẽ tìm kiếm package từ trong một loại các repositories (hiểu đơn giản là các kho chứa package), tải package về rồi tiến hành cài đặt cho chúng ta. apt
còn mạnh mẽ hơn ở điểm nó biết cách resolve các dependencies của một package, và tiến hành cài đặt các dependencies đó nếu chúng chưa được cài đặt từ trước. Chẳng hạn một package A của bạn cần các package B1, B2, B3, B4 ... khác để chạy. Nếu bạn cài đặt bằng dpkg
khi có file .deb
của package A thì có thể bạn sẽ thất bại nếu các package B1, B2, B3, B4 kia chưa có. Ngược lại, nếu dùng apt install
thì các package B1, B2, B3, B4 cũng sẽ được tự động cài đặt trước, để phục vụ cho việc cài đặt package A.
Nếu như trên Debian, apt
được gọi là main package manager thì dpkg
được coi là medium-level (hay low-level) package manager. Bởi apt
thực tế gọi đến dpkg
để thực hiện các công việc thao tác với package, hay nói cách khác, dpkg
thực hiện công việc ở cấp thấp hơn so với apt
.
Danh sách các repositories mà apt
quản lý được lưu trong file /etc/apt/sources.list
, hoặc tại các file trong thư mục /etc/apt/sources.list.d
. Các bạn có thể check danh sách các repositories thông qua câu lệnh apt policy
(hay apt-cache policy
)
Ngoài apt
và dpkg
, các bạn có thể tìm hiểu về những công cụ package manager khác của Debian, ví dụ như là:
- aptitude Một công cụ được xây dựng trên
apt
, - synaptic Một công cụ khác được tạo nên dựa trên
apt
. Điều đặc biệt củasynaptic
là nó có GUI gdebi
- Ubuntu Software Center =))
Redhat Package Management
Nếu như bên Debian có dpkg
và apt
thì bên Redhat có rpm
và yum
.
rpm
sẽ có chức năng tương tự như dpkg
vậy (cài đặt package từ file local), còn yum
sẽ có chức năng tương tự như apt
(resolve dependencies và tìm kiếm, cài đặt từ các repository).
Tìm hiểu về rpm
rpm
là viết tắt của Red Hat Package Manager. Cái tên nói lên tất cả, đây là công cụ để quản lý package cho các distro thuộc họ hàng nhà Redhat. Nếu như file package trên Debian có đuôi mở rộng là .deb
, thì file package trên Redhat có đuôi mở rộng là .rpm
, trùng với tên công cụ cài đặt luôn
Các câu lệnh rpm
, cũng giống với dpkg
, đòi hỏi bạn phải sử dụng -
. Chẳng hạn:
-i
hay--install
Cài đặt (install)-q
hay--query
Truy vấn (query)-e
hay--erase
Xoá (erase, uninstall) package-U
hay--upgrade
Update một package đã cài đặt-V
hay--verify
Kiểm tra package
Ngoài ra, còn có vô số các options tương ứng với từng câu lệnh nữa. Bạn có thể gõ rpm --help
ra, và sẽ thấy cả một đống các option chia ra theo các loại như
- Query/Verify package selection options
- Query options
- Verify options
- Install/Upgrade/Erase options
- Common options for all rpm modes and executables
- Options implemented via popt alias/exec
- ...
Thực sự để làm việc quen với rpm
thì khá là khó khăn, đòi hỏi bạn phải thực hành và nhớ khá nhiều đấy :v
Ví dụ một số câu lệnh cơ bản:
// Install + Verbose + Print hash marks as package installs
rpm -ivh package_name
// query: Check a package is installed or not
rpm -q package_name
// query + list: List all the files of an installed package
rpm -ql package_name
// query + all + last: List all the recently installed packages
rpm -qa --last
// query + file: List all packages that contain the file
rpm -qf package_name
// query + info: Show the information of the installed package
rpm -qi package_name
// query + info + package: Show the information of a package (that not installed)
rpm -qip package_name
Tìm hiểu về yum
yum
, viết tắt của từ Yellowdog Updater, Modified, là công cụ build trên rpm
, và được cài đặt mặc định trên những hệ thống sử dụng rpm
.
Và cũng giống như những gì apt
làm với dpkg
, yum
cũng giúp việc cài đặt các package rpm
được đơn giản hơn, với các chức năng như tải về package từ các repositories, hay tự động resolve các dependencies mà package cần.
Một số câu lệnh yum
cơ bản:
install
update
remove
list
Tìm kiếm packages theo tên chính xácsearch
Tìm kiếm packages có tên hay description chứa từ khoáinfo
check-update
Kiểm tra xem có những packages nào có thể được updateupdate
Update hệ thốngrepolist
Hiển thị danh sách các repositories đang được sử dụng để tải packages
Lời kết
Trên đây là các kiến thức cơ bản về package management trên hệ thống Debian cũng như Redhat.
Hy vọng rằng các bạn sẽ có được cái nhìn tổng thể về các công cụ như apt
hay yum
, để từ đó làm việc với hệ thống Linux của mình một cách hiệu quả hơn
Xin cảm ơn các bạn đã theo dõi, và xin hẹn gặp lại trong những bài viết theo trong serie "Become A SuperUser" này trên Viblo nhé.
References
- https://en.wikipedia.org/wiki/Package_manager
- https://en.wikipedia.org/wiki/Advanced_Packaging_Tool
- https://en.wikipedia.org/wiki/Yellowdog_Updater,_Modified
- https://www.ibm.com/developerworks/library/l-lpic1-102-4/
- https://www.theurbanpenguin.com/1024-use-debian-package-management/
- https://www.theurbanpenguin.com/1025-use-rpm-and-yum-package-management/
- http://youngjourney.today/lpic-102-4-use-debian-package-management/
- Yum Command Cheat Sheet for Red Hat Enterprise Linux
All Rights Reserved