Linux,从源代码重新编译

Linux,从源代码重新编译

我对 Linux 还比较陌生,但我一直在尝试使用 Ubuntu VM 来适应它。我设置了 SSH、Apache、PHP、MySQL、Ruby、Rails、Passenger 和 Git 来处理我的 Web 开发项目。其中一些是我从源代码构建的,PHP 和 Git 是我脑海中浮现的。

我想知道从源代码重新编译/重新安装某些东西的一般最佳做法是什么?例如,如果我想将 Git 更新到较新的版本或启用 PHP 扩展。可以重新编译它然后将其安装在当前安装上吗?或者这是不行的,我应该先卸载然后再重新安装?

如果是后者,那么您究竟如何卸载从源代码安装的东西?

我尝试搜索了一下,但这似乎是一个很难搜索的问题,而且从源代码构建时我找不到任何东西,只有在使用包管理器时才找到。

谢谢你的帮助。

编辑:感谢大家到目前为止提供的所有意见。你们似乎都回答了我关于卸载的问题,但我正在寻找答案的主要问题是:

在重新编译并再次安装之前,是否应该卸载从源代码构建的某些内容。或者,每当我需要更改配置标志或更新到较新版本时,是否可以覆盖当前安装?

答案1

在虚拟机中编译软件是“适应”操作系统的好方法。毫无疑问,所有关于自己动手的可怕警告都是正确的,用于生产机器但从长远来看,如果你现在犯错,你会过得更好。

如果有任何理由需要卸载以前的版本,则应在 README 或 INSTALL 文件中注明。如果没有理由,只需运行“make install”即可,这将覆盖旧版本。在“make install”之前对您的 VM 进行快照。如果出现问题,请尝试修复它。如果无法修复,请恢复到快照并重试。

如果稍后您想完全撤消所做的操作,Makefile 包含卸载所需的所有信息。您可以编写自己的“卸载”目标,或者只需“rm”即可手动执行。请记住其他与此同时,事情可能已经变得依赖于软件,因此快照策略对于卸载也有意义。

尽管包管理器有很多优点,但它们也存在一些缺点。有些包有巨大的依赖项来添加您不感兴趣的功能。有时他们没有您想要的软件版本。有时他们根本没有该软件。

如果您在一台重要的机器上遇到这些问题,并且您完全依赖包管理器,那么您的错误将代价高昂。但现在,您可以恢复到上次已知的良好状态并继续前进,变得更明智一些。

答案2

这可能不是你要找的答案,但却是 ubuntu 上的最佳实践不是从源代码安装东西。我想你应该看看 apt 或它的衍生产品(aptitude等人)。例如,Git 位于一个名为的包中git-core

如果您最终从源代码安装了一些东西,那么您可以相当肯定它们最终会出现在/usr/local,这将允许您在决定升级时手动删除旧的部分。

一些 Makefile 还具有卸载/卸载目标,但我不确定这在多大比例下是正确的。

答案3

没有通用的方法来卸载源代码编译的东西;这是众多原因之一不要从源代码安装任何东西.make uninstall有时会起作用,通过。

您可以在不安装“原始”源的情况下对软件包进行一些更改:请查看 Debian 管理中心文章。

答案4

这是你的机器,继续前进吧!如果它坏了,你可以保留零件。

以下是一些可以减少痛苦的额外建议:

  1. 安装在/usr/local(通常是默认安装路径,因此您不需要做太多操作)或您的帐户下,并设置PATH为在系统目录之前在那里搜索仅适用于您的帐户。任何造成的破损都可以通过这种方式得到控制。这是最安全的做法。
  2. 了解如何构建自己的软件包(具体细节因发行版的包装而异,请查找教程和建议/标准,了解如何设置以及编写良好的软件包是什么样子)。获取要安装的程序的源包作为起点,编辑以适应需要,用您渴望的任何较新版本替换源,检查是否有任何发行版补丁适用/需要,看看上游是否建议其他补丁。安装结果,只要它保持比发行版版本“更新”,正常更新就不会影响它。如果出现问题,您始终可以使用常规工具安装发行版版本。
  3. 了解如何使用本地编织包设置您自己的存储库,这样您就可以更新其中的任何一个,并且正常更新将安装它们。

相关内容