无法在Vagrant VM中安装APC和XDebug

时间:2013-01-08 20:44:02

标签: php apc vagrant pecl

我遵循了几个关于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 FYI上尝试了上述方法

EDIT2 : 我使用knife使用Precise32和一个全新的Vagrantfile和配方设置了一个新的框,我得到了同样的错误。我也尝试使用PECL安装XDebug,但是我得到了一个非常不正确的错误。

我已经使用我的配置和错误消息创建了一个Gist,希望人们可以看到错误。据我所知,php_pear配方的php提供商已被破坏。

您可以在此处查看要点: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命令轻而易举。但是,使用PECL / PEAR安装软件包似乎在使用Chef的Debian中存在问题。所以问题仍然存在,找到了一种解决方法(这实际上是Debian的常规操作方式,尽管Github上的文档另有说明)

3 个答案:

答案 0 :(得分:1)

使用资本似乎是通过php_pear

安装它
php_pear 'APC' do
  action :install
end

编辑: 最后我不得不通过包安装它,因为使用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 -%>

答案 1 :(得分:1)

我和流浪汉和厨师在centos 5上遇到过类似的问题。我把一些调试代码放到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

答案 2 :(得分:0)

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

os:Ubuntu 12.04.1 LTS

chef-solo:10.16.6

成功:php_pear“APC”做

问题:php_pear“apc”做

似乎php配方不会忽略这种情况。

但我有另一个问题,配置选项是incorret。 “-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