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

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

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

请参阅以下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 Thu Sep 29 20:27:50 UTC 2011 x86_64
 $ dpkg -l |  awk'/ii.*apache/ {print $ 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-common 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

谢谢

在高级别,更新过程如下所示:

 package package_name做
        行动:升级
        案例节点[:platform]
        什么时候'centos','redhat','科学'
                选项'--disableplugin = fastermirror'
        什么时候'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)} install#{name} =#{version}”,
             :environment => {
               “DEBIAN_FRONTEND”=>“非交互式”
             }
           )
        结束

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

所以Chef正在使用“install”来进行“更新”。

这种问题转移到“apt-get safe-upgrade”如何重新安装libapache-mod-php5?

触发这个的包的确切顺序是:

的Apache2
 Apache2的-MPM-prefork的
 Apache2的-MPM工人
 Apache2的-utils的
 APACHE2.2斌
 APACHE2.2常见

但是代码试图运行检查以确保在尝试“升级”它们之前已经安装了该列表中的包。

案例节点[:platform]
什么时候'debian','centos','fedora','redhat','scientific','ubuntu'
         #first primitive方法是定义配方中的更新
         #data bags将在以后使用
         %W /
               的Apache2
                Apache2的-MPM-prefork的
                Apache2的-MPM工人
                Apache2的-utils的
                APACHE2.2斌
                APACHE2.2常见
         /.each {| package_name |
                 Chef :: Log.debug(在可用于更改的本地软件包中是“#{package_name}吗?”)
                 next除非node [:packages] [:changes] .keys.include?(package_name)

                 Chef :: Log.debug(“#{package_name}可用于升级?”)
                 next除非node [:packages] [:changes] [package_name] [:action] =='upgrade'

                 package package_name做
                        行动:升级
                        案例节点[:platform]
                        什么时候'centos','redhat','科学'
                                选项'--disableplugin = fastermirror'
                        什么时候'ubuntu'
                                选项'-o Dpkg :: Options :: =“ -  force-confdef”-o Dpkg :: Options :: =“ -  force-confold”'
                        结束
                结束

                标签(“升级”)
         }

         #升级后的所有内容,运行yum cache updater
        如果标记?('已升级')
                 #删除旧的孤立依赖项和内核映像以及内核头文件等。
                 #删除缓存的deb文件。
                案例节点[:platform]
                什么时候'ubuntu'
                        执行'apt-get -y autoremove'
                        执行'apt-get clean'
                 #重新检查即将推出的更新。
                什么时候'centos','fedora','redhat','科学'
                         node [:packages] [:last_time_we_looked_at_yum] = 0
                结束
                取消标记(“升级”)
        结束
结束

但很明显,自dpkg.log以来它失败了

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

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

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

dpkg -l | grep apache2-mpm 

您可能希望使用apache2-mpm-prefork,这对mod_php5更有效