我在 Ubuntu 上运行了两个版本的 apache,如何删除其中一个?

我在 Ubuntu 上运行了两个版本的 apache,如何删除其中一个?

我通过以下步骤在 ubuntu 上安装了 apache:

sudo -i
cd /usr/local/src
wget http://apache.mirrors.tds.net/httpd/httpd-2.2.11.tar.gz
tar -xvf httpd-2.2.11.tar.gz
cd httpd-2.11.9
./configure --enable-layout=Debian --enable-deflate --enable-proxy --enable-proxy-html --enable-proxy-http --enable-proxy-balancer --enable-rewrite --enable-cache --enable-mem-cache --enable-ssl --enable-headers --enable-mods-shared=most
make
make install
exit

然后我通过执行以下操作安装了 php5:

sudo apt-get install php5

现在我有两个版本的apache:

tony@bootsy/etc/apache2 $ apachectl -v       
Server version: Apache/2.2.11 (Unix)
Server built:   May 26 2009 21:57:13
  tony@bootsy/etc/apache2 $ apache2ctl -v
Server version: Apache/2.2.8 (Ubuntu)
Server built:   Mar 10 2009 18:09:51

我试过 apt-get remove、apt-get autoremove 等。它们都留下了 apache 的痕迹。我显然只想运行一个版本的 apache...但我也不确定哪个...最好运行 Apache/2.2.8 (Ubuntu)?无论如何,我该如何删除另一个版本?

没有 apache 的情况下如何安装 php5 并不明显......我认为这很疯狂。

谢谢!

答案1

首先要注意的是,您不仅仅安装了两个 apache 实例,实际上还使用了两种不同的安装机制 - 一种是通过编译,另一种是通过使用常驻 dpkg(通过 apt 调用)机制。

这两种方法都没有比另一种更有效(或更无效)的,并且不能明确地说您只能使用一种方法;但是您已经确定了使用两种不同机制的第一个问题 - 您的包管理器(dpkg)对您的手动编译的安装一无所知。

您最终从 apt-get install php5 获得某个版本的 apache 的原因是 php5 包中内置了许多依赖项。您可以使用 dpkg-query 在打包数据库中查询依赖项:

# dpkg-query -W -f='${Package} ${Version}\t${Maintainer}\n${Depends}\n' php5

php5 5.2.4-2ubuntu5.6   Ubuntu Core Developers <[email protected]>
libapache2-mod-php5 (>= 5.2.4-2ubuntu5.6) | php5-cgi (>= 5.2.4-2ubuntu5.6), 
  php5-common (>= 5.2.4-2ubuntu5.6)

您将看到一个链接libapache2-mod-php5,它又引用了已安装的 apache。

至于移除——apt-get 删除 apache2将删除包管理器安装的 apache2 版本,但它不会触及(您也不希望它触及)已手动添加的文件 - 这些文件需要您仔细检查和分析系统。

如果你很幸运,当你输入 进行安装

还有 使删除

对于 apache2/httpd 来说,你没有那么奢侈,但这是一个相当干净的安装,所以你应该能够识别你安装的目录,以及

rm -rf /usr/local/apache2(或者你安装 apache 的任何地方)

应该会删除系统中的大多数文件。

如果您没有全新安装 - 您需要搜索系统上安装的文件。

确定手动安装后添加到系统的内容的一种典型方法是运行以下命令(适用于所有内容,而不仅仅是自动配置安装):

查找 / -cmin -2 2>/dev/null | egrep -v'^(/proc|/sys)'

然后,您可以使用该命令的输出来为您提供应考虑删除的文件列表。

我知道这不是一份关于如何删除系统中已存在内容的简单指南,但您所遇到的挑战正是人们如此努力使用包管理器来管理系统的原因(除了干净地添加/删除文件之外,它还提供了许多其他有用的好处,例如二进制验证以查看是否有任何内容被修改)

答案2

当执行“make install”时,您可能在应由发行版管理的目录中安装了从源代码构建的 apache。

如果您很幸运,apache 有一个“make uninstall”,它应该会删除它安装的所有文件。否则,请再次执行 make install 并记录输出以检查它安装了哪些文件/目录,然后删除它们。完成后,重新安装 Ubuntu 提供的 apache(apt-get install --reinstall),因为它的一些文件可能已被删除。

下次,请确保将其安装在不受发行版管理的地方:

./configure --prefix=/usr/local

或者更好的是“./configure --prefix=/opt/apache-2.2.11”并在需要的地方创建符号链接。

没有 apache 的情况下如何安装 php5 并不明显......我认为这很疯狂。

Ubuntu 提供的 PHP 已针对 Ubuntu 提供的 apache 进行了编译和测试。如果您自行安装其他 apache,您还必须自行安装 php。

如果您想使用 Ubuntu 提供的 PHP 和使用略有不同的选项编译的 apache,请考虑从源代码构建 Ubuntu 包(apt-get source 是一个起点)。

答案3

warpr 解释了为什么你安装了两个 Apache。通常,当你使用基于软件包的发行版时,你应该在从源代码安装任何东西之前先查找软件包版本。

我不会说您不能将打包的 php5 与已编译的 apache 一起使用,但除非您有充分的理由,否则请使用该包。它将节省您的时间和精力。

至于为什么apache会自动安装:

从 ”能力展示 php5“:

This package is a metapackage that, when installed, guarantees that you have at
 least one of the three server-side versions of the PHP5 interpreter installed.

Depends: libapache2-mod-php5 (>= 5.2.6.dfsg.1-3ubuntu4.1) |
         libapache2-mod-php5filter (>= 5.2.6.dfsg.1-3ubuntu4.1) | php5-cgi (>=
         5.2.6.dfsg.1-3ubuntu4.1), php5-common (>= 5.2.6.dfsg.1-3ubuntu4.1)

所以发生的情况是,Ubuntu 安装了最常见的 PHP 解释器 libapache2-mod-php5,进而拉入 apache,等等。

如果您想安装 php 而不安装 apache,您可以安装 php5-cgi,然后可以将其与其他 http 服务器一起使用。一种方法是:

sudo apt-get 安装 php5-cgi php5

它将使用 php5-cgi 作为 php5 包的依赖。

答案4

我看不出有什么好的理由让你编译自己的 Apache。不这样做的一个很好的理由是,这会使维护变得更加困难。当你必须编译 5 个不同的软件来修补时,安全修补可不是开玩笑的事。而且这是假设你真的知道安全漏洞。这就是为什么我们在这种情况下使用软件包和 Ubuntu 提供的 Apache。

因此,请记住您可能不应该这样做,但有一个技巧没有人提到过。如果您真的想将自己编译的 apache 与其他 Ubuntu 软件包一起使用,请使用“equivs”软件包。摘自描述:

另一个用途是绕过依赖性检查。如果系统上未安装软件包 P,则通常无法安装依赖于 P 的软件包。但是,如果已知安装了与 P 等效的功能,则可以使用此工具诱使 Debian 软件包管理系统相信软件包 P 确实已安装。注意:这应该被视为一种粗暴的破解方法,用于解决尴尬的情况,而不是正常的解决方案。如果您使用 equivs 来解决其他 Debian 软件包中的错误,您还应该针对这些软件包提交错误报告。

相关内容