Sự khác biệt giữa xây dựng từ nguồn và sử dụng gói cài đặt là gì?


46

Tôi đã tự hỏi: khi cài đặt một cái gì đó, có một cách dễ dàng để nhấp đúp vào tệp thực thi cài đặt và mặt khác, có một cách để xây dựng nó từ nguồn.

Cái thứ hai, tải xuống một gói nguồn, thực sự cồng kềnh.

Nhưng sự khác biệt cơ bản giữa hai phương pháp này là gì?

Câu trả lời:


44

Tất cả phần mềm là các chương trình , còn được gọi là gói nguồn . Vì vậy, tất cả các gói nguồn cần được xây dựng trước, để chạy trên hệ thống của bạn.

Các gói nhị phân là một gói đã được xây dựng từ nguồn bởi một người có các tính năng và tham số chung được cung cấp trong phần mềm để một số lượng lớn người dùng có thể cài đặt và sử dụng nó.

Gói nhị phân rất dễ cài đặt .
Nhưng có thể không có tất cả các tùy chọn từ gói ngược dòng.

Vì vậy, để cài đặt từ nguồn, bạn cần phải tự xây dựng mã nguồn. Điều đó có nghĩa là bạn cần phải tự chăm sóc các phụ thuộc. Ngoài ra, bạn cần phải nhận thức được tất cả các tính năng của gói để bạn có thể xây dựng nó cho phù hợp.

Ưu điểm của việc cài đặt từ nguồn:

  • Bạn có thể cài đặt phiên bản mới nhất và luôn có thể cập nhật, cho dù đó là bản vá bảo mật hay tính năng mới.
  • Cho phép bạn cắt giảm các tính năng trong khi cài đặt để phù hợp với nhu cầu của bạn.
  • Tương tự, bạn có thể thêm một số tính năng có thể không được cung cấp trong tệp nhị phân.
  • Cài đặt nó ở một vị trí bạn muốn.
  • Trong trường hợp một số phần mềm, bạn có thể cung cấp thông tin cụ thể về phần cứng để cài đặt phù hợp.

Trong cài đặt ngắn từ nguồn cung cấp cho bạn tùy chọn tùy chỉnh nặng đồng thời phải mất rất nhiều nỗ lực, trong khi cài đặt từ nhị phân dễ dàng hơn nhưng bạn có thể không thể tùy chỉnh theo ý muốn.

Cập nhật : Thêm đối số liên quan đến bảo mật trong các bình luận bên dưới. Đúng, trong khi cài đặt từ nhị phân, bạn không có tính toàn vẹn của mã nguồn. Nhưng sau đó nó phụ thuộc vào việc bạn có nhị phân từ đâu. Có rất nhiều nguồn đáng tin cậy từ đó bạn có thể nhận được nhị phân của bất kỳ dự án mới nào, điều tiêu cực duy nhất là thời gian . Có thể mất một chút thời gian để nhị phân của các bản cập nhật hoặc thậm chí một dự án mới xuất hiện trong kho lưu trữ đáng tin cậy của chúng tôi.

Và trên hết, về bảo mật phần mềm, tôi muốn làm nổi bật trang vui nhộn này tại các phòng thí nghiệm chuông do Joe cung cấp trong các bình luận dưới đây.


4
nguồn cũng có thể được biên dịch theo cách tối ưu hóa cho hệ thống của bạn (điều này có thể không phải là ý hay, vì khi đó công cụ được biên dịch là "cụ thể" cho hệ thống và có thể không hoạt động trên bản sao lưu ... nhưng bạn có nguồn, bạn có thể biên dịch lại (nếu bạn có thời gian cho việc đó))
Olivier Dulac

Điều này phụ thuộc vào việc bạn có "hệ thống dự phòng" nào không. Nếu bạn chỉ đang thực hiện một số nghiên cứu, bạn thường không làm.
h22

1
Đối với hyperparanoid, một lợi thế của việc cài đặt từ nguồn là bảo mật và khả năng xem lại mã nếu bạn có thể và hoặc muốn: khi bạn cài đặt từ nguồn, thực tế bạn biết rằng bạn có nhị phân từ mã nguồn đó chứ không phải một nhị phân với các sửa đổi không xác định (giả sử bạn tin tưởng nguồn ở vị trí đầu tiên).
LawrenceC

6
@ultrasawblade - Rõ ràng bạn không đủ hoang tưởng! <G> - xem cm.bell-labs.com/who/ken/trust.html để biết toàn bộ monty.
Joe

32

Tệp nguồn chứa mã gốc do nhà phát triển viết bằng bất kỳ ngôn ngữ nào anh ấy / cô ấy chọn (C, C ++, Python, v.v.) và là chung chung. Nó không cụ thể cho bất kỳ bản phân phối nào và trong nhiều trường hợp cho bất kỳ hệ điều hành nào.

Gói (ví dụ RPM hoặc DEB) là tệp thực thi nhị phân (hoặc tập lệnh được giải thích, v.v.) được chuẩn bị trước cho bản phân phối cụ thể của bạn. Nhiệm vụ chuẩn bị nguồn để biên dịch (thêm bất kỳ bản vá cần thiết nào, v.v.), biên dịch thực tế, tạo các tệp cấu hình phân phối cụ thể, tạo tập lệnh cài đặt trước và sau, v.v.

Nói cách khác, tất cả các công việc lừa đã được thực hiện cho bạn trong một gói, trong khi đó bạn sẽ cần phải tự làm nếu bạn chọn cài đặt từ nguồn.

Sử dụng một gói dễ dàng hơn nhiều trong hầu hết các trường hợp như:

  • Chúng dễ cài đặt hơn nhiều
  • Chúng được thiết kế đặc biệt để làm việc với bản phân phối của bạn
  • Đôi khi chúng được vá bởi nhà bảo trì gói để sửa lỗi distro cụ thể
  • Người quản lý gói sẽ gỡ cài đặt chúng
  • Người quản lý gói sẽ quản lý tất cả các phụ thuộc cho bạn
  • Người quản lý gói sẽ chăm sóc cập nhật
  • Bạn không cần phải cài đặt các công cụ dành cho nhà phát triển trên hệ thống của mình (trình biên dịch, tạo, v.v.)

Tuy nhiên, đôi khi phiên bản đóng gói là phiên bản cũ hoặc thậm chí tệ hơn, không có phiên bản đóng gói; trong trường hợp đó, lựa chọn duy nhất của bạn là tự biên dịch. Nếu bạn làm như vậy, bạn cần xem xét những điều sau đây:

  • Bạn sẽ cần cài đặt tất cả các công cụ dành cho nhà phát triển trên hệ thống của bạn
  • Bạn sẽ chịu trách nhiệm kiểm tra cập nhật và biên dịch lại
  • Bạn sẽ cần đảm bảo tất cả các phụ thuộc được cài đặt, bao gồm devcác gói - có thể có nhiều trong số chúng.
  • Bạn có thể cần gỡ lỗi các sự cố nếu nó không hoạt động như mong đợi trên bản phân phối của bạn

Nếu bạn sẵn sàng nỗ lực thêm, thì việc tổng hợp từ nguồn có thể mang lại cho bạn những lợi ích của:

  • Truy cập phiên bản mới nhất hiện có
  • Tùy chọn tối ưu hóa quá trình biên dịch cho hiệu năng / độ ổn định
  • Sự hưởng thụ!

Lưu ý rằng mặc dù các gói dựng sẵn của một số distro cung cấp các tệp thực thi nhị phân đã sẵn sàng để cài đặt và chạy (RPM và DEB là các ví dụ), các bản phân phối khác cung cấp các gói chỉ tự động hóa quá trình biên dịch.

Gentoo's ebuildslà một ví dụ về điều này - gói về cơ bản là các hướng dẫn cho người quản lý gói mô tả cách biên dịch và cài đặt tệp thực thi. Điều này có nhiều lợi thế của các trình quản lý gói truyền thống (cập nhật tự động, gỡ cài đặt, v.v.) trong khi vẫn cho phép người dùng tối ưu hóa quá trình biên dịch theo sở thích của mình.

Arch Linux có một hệ thống đóng gói trong đó các gói chính là nhị phân trong khi nhiều gói bổ sung được biên dịch trên hệ thống bằng PKGBUILDcác tệp.


19

Ngoài các câu trả lời khác, tôi muốn thêm một vài điều:

Nếu bạn quyết định tự biên dịch một chương trình, bạn cần nghĩ rằng biên dịch không phải là thứ bạn chỉ làm một lần. Bạn có thể sẽ cần phải đăng ký vào danh sách gửi thư phát triển của các ứng dụng bạn đã quyết định biên dịch và cập nhật các phiên bản mới và đặc biệt là các bản cập nhật bảo mật.

Mỗi khi ứng dụng được cập nhật, bạn sẽ phải biên dịch lại phiên bản mới, vì vậy, hãy nhớ rằng bạn sẽ phải dành một chút thời gian mỗi tuần.

Nếu bạn không đủ khả năng đó, tốt hơn là để người bảo trì gói làm công việc đó cho bạn.


6

Xây dựng từ nguồn cho phép chỉ định kiến ​​trúc của chính xác máy của bạn. Các CPU mới có các hướng dẫn bổ sung mà trình biên dịch hiểu, vắt kiệt một chút hiệu năng. Các gói dựng sẵn thường dựa trên CPU cổ xưa nhất vẫn được sử dụng phổ biến.

Điều này chủ yếu quan trọng đối với các ứng dụng quan trọng của dự án sử dụng CPU rất nhiều, chẳng hạn như các công cụ của đường ống sinh học, hoặc các công cụ mô hình địa vật lý. Phần mềm như vậy chạy trong một môi trường được kiểm soát chặt chẽ, không có tính năng kiểm soát truy cập, vì vậy hiếm khi có lỗi bảo mật khẩn cấp đến mức chúng phải được vá trong vài ngày hoặc vài giờ. Hầu như không bao giờ nó cần phải chạy trên một máy khác với kiến ​​trúc ban đầu chưa biết.

Vâng, tôi biết, máy tính bây giờ rất rất rất nhanh và bất kỳ nỗ lực hoặc hành động nào bạn thực hiện đều rất rất rất tốn kém, nhưng vào ngày thứ ba ngồi và chờ chương trình của bạn hoàn tất (đây là tình huống tôi đang nói về) những sự thật như vậy bắt đầu tìm kiếm câu hỏi

Khác nhau, các ứng dụng như trình duyệt và tương tự nên được sử dụng tốt hơn từ kho lưu trữ của người bảo trì (chứ không phải từ một số gói dựng sẵn đã tải xuống), vì điều rất quan trọng là phải cập nhật chúng.


Khi các tinh chỉnh như vậy để khai thác CPU của bạn một cách tối đa sẽ tạo ra sự khác biệt (điều này chỉ có liên quan trong một số mã rất chuyên biệt; câu nói là 95% thời gian được dành cho 5% mã, để tối ưu hóa 95% còn lại không có sự khác biệt đáng chú ý nào và hầu hết các chương trình ngày nay là 99% thời gian chờ đợi người dùng quyết định bằng mọi cách), các chương trình cung cấp mã khác nhau để được bật tùy thuộc vào CPU khi khởi động.
vonbrand

0

Một cách để tận dụng tốt nhất cả hai thế giới (phần mềm cập nhật, cài đặt / gỡ cài đặt đơn giản, kết hợp hầu hết các tinh chỉnh phân phối và điều chỉnh, có thể tối ưu hóa cho các yêu cầu địa phương), trong khi chi phí (phải tự cập nhật, đề phòng lỗi và các bản vá vào phút cuối, theo sự phát triển, bạn tự mình khắc phục các lỗi và không tương thích giữa các phiên bản) không thể được giảm thiểu (nhiều), là để xây dựng các gói của riêng bạn, bắt đầu với các gói nguồn từ bản phân phối của bạn. Vâng, nó là công việc nhiều hơn là chỉ xây dựng và cài đặt.


1
Có vẻ như là một câu trả lời thú vị ("tốt nhất của cả hai thế giới"), nhưng tôi hoàn toàn không thể hiểu ý của bạn ở đây: "là xây dựng các gói của riêng bạn, bắt đầu với các gói nguồn từ phân phối của bạn". Bạn có phiền viết lại / giải thích không?
Jan Żankowski
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.