Image default
Máy Tính

Hướng Dẫn Biên Dịch và Cài Đặt Phần Mềm Từ Mã Nguồn trên Linux: Quy Trình 3 Bước Cơ Bản

Việc biên dịch và cài đặt phần mềm từ mã nguồn có thể khiến nhiều người dùng Linux cảm thấy e ngại hơn so với việc sử dụng trình quản lý gói. Tuy nhiên, với một quy trình gồm ba lệnh đơn giản, bạn có thể thực hiện công việc này một cách suôn sẻ và hiệu quả. Bài viết này sẽ đi sâu vào từng bước của quy trình phổ biến này, giúp bạn hiểu rõ cách phần mềm được xây dựng và cài đặt trên hệ thống Linux.

Biên Dịch Từ Mã Nguồn Là Gì?

Các chương trình bạn chạy trên máy tính được chia thành hai loại chính: được thông dịch hoặc được biên dịch. Các chương trình được thông dịch là các tệp văn bản chứa mã nguồn mà một chương trình khác – trình thông dịch – sẽ đọc và thực thi khi bạn chạy chúng. Ngược lại, các chương trình được biên dịch là các tệp nhị phân độc lập chứa mã máy và có thể chạy trực tiếp trên hệ thống.

Các tệp thực thi đã biên dịch rất phổ biến, đặc biệt đối với các chương trình lớn. Khi bạn biên dịch từ mã nguồn, bạn sử dụng một trình biên dịch – như GCC – để tạo ra một tệp thực thi từ mã nguồn của ứng dụng, vốn có thể được phân phối trên nhiều tệp riêng lẻ.

Cửa sổ Terminal Linux hiển thị quá trình cài đặt phần mềm từ mã nguồn.Cửa sổ Terminal Linux hiển thị quá trình cài đặt phần mềm từ mã nguồn.

Vì quá trình biên dịch từ mã nguồn có thể phức tạp và tốn thời gian, nó thường được tự động hóa thông qua một chương trình khác, phổ biến nhất là Make. Bạn có thể viết các tệp Makefile để kiểm soát cách một dự án xây dựng chương trình thực thi cuối cùng của nó.

Trong các dự án phức tạp hơn, các tệp Makefile cũng trở nên lớn và khó quản lý. Điều này đặc biệt đúng với các ứng dụng có khả năng di động cao, cần hoạt động trên nhiều kiến trúc và môi trường khác nhau. Để đáp ứng những tình huống này, nhiều dự án tự động tạo các tệp Makefile của riêng mình bằng cách sử dụng một công cụ có tên là Autoconf/Automake.

Quy Trình Biên Dịch 3 Bước Phổ Biến: Configure, Make, Install

Kết quả của tất cả những điều trên là một mô hình chung mà hầu hết phần mềm sử dụng để biên dịch từ mã nguồn:

./configure && make && make install

Nhiều chương trình phổ biến sử dụng mô hình này – hoặc một biến thể của nó – bao gồm Apache, vốn giải thích quy trình này trong tệp INSTALL của mình.

Trích đoạn từ file INSTALL của Apache minh họa các bước configure, make, make install.Trích đoạn từ file INSTALL của Apache minh họa các bước configure, make, make install.

Node.js là một ví dụ khác về phần mềm sử dụng mô hình này. Tệp BUILDING.md của nó chứa các hướng dẫn liên quan.

Trích đoạn từ file BUILDING.md của Node.js hướng dẫn quy trình biên dịch configure, make, make install.Trích đoạn từ file BUILDING.md của Node.js hướng dẫn quy trình biên dịch configure, make, make install.

Mỗi dự án đều có cách tiếp cận riêng để biên dịch mã nguồn của mình, ngay cả khi đó chỉ là một biến thể đơn giản của quy trình ba bước. Một điểm khác biệt quan trọng là cách bạn chạy chuỗi lệnh. Chạy nó với toán tử AND logic (&&) sẽ khiến chuỗi dừng lại nếu một trong các phần của nó thất bại:

./configure && make && make install

Ngoài ra, bạn có thể chạy từng lệnh riêng lẻ, nhưng vẫn chỉ sử dụng một dòng duy nhất, với dấu chấm phẩy:

./configure; make; make install

Điều này sẽ khiến mỗi phần chạy, ngay cả khi các bước trước đó đã thất bại. Lựa chọn của bạn không phải lúc nào cũng tạo ra nhiều khác biệt thực tế, và bạn cũng có thể chạy chúng như ba lệnh riêng biệt:

./configure
make
make install

Bạn có thể không muốn cài đặt đầy đủ phần mềm, mà muốn chạy trực tiếp từ thư mục của nó. Điều này hoàn toàn có thể chấp nhận được; bạn chỉ cần bỏ qua lệnh make install.

Một số kho lưu trữ chứa một tập lệnh configure, trong khi những kho lưu trữ khác (như grep) yêu cầu bạn chạy một tập lệnh khác để tạo tệp configure này trước. Nếu bạn đang tìm kiếm tùy chọn dễ nhất, hãy luôn tham khảo tệp INSTALL, BUILD hoặc README và làm theo khuyến nghị của dự án.

./configure: Bước Khởi Đầu Quan Trọng

Tập lệnh shell configure thường là điểm khởi đầu của quá trình biên dịch. Nó thiết lập phần còn lại của quy trình cho môi trường cụ thể của bạn.

Tập lệnh kiểm tra các phụ thuộc khác nhau mà dự án yêu cầu. Nó đảm bảo rằng tất cả các yếu tố cần thiết đều hiện diện và chính xác, ở các phiên bản phù hợp. Chạy ./configure và bạn sẽ nhận được một tệp có tên Makefile, được sử dụng bởi giai đoạn tiếp theo.

Bản thân tập lệnh configure có khả năng cấu hình cao thông qua các tùy chọn dòng lệnh. Chạy ./configure –help để xem mô tả toàn diện về chúng.

Cả configure và make đều tạo ra rất nhiều đầu ra. Nếu bạn chỉ muốn chạy các lệnh này và bỏ qua những gì chúng làm đằng sau hậu trường, bạn có thể sử dụng tùy chọn –quiet để loại bỏ hầu hết đầu ra.

Nếu không có tập lệnh configure, một dự án có thể cung cấp phương tiện để tạo ra nó. Ví dụ, kho lưu trữ htop bao gồm tập lệnh autogen.sh. Chạy tập lệnh này sẽ tạo ra một tập lệnh configure.

Kết quả chạy script autogen.sh trong mã nguồn htop, minh họa việc tạo ra script configure.Kết quả chạy script autogen.sh trong mã nguồn htop, minh họa việc tạo ra script configure.

Các dự án rất đơn giản, và những dự án không được viết bằng ngôn ngữ C, có thể hoàn toàn không có tập lệnh configure. Trong trường hợp này, quy trình ba bước trở thành quy trình hai bước: chỉ cần chạy make && make install.

Tập lệnh configure thường kiểm soát những gì xảy ra sau đó trong quá trình cài đặt. Đặc biệt, tùy chọn –prefix rất phổ biến. Điều này xác định thư mục gốc mà phần mềm sẽ được cài đặt. Theo mặc định, đây là /usr/local, nhưng bạn có thể cung cấp một tùy chọn thay thế nếu bạn muốn sắp xếp các tệp của mình theo cách khác.

make: Công Đoạn Biên Dịch Chính

Khi configure đã tạo ra một tệp Makefile, bạn có thể bắt đầu quá trình biên dịch phần mềm thực sự. Chương trình make đọc một tệp Makefile và kiểm tra một loạt các quy tắc để quyết định những gì cần biên dịch.

Các tệp Makefile được viết bằng tay thường dễ đọc, một khi bạn đã quen với cú pháp của chúng. Trong trường hợp đơn giản nhất, một tệp Makefile mô tả cách tạo một tệp từ một tệp khác, khi tệp sau cũ hơn. Ví dụ, tệp Makefile này mô tả quá trình biên dịch một chương trình rất đơn giản:

program: program.c
    gcc -o program program.c

Ở đây, tệp thực thi program phụ thuộc vào tệp nguồn program.c. Khi make chạy, nó sẽ kiểm tra tệp so với các phụ thuộc của nó. Nếu không có gì thay đổi kể từ lần biên dịch cuối cùng – tức là program mới hơn program.c – make sẽ thoát, giả định rằng không cần làm gì cả. Tuy nhiên, nếu program.c đã thay đổi, nó sẽ chạy gcc và biên dịch chương trình.

Có nhiều điều khác về make ngoài trường hợp đơn giản nhất này, và các tệp Makefile được tạo tự động có xu hướng phức tạp hơn nhiều. Ví dụ, tệp Makefile được tạo tự động cho chương trình htop này dài 2.440 dòng.

Trích đoạn từ Makefile được tạo tự động cho dự án htop, minh họa độ phức tạp của nó.Trích đoạn từ Makefile được tạo tự động cho dự án htop, minh họa độ phức tạp của nó.

Nhưng bạn không cần phải lo lắng về điều này. Trừ khi bạn đang chỉnh sửa mã nguồn – hoặc tự viết mã nguồn của mình – bạn có thể chạy make mà không cần thực sự lo lắng về những gì đang xảy ra bên dưới.

Bước make có thể mất một thời gian dài để chạy, đặc biệt đối với phần mềm phức tạp liên quan đến một số thành phần. Hãy kiên nhẫn, và đừng lo lắng nếu make thất bại. Nguyên nhân thường là do thiếu phụ thuộc, và một trong những lợi ích của make là nó sẽ tiếp tục quá trình biên dịch mà không làm mất công việc đã thực hiện.

make install: Hoàn Tất Cài Đặt

Một bản biên dịch điển hình sẽ tạo ra một tệp thực thi đã biên dịch, hoặc ở thư mục gốc của dự án hoặc thường là trong một thư mục con có tên bin. Đây thường là một chương trình độc lập mà bạn có thể chạy thông qua đường dẫn đầy đủ của nó.

Chạy lệnh make trong thư mục cli tạo thư mục con bin chứa file thực thi cuối cùng.Chạy lệnh make trong thư mục cli tạo thư mục con bin chứa file thực thi cuối cùng.

Điều này tốt cho việc kiểm tra hoặc làm việc trên phần mềm của riêng bạn, nhưng cuối cùng bạn sẽ muốn cài đặt nó ở một vị trí thuận tiện hơn.

Hầu hết các tệp Makefile đều có một mục tiêu install mà make sẽ kiểm tra khi bạn chạy make install. Điều này thường sẽ sử dụng lệnh install để sao chép các tệp riêng lẻ và đặt quyền và quyền sở hữu thích hợp.

Vị trí cài đặt sẽ phụ thuộc vào cách bạn đã chạy configure. Hãy nhớ rằng vị trí mặc định cho các tệp thực thi là /usr/local/bin, nơi bạn có thể không có quyền ghi. Nếu người dùng của bạn không thể ghi vào vị trí cài đặt, bạn sẽ cần chạy sudo make install và cung cấp mật khẩu root để tiếp tục.

Bất kể vị trí cài đặt là gì, nó phải nằm trong biến môi trường PATH của bạn để bạn có thể chạy chương trình chỉ bằng cách nhập tên của nó trên dòng lệnh, thay vì đường dẫn đầy đủ của nó.

Kết Luận

Việc hiểu và nắm vững quy trình biên dịch và cài đặt phần mềm từ mã nguồn trên Linux thông qua các lệnh ./configure, make, và make install là một kỹ năng giá trị đối với bất kỳ ai làm việc với hệ điều hành này. Dù ban đầu có vẻ phức tạp, nhưng khi đã hiểu rõ vai trò của từng bước, bạn sẽ thấy việc cài đặt các ứng dụng không có sẵn trong trình quản lý gói trở nên đơn giản và linh hoạt hơn. Quy trình này không chỉ giúp bạn kiểm soát hoàn toàn quá trình cài đặt mà còn mang lại cái nhìn sâu sắc hơn về cách phần mềm hoạt động trên hệ thống của bạn. Hãy tự tin áp dụng những kiến thức này để mở rộng khả năng tùy biến và quản lý phần mềm trên Linux của mình.

Related posts

Tôi Đã Mạo Hiểm Mua CPU Hiện Đại Trên AliExpress: Đây Là Kinh Nghiệm Thực Tế

Administrator

Quản lý Phần Mềm trên Linux qua Terminal: Hướng Dẫn Toàn Diện cho Người Dùng Việt

Administrator

Đánh giá USB PNY PRO Elite V3 Type-C: Sức Mạnh Tốc Độ Và Độ Bền Vượt Trội

Administrator