无法在流浪虚拟机中安装APC和XDebug


Unable to install APC and XDebug in Vagrant VM

我遵循了一些关于Vagrant和Chef Solo的教程和指南,但是当我想使用Chef Solo配置我的Precise64 VM时,我遇到了问题。在安装PHP5.3和PECL和PEAR之后,该配方需要安装APC,但是它无法找到包,尽管APC在PECL上可用。这是我得到的信息。

RuntimeError
------------
Package apc not found in either PEAR or PECL.
Cookbook Trace:
---------------
/tmp/vagrant-chef-1/chef-solo-1/cookbooks/php/providers/pear.rb:259:in `pecl?'
/tmp/vagrant-chef-1/chef-solo-1/cookbooks/php/providers/pear.rb:107:in     `load_current_resource'
Resource Declaration:
---------------------
# In /tmp/vagrant-chef-1/chef-solo-1/cookbooks/web-app/recipes/webserver.rb
 17: package "libpcre3-dev"
 18: php_pear "apc" do
 19:   action :install
 20: end
 21: 

首先,我认为我的PECL和PEAR不是最新的,但是它们事先使用以下方法更新:

# update the main channels
php_pear_channel 'pear.php.net' do
  action :update
end
php_pear_channel 'pecl.php.net' do
  action :update
end

编辑:在vagrant ssh进入我的盒子并运行sudo pecl install apc之后,它似乎解决了这个包。这个食谱出了问题。我已经在Debian Squeeze 64和Ubuntu Server Precise 64上尝试了上述方法,仅供参考

EDIT2 :我已经设置了一个新的盒子,使用Precise32和一个全新的Vagrantfile和配方使用knife,我得到同样的错误。我也尝试使用PECL安装XDebug,但我得到一个非常无意义的错误。

我已经用我的配置和我得到的错误信息创建了一个Gist,希望人们可以看到哪里出了问题。据我所见,php配方的php_pear提供程序已损坏。

你可以在这里看到要点:https://gist.github.com/4492004

简直要把我逼疯了…最简单的事情不会与Chef-solo工作,当遵循最基本的在线教程时,我得到了各种各样的错误。激怒。

EDIT3 当访问https://github.com/opscode-cookbooks/php时,您将看到配方php::module_apc已被弃用,而PEAR/PECL或包安装更好。我想知道他们是如何实现php::module_apc配方的,并发现了这个(https://github.com/opscode-cookbooks/php/blob/master/recipes/module_apc.rb):

case node['platform_family']
when "rhel", "fedora"
   %w{ httpd-devel pcre pcre-devel }.each do |pkg|
       package pkg do
           action :install
       end
   end
   php_pear "apc" do
       action :install
       directives(:shm_size => "128M", :enable_cli => 0)
   end
when "debian"
   package "php-apc" do
       action :install
   end
end

所以很明显他们现在在使用Debian/Ubuntu时使用php_pear命令是错误的,但是没有任何文档记录。看到PEAR/PECL是安装PHP附加组件的最标准方式,我专注于让它工作,但是看到这一点,我想我必须参考使用package命令。我会问Opscode的人为什么他们为Debian例外。

最后一章伟大的成功!使用package命令非常简单。然而,在使用Chef的Debian中,使用PECL/PEAR安装包似乎有问题。所以问题仍然存在,找到了一个解决方案(这实际上是Debian的正常操作方式,尽管Github上的文档另有建议)

使用大写似乎通过php_pear安装

php_pear 'APC' do
  action :install
end

编辑:最后,我不得不通过package安装它,因为使用php_pear会创建带有大写指令的ini文件,并且无法正确读取。如APC.shm_size是无效的。

我最终做了这样的事情:

package "php-apc"
template "#{node['php']['ext_conf_dir']}/apc.ini" do
  source "apc.ini.erb"
  owner "root"
  group "root"
  mode "0644"
  variables(:name => "apc", :extensions => ["apc.so"], :directives => {"shm_size" => "256"})
  action action
end

我创建了自己的apc.ini.erb模板文件:

; configuration for php <%= @name %> module
<% @extensions.each do |filepath, zend| -%>
extension=<%= filepath %>
<% end -%>
<% @directives.each do |k,v| -%>
<%= "#{@name}.#{k}='"#{v}'"" %>
<% end -%>

我在centos 5的vagrant和chef上遇到了类似的问题。我将一些调试代码放入php cookbook中,看到它正在尝试运行此命令pecl -d preferred_state=stable search -c pecl.php.net APC'

我收到的输出是

Retrieving data...0%.Invalid xml downloaded from "http://pecl.php.net/rest/p/dom_varimport/info.xml": XML Error: 'Invalid character' on line '13'

原来我运行的是一个非常旧的php pear版本。我通过运行以下命令

修复了它
pear upgrade -f PEAR

在我的环境中,我通过以下修改解决了这个问题。你试过吗?

os: Ubuntu 12.04.1 LTS

chef-solo: 10.16.6

success: php_pear "APC" do

问题:php_pear "apc" do

看来php的配方是不能忽略的。

但我有另一个问题,配置选项不正确。"-e"被分配给第一个选项。(它只发生在ubuntu中。在centos6中没有。

chef-solo(log_level :debug)
running: /tmp/pear/temp/APC/configure --enable-apc-debug=-e --enable-apc-filehits=no --enable-apc-spinlocks=no --enable-apc-memprotect=no --enable-apc-pthreadmutex=no --enable-apc-pthreadrwlocks=yes
pecl install apc
running: /tmp/pear/temp/APC/configure --enable-apc-debug=no --enable-apc-filehits=no --enable-apc-spinlocks=no --enable-apc-memprotect=no --enable-apc-pthreadmutex=no --enable-apc-pthreadrwlocks=yes