Если я собираю пакет из исходного кода, как я могу удалить или удалить полностью?

137

Я использовал исходный код для сборки одного пакета, например ниже:

./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --libexecdir=/usr/lib --with-package-name="Myplugin" --with-package-origin="http://www.ubuntu.org/" --enable-gtk-doc --disable-static
make
make install

Но, к сожалению, я обнаружил, что это последняя версия, и в ней много ошибок, поэтому мне нужно удалить / удалить ее. Но как я могу это сделать? Я пытался, make clean; make uninstallно все же я вижу, что это существует:

# pkg-config --list-all | grep Myplugin
myplugin-....
$ ls /usr/lib/myplugin/libXYZ.so
exist....

Как вы удалите это сейчас?

YumYumYum
источник

Ответы:

177

Обычно вы можете просто использовать:

make uninstall

или же

sudo make uninstall

если приложение было установлено как root.

Но это будет работать, только если разработчик пакета позаботился о создании хорошего правила удаления.

Вы также можете попытаться взглянуть на шаги, используемые для установки программного обеспечения, запустив:

make -n install

А затем попробуйте отменить эти шаги вручную.

В будущем, чтобы избежать такого рода проблем, старайтесь использовать checkinstallвместо того, чтобы по make installвозможности (AFAIK всегда, если вы не хотите сохранить и скомпилированную, и упакованную версию одновременно). Он создаст и установит файл deb, который затем можно удалить с помощью вашего любимого менеджера пакетов.

make cleanобычно очищает каталоги сборки, пакет не удаляется. Он используется, когда вы хотите быть уверены, что все это скомпилировано, а не только измененные файлы.

Хавьер Ривера
источник
Я тоже это сделал. Но все же он существует, как показано в pkg-config и ls /usr/lib/myplugin/libXYZ.so
YumYumYum
36
+1 за использование checkinstall- это заставляет всю эту проблему испариться.
Оли
6
@Google: если make uninstall не работает, вам нужно отследить, что сделала make install, и отменить его вручную.
Хавьер Ривера
4
Еще одна вещь, которую нужно иметь в виду, это то, что если он make installбыл запущен от имени пользователя root (например, sudo make install), как это обычно бывает, то для sudo make uninstallего удаления всегда нужно запускать виртуально .
Элия ​​Каган
5
Если вы уже запустили make install, вы все еще можете использовать checkinstall. Обычно checkinstallперезаписывает все, что make installсоздано. После этого просто используйте dpkg -r <package.deb>, и все должно быть удалено.
user502144
28

Я не думаю, что это ошибка, было бы неплохо почитать и научиться использовать checkinstall при установке из исходного кода.

вы можете установить checkinstall из репозиториев, краткое описание пакета;

CheckInstall отслеживает все файлы, созданные или измененные вашим сценарием установки («make install», «make install_modules», «setup» и т. Д.), Создает стандартный бинарный пакет и устанавливает его в вашу систему, что дает вам возможность удалить его с помощью стандартные утилиты управления пакетами вашего дистрибутива.

Эти ссылки ниже могут быть полезны для лучшего понимания. http://en.wikipedia.org/wiki/CheckInstall

http://checkinstall.izto.org/

Sabacon
источник
16

Это не ошибка - компиляция из исходного кода - это неподдерживаемый метод установки программного обеспечения, который полностью обходит систему управления пакетами (которая используется Центром программного обеспечения).

Не существует стандартного способа установки или удаления программного обеспечения, скомпилированного из исходного кода, поэтому Ubuntu не может знать, что делать. Программное обеспечение даже не указано как установленная программа.

Вы должны следовать инструкциям дистрибьютора по установке и удалению такого программного обеспечения. Вы также можете связаться с разработчиком, чтобы попросить их создать пакет Debian, чтобы можно было использовать систему управления пакетами.

dv3500ea
источник
3

Это не ошибка, это то, что происходит, когда разработчики прибегают к распространению через исходный код, а не через нативные методы упаковки.

Вы можете сделать ваши исходные файлы пакетами debian, используя checkinstall или dhbuild. Честно говоря, на мой взгляд, новые пользователи должны избегать установки из исходного кода, а разработчики должны избегать распространения только по исходному тексту.

RolandiXor
источник
Я знаю, но иногда это неизбежно ... В этом случае это была просто небольшая игра, которая на самом деле не нужна, но когда-то назад я должен был установить MATLAB вычислительный инструмент, используемый в моем университете, и должен был установить его у источника, поскольку они это сделали. У меня нет файла deb для Ubuntu ... Но я обязательно пойду через методы checkinstall и dhbuild ... спасибо
nik90
1

Я знаю несколько пакетов, которые поддерживают "make uninstall", но многие другие поддерживают make install DESTDIR = xxx "для поэтапной установки.

Вы можете использовать это для создания пакета, который вы устанавливаете, вместо того, чтобы устанавливать прямо из источника. Я не везло с Checkinstall но FPM работает очень хорошо.

Это также может помочь вам удалить пакет, ранее установленный с помощью make install . Вы просто принудительно устанавливаете собранный пакет поверх установленного, а затем удаляете его.

Например, я использовал это недавно, чтобы иметь дело с protobuf-3.3.0. На RHEL7:

make install DESTDIR=dest
cd dest
fpm -f -s dir -t rpm -n protobuf -v 3.3.0 \
 --vendor "You Not RedHat" \
 --license "Google?" \
 --description "protocol buffers" \
 --rpm-dist el7 \
 -m you@youraddress.com \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 --rpm-autoreqprov \
 usr

 sudo rpm -i -f protobuf-3.3.0-1.el7.x86_64.rpm
 sudo rpm -e protobuf-3.3.0      

Предпочитаю ням рпм, если можете.

На Debian9:

make install DESTDIR=dest
cd dest
fpm -f -s dir -t deb -n protobuf -v 3.3.0 \
-C `pwd` \
--prefix / \
--vendor "You Not Debian" \
--license "$(grep Copyright ../../LICENSE)" \
--description "$(cat README.adoc)" \
--deb-upstream-changelog ../../CHANGES.txt \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 usr/local/bin \
 usr/local/lib \
 usr/local/include

 sudo apt install -f *.deb
 sudo apt-get remove protobuf

Предпочитаю подходить к dpkg, где вы можете.

Я также разместил этот ответ на stackoverflow

Брюс Адамс
источник
0

Мы должны договориться о том , что делать деинсталлировать бы не всегда работать, поэтому ниже более инициативного решения.

Это предполагает использование программы paco, которая доступна в программном центре Ubuntu. После того, как мы установили paco, мы можем использовать его в режиме журнала, когда мы «делаем установку» программы. Paco действует как оболочка для вашей «make install» и создает журнал в каталоге / var / log / paco со списком файлов, скопированных в различные каталоги. Кроме того, вы могли видеть файлы в интерфейсе Paco.

Например, когда я скомпилировал php из исходного кода, я сделал следующее:

paco -lp php5 "make install"

Параметр l заставляет paco работать в режиме журнала. Это создало файл журнала в / var / log / paco с именем php5 (имя, которое я дал в команде). Он содержит все файлы, которые копируются в различные стандартные места во время установки. Вы можете использовать редактор командной строки или paco gui для просмотра файлов.

Ниже приведен пример получения списка файлов с помощью редактора командной строки sed
(замените php5 на ваше имя файла).

cat /var/log/paco/php5 | sed -n 's/|\(.*\)//;/^#\(.*\)/d;p'

Как только вы получили список файлов, вы знаете, как их удалить, не так ли? Действительно, вы можете передать результаты вышеуказанной команды в rm, используя обратные пометки, как показано ниже:

sudo rm `cat /var/log/paco/php5 | sed -n 's/|\(.*\)//;/^#\(.*\)/d;p'`

Дело сделано!

Примечание. Из-за ограничений LD_PRELOAD paco не может отслеживать трассировку suid-программ. Смотрите справочную страницу.

sjsam
источник
0

Я скомпилировал php-5.6.30 из исходного кода, не настроив его с помощью openssl, поэтому мне пришлось вернуться и установить его с нуля. Использование make uninstall не работало, так как Makefile для php его не поддерживает.

Тем не менее, этот шаг работал для меня, - я перечислил все файлы, связанные с php и удалил их вручную, это заняло у меня около 5 минут, без пота. Вы также можете использовать эти шаги для удаления скомпилированного программного обеспечения.

Замените php программным обеспечением, которое необходимо удалить

whereis php

Приведенная выше команда выводит список каталогов, в которых установлены двоичные файлы, например: / usr / local / bin / php, / usr / bin / php .. удалите каждый файл / каталог, указанный в ваших выходных данных.

sudo rm -f /usr/local/bin/php

Сделайте это со всеми файлами, перечисленными в приведенных выше выходных данных, и вы готовы установить более новую версию с нуля.

Абхинай
источник