运行`木偶安装其他包之前apt-get的update`(Run `apt-get update` b

2019-06-25 01:53发布

我试图创建可自动进行安装Zend Server CE中的傀儡模块,这并不重要,但操作步骤如下

  1. 更新/etc/apt/source.list
  2. 通过下载wget的回购键
  3. 做apt-get的更新
  4. 做的apt-get安装的Zend服务器-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"
}

}

看来,木偶运行在不同的顺序指令,然后我需要的。 有什么办法如何为告诉他,在我需要的顺序运行?

这种片段的输出是

  [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服务器-CE-PHP-5.2

任何人都可以引导我什么是错?

Answer 1:

你需要指定的依赖关系。 最简单的/清洁的方法是使用需要参数,它适用于所有资源类型。

package { "zend-server-ce-php-5.2":
  ensure  => latest,
  require  => Exec['apt-get update'],
}

等等..



Answer 2:

由于木偶2.6.0中的新功能“关系的语法”中介绍 。

在木偶2.6.0及以上的例子是这样的:

exec { "apt-update":
    command => "/usr/bin/apt-get update"
}

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

每次执行一个包命令时,相关性(在我们的例子“容易更新”)将被触发的拳头。 你甚至可以定义更长的链。



Answer 3:

我想以前的变量,但它不为我在Ubuntu 10.04的工作

Finaly我准备下面的脚本,运行每次更新的资料库是超过一个星期以上:

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 ))'"
}

希望能帮助到你。



Answer 4:

我喜欢把容易升级到主舞台前,运行一个独立的阶段,所以我不必硬连线的依赖。 查看此处: http://docs.puppetlabs.com/puppet/2.7/reference/lang_run_stages.html 。

一个简单的例子看起来像下面。 这意味着你必须做实际的apt-更新一个单独的类:

stage { "init": before  => Stage["main"] }

class {"apt-update": 
  stage => init, 
  apt_mirror => $apt_mirror 
}

检查我的样本LAMPP盒在github上看到如何组合在一起: https://github.com/joerx/vagrant-lampp

注意:要小心容易升级,因为一些基本的箱子之类的东西内核升级突破。



Answer 5:

在木偶3,这可以通过完成实现使用资源的收藏家虚拟资源

# so you don't have to fully qualify paths to binaries
Exec { path => ['/usr/bin'] }    

# virtual resource
@exec { 'sudo apt-get update':
   tag => foo_update
}

# realize resource. filter by arbitrary "foo_update"
# tag and relate it to all Package resources
Exec <| tag == foo_update |> -> Package <| |>


Answer 6:

添加该代码段巫术的为我们工作:

  Apt::Pin <| |> -> Package <| |>
  Apt::Source <| |> -> Package <| |>

这迫使更新。 因人而异。



Answer 7:

包需要更新APT名单应要求Class['apt::update']

package { "zend-server-ce-php-5.2":
   ensure => "latest",
   require => Class['apt::update']
}

如果您使用自定义的APT源,只是确保正确的顺序:

Apt::Source['my_source'] 
-> Class['apt::update']


Answer 8:

你真正应该使用apt模块创建来源并添加密钥: https://forge.puppet.com/puppetlabs/apt

如果您使用hiera:

apt::sources:
  'artifactory-pro-debs':
    location: 'http://repos.zend.com/zend-server/deb'
    release: 'server
    repos: 'non-free'
    key:
      source: 'http://repos.zend.com/zend.key'


文章来源: Run `apt-get update` before installing other packages with Puppet