Cài đặt từ nguồn. Làm thế nào để giải quyết các phụ thuộc mà không phá hủy trình quản lý gói


19

Biên dịch và cài đặt phần mềm là một vấn đề và tôi không thể khắc phục. Tôi chỉ muốn tìm hiểu về quá trình này với một người hiểu biết hơn để giải tỏa tâm trí của tôi để đạt đến cấp độ tiếp theo.

Nhiều phần mềm khoa học tôi cần không được phân phối dưới dạng gói. Tôi hiểu "./cool" thiết lập các biến biên dịch và kiểm tra các phụ thuộc "make" để biên dịch "sudo make install" đặt tất cả các thư viện và thùng rác vào vị trí của chúng. Tuy nhiên nó không bao giờ hoạt động. Tôi hiếm khi thoát khỏi giai đoạn a) "./mình" mà không vào địa ngục phụ thuộc và nếu tôi làm, b) "sudo make install" có thể sẽ làm hỏng hộp của tôi.

a) Địa ngục phụ thuộc là rất bực bội. Đôi khi tôi có thư viện, nhưng nó không thích nó. Hoặc thư viện không muốn cài đặt. Hoặc "cấu hình" không thể tìm thấy nó. Hoặc distro của tôi đặt nó ở đâu đó không nên. Hoặc có hai phiên bản trong hệ thống của tôi. Vấn đề là, tôi không thể hiểu làm thế nào để chẩn đoán và do đó khắc phục những vấn đề này. Một số tài liệu tham khảo tốt để tìm hiểu cho một người không cần phải trở thành lập trình viên là gì?

b) Sự hiểu biết của tôi là "make install" sẽ thay thế một số thư viện và thay đổi cài đặt mà người quản lý gói của tôi không biết điều này. Do đó, một số chương trình sẽ không chạy, những chương trình khác không thể được cập nhật. Vì vậy, nếu tôi không sử dụng "make install" và chỉ giữ tệp nhị phân được biên dịch trong thư mục người dùng của tôi với một liên kết tượng trưng được thêm vào PATH, tôi sẽ rõ ràng chứ?

Hộp của tôi là một người dùng, có hàng tấn HD miễn phí, vì vậy tôi không thực sự quan tâm đến việc có nhiều (hàng chục) bản sao thư viện nếu điều đó sẽ giải quyết vấn đề của tôi. Không gian rẻ.


3
Bạn không nói phân phối nào bạn đang sử dụng, đó sẽ là một thông tin thú vị. Nếu bạn chạy một dẫn xuất Debian, bạn có thể sử dụng apt-get build-dep <package>để tự động cài đặt các phụ thuộc cần thiết.
Marco

Tôi sử dụng CentOS 6 (để có những gì siêu nhân trong phòng thí nghiệm của chúng tôi sử dụng), nhưng tôi đã từng sử dụng Ubuntu.
Lenz

Chào mừng đến với cuộc sống của một packager phân phối. Thực hiện tất cả theo dõi phụ thuộc này không phải là đặc biệt khó khăn, nhưng nó rất khó khăn.
Gilles 'SO- ngừng trở nên xấu xa'

Xem Người quản lý gói không root và có lẽ các câu hỏi khác được gắn thẻ không phải người dùng root là về cài đặt phần mềm và quản lý gói.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


16

Hầu hết các gói sẽ có <package>-dev(dựa trên Debian) hoặc <package>-devel(dựa trên Red Hat) sẽ là các thư viện cần thiết để liên kết để xây dựng.

Vì vậy, ví dụ nếu nguồn nói rằng nó yêu cầu libxml, trong các hệ thống dựa trên Debian bạn sẽ tìm libxml2libxml2-dev(sử dụng apt-cache search <dependancy>để tìm chúng).

Bạn sẽ cần libxml2-devđể xây dựng nó, và libxml2để chạy nó.

Các ./configurebước thường hỗ trợ cờ thích --with-libxml=/usr/lib/để trỏ nó tại các thư viện đúng ( ./configure --helpnên liệt kê tất cả các tùy chọn). Nó cũng thường hỗ trợ thay đổi vị trí cài đặt với --prefix=$HOME/sw. Sử dụng tiền tố bên ngoài những gì trình quản lý gói của bạn kiểm soát là cách tốt nhất để tránh xung đột với phần mềm được cài đặt của trình quản lý gói.

Trên Debian & dẫn xuất sử dụng một --prefixsố /usr/local/hoặc /opt/local/phải an toàn.

Nếu một thư viện (hoặc phiên bản) bạn cần không có sẵn từ trình quản lý gói, chỉ cần tải xuống nguồn và biên dịch nó bằng các tùy chọn tương tự. Quan trọng nhất là sử dụng --prefixbên ngoài trình quản lý gói của bạn và khi biên dịch phần mềm bạn thực sự muốn sử dụng --with-<library>=/<path/to/installed/library>.


5

Có công cụ auto-aptcó thể được sử dụng cho việc này.

Từ người đàn ông tự động apt :

auto-apt là chương trình kiểm tra quyền truy cập tệp của các chương trình đang chạy trong môi trường tự động apt. Nếu một chương trình sẽ truy cập vào một tệp của gói chưa được cài đặt, auto-apt sẽ cài đặt gói chứa tệp đó, bằng cách sử dụng apt-get.

Nó được sử dụng như sau:

auto-apt run ./configure

Một cách khác là sử dụng apt-get build-dep <package>trên các bản phân phối dựa trên Debian.


apt-get build-dep <package>đã làm cho tôi. Thật là bực bội khi chạy đi chạy ./configurelại để học thêm một gói bắt buộc!
HeatfanJohn 11/03/2016

2

Đối với các bản phân phối dựa RPM, bạn có thể thử tay của bạn tại tạo gói thích hợp (nó không phải là điều đó khó khăn ...).

Lợi ích của gói phù hợp là trình quản lý gói của bạn theo dõi phần mềm và bạn có thể dễ dàng sao chép thiết lập của mình ở nơi khác / trên máy tiếp theo. Với gói nguồn thích hợp chuyển tiếp (phiên bản ngược dòng mới, bản vá lỗi, các thư viện cơ bản được cập nhật) sẽ dễ dàng hơn việc phải tìm ra tất cả từ đầu vào lần sau.

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.