(迁移自stackoverflow.com)
最近,我继承了一组运行 Red Hat Enterprise Linux 5.4 的机器。它们已从 rpm 中安装了 Apache Server v2.2.3。我需要将 Apache 升级到 v2.2.19。出于各种原因,我从源代码构建 Apache。安装新版本的 Apache 没有问题,但我有两个 Apache 实例,v2.2.3 位于 /usr/sbin/httpd,v2.2.19 位于 /usr/local/sbin/httpd。在大多数情况下,我只需使用 rpm -e 删除现有版本的 Apache,但还有大量其他 rpm 依赖 Apache。我似乎找不到 REL 5.4 的 Apache 2.2.19 的 rpm,所以我无法执行 rpm --upgrade。如果我使用现有 Apache 实例 (/usr/sbin/httpd) 的前缀构建 Apache 2.2.19,则安装会失败,因为 /usr/sbin/httpd 已经存在。我尝试使用 yum 来升级软件包,但服务器位于防火墙后面,无法看到外部世界。
此时我倾向于创建自己的 rpm,但这似乎是一项看似很小的任务,需要做很多额外的工作。似乎有些非常基本的东西我没搞懂。
答案1
您确实非常想创建一个 RPM。您不必从头开始;有许多现有的软件包可供您使用(或至少可以用作基础)——包括现有的 RPM 软件包。
在包管理环境中从源代码安装只会自找麻烦,对于将来管理服务器的任何人来说都是如此,甚至只是对你来说,三年后你就会忘记你造成了什么样的恐怖。
答案2
我倾向于使用发行版提供的软件包,但如果出于任何原因我需要从源代码编译 Apache 之类的东西,我会确保
- 将其安装到单独的路径(例如
/usr/local/apache2
或/opt/apache2
- 为它们创建我自己的初始化脚本(例如
/etc/init.d/apache2_custom
)——搞乱发行版提供的脚本迟早会给你带来麻烦 - 更新
/etc/motd
和其他文档,明确说明该服务器使用自编译包 FOO
答案3
将旧的httpd
二进制文件移开然后安装。
mv /usr/sbin/httpd /usr/sbin/httpd.old -v
,设置您的--prefix=/usr/sbin
Apache ./configure
,然后安装。首先,请确保备份您的 Apache 配置文件。(tar czpf /etc/httpd-backup-$(date +%s).tar.gz /etc/httpd/
)
答案4
虽然它可能会导致您陷入依赖性删除的困境,但您应该检查哪些包需要安装 httpd。
# rpm -q --whatrequires httpd
如果您可以删除软件包,那么您可能已经有了答案,如果您由于依赖性而无法删除 apache,并且您必须运行较新的版本,那么我建议关闭 httpd 的 rpm 版本并阻止它在启动时启动。
# service httpd stop
# chkconfig httpd off
我建议安装自定义编译版本并从另一个配置/二进制文件目录中运行它。如果您采用这种方式,复制默认初始化脚本、修改路径并将其添加为不同的名称也是明智之举。
# chkconfig --add httpd-custom
# chkconfig httpd-custom on
请记住,如果您使用 Redhat 支持,他们将不会帮助您使用自定义编译版本的 httpd,并且如果您弄乱了原始二进制文件,他们实际上不会为您提供支持。