gpt4 book ai didi

ubuntu - 首先运行所有 'add-apt-repository' 命令,然后运行单个 'apt-get update'

转载 作者:行者123 更新时间:2023-12-04 18:30:35 34 4
gpt4 key购买 nike

我正在编写 Puppet list ,以便在我的机器上安装大量软件。

许多软件包仅具有 PPA 中最新版本的二进制文件,例如名为 AutoKey 的非常方便的服务。 .

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

sudo add-apt-repository -y ppa:cdekter/ppa 
sudo apt-get update
sudo apt-get install autokey-gtk

许多其他包以这种分发格式存在;必须安装 PPA 存储库,然后更新 APT,然后安装它。

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

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

最佳答案

Puppetlabs' apt module做你想要的。

只需像这样添加您的存储库:

apt::ppa { 'ppa:cdekter/ppa ': }

如果在此之前未添加存储库,则会自动添加 cdekter ppa 并执行 apt-get update .如果它已经被添加,则不会发生任何事情。

这个怎么运作

ppa.pp 的顶部在 Puppetlabs 的 apt 模块中显示 apt::update已经包括了:
include apt::update
update.pp manifest 围绕这个 exec 展开:
  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 元参数设置。因此,当您只需 include apt::update除非其他资源向它发送了刷新事件,否则此 exec 不会触发。
ppa.pp list 围绕此代码:
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],
],
}

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

希望这可以帮助。

祝你好运!

关于ubuntu - 首先运行所有 'add-apt-repository' 命令,然后运行单个 'apt-get update',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22571622/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com