【问题标题】:Can't get chef to provision PHP 5.4.x on an Ubuntu virtual box无法让厨师在 Ubuntu 虚拟机上配置 PHP 5.4.x
【发布时间】:2013-07-18 18:11:19
【问题描述】:

自从我的last question 关于使用 chef 为 vagrant 控制的 Ubuntu 基础盒配置 PHP 5.4 以来,我觉得我向前迈了一步,又向后退了两步。我已经放弃尝试使用 apt 来获取正确版本的 PHP,并决定尝试使用源代码构建。

我的食谱

# Name of the role should match the name of the file
name "webserver"

default_attributes(
    "build_essential" => {
        "compiletime" => true
    }
)

override_attributes(
    "mysql" => {
        "server_root_password" => 'reverse',
        "server_repl_password" => 'reverse',
        "server_debian_password" => 'reverse'
    },
    "php" => {
        "install_method" => "source",
        "php54" => true
    }

)

# Run list function we mentioned earlier
run_list(
    "recipe[apt]",
    "recipe[build-essential]",
    "recipe[xml]",
    "recipe[chef-php54]",
    "recipe[openssl]",
    "recipe[apache2]",
    "recipe[apache2::vhosts]",
    "recipe[apache2::mod_rewrite]",
    "recipe[apache2::mod_ssl]",
    "recipe[mysql]",
    "recipe[mysql::server]",
    "recipe[php]",
    "recipe[php::module_gd]",
    "recipe[php::module_curl]",
    "recipe[php::module_mysql]",
    "recipe[php::module_apc]",
    "recipe[chef-php-extra::default]",
    "recipe[chef-php-extra::development]",
    "recipe[apache2::mod_php5]",
    "recipe[database::mysql]",
    "recipe[database::import]",
    "recipe[memcached]",
    "recipe[varnish]"
)

vagrant up时没有明显的错误信息;而这一次,当我 ssh 到盒子并做php -v 时,我至少可以看到

PHP 5.4.15 (cli) (built: Jul 18 2013 17:42:34)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

这是向前迈出的一步。

第一步是php -v首先显示的大量消息:

Failed loading /usr/lib/php5/20090626/xdebug.so:  /usr/lib/php5/20090626/xdebug.so: undefined symbol: output_globals
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20100525/apc.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20100525/apc.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20100525/gd.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20100525/gd.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20100525/mcrypt.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20100525/mcrypt.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20100525/mysql.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20100525/mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20100525/mysqli.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20100525/mysqli.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20100525/pdo.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20100525/pdo.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20100525/pdo_mysql.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20100525/pdo_mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0

第二步是当我将浏览器指向 phpinfo() 文件时,它仍然显示PHP Version 5.3.10-1ubuntu3.7;所以很明显 mod_php 仍然选择了错误的版本。

使用像 chef 这样的配置工具可能被认为是最佳实践,但是当我浪费了 6 天的时间来努力完成一些我可以在几个小时内手动完成的事情时,我发现它非常令人沮丧。

Google 似乎无法提供任何答案:任何人都可以帮助我指出正确的方向并向我证明厨师确实是最佳实践,而不仅仅是浪费时间和精力。

【问题讨论】:

    标签: php chef-infra provisioning vagrant


    【解决方案1】:

    下载最新的 Ubuntu 服务器

    使用 virtualbox 创建一个新的虚拟机,我使用了名称“devbox_ubuntu”

    启动您的虚拟机并为 chef/vagrant 安装所需的软件包

    $ sudo bash
    $ apt-get install sudo ruby ruby-dev libopenssl-ruby rdoc ri irb build-essential ssl-cert curl rubygems puppet
    
    
    $ echo “deb http://apt.opscode.com/ `lsb_release -cs`-0.10 main”    tee /etc/apt/sources.list.d/opscode.list
    $ gpg --keyserver keys.gnupg.net --recv-keys 83EF826A
    $ gpg --export packages@opscode.com | tee /etc/apt/trusted.gpg.d/opscode-keyring.gpg > /dev/null
    
    $ apt-get update
    $ apt-get install opscode-keyring chef
    

    网址不填

    添加流浪用户

    $ adduser vagrant
    passwrd : vagrant
    $ groupadd admin
    $ usermod -a -G admin vagrant
    

    为管理员组设置 sudo

    $ visudo
    %admin ALL=(ALL) NOPASSWD: ALL
    

    为 SSHD 禁用 DNS

    $ vi /etc/etc/ssh/sshd_config
    UseDNS no
    

    SU 到 vagrant 用户并设置 SSH 密钥

    $ su vagrant
    $ mkdir -p ~/.ssh
    $ chmod 0700 ~/.ssh
    $ curl -o ~/.ssh/authorized_keys https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub
    $ chmod 0600 ~/.ssh/authorized_keys
    

    暂停虚拟机并在本地机器上使用 vagrant 设置虚拟机

    $ vagrant package --base devbox_ubuntu
    $ mv package.box devbox_ubuntu.box
    

    等一下……

    $ vagrant box add devbox_ubuntu devbox_ubuntu.box
    $ mkdir devbox_ubuntu && cd devbox_ubuntu
    $ vagrant init devbox_ubuntu
    $ vagrant up
    

    [默认] 正在导入基础盒 'devbox_ubuntu'... ....大量输出

    进行测试 SSH 登录,看看是否一切正常

    $ vagrant ssh
    $ exit
    $ vagrant halt
    $ vagrant destroy
    

    酷。所以这就是全部。现在设置一些食谱(apache2 和 dotdeb php 5.4)

    $ mkdir cookbooks
    $ cd cookbooks
    
    $ git clone https://github.com/opscode-cookbooks/apache2
    $ git clone https://github.com/tlenss/misc.git
    $ mv misc/chef/cookbooks/dotdeb .
    $ rm -rf misc
    

    在 Vagrantfile 中设置配方

    $ cd ..
    $ vi Vagrantfile
    
    config.vm.provision :chef_solo do |chef|
         chef.cookbooks_path = "cookbooks"
         chef.add_recipe("dotdeb")
         chef.add_recipe("dotdeb::php54")
         chef.add_recipe("apache2");
         chef.add_recipe("apache2::mod_php5");
    end
    

    再次启动虚拟机,让厨师来做这件事。一旦完成。登录并验证PHP版本

    $ vagrant up
    $ vagrant ssh
    $ php -v
    
    PHP 5.4.17-1~dotdeb.0 (cli) (built: Jul  6 2013 17:53:27) 
    Copyright (c) 1997-2013 The PHP Group
    Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
    

    我使用了 Yevgeniy Viktorov 修改过的 dotdeb 食谱。不久前写了一篇关于它的小article。可能会有帮助!

    添加额外的 PHP 扩展我使用来自 https://github.com/opscode-cookbooks/php 的厨师标准 PHP 食谱。显然 Ubuntu 和 dotdeb 的 PHP 5.4 与 libmysqlclient 存在依赖性问题。使用 mysqlnd 而不是 mysql 应该可以解决这个问题

    【讨论】:

    • 感谢您的帮助:使用该 dotdeb,我设法让 CLI 和 mod_php 运行相同的 5.4.17 版本。我仍然收到有关 php::module_apc 和 php::module_mysql 的投诉;但你的帮助肯定让我更近了两步;以及如何从头开始构建 vagrant basebox 的详细说明非常有用,非常感谢
    • 不客气!有时间我会看看 APC 和 Mysql
    • APC 可能是版本问题(尽管我对 Chef 还不够熟悉,无法确定)-[Thu, 18 Jul 2013 21:38:09 +0000] FATAL: Chef::Exceptions::Exec: package[php-apc ] (php::module_apc line 34) had an error: Chef::Exceptions::Exec: apt-get -q -y install php-apc=3.1.7-1 returned 100, expected 0-还不确定 MySQL (PDO/MySQLi);但我认为你已经足够推动我前进,我至少可以继续努力让那些缺失的模块正常工作
    • 我对 APC 没有任何问题。然而,Mysql 有一些依赖问题。改为安装 mysqlnd。这应该可以解决这些问题!
    • 我现在通过创建一个新的 php-pecl-apc 配方让 APC 工作,现在只需 MySQL 即可解决。再次感谢
    猜你喜欢
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    相关资源
    最近更新 更多