Tản mạn về apt, apt-get, apt-cache, ae từng xài bao nhiêu % trong nội dung bài này của tôi rồi?

Thống kê một trong những lệnh gõ nhiều nhất trên linux trong cuộc đời tui có lẽ apt-get. Nhẩm tính từ năm 1 đ/h đã xài linux và gõ apt-get điên đảo rùi, cái hồi mà distro hay sử dụng là ubuntu tầm 9.X thì phải. Giờ đã lên 19 rùi (trùng hợp thế đúng 10 năm 10 base version). Nay có t/g “take a note” về lệnh này, chỉ là sự điểm lại nhe nhẹ chứ không có ý cao siêu dạy người =)) nên ae đừng chém tui nha. Ai thấy chán quá xin bỏ qua đừng ném đá tội aiem.

apt-get

1. Giới thiệu ba lăng nhăng,

Apt-get nằm trong gói Advanced Package Tool. Gói này gồm 3 tool rất quen là apt-get, apt-cache và apt (Cái này chắc ae ít nghe). Trong đó apt-get chịu trách nhiệm quản lý gó (Gỡ, xóa, update, download, …). Apt-cache dùng cho việc search gói, thông tin gói. Còn lại apt (Từ phiên bản ubunutu 16.04) thấy các bác khẳng định chắc nịch là phiên bản cải tiến, là sự nâng cấp tổng hợp tính năng của apt-get + apt cache. Đùa à, các ae tập thói quen xài apt thay apt-get dần đi nha không có ngày các bác ý hứng lên lại thay luôn apt-get, apt-cache bằng apt không thui thì xong.

Apt-get, apt-cache, apt là bộ công cụ quản lý gói sử dụng dpkg để quản lý các gói deb. Lấy ví dụ chỉ dùng dpkg cài gói A, check thông tin trong gói A yêu cầu phải cài gói B trước. Tuy nhiên tự dpkg nó không làm việc này vì scope của nó là chỉ tác động only trên gói đang cài A thui. Nên thông thường không thêm option gì nó sẽ báo lỗi là ko cài được. (Dĩ nhiên ép nó cài vẫn cài dược nhưng nó ko chạy). Tuy nhiên việc hành xử lại khác khi xài apt-get hoặc apt cài gói. Lúc này apt-get, apt sẽ tìm kiếm và tải gói (nếu gói ko có sẵn) trên repo về. Sau đó dùng dpkg để cài gói A. Nếu gói A yêu cầu gói B. Thì job cài gói A sẽ được cho vào queue để đóa :). Apt-get, apt sẽ tải gói B về, cài gói B ngon nghẻ. Sau đó móc từ queue ra cài gói A. Lúc này gói A cài được vì B đã được cài rùi.

2. Man page rất dài và dai nhưng tôi chỉ xin liệt kê vài lệnh ae hay dùng:

apt-get update             	->  apt update
apt-get upgrade            	->  apt upgrade
apt-get dist-upgrade       	->  apt full-upgrade
apt-get install package    	->  apt install package
apt-get remove package     	->  apt remove package
apt-get purge packate      	->  apt purge package
apt-get clean			->  apt clean
apt-get autoclean		->  apt autoclean
apt-get autoremove         	->  apt autoremove
apt-cache search string    	->  apt search string
apt-cache policy package   	->  apt list -a package
apt-cache show package     	->  apt show package
apt-cache showpkg package  	->  apt show -a package

Ớ, chắc list kia ae quen quá rồi. Tôi chỉ note qua 1 chút thôi, không giải thích nhiều.

Đầu tiên tôi focus vào làm rõ sự khác biệt giữa update, upgrade và dist-update

Xét trh sử dụng apt-get/apt khi thực hiện cài 1 gói việc đầu tiên sẽ đọc file /etc/apt/source.list (Hoặc các file trong thư mục /etc/apt/source.list.d nếu thư mục này được cấu hình load) tìm các location rồi download các meta data (chỉ duy nhất là thông tin: tên, version, …) của gói cài đặt lưu tại database local như category về các gói. Sau này toàn bộ việc tìm kiếm các gói để cài đặt sẽ thực hiện tìm kiếm trên database này. Database nhưu bản đồ để biết lấy gói nào ở đâu.

  • apt-get/apt update là lệnh kích hoạt việc chạy cập nhật database local. Không thực hiện update các gói.
  • apt-get/apt upgrade là lệnh thực hiện việc update gói. Tuy nhiên nó chỉ update gói hiện tại mà không thực hiện update các gói phụ thuộc.
  • apt-get/apt dist-update thì khác. Nó sẽ update gói hiện tại và toàn bộ các gói phụ thuộc.

Thoạt nhìn có vẻ apt-get/apt dist-update có vẻ ngon hơn apt-get/apt update nhưng thật ra rất nguy hiểm vì có thể làm miss match các gói update phụ thuộc vì có thể có 1 gói khác ngoài gói ta update đang xài các gói phụ thuộc này mà khi ta update lên không đúng version gói đó yêu cầu. Tốt nhất nên hạn chế sử dụng.

Vừa nói về meta data của các package. Vậy khi lưu ở local nó nằm ở đâu? Tôi tìm 1 tí thì thấy nó nằm ở đây nè. /var/lib/apt/lists. Hấp nó ae :)

List db dir

Tail thử file xem có chi nèo? List db dir

OK fine, đóa là text file đọc ngon ae ạ.

Thứ 2 tôi phân biệt giữa: apt-get/apt remove và purge

Với apt-get/apt remove khi gỡ gói vẫn giữ lại cấu hình cũ (thường là file cấu hình). Còn với apt-get/apt purge thì khi gỡ gói xóa bỏ luôn toàn bộ các cấu hình trước đó.

Thứ 3 tôi phân biệt giữa apt-get/apt clean, apt-get/apt autoclean và apt-get/apt autoremove

Tôi cài thêm gói tcptraceroute huyền cmn thoại vì cái này hay dùng :)

List install tcptraceroute

Giả sử ngẫu nhiên tôi táy máy tỉm thấy thư mục sau /var/cache/apt/archives liên quan tới apt ae ạ.

list cache dir

Nhìn kỹ có cả gói tcptraceroute.deb tôi vừa cài. Hóa ra là các gói deb trước khi cài nó tải về đây ae ạ. Alo ha, Cái này hay cài offine 1 gói mà nhiều gói depend ae có thể kiếm 1 máy dùng lệnh cài để tải về rồi copy qua máy khác cùng loại cài là ngon ae ạ (Dĩ nhiên có thể lựa chọn xài tunnel =)) nhưng đây là 1 p/a khác cũng hay ho)

Em đi xa quá, quay lại với bài viết,

Gõ lệnh apt-get clean vào thư mục kia thì thấy xóa cmn hết file.

list cache clear

HÓa ra lệnh apt-get clean là xóa cache file deb ae ạ.

Đọc 1 chút thấy lệnh apt-get autoclean làm việc tương tự là dọn dẹp thư mục /var/cache/apt/archives chỉ khác ở cái thay bằng xóa hết thì nó chỉ xóa các gói “no longer” tức là các gói mà repo không còn nữa? (Ví dụ như gói được cache là version cũ mà repo nó có version mới hơn) chứ không xóa toàn bộ như clean. Cái này demo khó quá =)) chưa nghĩ ra demo ntn ae ạ, chả nhẽ tự dựng cái repo demo thì ghê quá nha ;)

Còn lệnh apt-get/apt autoremove là lệnh tự động tìm loại bỏ các gói đã được cài để thỏa mãn dependencies của một gói X nào đó trước đây nhưng hiện không được sử dụng bởi bất cứ gói nào ( Có thể Do X đã được gỡ đi nhưng nó chưa được gỡ bỏ)

Hy vọng ae hiểu tui nói gì :)

Understand

Chắc ae choáng hết cmn đầu vì tôi viết dài quá rồi. Nhưng ko sao, chịu khó tôi viết nốt tí thôi =))

3. Giờ tôi nói qua tí về mấy file cấu hình của apt-get/apt-cache/apt-get

Đầu tiên là file huyền cmn thoại: /etc/apt/source.list.

Ví dụ 1 phần của file (Ae chắc quá quen thuộc rồi)

[email protected]:~# cat /etc/apt/sources.list
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://archive.ubuntu.com/ubuntu bionic main restricted
# deb-src http://archive.ubuntu.com/ubuntu bionic main restricted

Nói qua format của file này. Theo man page nó như sau:

Type [ options ] uri suite [component1] [component2] [...]

Và như đặc điểm của man page là quá đầy đủ và phức tạp nên ae đọc ếu hiểu gì luôn. Link full không che Thôi thôi mệt lắm, ở đây tôi chỉ nêu qua đại ý vài cái chính co ae thôi cho dễ hiểu.

  • Type: Ở đây là kiểu nén file cài đặt (Archive type). Có 2 kiểu chủ yếu là deb (File trương trình dạng đã biên dịch rồi - binary) hoặc deb-src (File source code. Dĩ nhiên nếu sử dụng source code thì tool apt-get/apt sẽ thực hiện build trên máy ta rồi sau đó cài luôn. Cái này ae ít gặp).

  • options: Có thể có hoặc không. NÓ kiểu như điều kiện gì đóa. Format là setting=value. Ví dụ: [arch=amd64] tức là chỉ dùng cho arch là amd64.

  • uri: Đường dẫn tới repo lưu file mà apt-get download gói. URI có thể là có thể là ftp, http, https hậc file:///, ổ đĩa.

  • suite: Code name của bản phân phối os đang dùng. Ở ví dụ trên: Với ubuntu 18 tên của nó là bionic.

  • component: Có thể có nhiều component với các y/n khác nhau. Thông thường loại ta hay gặp là để phân loại riêng ra các nhóm .deb file dựa trên giấy phép mà nó tuân thủ. Họ debian (ubuntu, debian) nó hay tuân theo cái giấy phép gọi là DFSG (Debian Free Software Guideline - Quy định việc sử dụng, phân phối, thương mại, … phần mềm). DFSG link không che. Với main tuân thủ nghiêm ngặt DFSG và các gói này được release bởi Debian distribution. Contrib - Tuân thủ DFSG nhưng không do Debian distribution release. None-free - Không tuân thủ DFSG. … cái này nói dài lắm, chỉ nêu ra cái cơ bản thui.

Dễ hiểu ae chỉ cần nhớ rằng nó sẽ giúp ta xác định vị trí của packages file trên repo thì nằm ở những thư mục nào mà thui. Thích thì ae chi vào view luôn trên trình duyệt nè. Thấy nó bố trí thành các thư mục y hệt đóa.

list cache clear

Sau đó nói chút về file /etc/apt.conf hoặc thư mục /etc/apt.conf.d/

Ae nào đã xài APT tools tôi cá là đây là những file/thư mục mà ae ít sờ tới nhất, hầu hết toàn đẻ mặc định. Như vậy là chuẩn cmnr vì file này ghi quá rắc rối, không trong sấng và lại dùng vs mục đích bt thì sửa làm quái gì? Nhưng ok, ko sao hôm nay ae cùng phá nó coi xem có gì?

List dir ra thấy như sau:

list dir

Ae chú ý, mỗi file đều có gán 1 số thứ tự ở đầu. Số này dùng để chỉ thứ tự load của nó chứ không phải người ta để thế cho vui đâu :)

Theo tài liệu từ man page thì nói nó được tổ chức theo dạng cây. Thử lấy 1 file coi xem ntn?

[email protected]:/etc/apt/apt.conf.d$ cat 10periodic 
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "0";

Tổ chức theo cây thì tôi mô tả như sau:

list dir

Function group có nhiều nhưng thường có 2 loại hay dùng thôi ae:

  • APT: Điều chỉnh hành vi của apt tool
  • ACQUIRE: Điều chỉnh cách thức download gói.

Mỗi loại có rất nhiều Function và Option khác nhau. Chi tiết ae đọc ỏ man page nha, quá dài tôi không thể viết hết được, chỉ mô tả cấu trúc cho ae dễ hình dung, hiểu rồi cần gì thì tra cứu thôi. Link APT full không che

Tôi điều chỉnh rất ít cấu hình thỉnh thoảng chỉ cấu proxy nên sử dụng Acquire function group.

cat /etc/apt/apt.conf.d/02proxy.conf
Acquire::http::Proxy "http://user:[email protected]:port/";
Acquire::https::Proxy "http://user:[email protected]:port/";

Tới chỗ này ae thử hình dung coi cái cây nó trông ntn nhỉ huh huh???

BÀi viết dài quá, xin dừng tại đây không viết dài viết dai lại thành viết dại :)

Have a good night ae,