Tôi đã cài đặt một chương trình bằng cách lấy mã nguồn của nó, rồi chạy `sudo make install`; Làm thế nào để làm cho `apt-get` biết về nó?


46

Tôi đã cài đặt chương trình (ví dụ như gọi nó progA) bằng cách xây dựng nó từ mã nguồn, rồi cuối cùng gọi sudo make installsudo ldconfig.

Tuy nhiên, có vẻ như chúng tôi apt-getchưa nhận được bản ghi nhớ, vì khi cài đặt progB, tùy thuộc vào progA, apt-gettôi khuyên bạn cũng nên cài đặt progA. Tại sao lại thế này, và tôi có thể làm gì?


Tôi nghĩ bạn cũng phải cài đặt progBthủ công ...
Parto

11
Không thể giả định rằng phiên bản 'tùy chỉnh' mà bạn đã tạo giống với gói, đó là một phụ thuộc. Một phím tắt (không được khuyến nghị) sẽ là cài đặt gói thực, và sau đó ghi đè lên tệp nhị phân bằng 'đặc biệt' của bạn. Khi bạn chưa cụ thể, tôi không thể cung cấp thêm lời khuyên nào.
david6

6
Đừng làm điều này. Luôn luôn giữ phần mềm được quản lý bởi quản lý gói của bạn tách biệt hoàn toàn với phần mềm do bạn tự biên dịch.
Tăng cường bài viết

Câu trả lời:


56

TL; DR checkinstall là bạn của bạn ;)

sudo apt-get install checkinstall

Sau khi cài đặt với sudo make installtrình quản lý gói của bạn hoàn toàn không biết gì về cài đặt này. Nhưng nó biết tất cả về một gói có cùng tên trong kho Ubuntu hoặc trong PPA.

Sử dụng sudo checkinstallthay vì sudo make installvà sử dụng phiên bản cao hơn làm phiên bản trong kho lưu trữ để đảm bảo rằng trình quản lý gói của bạn chấp nhận phiên bản này là phụ thuộc chính xác cho ProgB.


Thêm thông tin:

checkinstallthực sự tiện lợi, vì nó tuân theo những gì make installlệnh sẽ làm, để tìm ra cách xây dựng một gói.

Điều này có nghĩa là nếu bạn cài đặt một chương trình bằng cách sử dụng make install, nhưng sau đó muốn ăn năn tội lỗi của mình, tất cả những gì bạn phải làm là sudo checkinstall -D make installvà lệnh đó sẽ:

  1. làm theo make installđể tìm ra những gì nó làm

  2. copy-cat make install, ngoại trừ ở dạng gói * .deb

  3. cài đặt từ gói (chính xác như make installđã có, đã cho điểm 1)) ngoại trừ cũng cho apt-getbiết về nó, và do đó ghi đè lên tất cả các tệp chính xác nơi make installsẽ đặt chúng miễn là bạn chọn CÓ để bao gồm các tệp được đặt make installtrong thư mục chính trong gói cũng vậy - một vài tùy chọn trong checkinstallquá trình sẽ cho phép bạn chọn (rõ ràng, mặc dù vậy, sự lựa chọn là ở đó để bạn có thể thực hiện nó trên cơ sở từng trường hợp)

Phần thưởng: bạn cũng có thể xóa gói (gọi progAlại) được cài đặt bằng cách sử dụng make installodes đó không có make uninstallhỗ trợ bằng cách làm theo checkinstallquy trình được nêu ra cho đến nay, và sau đó chỉ cần thực hiện:

dpkg -r progA

18
Wow checkinstall- THẾ GIỚI cần biết về điều này!

Tôi đã thêm một số chi tiết vào câu trả lời của bạn, dựa trên việc cố gắng thực hiện nó ngày hôm qua và các đề xuất từ ​​câu hỏi meta này - xin vui lòng chỉnh sửa thêm!

Những chi tiết nào bạn muốn nói?
AB

Ồ, tôi nghĩ rằng chúng chưa xuất hiện, vì nó đang trong phần đánh giá chỉnh sửa - nếu bạn nhấp vào liên kết đến câu hỏi meta, bạn sẽ thấy chúng là gì (ban đầu, tôi đã đặt chúng vào phần thân câu hỏi, nhưng đề nghị là tôi nên đặt chúng trong cơ quan trả lời được chấp nhận).

Thư mục tài liệu gói ./doc-pak không tồn tại. Tôi có nên tạo một bộ tài liệu gói mặc định không?
n8chz

13

Ba lựa chọn:

  1. tạo một gói giả cho progA: Làm thế nào để giả một phiên bản gói được cài đặt? (có một ví dụ mở rộng cho TeXlive) .

  2. tạo một gói cho progA, dễ dàng hơn nếu nó có một checkinstalltùy chọn: Làm thế nào để lừa phụ thuộc apt?

  3. Xây dựng cũng progBtừ các nguồn.


1
4. Gỡ cài đặt phiên bản progAbạn đã biên dịch và cài đặt apt-getphiên bản. 5. Cài đặt apt-getgói qua phiên bản đã biên dịch và hy vọng điều tốt nhất.
jwodder

1

Tôi khuyên bạn nên sử dụng uupdatetừ devscriptsvà xây dựng gói giống như bản gốc đã được xây dựng trước đó.

Cài đặt các gói yêu cầu

$ sudo apt-get install build-essential devscripts

Tải xuống gói cũ từ kho lưu trữ chính thức (sẽ sử dụng MediaWikilàm ví dụ) và tar-ball mới từ thượng nguồn.

$ mkdir ~/Downloads/mediawiki
$ cd ~/Downloads/mediawiki
$ apt-get source mediawiki
$ wget https://releases.wikimedia.org/mediawiki/1.26/mediawiki-1.26.0.tar.gz

Chạy uupdateđể tạo một thư mục nguồn mới từ tar-ball ngược dòng và cũdebian/control

$ cd mediawiki-1.19.14+dfsg   # depends on your Ubuntu version
$ uupdate ../mediawiki-1.26.0.tar.gz 1.26.0
$ cd ../mediawiki-1.26.0

Bây giờ bạn nên kiểm tra xem bạn có cần thay đổi debian/controltập tin vv không. Nếu bạn đã hoàn tất, bạn có thể xây dựng gói gỡ lỗi và cài đặt nó

$ dpkg-buildpackage -us -uc
$ cd ..
$ sudo dpkg -i *.deb
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.