首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在使用Puppet安装其他包之前,运行``apt get update`

在使用Puppet安装其他包之前,运行``apt get update`
EN

Stack Overflow用户
提问于 2012-06-01 15:05:07
回答 8查看 71.7K关注 0票数 51

我正在尝试创建自动安装zend server CE的puppet模块,这在这里并不重要,但步骤如下

通过wget更新/etc/apt/source.list

  • download repos密钥
  1. do apt-get update
  2. do apt-get install zend-server-ce-5.2

我有init.pp文件

代码语言:javascript
复制
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"
}

}

似乎木偶以不同的顺序运行命令,然后我需要。有没有办法让他按我想要的顺序跑?

这样的代码片段的输出是

代码语言:javascript
复制
  [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

有人能告诉我哪里出了问题吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-06-02 03:06:08

您需要指定依赖关系。最简单/最干净的方法是使用可用于所有资源类型的require参数。

代码语言:javascript
复制
package { "zend-server-ce-php-5.2":
  ensure  => latest,
  require  => Exec['apt-get update'],
}

等等。

票数 51
EN

Stack Overflow用户

发布于 2012-12-01 08:43:57

从Puppet 2.6.0开始,一个新特性“关系语法”就是introduced

Puppet 2.6.0及更高版本中的示例如下所示:

代码语言:javascript
复制
exec { "apt-update":
    command => "/usr/bin/apt-get update"
}

Exec["apt-update"] -> Package <| |>

每次执行包命令时,依赖项(在我们的例子中是'apt-update')将首先被触发。您甚至可以定义更长的链。

票数 101
EN

Stack Overflow用户

发布于 2013-02-07 22:59:15

我尝试过以前的版本,但它在Ubuntu 10.04上不起作用

最后,我准备了以下脚本,每次存储库超过一周时都会运行更新:

代码语言:javascript
复制
exec { 'apt-get update':
    command => "/usr/bin/apt-get update",
    onlyif => "/bin/bash -c 'exit $(( $(( $(date +%s) - $(stat -c %Y /var/lib/apt/lists/$( ls /var/lib/apt/lists/ -tr1|tail -1 )) )) <= 604800 ))'"
}

希望能有所帮助。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10845864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档