我可以直接更新源代码安装的软件吗?
虽然自从我开始使用Ubuntu近一年后,我还没有尝试从源代码安装软件。 我实际上并没有发现需要这样做。 但是现在我正在开发一个处于存储库中候选发布阶段的软件,但最新的稳定版本的源代码可以在软件主页上找到。
我了解到,如果软件具有很多依赖性,那么从源代码安装可能会很困难。 但是,如果我解决这个问题,我会对最新版本感到满意。 但我一直想知道这样的软件是否可以自动更新,或者我是否必须运行一些脚本来更新软件包。 或者更糟糕的是我是否必须从头开始重新安装每个更新?
此外,我很想知道从上面以外的源安装是否有任何特定的优势。
最好注意,软件的依赖性很少会改变。 如果您已经成功编译了一次软件,那么任何后续版本都应该易于编译 – 所有依赖项都应该已经满足。
如果您是从源代码编译的,则没有.deb
或类似的软件包可用于更新, 除非您等待分发将该软件包含到其存储库中,或者等到开发人员的PPA更新。
简单地说,有人必须首先编译它以使其成为deb。 编译旧版本不会让您自动更新,您仍然需要完成整个“download-configure-compile-install”过程。
但是 ,如果要在多台计算机上安装相同的版本,将编译后的版本打包为.deb
(或类似版本)并将其分发给这些计算机是有意义的。 如果完成,依赖关系将自动拉入。
至于从源代码安装的优势,我能想到的只有两个:
- 您可以访问最新版本的代码,并且可以选择稳定版本或尖端版本(通常称为夜间版本,最新版本等)
- Ubuntu / other-distribution可能不希望将软件包含在他们的存储库中。 在这种情况下,您会遇到开发人员或社区提供的源代码或软件包。 也就是说,你别无选择,只能使用这些来源。
根据这篇文章,您可以在编译源代码后生成.deb包。 然后,您可以从.deb包安装而不是“make install”。 这使得更新更容易(如果它在某个存储库中),因为包将由跟踪更新的包管理器管理。
如果从源代码构建包“some-package”并且存在依赖关系,您可以尝试“apt-get build-dep some-package”来自动安装编译包所需的所有依赖项,而无需手动跟踪每个依赖自己。 这样,依赖关系也由包管理器管理,并且也应自动更新。
git
用户的另一个替代方案值得一提:
你也可以在早期的git clone
之后使用git pull
来更新你的源代码,然后根据需要重新编译你的程序。 (您也可以使用git
进一步跟踪文件:请参阅此处的答案 。)
如果您最初使用git clone
来获取源代码,例如,
git clone git://github.com/person/programname.git
并且在编译和安装后保留了该文件夹,你可以cd到该文件夹并运行git pull
来获取最新的提交。 然后删除您可能已创建的任何构建目录和/或运行make clean
(如果适用),然后再次编译软件并使用checkinstall
安装它, checkinstall
也会为您创建一个软件包(虽然不适合分发)。
但是,如果您正在帮助开发一个程序并需要在每天每次git pull
之后重新编译,那么您可能会安装到home文件夹,因为每次都不需要安装到/usr/local/
hierarchy。
作为一个例子,如果我正在测试并经常重新编译程序,我会在使用git pull
和run(对于这个特定程序)获取最新提交后cd到我的构建文件夹:
cmake .. -DCMAKE_BUILD_TYPE=Debug -DLAYOUT=home -DPREFIX=home
然后编译调试版本进行测试。
但是,如果您只是想每个月左右编译一个新版本的git克隆程序(并且没有测试或调试它),通常会使用checkinstall
安装到/usr/local/
hierarchy。
要从源代码管理您的安装,请在此处查看我的答案: 如何更新从源代码编译的软件包?