Я установил программу, получив ее исходный код, и затем запустил `sudo make install`; как заставить `apt-get` узнать об этом?

46

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

Тем не менее, кажется apt-get, не получил памятку, потому что при установке progB, которая зависит от progA, apt-getрекомендует также установить progA. Почему это и что я мог сделать?

Braiam
источник
Я думаю, что вы должны установить progBвручную тоже ...
Parto
11
Нельзя предполагать, что созданная вами «пользовательская» версия совпадает с пакетом, то есть является зависимостью. Сочетание (не рекомендуется) будет установить реальный пакет, а затем перезаписать двоичный файл с вашим «специальным». Поскольку вы не были конкретны, я не могу дать дальнейших советов.
Давид6
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были бы помещены, если вы выберите ДА, чтобы включить файлы, помещенные make installв домашний каталог также в пакете - несколько вариантов во время checkinstallпроцесса позволят вам выбрать (хотя, конечно, выбор есть, так что вы можете использовать его на индивидуальной основе)

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

dpkg -r progA
AB
источник
18
Ого checkinstall- МИР должен знать об этом!
Я добавил еще несколько деталей , чтобы ваш ответ, основанный на том , чтобы реализовать его вчера, и рекомендации этого мета вопрос - пожалуйста , не стесняйтесь дальнейшего редактирования его!
Какие детали вы имеете в виду?
AB
О, я думаю, что они еще не появились, потому что это в редактируемом обзоре - если вы нажмете на ссылку на мета вопрос, вы увидите, что они есть (первоначально я поместил их в теле вопроса, но рекомендация заключалась в том, чтобы я поместил их в принятый ответ).
Каталог документации пакета ./doc-pak не существует. Должен ли я создать набор документов по умолчанию?
n8chz
13

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

  1. создать поддельный пакет для progA: Как подделать установленную версию пакета? (есть обширный пример для TeXlive) .

  2. создать пакет для progA, проще , если у него есть checkinstallвариант: Как обмануть меткие зависимости?

  3. Сборка также progBиз источников.

Rmano
источник
1
4. Удалите progAскомпилированную apt-getверсию и установите версию. 5. Установите apt-getпакет поверх скомпилированной версии и надейтесь на лучшее.
jwodder
1

Я бы порекомендовал использовать uupdatefrom devscriptsи собрать пакет так, как он был собран ранее.

Установите необходимые пакеты

$ sudo apt-get install build-essential devscripts

Загрузите старый пакет из официального репозитория (будет использоваться в MediaWikiкачестве примера) и новый tar-ball из апстрима.

$ 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чтобы создать новую исходную папку из вышестоящего tar-шара и старого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файлы etc. Если вы сделали, вы можете собрать пакет deb и установить его

$ dpkg-buildpackage -us -uc
$ cd ..
$ sudo dpkg -i *.deb
Germar
источник