Я встановив програму, отримавши її вихідний код, а потім запустив `sudo make install`; як зробити так, щоб `apt-get` знав про це?


46

Я встановив програму (викликайте її, наприклад, progA), побудувавши її з вихідного коду, а потім нарешті зателефонувавши sudo make installі sudo ldconfig.

Однак, схоже apt-get, пам’ятку не дійшло, тому що при встановленні progB, від якого залежить progA, apt-getрекомендую також встановити progA. Чому це так, і що я міг зробити?


Думаю, вам доведеться встановити і progBвручну ...
Parto

11
Не можна припустити, що створена вами "спеціальна" версія така ж, як і в пакеті, тобто залежність. Ярликом (не рекомендується) буде встановити справжній пакет, а потім перезаписати двійковий файл вашим "спеціальним". Оскільки ви не були конкретні, я не можу надавати більше порад.
david6

6
Просто не робіть цього. Завжди тримайте програмне забезпечення, яке керується управлінням вашим пакетом, суворо окремо від програмного забезпечення, яке ви складаєте самостійно.
Reinier Post

Відповіді:


56

TL; DR checkinstall - твій друг ;)

sudo apt-get install checkinstall

Після установки з sudo make installвашим менеджером пакунків про цю установку абсолютно нічого не відомо. Але він знає все про пакет з однаковою назвою в сховищах Ubuntu або в PPA.

Використовуйте sudo checkinstallзамість sudo make installі використовуйте більш високу версію як версію в сховищі, щоб бути впевненим, що ваш менеджер пакунків приймає цю версію як правильну залежність для ProgB.


Додаткова інформація:

checkinstallнасправді вишуканий, оскільки з цього випливає, що make installробила б команда, щоб з'ясувати, як скласти пакет.

Це означає, що якщо ви встановите програму за допомогою make install, але потім хочете каятися за свої гріхи, все, що вам потрібно зробити, - це sudo checkinstall -D make installі ця команда:

  1. слідуйте, make installщоб з'ясувати, що це робить

  2. copy-cat make install, за винятком форми * .deb

  3. встановіть з пакета (саме так, як це make installбуло б, задано пункт 1)), крім того, повідомте apt-getпро це, і таким чином перепишіть усі файли саме там, куди make installб їх розмістити, доки ви вирішите YES для включення файлів, розміщених make installу домашній каталог в пакеті також - пара варіантів під час checkinstallпроцесу дозволить вам вибрати (очевидно, проте вибір є, щоб ви могли виконувати це в кожному конкретному випадку)

Бонус: ви також можете видалити встановлений пакет (зателефонуйте progAще раз), встановлений за допомогою make installцих оді, не make uninstallпідтримуючи , дотримуючись описаного до цього checkinstallпроцесу, а потім просто виконайте:

dpkg -r progA

18
Вау checkinstall- СВІТ повинен знати про це!

До вашої відповіді я додав ще трохи деталей, спираючись на спробу втілити її вчора, та рекомендації з цього мета-питання - будь ласка, не соромтесь далі редагувати її!

Які деталі ви маєте на увазі?
AB

О, я думаю, що вони ще не з’явилися, тому що це редакція огляду - якщо ви натиснете на посилання на мета-питання, ви побачите, що вони є (спочатку я поставив їх у тілі запитань, але Рекомендація полягала в тому, що я повинен містити їх до прийнятого органу відповідей).

Каталог пакетної документації ./doc-pak не існує. Чи слід створити набір пакетів документів за замовчуванням?
n8chz

13

Три варіанти:

  1. створити підроблений пакет для progA: Як підробити встановлену версію пакета? широкий приклад для TeXlive) .

  2. створити пакет для progA, простіше , якщо у нього є checkinstallваріант: Як обдурити влучні залежності?

  3. Будуйте також progBз джерел.


1
4. Видаліть створену progAвами версію та встановіть її apt-get. 5. Встановіть apt-getпакет над складеною версією та сподівайтеся на найкраще.
jwodder

1

Я б рекомендував використовувати uupdateвід devscriptsі збірки пакета , як оригінал був побудований раніше.

Встановіть необхідні пакети

$ sudo apt-get install build-essential devscripts

Завантажте старий пакет із офіційного сховища (будемо використовувати MediaWikiяк приклад) та новий тар-кульку з висхідного потоку.

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

Запустіть, uupdateщоб створити нову папку джерела з верхніх кульових тортів та старої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

Тепер слід перевірити, чи потрібно вносити зміни до debian/controlфайлів тощо. Якщо ви закінчите, можете скласти пакет дебюту та встановити його

$ dpkg-buildpackage -us -uc
$ cd ..
$ sudo dpkg -i *.deb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.