Linux

Các cách cài đặt phần mềm cho Linux

Đối với người dùng Windows, việc cài đặt phần mềm quá ư là dễ dàng. Bạn chỉ cần tải tập tin cài đặt về (thông dụng ở hiện tại) hoặc nguyên cả thư mục cài đặt (trước đây) và chạy tập tin cài đặt, thường có tên là setup.exe, setup.msi hoặc hiếm lắm thì là .inf, và đơn giản chỉ cần làm theo Install Shield Wizard, tức là Yes – Next – Finish và có thể reboot máy khi cần. Đối với người dùng Mac thì ngoài tập tin .dmg ra thì còn có cách giải nén nguyên thư mục vào Applications. Còn đối với Linux, mọi thứ đôi lúc khá đơn giản, đôi lúc lại phức tạp và các beginners rất dễ cảm thấy chán nản nếu họ không thực sự muốn tìm hiểu. Bài viết này sẽ giới thiệu hầu hết các cách cài đặt phần mềm cho Linux.

Tux

Phần mềm Linux nào cũng đi kèm với hướng dẫn cài đặt từ lập trình viên viết nên ứng dụng đó. Tuy nhiên, đa số các phần mềm được cài đặt theo các cách dưới đây.

1. Cài đặt từ tập tin cài đặt ứng dụng chính thức.

Nếu Windows có .exe hoặc .msi, Mac có .dmg thì Linux có các tập tin .deb hoặc .rpm hoặc tar.xz tùy theo distro. Các Debian distros sẽ tương ứng với các tập tin có đuôi .deb, các RedHat distros tương ứng với tập tin có đuôi là .rpm (xin xem bài trước). Việc cài đặt các tập tin này rất đơn giản, chỉ việc double click là trình quản lí gói dưới dạng GUI sẽ được gọi (Software Centre). Đây là một điều rất hay so với Windows, vì trình quản lí gói sẽ quản lí tất cả các gói phần mềm trên hệ thống, và nó sẽ là người đứng ra cài đặt ứng dụng, lập trình viên không tự thiết kế giao diện Install Shield Wizard màu mè hoa lá như trên Windows.

Các phần mềm được phân phối theo dạng này tương đối phổ biến, chẳng hạn như BleachBit, FlareGet, Google Chrome hay Dropbox.

2. Cài đặt từ repository.

Mỗi repo tương ứng với một (loạt) các phần mềm do một nhà phát hành (có thể là lập trình viên viết (các) phần mềm đó hoặc tổ chức đó được cấp phép phân phối) phát hành ra. Thay vì tải trực tiếp tập tin cài đặt rồi double click như tôi đã nói bên trên, bạn có thể được yêu cầu cài đặt qua repo cho gọn. Lí do là sau khi bạn add một repo, trình cập nhật gói sẽ tự động kiểm tra phiên bản mới của ứng dụng trên repo đó, và nếu phát hiện có bản mới thì hệ thống sẽ thông báo cho bạn tải về. Sau khi bạn add một repo vào rồi, bạn sẽ có thể search các ứng dụng được cung cấp trong repo đó qua Software Centre. Nếu như bạn đã từng add 1 source vào Cydia trên một chiếc iPhone đã được jailbreak thì cái “source” đó chính là 1 repo.

Thực tế thì App Stores của Apple và Google Play của Google phải gọi Ubuntu Software Centre bằng tiền bối, USC tập trung, gom chung các phần mềm trên các repositories khác nhau về một chỗ để quản lí cho gọn. App Store for iOS, App Store for Mac và Google Play, mỗi cái thực chất chỉ gồm mỗi một repo chính thức của Apple hoặc Google.

Một số ứng dụng, mặc dù được cài đặt qua các tập tin .deb hoặc .rpm nhưng cũng vẫn thêm 1 repo của chính nó vào danh sách các repos của hệ thống, chẳng hạn như Chrome, và nó trao quyền kiểm tra cập nhật cho trình cập nhật gói. Đó là do sự tôn trọng của các lập trình viên đối với hệ thống quản lí gói mặc định trên các bản phân phối Linux, mọi hoạt động cập nhật đều được thực hiện bởi Software Updater chứ không do nội bộ ứng dụng đó đảm trách. Thay vì các message boxes của các ứng dụng khác nhau chen chúc giành chỗ ưu tiên hiển thị thông tin về bản cập nhật mới của chúng như trên Windows, thì trên Linux, bạn sẽ chỉ nhận được một message box duy nhất từ Trình cập nhật gói về tất cả các gói có phiên bản mới và nhấn cập nhật một lần. Các tập tin cài đặt trên repo thực chất vẫn là các tập tin cài đặt ứng dụng chính thức (.deb hoặc .rpm).

Dạng phân phối này là phổ biến nhất, đại đa số các ứng dụng đều được phát hành theo kiểu này, chẳng hạn qBittorent, Inkscape, GIMP, và cả các ứng dụng hệ thống nữa. Mỗi distro có thể có các cách add repo khác nhau, và có hệ thống repo khác nhau. Chẳng hạn như Ubuntu có hệ thống LaunchPad PPAs, còn RHEL và Fedora thì có RPMFusion.

3. Cài đặt gián tiếp thông qua 1 shellscript.

Thực chất, đây chẳng qua là một dạng của một trong hai, hoặc là sự phối hợp cả hai cách trên. Tuy nhiên, có thể là phần mềm được tách thành nhiều gói khác nhau, hoặc các dependencies khác nhau, nên để đơn giản hóa cho người dùng thì lập trình viên sẽ viết 1 excutable shell script để hướng dẫn cho hệ thống tự cài đặt (thường có đuôi là .sh hoặc không có đuôi). và người dùng sẽ cho thực thi cái script này là đủ. Shellscript này có thể được hiểu là cách mà lập trình viên “bảo” cái máy của bạn là “Ê máy ơi máy à, mày hãy cài đặt mấy các gói tao ghi ở đây theo hướng dẫn trong đây đi” vậy.

Để thực thi được shellscript đó, thì trước tiên bạn phải gán quyền thực thi cho nó. Nếu bạn dùng giao diện GUI thì bạn sẽ thêm trong thuộc tính của tập tin, được truy cập thông qua trình quản lí tập tin của hệ thống. Còn đối với dòng lệnh, bạn dùng lệnh sau:

sudo” được tôi để trong ngoặc là vì một số phần mềm có thể yêu cầu được cài đặt dưới quyền root, một số khác lại không. Về quyền root thì tôi sẽ có một bài giải thích sau này. Sau khi đã gán quyền “x”, tức là “excutable” cho script đó thì bạn sẽ gọi thực thi nó qua dòng lệnh:

4. Cài đặt từ tập tin installer.

Cách này khá tương tự như install shield trên Windows vậy. Một tập tin self excutable (thường có đuôi .bin hoặc .run) đóng vai trò là một archive hay container và sẽ giải nén nội dung ứng dụng vào vị trí tương ứng. Cách này không thông dụng cho lắm và chỉ được sử dụng khi lập trình viên hoàn toàn muốn đóng mã nguồn của ứng dụng cũng như build một cross platform project trên một IDE (thường là Qt) cho nhiều nền tảng đích khác nhau (Windows, Mac và Linux). Tiêu biểu trong nhóm này có Genymotion, Qt Creator và Adobe Reader (đã không còn được phát triển cho Linux nữa).

Để thực thi tập tin này thì bạn cũng cần gán quyền +x cho nó và cho chạy như đối với tập tin script ở bên trên.

5. Tự build từ source.

Đây là cách mà tôi thích nhất. Tất cả các ứng dụng nguồn mở đều hỗ trợ cách cài đặt này bên cạnh repo hay tập tin cài đặt trực tiếp. Để tự build được luôn cả ứng dụng thì bạn cần thiết phải có các dependencies, không những cho ứng dụng, mà còn cho cả trình biên dịch nữa. Thực tế, mỗi project có thể có các cách build khác nhau và bạn sẽ cần tham khảo trong tập tin README hoặc INSTALL trong thư mục project (Yêu cầu trình độ tiếng Anh chuyên môn cao). Thông thường, chúng ta cần làm các công việc sau.

Thứ nhất, đảm bảo bạn có đầy đủ các thư viện build. Đối với Debian distros, đó là build-essentials, còn RHEL và Fedora thì bạn cần có 2 groups là “Development Tools” và “Development Libraries”. Để cài chúng, bạn nên dùng dòng lệnh cho dễ:

Hoặc

Lưu ý, đó chỉ là các thành phần cơ bản. Một project có thể đòi hỏi thêm các thư viện khác nữa, và như tôi đã nói bên trên, hãy tham khảo tập tin README hoặc INSTALL.

Sau khi bạn đã tải source về, giải nén và cho “cd” vào thư mục project vừa giải nén xong, bạn sẽ phải tìm tập tin cấu hình. Ngày trước, tập tin này có tên là configure, còn hiện tại, tôi thấy các lập trình viên hay dùng tên autogen.sh. Cho dù tên là gì thì chúng đều có chức năng như nhau cả. Bạn sẽ yêu cầu thực thi chúng:

Hoặc

Nó sẽ đưa ra output là thông tin quá trình build. Nếu thiếu thư viện gì thì nó sẽ báo để bạn cài thêm, còn nếu đã có thể build được, thì bạn gọi tiếp lệnh:

Sau khi make xong thì bạn cài đặt, thường là dưới quyền root.

Và thực tế thì việc nhìn các output sẽ gây cho bạn cảm giác “feel like a boss” khá gây nghiện. Đó là lí do mà mặc dù có vất vả nhưng tôi vẫn thích cách cài đặt này hơn các cách khác.

Hi vọng các bạn sẽ không còn bị hoang mang, rối bời về cách cài đặt các ứng dụng A, B, C… cho Linux. Tuy nhiên, như đã nói từ đầu, mỗi phần mềm đều có đi kèm với hướng dẫn cài đặt từ lập trình viên viết nên ứng dụng đó, nên bạn cần đọc qua tài liệu của họ để có thể tiến hành cài đặt cho đầy đủ, chính xác cũng như các cấu hình sau khi cài đặt xong. Cũng lưu ý rằng, mục 4 và 5 trong bài này cũng có thể áp dụng cho macOS bởi một số phần mềm cho Linux đều có thể compile lại cho macOS. Happy exploring!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.