跟踪程序

跟踪程序

当我安装一个简单的程序时,它经常使用make && make install,甚至不经常有卸载目标。

如果我想升级一个程序,假设它只是无缝地重写旧程序,这是标准协议吗?

我如何跟踪这些程序?大多数人只是“一劳永逸”吗?如果不是卸载给定目标我是否必须手动删除所有内容?

答案1

将每个程序安装在专用的目录树中,并使用斯托或者X斯托使所有程序出现在一个共同的层次结构中。 Stow 创建从程序特定目录到公共树的符号链接。

更详细地说,选择一个顶级目录,例如/usr/local/stow.安装 下的每个程序/usr/local/stow/PROGRAM_NAME。例如,安排将其可执行文件安装在 中/usr/local/stow/PROGRAM_NAME/bin,将其手册页安装在 中,/usr/local/stow/man/man1等等。如果程序使用 autoconf,则运行./configure --prefix /usr/local/stow/PROGRAM_NAME.运行后make install,运行stow

./configure --prefix /usr/local/stow/PROGRAM_NAME
make
sudo make install
cd /usr/local/stow
sudo stow PROGRAM_NAME

现在您将拥有如下符号链接:

/usr/local/bin/foo -> ../stow/PROGRAM_NAME/bin/foo
/usr/local/man/man1/foo.1 -> ../../stow/PROGRAM_NAME/man/man1/foo.1
/usr/local/lib/foo -> ../stow/PROGRAM_NAME/lib/foo

您可以通过列出目录的内容轻松跟踪已安装的程序stow,并且您始终知道文件属于哪个程序,因为它是指向该程序目录下某个位置的符号链接。通过运行stow -D PROGRAM_NAME然后删除程序目录来卸载程序。您可以通过运行使程序暂时不可用stow -D PROGRAM_NAME(运行stow PROGRAM_NAME以使其再次可用)。

如果您希望能够在同一程序的不同版本之间快速切换,请使用/usr/local/stow/PROGRAM_NAME-VERSION作为程序目录。要从版本 3 升级到版本 4,请安装版本 4,然后运行stow -D PROGRAM_NAME-3; stow PROGRAM_NAME-4​​.

旧版本的 Stow 并没有超出我在这个答案中描述的基础知识。较新的版本以及 XStow(最近没有维护)具有更高级的功能,例如忽略某些文件的能力,更好地处理 stow 目录之外的现有符号链接(例如man -> share/man),自动处理一些冲突(当两个程序提供相同的文件)等。

如果您没有或不想使用 root 访问权限,您可以在主目录下选择一个目录,例如~/software/stow.在这种情况下,添加~/software/bin到您的PATH.如果man没有自动找到手册页,请将其添加~/software/man到您的MANPATH.添加~/software/info到您的INFOPATH~/software/lib/python添加到您的PYTHONPATH、等等(如果适用)。

答案2

您可以使用检查安装创建一个包(RPM、Deb 或 Slackware 兼容包)这样,你就可以使用发行版包管理器来添加/删除应用程序(但不能更新)

您可以使用以下命令checkinstall来代替make install命令(对 Deb 使用 -D 参数;-R 是 RPM,-S 是 Slackware):

root@nowhere# ./configure
root@nowhere# make
root@nowhere# checkinstall -D

checkinstall 将默认构建并安装该软件包,或者您也可以让它仅构建该软件包而不进行安装。

checkinstall 在大多数发行版存储库中都可用。

答案3

在很大程度上,这是包、端口和其他类型的管理器背后防止此类事情发生的原因。

我想说手动删除是手动安装的唯一方法,除非其他人对此有更好的答案,我可能不知道。

答案4

  1. 您可以制作一个空的 RPM 作为提醒。
  2. 您可以考虑将软件正确打包到 RPM 中。
  3. tar您可以保留安装文件的副本/usr/src/non-rpms以提醒您(这就是我通常所做的)。

相关内容