如果从源代码构建软件包,如何完全卸载或删除?


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....

您现在如何删除它?

Answers:


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 2011年

36
使用+1 checkinstall可以解决整个问题。
奥利

6
@Google:如果make卸载无效,则需要跟踪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/


16

这不是错误-从源代码进行编译是一种不受支持的安装软件方法,它会完全绕过软件包管理系统(由软件中心使用)。

没有安装或卸载从源代码编译的软件的标准方法,因此Ubuntu无法知道该怎么做。该软件甚至没有作为已安装程序列出。

您应该按照发行商的说明安装和删除此类自定义软件。您也可以联系开发人员,要求他们创建Debian软件包,以便可以使用软件包管理系统。


3

这不是错误,而是当开发人员诉诸于通过源而不是通过本机打包方法进行分发时发生的事情。

您可以使用checkinstall或dhbuild将源文件转换为debian软件包。老实说,我认为-新用户应避免从源代码进行安装,而开发人员应避免仅按源进行分发。


我知道,但有时候这是不可避免的...在这种情况下,这只是一个小游戏,这并不是真正必要的,但是有时我不得不安装MATLAB,这是我大学使用的一种计算工具,并且必须由源代码来安装,因为他们这样做了。没有ubuntu的deb文件...但是我一定会通过方法checkinstall和dhbuild ...谢谢
nik90 2011年

1

我知道很少有支持“进行卸载”的软件包,但是更多支持阶段安装的make install DESTDIR = xxx“软件包。

您可以使用它来创建要安装的软件包,而不是直接从源代码安装。我对checkinstall 不太满意,但fpm效果很好。

这也可以帮助您删除以前使用make install安装的软件包。您只需在已安装的make软件包上强制安装已构建的软件包,然后将其卸载。

例如,我最近使用它来处理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      

如果可以,请选择yum而不是rpm。

在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

我们需要谈判的事实,使卸载不会总是工作,所以下面是更积极的解决方案。

这涉及使用Ubuntu软件中心中提供的paco程序。一旦安装了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程序。请参见手册页。


0

我是从源代码编译php-5.6.30的,而没有使用openssl对其进行配置,因此我不得不从头开始安装它。使用make uninstall 无法正常工作,因为php的Makefile不支持它。

但是,此步骤对我有用,-我列出了所有与php相关的文件,并手动将其删除,这花了我大约5分钟的时间。您可以类似地使用这些步骤来卸载编译的软件。

用您需要卸载的软件替换php

whereis php

上面的命令列出了安装二进制文件的目录,例如:/ usr / local / bin / php,/ usr / bin / php ..删除输出中列出的每个文件/目录。

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

使用上面输出中列出的所有文件执行此操作,并且您都已准备从头开始安装较新的版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.