有时,我们可能因为各种原因不得不从源代码安装某些东西。虽然在给定适当依赖项的情况下安装软件是相当标准的,但我不清楚如何管理此类安装以方便将来使用。
进一步来说:
我们可以做些什么来确保轻松干净地卸载(包括之前安装的依赖项以及仅为从源代码安装的软件安装的依赖项)?
我们可以做些什么来确保轻松、干净地升级可能再次从源代码安装的同一软件?
如果存在默认包(使用 apt-get 安装)以及该包的(较新)版本(从源代码安装),我们该怎么做才能最大限度地减少潜在的冲突?
答案1
使用checkinstall make install
将创建一个临时包并安装它。这意味着它被记录在包管理器中并且可以被卸载。
答案2
最好的办法是自己制作新版本的 Debian 软件包。dpkg
这些apt
工具可以完成您提到的所有三件事,并且旨在实现此目的。使用它们,而不是重新发明轮子。有很多关于打包的指南。如果软件已经存在于存储库中,您可能可以获得源包(apt-get src
),您可以使用它来研究和启动您自己的包。
这个答案https://askubuntu.com/a/485230/158442可能有助于作为一般指导方针。
虽然checkinstall
这是一个快速而简单的解决方案,但从长远来看,您应该使用适当的包装。
答案3
首先,很大程度上取决于你如何管理源代码。我创建一个目录,~/sources
并将每个程序放在其子目录中,而其他人会为每个程序创建一个新目录。
同样,有些人像我一样,为每个新版本创建一个新的子目录,并且只有当确保新版本中没有会阻止我的工作的重大错误时才会删除旧版本。
没有单一的方法可以做到这一点,但无论你选择哪种方式,选择一种对你来说最容易管理的方式。
彻底卸载
我建议创建一个
rem_dep.sh
如下所示的脚本。#! /bin/bash sudo apt-get remove dep1 dep2 ... depn
依赖关系在哪里
dep1, dep2, depn
。
干净且轻松升级
如果您从自动版本控制系统(如
git
或)获取源代码bazaar
,或者如果链接是可预测的,您可以创建一个 shell 脚本,它将#1 make a backup of earlier version #2 get new source #3 configure, build/make the source #5 if make went correctly, remove earlier version. #6 make install new version, update dependencies if required.
在其他情况下,您也可以在一定程度上通过手动工作来创建此类脚本。
冲突管理
--prefix
最好的方法是在安装软件及其依赖项时使用该选项。- 另一件重要的事情是保持系统更新,以尽量减少冲突。
笔记:如果您发现自己编译的软件比应该编译的多(
max_limit
为自己设定一个,比如 5 或 10 或 100),那么最好离开 Ubuntu 并转到 Arch Linux。
答案4
构建依赖项:
据我所知,它们应该手动记录。您可以创建一个类似 README 的文件来保存手动安装的依赖项列表。
如果该软件已经在 Ubuntu 或 PPA 存储库中构建了二进制文件。安装时跟踪依赖关系应该更容易:
sudo apt-get build-dep target_package
干净卸载:
保持配置已安装的源文件夹。如果您将所有源文件与已安装的依赖项文件一起收集到特定文件夹中,效果会更好。
清洁升级和安装文件隔离:
在特定位置安装它们--prefix
(最好--prefix=/opt/software_name-version/
)。
这将解决许多问题:与存储库中的版本并发;干净升级;如果源被删除,更容易进行脏卸载。
更复杂或最好的方法,正如@muru 回答的那样,构建一个 Debian 包(对于 Ubuntu/PPA 存储库中可用的包)