我正在尝试寻找一种简单的方法来管理从源代码编译的软件包,以便在进行升级时,尝试卸载/安装新软件包时不会感到一团糟。
我找到了一个名为CheckInstall的实用程序,但是它似乎已经很老了,我想知道这在我开始使用之前是否是可靠的解决方案?
http://www.asic-linux.com.mx/~izto/checkinstall/
还可能只是从源头上知道您用于处理这些安装的任何其他方法/实用程序?
最佳答案
无论您做什么,都要确保最终使用发行版的软件包管理系统(例如,Fedora/Mandriva/RH/SuSE的rpm,Debian/Ubuntu的dpkg等)。否则,您的软件包管理器将不了解您手工安装的软件包,并且充其量只能满足您的要求,或者最糟糕的情况是您会遇到麻烦。
如果您没有包裹经理,那就请一个包裹经理坚持下去!
我建议您学习制作自己的包装。您可以先查看发行版的源软件包。实际上,如果您要做的只是升级到MyPackage的1.2.3版本,则通常可以通过简单的版本更改来适应发行版1.2.2的源程序包(除非有补丁程序,但这是另一回事了……) 。
除非您想要具有分发质量的软件包(例如拆分库/应用程序/调试软件包,多体系结构支持等),否则通常可以轻松地将典型的configure & make & make install
方案转换为适当的源软件包。如果您可以说服您的软件包将其安装到目录而不是/中,则通常可以完成。
至于checkinstall,我过去曾使用过它,它可用于几个简单的程序包,但我不喜欢这样的事实,即它实际上允许程序包在创建rpm/deb程序包之前自行安装到我的系统上。它只是跟踪安装了哪些文件,以便对其进行打包,而这并不能防止不受欢迎的更改。哦,它需要根除草剂才能起作用,这是我的另一个主要症结。而且不要讨论静态链接的核心实用程序会发生什么...
大多数此类工具似乎都可以这样工作,因此我只是学会了构建自己的软件包“正确的方法(TM)”,并让checkinstall和 friend 在其他地方乱七八糟。但是,如果您仍然感兴趣,这里有类似程序的列表:
http://www.dwheeler.com/essays/automating-destdir.html
PS:BTW checkinstall在2009年底进行了更新,这可能意味着它仍然足够最新。
编辑:
我认为,如果在存储库中不容易获得包的最新版本,则执行升级的最简单方法是更改发行版中最新版本的源包。例如。对于Centos,最新版本的源代码包在这里:
http://mirror.centos.org/centos/5.5/os/SRPMS/
http://mirror.centos.org/centos/5.5/updates/SRPMS/
...
如果您想升级例如php,您将获得最新的SRPM,例如php-5.1.6-27.el5.src.rpm。然后,您执行:
rpm -hiv php-5.1.6-27.el5.src.rpm
它将安装源程序包(仅源程序-它不编译任何内容)。然后转到rpm构建目录(在我的mandriva系统上,其目录为/usr/src/rpm),将最新的php源tarball复制到SOURCES子目录,并确保其压缩方式与刚刚安装的tarball相同那里。之后,您可以在SPECS目录中编辑php.spec文件,以更改软件包版本,并使用以下方式构建二进制软件包:
rpmbuild -ba php.spec
在许多情况下,这就是新软件包所需要的。在其他情况下,事情可能会变得更加复杂-如果有补丁程序或软件包中有一些重大更改,则您可能必须做更多的事情。
我建议您阅读rpm和rpmbuild命令(它们的手册页相当不错,内容广泛),并查阅有关编写规格文件的文档。即使您决定依赖官方的backport存储库,了解如何构建自己的软件包也很有用。也可以看看:
http://www.rpm.org/wiki/Docs
编辑2:
如果您已经从源代码安装了软件包,那么除了保持系统的完整性之外,使用rpm实际上可以长期简化构建过程。原因是您不必自己记住每个软件包的怪癖(“哦,对了,现在我记得,foo需要我将-lbar添加到其CFLAGS中”),因为构建过程将是在.spec文件中,您可以将其想象为某种结构化的构建脚本。
就升级而言,如果您已经拥有该程序包先前版本的.spec文件,则可能会遇到两个主要问题,但是无论是否使用rpm来构建程序包,这两个问题都存在:
除了这两个问题,升级通常归结为只是更改spec文件中的版本号并运行rpmbuild-甚至比从tarball安装更容易。
我建议您看看一些简单的软件的教程或源包,例如:
http://mirror.centos.org/centos/5.5/os/SRPMS/ipv6calc-0.61-1.src.rpm
http://mirror.centos.org/centos/5.5/os/SRPMS/libevent-1.4.13-1.src.rpm
如果您有从tarball构建软件包的经验,那么使用rpm来构建软件并不是一个真正的飞跃。但是,它永远不会像安装预制二进制软件包那样简单。
关于linux - 管理从源代码编译的软件包的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4287471/