首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >首先运行所有的'add-apt-repository‘命令,然后运行一个'apt-get update’命令

首先运行所有的'add-apt-repository‘命令,然后运行一个'apt-get update’命令
EN

Stack Overflow用户
提问于 2014-03-22 08:01:25
回答 1查看 6.4K关注 0票数 2

我正在编写Puppet清单,以便在我的机器上安装许多软件。

许多软件包在PPA中只包含最新版本的二进制文件,例如一个名为AutoKey的非常简单的服务。

要安装此最新版本的软件包,必须执行以下操作:

代码语言:javascript
复制
sudo add-apt-repository -y ppa:cdekter/ppa 
sudo apt-get update 
sudo apt-get install autokey-gtk

此发行版中还存在许多其他包;必须先安装PPA存储库,然后更新APT,然后再安装它。

不幸的是,apt-get update需要相当长的时间才能运行,虽然像这样安装了几十个包,但如果我只在添加了所有PPA存储库之后运行apt-get update,我可以节省大量的配置时间。

有没有办法在Puppet中以一种直接的方式做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2014-03-22 21:57:06

Puppetlabs' apt module做的正是您想要的。

只需像这样添加您的repo:

代码语言:javascript
复制
apt::ppa { 'ppa:cdekter/ppa ': }

如果之前没有添加存储库,这将自动添加cdekter ppa并执行apt-get update。如果已经添加了它,则不会发生任何事情。

它是如何工作的

在Puppetlabs的apt模块中,ppa.pp清单的顶部包含了apt::update

代码语言:javascript
复制
include apt::update

update.pp清单围绕以下exec展开:

代码语言:javascript
复制
  exec { 'apt_update':
    command     => "${apt::params::provider} update",
    logoutput   => 'on_failure',
    refreshonly => true,
    timeout     => $apt::update_timeout,
  }

exec被定义为refreshonly => true,即除非由a refresh event触发,否则不会执行。刷新事件基本上是资源之间发生变化的信号,可以通过notify和subscribe参数设置。因此,当您简单地刷新时,此exec将不会触发,除非其他资源向它发送了include apt::update事件。

ppa.pp清单围绕以下代码展开:

代码语言:javascript
复制
exec { "add-apt-repository-${name}":
    environment  => $proxy_env,
    command      => "/usr/bin/add-apt-repository ${options} ${name}",
    unless       => "/usr/bin/test -s ${sources_list_d}/${sources_list_d_filename}",
    user         => 'root',
    logoutput    => 'on_failure',
    notify       => Exec['apt_update'],
    require      => [
    File['sources.list.d'],
    Package[$package],
    ],
}

一旦此exec触发,通过将此事件设置为notify => Exec['apt_update'],它将向apt_update exec资源发送刷新,从而触发apt-get update。不是每次puppet运行都会发生这种情况的原因是,如果之前已经添加了存储库,则此属性会阻止执行命令:

代码语言:javascript
复制
    unless       => "/usr/bin/test -s ${sources_list_d}/${sources_list_d_filename}",

希望这能有所帮助。

祝好运!

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

https://stackoverflow.com/questions/22571622

复制
相关文章

相似问题

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