【发布时间】:2012-06-06 10:25:14
【问题描述】:
我正在尝试创建自动安装 zend 服务器 CE 的 puppet 模块,这在这里并不重要,但步骤如下
- 更新 /etc/apt/source.list
- 通过 wget 下载 repos 密钥
- 进行 apt-get 更新
- 执行 apt-get install zend-server-ce-5.2
我有init.pp 文件
class zendserverce {
# https://github.com/puppetlabs/puppetlabs-stdlib
file_line { 'debian_package':
path => '/etc/apt/sources.list',
line => 'deb http://repos.zend.com/zend-server/deb server non-free'
}
exec { "wget http://repos.zend.com/zend.key -O- |apt-key add -":
path => ["/usr/bin", "/usr/sbin"]
}
exec { "apt-get update":
command => "/usr/bin/apt-get update",
onlyif => "/bin/sh -c '[ ! -f /var/cache/apt/pkgcache.bin ] || /usr/bin/find /etc/apt/* -cnewer /var/cache/apt/pkgcache.bin | /bin/grep . > /dev/null'",
}
package { "zend-server-ce-php-5.2":
ensure => "latest"
}
}
似乎 puppet 运行命令的顺序与我需要的不同。有什么方法可以告诉他按照我想要的顺序运行吗?
这样的sn-p的输出是
[0;36mnotice: /Stage[main]/Mc/Package[mc]/ensure: ensure changed 'purged' to 'latest'[0m
[1;35merr: /Stage[main]/Zendserverce/Package[zend-server-ce-php-5.2]/ensure: change from purged to latest failed: Could not update: Execution of '/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install zend-server-ce-php-5.2' returned 100: Reading package lists...
Building dependency tree...
Reading state information...
E: Couldn't find package zend-server-ce-php-5.2 at /tmp/vagrant-puppet/modules 0/zendserverce/manifests/init.pp:28[0m
[0;36mnotice: /Stage[main]/Zendserverce/Exec[wget http://repos.zend.com/zend.key -O- |apt-key add -]/returns: executed successfully[0m
[0;36mnotice: /Stage[main]/Zendserverce/File_line[debian_package]/ensure: created[0m
[0;36mnotice: Finished catalog run in 6.75 seconds[0m
所以它说:找不到包 zend-server-ce-php-5.2
谁能指导我怎么了?
【问题讨论】:
-
只是指出一个附带问题:当
/etc/apt/**中的文件没有更改时,您的 apt-get 更新将只运行一次并且永远不会再次执行。在安装其他软件包时,这可能会导致更新信息过时。如果 apt-get 更新执行时间超过 1 天,您可能还需要添加此 bash 检查,该检查返回 true:[[ $(( $(date +%s) - $(stat -c %Z /var/cache/apt/pkgcache.bin) )) -gt $(( 24 * 60 * 60 )) ]] -
快速记录您的
apt-key add调用。通过 HTTP 获取某些内容然后将其传递给apt-key会使您容易受到包括 MITM 在内的各种安全攻击。看起来 zend 不提供对这个密钥的 HTTPS 访问,这是一种耻辱。如果你可以手动验证密钥,那么通过其他方法将其推出会更安全,也许file { ... } -
你试过puppetlabs-apt模块来处理repo和keys的管理吗?这与您的问题没有直接关系:)
标签: puppet apt-get zend-server