Ghi chép về các gói phần mềm và hệ thống quản lý gói phần mềm

1. Các gói phần mềm (Software Package)

Một gói phần mềm (Software Package) là:

  • một phần mềm đã dịch ra mã thực thi (cũng có gói chứa mã nguồn)

  • và các thông tin liên quan (meta-information): mô tả (description), phiên bản (version), danh sách các gói cần có (dependencies), file cấu hình, file hướng dẫn (man), thông tin bản quyền, số kiểm tra checksum, …

  • được đóng gói theo một định dạng đóng gói và phân phối ( software packaging and distribution archive format) nào đó (deb, rpm, v.v…)

  • để có thể tìm kiếm, cài đặt, gỡ bỏ, cập nhật được bằng một hệ thống quản lý gói phần mềm.

  • nhằm cung cấp một ứng dụng hoặc một dịch vụ, ví dụ: một thư viện (library) để xử lý dạng âm thanh mp3, một bộ font, v.v… Các ứng dụng nhỏ có thể được đóng thành một gói, nhưng các ứng dụng lớn như OpenOffice gồm rất nhiều gói.

Tên của gói (package name) không có quy định thống nhất. Xét một ví dụ:

x11-driver-video-nvidia-current-195.36.31-1mdv2010.0.x86_64.rpm

trong đó:

  • x11-driver-video-nvidia-current: tên riêng của gói (driver của card màn hình NVIDIA).

  • 195.36.31 : version chính.

  • 1mdv2010.0 : gói dùng cài cho Mandriva 2010.0, version 1. Version 1 ở đây là version của phiên bản cài cho Mandriva, khác với version chính ở trên. Gói dành cho Mandriva ký hiệu là mdv, cho Red Hat là fc, …

  • x86_64 : dùng cho các bộ vi xử lý Intel 586, 686, … 64 bit. Đây là phần chỉ ra kiến trúc bộ vi xử lý mà gói đã được dịch. Nếu là vi xử lý 32 bit thì phần này là i386, i586, i686 , … Nếu gói phần mềm có thể chạy trên bất kỳ bộ vi xử lý nào thì phần này là no_arch hoặc noarch (no architecture – không phụ thuộc kiến trúc bộ vi xử lý).

  • rpm : định dạng đóng gói và phân phối. Hai định dạng đóng gói và phân phối phổ biến nhất là rpm và deb.

Mô tả (description): mô tả vắn tắt công dụng và các đặc điểm chính của gói. Phần này rất quan trọng để tìm kiếm gói theo công dụng. Ví dụ gói wammu dùng quản lý điện thoại di động, trong phần mô tả của nó có từ khóa “mobile phone”. Nếu chỉ tìm theo từ khóa đó ở tên gói thì không tìm ra gói này.

Các gói cần có (dependencies): các gói này thường được dịch là “các gói phụ thuộc” như vậy là không chính xác về nghĩa. Dịch chính xác phải là “các gói mà gói đang xét phụ thuộc vào”. Đó là những gói mà gói đang xét cần đến để thực hiện các chức năng của nó và cũng phải được cài trên hệ thống. Khi cài đặt gói đang xét, hệ thống quản lý gói sẽ đọc danh sách các gói cần có, rà soát xem đã được cài chưa, và tự động cài các gói cần có còn thiếu.

Định dạng đóng gói và phân phối (software packaging and distribution archive format): mã thực thi cùng các meta-information nói trên được đóng gói theo một định dạng có thể phân phối đến các nơi cần cài đặt. Có hai định dạng đóng gói và phân phối phổ biến nhất là deb và rpm. Đó là các định dạng lưu trữ để cài đặt, là trường hợp riêng của các định dạng lưu trữ nói chung (vd: tar là định dạng đóng gói nhưng không cài đặt được, 7z vừa đóng gói vừa nén, Windows dùng hai định dạng đóng gói cài đặt là msi, cab …).

Các định dạng lưu trữ lại là trường hợp riêng của định dạng file nói chung (file format). Vì vậy cũng có thể gọi deb là một file format như doc và mp3 vậy.

Hệ thống quản lý các gói phần mềm

Trong một bản Linux, hệ thống quản lý các gói phần mềm ( package management system) gồm nhiều công cụ để:

  • Tìm kiếm các gói và các gói cần có của nó (dependencies) trong các kho phần mềm online hoặc trên CD, ổ cứng, …Tải các gói đó về để chuẩn bị cài, nâng cấp.
  • Kiểm tra các chữ ký số, hằng số băm để đảm bảo tính xác thực của kho phần mềm và độ trung thực của phần mềm đã tải về.
  • Tự động hóa các quá trình cài đặt, nâng cấp, cấu hình và gỡ bỏ các gói phần mềm.
  • Ngoài ra còn dùng để tìm kiếm, cung cấp thông tin về các gói phần mềm.

2. DEB và hệ thống quản lý file deb

2.1-Nội dung file deb

File deb là file phần mềm dùng để cài đặt được đóng gói theo định dạng deb và có phần đuôi file cũng là deb. Deb ra đời từ cụ tổ Linux Debian, có nguồn gốc từ tên người tình, (sau là vợ rồi hình như lại bỏ) Debra của người sáng lập ra Debian là Ian Murdock, cũng như bản thân tên Debian vậy. Nhiều bản Linux hiện nay dùng định dạng này (Ubuntu, Mint, …)

( Phần mềm nguồn mở có cái lợi thế đó. Bạn nào thích nịnh vợ hoặc người yêu, sửa sang đôi chút một bản Linux rồi đặt tên của “nàng”, post lên Internet cho nàng nổi danh toàn thế giới chắc chắn là hiệu quả cao. Nếu lập trình viên cho một công ty phần mềm nguồn đóng còn lâu mới tự do được như vậy).

Đây là một trong hai định dạng đóng gói và phân phối phổ biến nhất hiện nay. Trong Ubuntu, nhấn phím phải vào một file deb rồi chọn Open With → Archive Manager, mở file trong File Roller sẽ thấy như sau:

Trong mỗi file deb có ba file:

  • debian-binary: là file mã thực thi của gói phần mềm đó.

  • control.tar.gz: file đóng gói (tar) và nén (gz) chứa các thông tin điều khiển (file mô tả, cấu hình, md5sum, các shell script nếu có). Tức là các meta-information.

  • data.tar.gz: file đóng gói, nén chứa tên các thư mục và file sẽ cài.

Nếu định tìm hiểu kỹ, giải nén file trên rồi giải nén tiếp hai file control và data tha hồ đọc.

Mở file như trên chỉ để xem cho biết. Còn để cài chỉ việc nhấn đúp vào file hoặc nhấn phím phải rồi chọn Open with GDebi Package Installer để cài bằng GDebi.

2.2-Hệ thống quản lý file deb

  • 2.2.1- dpkg

  • dpkg là phần mềm công cụ cấp thấp để quản lý các file deb. Nó cài đặt, gỡ bỏ, cấu hình, cung cấp thông tin file deb bằng giao diện dòng lệnh. Để xem thông tin đầy đủ về dpkg, mở terminal chạy lệnh man dpkg. Dưới đây tóm tắt vài thứ hay dùng với gói xyz.deb, dùng quyền root:

    • dpkg -i xyz.deb (hoặc dpkg –install xyz.deb) cài đặt gói. Khi cài xong, thực hiện cấu hình tự động hoặc yêu cầu người cài cấu hình (nếu cần).

    • dpkg -r xyz.deb (hoặc dpkg –remove xyz.deb) gỡ bỏ (uninstall) gói đã cài. Lệnh này gỡ bỏ mọi thứ thuộc về gói trừ file cấu hình. Nếu cài lại thì không phải cấu hình lại.

    • dpkg -P xyz.deb (hoặc dpkg –purge xyz.deb). gỡ bỏ toàn bộ gói đã cài kể cả file cấu hình.

    • dpkg-reconfigure xyz.deb cấu hình lại gói xyz. Lệnh này hay được dùng để cấu hình lại màn hình, bàn phím, chuột quản lý bởi gói xserver-xorg. Hoặc khi cài, upgrade nhiều gói bị hỏng giữa chừng, dùng lệnh dpkg-reconfigure -a để cấu hình lại tất cả các gói.

    • còn nhiều nữa. Chạy lệnh man dpkg để xem.

    dpkg có thể dùng trực tiếp như trên hoặc là back-end (phần mềm nền) cho một số công cụ cao cấp hơn (front-ent) như nêu dưới đây. Các công cụ mặt tiền (front-end) bổ xung thêm các tính năng, giao diện thuận tiện cho sử dụng nhưng cuối cùng đều gọi đến back-end để thực hiện.

    2.2.2- APT

    APT ( Advanced Packaging Tool) là hệ thống quản lý gói phần mềm (management system for software packages). Ban đầu nó được xây dựng như front-end cho dpkg để quản lý các gói deb. Nhưng hiện nay đã phát triển quản lý được cả các gói rpm (PCLinuxOS hiện dùng apt), thậm chí cả các gói phần mềm của MacOS, OpenSolaris và iPhone OS.

    Apt không phải là một lệnh riêng như dpkg. Nó là một bộ các công cụ và thư viện để quản lý các gói phần mềm. Giao diện dòng lệnh là apt-get, giao diện text là aptitude và giao diện đồ họa là Synaptic, Kpackage, …

    a/ Giao diện dòng lệnh apt-get có mấy lệnh hay dùng sau:

    • apt-get install xyz Lệnh này có thể tìm gói xyz và các gói cần có (dependencies) của nó trong kho phần mềm trên Internet, tải về rồi cài. Lệnh dpkg -i chỉ cài được các gói đã tải về ổ cứng. Tên gói có thể không cần có đuôi deb.

    • apt-get remove xyz gỡ bỏ phần mềm đã cài

    • apt-get autoremove khi gỡ bỏ một gói, các phần mềm cần có của nó không được gỡ và có thể không còn gói nào cần đến chúng nữa. Lệnh này gỡ bỏ những gói không còn cần đến (gọi là gói mồ côi – orphan packages).

    • apt-get install -f chữa lỗi khi cài (f viết tắt của fix). Khi cài hoặc upgrade nhiều gói, có thể xảy ra nhiều loại lỗi: một gói không tải về được, mất điện bất ngờ hoặc máy bị treo, …. quá trình cài bị dang dở. Lệnh này chữa các lỗi đó.

    • còn nhiều nữa. Chạy lệnh man apt-get để xem.

    b/ Giao diện text aptitude:

    Mở terminal, chạy lệnh sudo aptitude, giao diện xuất hiện như sau:

    Trong giao diện này (dùng chuột được) có thể chạy các lệnh trong menu để cài, gỡ,… các gói phần mềm có trong các kho, trực quan và đỡ nhầm hơn dùng lệnh. Aptitude cũng dùng được dưới dạng lệnh, xem man aptitude để biết chi tiết.

    Còn một giao diện text nữa là dselect nhưng trong Ubuntu không cài sẵn.

    Các giao diện dòng lệnh hoặc text thuận lợi trong trường hợp bị mất màn hình đồ họa hoặc cần theo dõi chi tiết các thông báo về quá trình cài để tìm lỗi.

    c/ Giao diện đồ họa gồm có:

      • GDebidùng cài các gói lẻ.

      • Synaptic (Synaptic Package Manager) viết bằng GTK+, thường dùng trong các bản Linux GNOME.

      • KPackage là giao diện dùng trong KDE.

      • Cydia dùng cho hệ điều hành iPhone OS.

      • Wajig xem ở đây.

    Trong Ubuntu và Linux Mint còn có những phần mềm Software Center dùng để quản lý các phần mềm ứng dụng hoàn chỉnh, thuận tiện cho người dùng bình thường tìm và cài phần mềm, không chi tiết đến mức từng gói phần mềm lẻ như các phần mềm nói trên.

    3. RPM và hệ thống quản lý file RPM

    3.1-File RPM

    File rpm là file phần mềm dùng để cài đặt, được đóng gói theo định dạng rpm và có đuôi file cũng là rpm. RPM đầu tiên phát triển dành cho bản Linux Red Hat (RPM: Red Hat Package Manager), sau này phổ biến sang các bản Linux khác như Mandriva, SUSE, Fedora, PCLinuxOS, … và gần đây nhất là MeeGo (dùng cho netbook, tablet và smartphone).

    Một trong những ưu điểm của loại file này mà openSUSE hiện đang dùng là nó có thể tạo các file nâng cấp PatchRPM hoặc DeltaRPM chỉ chứa phần thay đổi để cài vá vào bản đã cài trước đó. Các file nâng cấp đó có dung lượng nhỏ nên quá trình tải về từ Internet và cài nhanh hơn kiểu tải cả file deb mới về cài thay thế file cũ như ở Ubuntu hiện nay.

    Giữa hai kiểu file deb và rpm cũng có tranh chấp hơn thua, nhưng cũng như GNOME và KDE khó mà nói cái nào hơn cái nào.

    File RPM khác file DEB là nội dung file đều đã dịch sang mã máy. Trong một file RPM có các thành phần chính sau:

    • Mã định danh file là một file RPM.

    • Chữ ký số để kiểm tra tính toàn vẹn và xác thực nguồn gốc file.

    • Phần đầu file chứa các meta-information như tên gói phần mềm, version, kiến trúc vi xử lý, danh sách các file trong gói, v.v..

    • Phần thân file lưu theo định dạng cpio và nén bằng gzip.

    3.2-Hệ thống quản lý file RPM

    3.2.1- rpm

    rpm là một công cụ cấp thấp để tìm kiếm, cài đặt, gỡ bỏ các gói rpm (tương tự như dpkg với gói deb nói ở trên). Một số lệnh hay dùng:

    • rpm -i xyz.rpm (hoặc rpm –install xyz.rpm) dùng cài đặt.

    • rpm -e xyz.rpm (hoặc rpm –erase xyz.rpm) dùng gỡ bỏ gói đã cài.

    • còn nhiều nữa. Chạy lệnh man rpm để xem.

    Cũng như dpkg, rpm thường được dùng làm back-end (phần mềm nền) cho một số công cụ quản lý gói cao cấp hơn nêu dưới đây.

    3.2.2- Hệ thống quản lý gói phần mềm của Mandriva

    a/ Giao diện dòng lệnh urpmi: urpmi là lệnh dùng tìm kiếm, tải về, cài đặt, gỡ bỏ các gói phần mềm. Một số lệnh hay dùng:

    • urpmi xyz lệnh này hoạt động tương tự như apt-get install đã nói ở trên.

    • urpme xyz gỡ bỏ gói xyz đã cài.

    • urpme – -auto-orphans tương tự apt-get autoremove.

    • urpmi – -auto-update cập nhật toàn hệ thống

    • urpmi – -clean xóa các file tải về đang lưu ở /var/cache/urpmi/rpms

    • và nhiều nữa, chạy lệnh man urpmi để xem.

    b/ Giao diện đồ họa gurpmi: gurpmi dùng cài gói lẻ (giống GDebi của Ubuntu), có ba cách chạy:

    • chạy từ dấu nhắc lệnh: gurpmi xyz, sau đó sẽ xuất hiện màn hình cài đặt gói xyz.

    • nhấn đúp chuột vào file xyz.deb, màn hình của gurpmi xuất hiện để bắt đầu quá trình cài.

    • trong quá trình cài bằng rpmdrake, những lúc cần hỏi người cài, gurpmi cũng được gọi xuất hiện.

    c/ Giao diện đồ họa rpmdrake: rpmdrake chính là phần mềm Install&Remove Software chạy từ menu hoặc các mục trong Software Management của Mandriva Control Center. Rpmdrake có nhược điểm là không tìm kiếm được trong Description của gói phần mềm. Về nhiều mặt, Rpmdrake quản lý các gói rpm tương tự như Synaptic hoặc KPackage quản lý các gói deb.

    Rpmdrake có một ưu điểm so với Synaptic, KPackage là có thể chọn một trong ba phần mềm download: curl, wget và aria2, trong đó aria2 có nhiều tính năng hay và do đó Rpmdrake có thể tự động chọn kho phần mềm nhanh nhất.

    d/ Giao diện đồ họa smart: tương tự như rpmdrake nhưng được đánh giá là “thế hệ tiếp theo” của trình quản lý gói, tức là tiên tiến hơn. Hiện chưa được Mandriva hỗ trợ chính thức, nhưng có trong kho phần mềm Contrib. Mở rpmdrake rồi tìm cài gói smart-gui, sau đó chạy từ Menu → Tools → System Tools → Smart Package Manager. Màn hình như sau:


    Smart có một số tính năng mà Rpmdrake không có: tìm kiếm được trong Description (nhưng khá chậm), Fix All Problems, Check … Chưa tìm hiểu kỹ nên không rõ có nhược điểm gì không.

    3.2.3- Hệ thống quản lý gói phần mềm RPM của các bản Linux khác

    Những bản Linux dùng định dạng RPM thì back-end đều là rpm, còn các front-end khác nhau:

    Red Hat và các bản dựa trên nó (Fedora, CentOS, …) dùng front-end là  yum.

    PCLinuxOS dùng front-end là  apt-rpm (nhánh apt hỗ trợ quản lý gói rpm có lệnh apt-get tương tự như với gói deb) và Synaptic. (như Synaptic của Ubuntu nhưng hỗ trợ định dạng RPM).

    SUSE, openSUSE dùng front-end Zypper, ZYpp

    4. Quan hệ qua lại giữa hai dạng deb và rpm

    4.1-Convert gói deb thành rpm và ngược lại

    Phần mềm alien dùng để convert qua lại giữa hai dạng gói trên. Ví dụ:

    alien -c -r xyz.deb sẽ tạo ra gói xyz.rpm. Option -c để conver các script trong gói đó nếu có.

    Tuy nhiên cần chú ý là không phải cứ convert sang là cài được.

    4.2-Các công cụ quản lý gói phần mềm

    Các công cụ quản lý như APT, Synaptic,… tuy xuất phát điểm chỉ hỗ trợ một dạng gói nhưng sau này đều phát triển tiếp hỗ trợ cả dạng kia. Điển hình là PCLinuxOS hiện dùng apt-get và Synaptic để quản các gói rpm.

    2 thoughts on “Ghi chép về các gói phần mềm và hệ thống quản lý gói phần mềm

      • Dùng được nhưng cũng như với Ubuntu, nó không được cài sẵn, tức là không được nhóm phát triển dùng chính thức. Trong Distrowatch cũng chỉ nói là một số user thích.
        KPackage, Synaptic với Mandriva cũng vậy.
        Cái bảng tổng hợp trong link bạn đưa hay đấy.

    Bình luận về bài viết này