Cài đặt phần mềm bằng dpkg trên Linux

Cài đặt phần mềm bằng dpkg trên Linux 

Cài đặt phần mềm bằng dpkg trên Linux 

Dpkg là công cụ cốt lõi để sử dụng khi bạn muốn cài đặt gói trên linux. Đó cũng là lựa chọn khác nếu bạn đang ngoại tuyến. Tức là gì ? Tức là  nếu cài gói bằng apt thì yêu cầu bạn cần kết nối Internet để down và cài gói. Nhưng nếu hôm trước bạn đã down sẵn file cài đó rồi thì nhỡ hôm nay không có Internet thì bạn vẫn có thể cài được bằng dpkg - giống như chạy file exe trên windows vậy đó ). Nhưng cũng hãy nhớ rằng, dpkg sẽ không cài bất kì gói phụ thuộc theo nào được yêu cầu bỏi gói chính.  Ừm, lại là sao đây ?  Tức nếu cài bằng apt thì giả   dụ như bạn muốn cài gói xxx mà gói  xxx yêu cầu gói xxv thì lúc cài gói xxx, apt sẽ cài luôn phụ thuộc xxv cho bạn.  Còn dpkg thì không. Do đó cũng hay xảy ra trường hợp gói cài bị lỗi. Mà một nguyên nhân chính đó là thiếu gói phụ thuộc đó.
Để cài gói bằng dpkg, ta có tùy chọn  "-i" hoặc "--install" và bắt buộc cần có file định cài với đuôi định dạng là .deb . Điều này có nghĩa là gì ? À, có nghĩa là muốn cài gói nào thì cần tải gói đó về sẵn. Ví dụ nếu muốn cài gói phần mềm clam av thì cần có file clamav.deb hoặc tương tự.
Đây là một ví dụ :
# dpkg -i man-db_2.7.8.2-5_amd64.deb
( Reading database 86425 files and directories currently installed.)
Preparing to unpack man-db 2.7 .0.2-5 amd64.deb...
Unpacking man-db (2.7.0.2-5) over (2.7.0.2-4)...
Setting up man-db (2.7..2-5)...
Updating database of manual pages...
Processing triggers for mime-support (3.58)...
Ta có thể thấy dpkg khi cài gói  đã thực hiện khá nhiều bước khác nhau như Preparing, Unpacking,  Setting, Updating, Processing ... và tại đó ( tức là tại cái bước mà dpkg thực hiện, nếu có lỗi xảy ra, nó sẽ được  thông báo tại đây. Ta có thể thây tùy chọn "-i" hoặc "--install" đã thực hiện tự động hai bước đó là giải nén ( Unpack ) và chạy script cấu hình như cài đặt( setting ) , update .... Và ta , tuy nhiên có thể  thực hiện hai bước này một cách độc lập bằng cách sử dụng tùy chọn "--unpack" và "--configure", ví dụ  :
# dpkg --unpack man-db_2.7.0.2-5_amd64.deb
(Reading database 86425 files and directories currently installed
Preparing to unpack man-db_2.7.0.2-5_amd64.deb
Unpacking man-db (2.7.0.2-5) over (2.7.0.2-5) .. . )
Processing triggers for mime-support (3.58)..
# dpkg --configure man-db
Setting up man-db (2.7.0.2-5) ...
Updating database of manual pages...
Lưu ý rằng, dòng "Processing triggers" là đang đề cập đến mã tự động thực thi mỗi khi gói  được thêm, xóa, hay sửa đổi file trong một số monitor directories ( Tạm hiểu là share folder - khó dịch sang Việt quá). Ví dụ gói mime-support giá sát /usr/lib/mime/packages và thực thi lệnh update-mime mỗi khi có bất kì thay đổi nào trong thư mục đó ( Giống như /usr/lib/mime/packages/man-db trong truòng hợp cụ thể của man-db ) .  🤔 - Thật sự hơi khó hiểu đoạn này nhờ .

Nhưng , tuy nhiên trong vài trường hợp thì dpkg sẽ   trả  về lỗi và không cài đặt được. Ta có thể bỏ qua nó và chỉ đưa ra cảnh báo mà không ảnh hưởng đến việc cài bằng tùy chọn "--force". Sử dụng tùy chọn "--force-help" để biết thêm thông tin . Ví dụ sau, bạn có thể sử dụng buộc cài đặt gói zsh bằng tùy chọn sau :
# dpkg -i --force-overwrite zsh_5.2-5+b1_amd64.deb
Một lỗi phổ biến mà không sớm thì muộn các bạn sẽ gặp đó là : " is file collision " - File đã tồn tại. Khi mà một gói khác đã được cài  bởi một gói khác ( Tức hiểu đơn giản là gói bạn định cài là gói phụ thuộc của gói khác hoặc tương tự và nó đã được  cài bởi gói đó ) thì dpkg sẽ từ chối cài đặt nó. Ví dụ :
Unpacking libgdm (from.../libgdm_3.8.3-2_amd64.deb) ...
 dpkg: error processing /var/cache/apt/archives/libgdm 3.8.3-2_amd64.deb (--unpack):
➡ trying to overwrite '/usr/bin/gdmflexiserver', which is also in package gmd3
➡ 3.4.1-9
Trong trường hợp này, nếu bạn nghĩ việc thay thế file là không ảnh hưởng đến sự ổn định của hệ thống thì bạn có thể dùng tùy chọn "--force-overwrite" để ghi đè nội dung tệp.
Trong khi có rất nhiều tùy chọn "--force" có sẵn nhưng chỉ "--force-overwrite" là có khả năng được dùng thường xuyên. Và các tùy chọn này được xây dựng cho các tình huống đặt biệt và tốt hơn là hạn chế dùng nó để đảm bảo các  quy luật đóng gói của gói ( Tức gói được mặc định như nào thì đừng có đập nó đi xây lại). Đừng quên, tính ổn định của hệ thống của bạn là Trờ ên trên hết.