Cách biên dịch và cài đặt chương trình từ nguồn


39

Đây là một vấn đề thực sự hạn chế sự thích thú của tôi đối với Linux. Nếu ứng dụng không có trên kho lưu trữ hoặc nếu nó không có tập lệnh cài đặt, thì tôi thực sự đấu tranh ở đâu và làm thế nào để cài đặt một ứng dụng từ nguồn.

So với Windows, thật dễ dàng. Bạn (khá nhiều) bắt buộc phải sử dụng một ứng dụng cài đặt thực hiện tất cả các công việc trong Trình hướng dẫn. Với Linux ... không nhiều lắm.

Vì vậy, bạn có bất kỳ lời khuyên hoặc hướng dẫn nào về vấn đề này không hoặc có bất kỳ trang web nào giải thích rõ ràng về cách thức, lý do và nơi để cài đặt các chương trình Linux từ nguồn không?


7
"So với Windows, thật dễ dàng. Bạn (khá nhiều) bắt buộc phải sử dụng một ứng dụng cài đặt thực hiện tất cả các công việc trong Trình hướng dẫn. Với Linux ... không quá nhiều." Có điểm yếu trong câu hỏi. Với Windows, bạn hiếm khi nhận được mã nguồn, vì vậy bạn rất tự hào về bất cứ ai đã thực hiện gói. Nếu bạn nghĩ về điều này, nó không khác nhiều so với câu nói "không có gói Linux, vì vậy tôi phải xây dựng từ nguồn", tức là. không có cách nào để bắt đầu với nó. Xây dựng từ nguồn thường là giải pháp cuối cùng trong * nix-land, nhưng hiếm khi là một tùy chọn trong Windows-ville.
Avery Payne

2
Điều đó đang được nói ... +1 vết sưng khi hỏi một câu hỏi chung cần được trả lời cho tất cả những người mới đến hệ thống * nix. :) Xây dựng từ nguồn đôi khi có nghĩa là sự khác biệt giữa sửa một lỗi khó chịu và chỉ đau khổ cho đến khi phát hành phần mềm tiếp theo. Nó thực sự không tệ, và như nhiều người ở đây đã chỉ ra, một khi bạn biết phải tìm gì và làm như thế nào, thì không đau.
Avery Payne

Câu trả lời:


22

Thông thường, dự án sẽ có một trang web với các hướng dẫn về cách xây dựng và cài đặt nó. Google cho điều đó đầu tiên.

Đối với hầu hết các phần bạn sẽ làm một trong hai:

  1. Tải xuống một tarball (tệp tar.gz hoặc tar.bz2), đây là phiên bản cụ thể của mã nguồn
  2. Trích xuất tarball bằng một lệnh như tar zxvf myapp.tar.gzđối với tarball được nén hoặc tar jxvf myapp.tar.bz2cho tarball được nén
  3. cd vào thư mục đã tạo ở trên
  4. chạy ./configure && make && sudo make install

Hoặc là:

  1. Sử dụng git hoặc svn hoặc bất cứ điều gì để lấy mã nguồn mới nhất từ ​​kho lưu trữ nguồn chính thức của họ
  2. cd vào thư mục đã tạo ở trên
  3. chạy ./autogen.sh && make && sudo make install

Cả configure và autogen.sh sẽ chấp nhận đối số --prefix để chỉ định nơi phần mềm được cài đặt. Tôi khuyên bạn nên kiểm tra Tôi nên tự cài đặt phần mềm ở đâu? để được tư vấn về nơi tốt nhất để cài đặt phần mềm tùy chỉnh.


Tại sao autogen.sh được sử dụng khi nhận bản mới nhất, nhưng configure / make được sử dụng cho bản phát hành chính thức?
Louis Salin

1
Thông thường, những người muốn phần mềm "cầm máu" sẽ lấy bản phát hành từ phần mềm kiểm soát phiên bản (như git, lật đổ hoặc CVS). Đây là "cạnh chảy máu" bởi vì nó có thể chưa được kiểm tra, không giống như một tarball được phát hành, mà (có lẽ) đã được chứng nhận là hoạt động (ít nhất là chủ yếu). Có lý?
Matt Simmons

2
@Matt, chắc chắn nó có ý nghĩa nhưng tôi nghĩ rằng nhận xét được hướng nhiều hơn vào thực tế là Sandy bây giờ làm cho nó xuất hiện như thể có một autogen.sh trong mỗi thân cây git'd / svn'd.
reiche

1
Và một con gà trong mỗi nồi ... hoặc một cái gì đó như thế. Heck, thỉnh thoảng, tôi cũng bắt gặp phần mềm không có tập lệnh cấu hình. Nếu có một cách dễ dàng, thống nhất để thực hiện, chúng ta sẽ không cần các gói ;-)
Matt Simmons

Matt hoàn toàn đúng, đây là lý do tại sao tôi nói "phần lớn", và lần đầu tiên ủng hộ tìm kiếm trang web của dự án. Lời khuyên autogen.sh/cool sẽ giữ cho hầu hết mọi mô-đun Gnome và hàng tấn các dự án khác. Một số dự án không sử dụng automake và sẽ chỉ có Makefile và bạn sẽ chỉ chạy make && sudo make install. Một số dự án Python sẽ chỉ có setup.py mà bạn sẽ gọi để cài đặt (vì không có thiết lập biên dịch thực sự). Ngoài ra còn có rất nhiều hệ thống xây dựng / cài đặt khác. Hy vọng các tệp README hoặc INSTALL sẽ giải thích chính xác những gì cần làm.
Sandy

3

Tôi chỉ muốn thêm rằng có các trình quản lý gói biên dịch các gói từ nguồn và xử lý tất cả các phụ thuộc gói, cờ, v.v.

Trong các hệ thống BSD, đó là ports: Sử dụng Bộ sưu tập Cổng

Trong Debian, apt-gettrình quản lý gói cũng có thể cài đặt từ nguồn: APT HOWTO: Làm việc với các gói nguồn (Tương tự với Ubuntu, Linux-mint và mọi thứ khác dựa trên Debian)

Phân phối Gentoo sử dụng portagetrình quản lý gói, chỉ biên dịch toàn bộ hệ thống từ nguồn: Giới thiệu Portage .

Slackware có thể biên dịch các gói nhưng tôi không biết liệu có trình quản lý gói nào trong đó không .. =)

Dù sao, bạn luôn có thể biên dịch các gói theo cách thủ công như Sandy đã đề cập ở trên =) Ngoài ra, có thể sử dụng apt-gethoặc portagequản lý gói trong bất kỳ bản phân phối nào khác ...


1
Để nói "trình quản lý gói apt-get có thể cài đặt từ nguồn" là không chính xác. Phần được trích dẫn mô tả cách người ta có thể tạo gói Debian từ các nguồn Debian . Không tùy tiện nguồn ngược dòng.
Faheem Mitha

2

Tôi nghĩ tốt nhất là đọc tài liệu đi kèm với chương trình hoặc ứng dụng cụ thể mà bạn muốn cài đặt. Thông thường có các readmes / README bên trong tarball (kho lưu trữ nguồn ứng dụng mà bạn thường có thể tải xuống) hoặc thậm chí có thể CÀI ĐẶT các tệp để đọc và tìm hiểu về cách cài đặt ứng dụng ưa thích. Tóm lại: RTFM;)


Tôi đến đây vì README đưa ra tất cả các yêu cầu để xây dựng trong Linux, nhưng chỉ có hướng dẫn cài đặt Windows. Câu trả lời được chấp nhận làm việc cho tôi và có lẽ làm việc hầu hết thời gian. Tôi nghĩ rằng đó là lời khuyên gần như tốt hơn để thử tuyến đường ./mình và đi tới README nếu nó không hoạt động (nghĩa là thiếu một phụ thuộc và bạn không thể đọc đầu ra của trình biên dịch).
Stephen C

1

Tóm tắt về việc sử dụng Bộ sưu tập Cổng trong FreeBSD:

Tìm cổng

Các cổng được sắp xếp theo danh mục, vì vậy nếu bạn không biết cổng đó thuộc loại nào thì bạn phải tìm cổng trước:

cd /usr/ports
make search name=myport

Đôi khi có quá nhiều mục theo cách đó. Cá nhân tôi thích:

find /usr/ports -name myport* -print -depth 2

Sử dụng *khi tìm kiếm vì thường có nhiều phiên bản của một cổng. Đối số chuyên sâu đảm bảo kết quả trả về của bạn không bị lộn xộn với các trận đấu mà bạn không muốn.

Cấu hình

Thông thường, bạn sẽ muốn thực hiện một số cấu hình; phần mềm như Apache và Postgres thực tế yêu cầu nó. Có ba lựa chọn chính: dòng lệnh, môi trường và tạo tập tin cấu hình. Để bắt đầu với dòng lệnh:

make showconfig

Điều này sẽ liệt kê các tùy chọn cấu hình mặc định. Nếu bạn thích mặc định, bạn đã sẵn sàng biên dịch và cài đặt. Nếu không,

make config

sẽ đưa ra một hộp thoại trong đó bạn có thể chọn tùy chọn nào bạn muốn. (Đừng nhầm lẫn với điều này và make configurecấu hình cổng của bạn với các tùy chọn bạn đã chọn!) Điều này thường là đủ nhưng đối với một số phần mềm, như Apache, thường có cấu hình phức tạp mà một hộp thoại đơn giản sẽ không xử lý được. Đối với điều này, bạn cũng nên xem (các) Makefile đôi khi sẽ cung cấp cho bạn một số mục tiêu bổ sung để thực hiện sẽ cung cấp cho bạn thêm thông tin. Để tiếp tục ví dụ về Apache

make show-modules
make show-options
make show-categories

sẽ cung cấp cho bạn thông tin về việc thiết lập các mô-đun bạn đã chọn, tùy chọn luồng và tương tự. Nếu mặc định của cổng của bạn hầu hết đều ổn và bạn chỉ muốn thay đổi một số thứ, bạn cũng có thể chỉ cần truyền khóa = cặp giá trị như biến môi trường:

make MYVBL1=MYVAL1 ... install clean

Ngoài ra, bạn có thể đặt tùy chọn chuyển đổi thông qua -Dtùy chọn:

make -D MYVAR -D MYOTHERVAR ... install clean

Tuy nhiên, đối với cấu hình phức tạp, dòng lệnh sẽ không hoạt động tốt và tốt hơn cả hai phương pháp đầu tiên sẽ không hiệu quả. Trong trường hợp này, bạn có thể tạo tệp cấu hình và chuyển tệp đó sang makebiến __MAKE_CONF. FreeBSD có một tệp cấu hình mặc định: /etc/make.confthường chứa thông tin về các cổng được cài đặt trước đó và các cài đặt hệ thống khác. Để bắt đầu, hãy tạo một tệp với các tùy chọn cổng của bạn, gọi nó ~/myport.mkvà sau đó kết hợp tệp đó với /etc/make.conf:

cat /etc/make.conf ~/myport.mk >> ~/make.myport.conf

sau đó bạn có thể kiểm tra lại cấu hình của mình:

make showconfig __MAKE_CONF=~/make.port.conf

và nếu mọi thứ có vẻ tốt:

make install clean __MAKE_CONF=~/make.myport.conf

THƯỞNG THỨC! Nếu bạn cần điều chỉnh cài đặt cấu hình của mình sau make configurehoặc cài đặt toàn bộ hoặc một phần, trước tiên bạn phải xóa cấu hình của mình :

make rmconfig

Không làm như vậy sẽ dẫn đến các tương tác bất ngờ giữa hệ thống con cổng, makemặc định của cổng và cấu hình mong muốn của bạn.

Đó là rất nhiều cho một bản tóm tắt, nhưng sự phức tạp của cấu hình chủ yếu là về ứng dụng, không phải là cổng. Bash chẳng hạn, thực sự không có lựa chọn nào.

Cài đặt

Đây là phần dễ dàng:

make install clean

hoặc bạn có thể

make build
make install
make clean

đó chỉ là gõ nhiều hơn.

Nó khá là nhiều. Rõ ràng có nhiều thứ bạn có thể làm như liệt kê đệ quy các phụ thuộc và tùy chọn cấu hình, cập nhật với các bản vá, v.v. Ở đây tôi sẽ giới thiệu bạn đến phần Cổng của Sổ tay , trang con người của hệ thống con cổng (thông tin tốt về các mục tiêu thực hiện bổ sung) và maketrang man.


0

Gần đây tôi đã bắt đầu sử dụng "Checkinstall" khi cài đặt từ nguồn bên ngoài trình quản lý gói của mình. Nó xây dựng một "gói" từ tarball của bên thứ 3, sau đó có thể được cài đặt và quản lý (và gỡ cài đặt) thông qua các công cụ quản lý gói của bạn.

Kiểm tra bài viết này - http://www.linuxjournal.com/content/USE-checkinstall-build-packages-source

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.