为什么 apache2 升级会删除而不是重新安装 libapache2-mod-php5?

为什么 apache2 升级会删除而不是重新安装 libapache2-mod-php5?

我们反复看到,当 apache2 更新到达并安装时,它会导致 libapache2-mod-php5 包被删除,并且随后不会自动重新安装它。

随后,我们必须手动重新安装 libapache2-mod-php5,以恢复我们的 Web 服务器的功能。

请参阅以下 github gist,它是我们服务器的 dpkg.log 的连续部分,显示了 2011 年 11 月 14 日对 apache2 的更新:
https://gist.github.com/1368361
这包括

2011-11-14 11:22:18 删除 libapache2-mod-php5 5.3.2-1ubuntu4.10 5.3.2-1ubuntu4.10

这是一个已知问题吗?其他人也遇到了这个问题吗?我找不到任何关于它的启动板错误报告。

平台详细信息:

$ lsb_release-ds
Ubuntu 10.04.3 LTS
$ uname-srvm
Linux 2.6.38-12-virtual #51~lucid1-Ubuntu SMP 2011 年 9 月 29 日星期四 20:27:50 UTC x86_64
$ dpkg -l | awk'/ii。* apache / {打印$ 2“”$ 3}'
Apache2 2.2.14-5ubuntu8.7
apache2-mpm-prefork 2.2.14-5ubuntu8.7
apache2-utils 2.2.14-5ubuntu8.7
apache2.2-bin 2.2.14-5ubuntu8.7
apache2.2-通用 2.2.14-5ubuntu8.7
libapache2-mod-authnz-external 3.2.4-2+squeeze1build0.10.04.1
libapache2-mod-php5 5.3.2-1ubuntu4.10

谢谢

从高层次来看,更新过程如下:

包 包名 做
        操作:升级
        案例节点[:平台]
        当 'centos', 'redhat', 'scientific'
                选项'--disableplugin=fastestmirror'
        当 'ubuntu'
                选项‘-o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold"’
        结尾
结尾

但在较低水平上

        def install_package(名称,版本)
          run_command_with_systems_locale(
            :command => "apt-get -q -y#{expand_options(@new_resource.options)} 安装 #{name}=#{version}",
            :环境 => {
              "DEBIAN_FRONTEND" => "非交互式"
            }
        结尾

        def upgrade_package(名称,版本)
          install_package(名称,版本)
        结尾

因此 Chef 使用“安装”来执行“更新”。

这样就将问题转移到“apt-get safe-upgrade 如何记住重新安装 libapache-mod-php5?

触发此问题的软件包的确切顺序如下:

阿帕奇2
apache2-mpm-prefork
apache2-mpm-worker
apache2-实用程序
apache2.2-bin
apache2.2-通用

但是代码会尝试运行检查,以确保在尝试“升级”该列表中的软件包之前,这些软件包已经安装。

案例节点[:平台]
当 'debian', 'centos', 'fedora', 'redhat', 'scientific', 'ubuntu'
        # 第一种原始方法是在配方中定义更新
        #数据包稍后会用到
        %重量/
               阿帕奇2
               apache2-mpm-prefork
               apache2-mpm-worker
               apache2-实用程序
               apache2.2-bin
               apache2.2-通用
        /.each{ |包名称|
                Chef::Log.debug("#{package_name} 是否在可更改的本地包中?")
                下一步除非节点[:packages][:changes].keys.include?(package_name)

                Chef::Log.debug("#{package_name} 可以升级吗?")
                下一步,除非节点[:packages][:changes][package_name][:action] == 'upgrade'

                包 包名 做
                        操作:升级
                        案例节点[:平台]
                        当 'centos', 'redhat', 'scientific'
                                选项'--disableplugin=fastestmirror'
                        当 'ubuntu'
                                选项‘-o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold"’
                        结尾
                结尾

                标签('升级')
        }

        # 升级完所有内容后,运行 yum cache updater
        如果标记?('升级')
                # 删除旧的孤立的依赖项和内核映像以及内核头等。
                # 删除缓存的 deb 文件。
                案例节点[:平台]
                当 'ubuntu'
                        执行‘apt-get -y autoremove’
                        执行‘apt-get clean’
                # 重新检查即将推出的更新。
                当 'centos', 'fedora', 'redhat', 'scientific'
                        节点[:软件包][:上次我们查看了_yum] = 0
                结尾
                untag('已升级')
        结尾
结尾

但很明显它失败了,因为 dpkg.log 有

2011-11-14 11:22:25 安装 apache2-mpm-worker 2.2.14-5ubuntu8.7

在目前没有 apache2-mpm-worker 的系统上。我将不得不与作者讨论这个问题,再次感谢。

答案1

您可能正在运行 apache2 的 mpm-worker 版本,它不像 libapache2-mod-php5。

dpkg -l | grep apache2-mpm

您可能希望使用 apache2-mpm-prefork,它与 mod_php5 配合使用效果更好

相关内容