我们反复看到,当 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 配合使用效果更好