我使用源代码构建了一个软件包,如下所示:

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


如何立即删除?

#1 楼

通常,您可以使用:

make uninstall




sudo make uninstall


如果该应用程序已作为root安装。 br />
但是,只有在程序包的开发人员已经制定了良好的卸载规则时,此方法才有效。

您还可以尝试了解用于安装的步骤通过运行以下软件进行操作:

make -n install


,然后尝试手动撤消这些步骤。

为了避免此类问题,将来尝试尽可能使用checkinstall而不是make install(除非您想同时保留编译版本和打包版本,否则请始终使用AFAIK)。它会创建并安装一个deb文件,然后您可以使用自己喜欢的软件包管理器进行卸载。

make clean通常会清理建筑目录,但不会卸载该软件包。当您要确保整个过程都已编译,而不仅仅是更改的文件时,可以使用它。

评论


+1以使用checkinstall-使整个问题消失。

–奥利♦
2011年12月12日12:00

@Google:如果make卸载无效,则需要跟踪make install的工作并手动撤消。

–哈维尔·里维拉(Javier Rivera)
2011-12-12 12:42

清理完成后,make卸载工作吗?我相信需要确保它仍然以相同的方式配置。

–user606723
2011年12月12日16:10

要记住的另一件事是,如果通常以root身份运行make install(例如sudo make install),则实际上总是需要运行sudo make uninstall来删除软件。

– Eliah Kagan
13年7月9日在1:46

如果您已经运行了make install,则仍然可以使用checkinstall。通常,checkinstall将覆盖使安装创建的所有内容。之后,只需使用dpkg -r ,所有内容都应删除。

–user502144
17年10月15日在18:00

#2 楼

我不认为这是一个错误,从源代码安装时阅读并学习使用checkinstall是一个好主意。

您可以从存储库中安装checkinstall,该软件包的简短说明;

CheckInstall跟踪由安装脚本(“ make install”
“ make install_modules”,“ setup”等)创建或修改的所有文件,
标准二进制软件包并将其安装在您的
系统中,使您能够使用您的发行版的标准软件包管理实用程序将其卸载。

以下这些链接可能会有所帮助以获得更好的理解。
http://en.wikipedia.org/wiki/CheckInstall

http://checkinstall.izto.org/

#3 楼

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

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

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

#4 楼

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

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

评论


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

–nik90
2011年1月20日在22:44



#5 楼

我们需要协商一个事实,即make卸载不能总是起作用,因此下面
是更主动的解决方案。
这涉及使用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程序。请参见手册页。

#6 楼

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

您可以使用它来创建要安装的软件包,而不是直接从中进行安装

这也可以帮助您删除以前使用make install安装的软件包。您只需将构建的软件包强行安装在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      


如果可以的话,最好选择um。

在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

#7 楼

Make
Make是一个程序,用于从源代码编译和安装程序。它不是软件包管理器,因此不会跟踪其安装的文件。这使得以后很难卸载文件。
make install命令将已构建的程序和程序包复制到库目录和makefile中的指定位置。这些位置可能会根据配置脚本执行的检查而有所不同。
CheckInstall
CheckInstall是用于安装或卸载从源代码编译的程序的程序。它监视并复制使用make程序安装的文件。它还使用软件包管理器安装文件,从而可以像常规软件包一样将其卸载。
checkinstall命令称为make install命令。它监视已安装的文件并从中创建一个二进制包。它还使用Linux软件包管理器安装二进制软件包。
用您自己的信息替换屏幕快照中的source_location.debname

在源软件包目录中执行以下命令:


安装CheckInstall
sudo apt-get install checkinstall



运行配置脚本
./configure



运行Make命令
make



运行CheckInstall
sudo checkinstall



重新安装软件包
sudo dpkg --install --force-overwrite source_location.deb



删除软件包
sudo apt remove name



这是我写的一篇文章,对整个过程进行了解释。

#8 楼

我是从源代码编译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

使用上面输出中列出的所有文件来执行此操作,您就可以从头开始安装较新的版本。

#9 楼

如果用户进行make install并进行make uninstall无效,则可以手动删除已安装的文件。

停止redis服务:

service redis_6379 stop


现在删除/ usr / local / bin /中与Redis服务器相关的所有内容:

rm /usr/local/bin/redis-*


删除Redis配置文件目录:

rm -r /etc/redis/


删除现有的Redis数据目录:

rm -r /var/lib/redis/


删除现有的Redis服务器初始化脚本:

rm /etc/init.d/redis_*


删除现有的Redis PID文件(仅在存在的情况下):

rm /var/run/redis_*


重新启动服务器,现在Redis已从服务器中完全删除。

#10 楼

另外,如果您使用传统方法安装了源代码,则可以重新安装软件包,将自己放置在运行sudo make install,运行sudo checkinstall的目录中。
然后只需键入sudo apt-get purge $program_name
就可以卸载它。