i-love-linux

Index

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à DebianRedhat.

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ấngỡ 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 DebianRedhat 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:

chrome-for-linux

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 package
  • search Tìm kiếm thông qua - search in package descriptions
  • show Hiển thị thông tin chi tiết về package
  • install Cài đặt package
  • remove Xoá bỏ package
  • autoremove Tự động xoá bỏ tất cả các package không được sử dụng
  • update Update package
  • upgrade Upgrade hệ thống bằng cách cài đặt, upgrade packages
  • full-upgrade Upgrade hệ thống bằng cách xoá bỏ, cài đặt, upgrade packages
  • edit-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 :D

Điểm khác biệt lớn nhất giữa dpkgapt 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 repositoriesapt 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 aptdpkg, 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ủa synaptic là nó có GUI :D
  • gdebi
  • Ubuntu Software Center =))

Redhat Package Management

Nếu như bên Debian có dpkgapt thì bên Redhat có rpmyum.

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 :D

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ác
  • search 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 update
  • update Update hệ thống
  • repolist 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 :D

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