首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用木偶从PPA安装软件包

使用木偶从PPA安装软件包
EN

Server Fault用户
提问于 2013-07-28 22:22:27
回答 2查看 7.8K关注 0票数 8

我正在尝试自动为‘m提供预装的对接器。

我的默认init.pp如下所示:

代码语言:javascript
复制
class { 'apt':
 always_apt_update    => true,
}

package { [
    #'build-essential',
    #'vim',
    #'curl',
    #'zsh',
    #'git-core',
    #'htop',
    #'wget',
    #'linux-image-generic-lts-raring',
    'python-software-properties'
    #'lxc-docker'
  ]:
  ensure  => 'installed',
}

apt::ppa { 'ppa:dotcloud/lxc-docker':}

# refresh apt source
exec { "apt-update":
  command => "/usr/bin/apt-get update && apt-get install lxc-docker --force-yes",
  returns => 100
}

最后一个exec命令返回(对于我认为成功的apt更新,返回100是默认的):

信息: /Stagemain//Apt::Ppappa:dotcloud/lxc-码头/Execapt存储库-ppa:dotcloud/lxc-docker:调度刷新Execapt_更新通知: /Stagemain/Apt::Update/Execapt_更新/returns:成功执行通知: /Stagemain/Apt::Update/Execapt_更新:从1个事件触发‘刷新’

但是,当我没有安装ssh到box并运行apt-get install lxc-docker时,我可以安装它。我做错了什么?我似乎无法让它与多种不同的配置一起工作。

EN

回答 2

Server Fault用户

回答已采纳

发布于 2013-07-29 00:37:06

apt-get在成功时返回0,在错误时返回100,从apt-get手册页面可以很容易地看到。所以你倒过来了。您正在使用&&组合两个命令,这意味着第二个命令只有在第一个命令成功完成时才运行(返回0)。因此,如果apt-get update返回"100",正如您错误地预期的那样,那么第二个命令甚至不会运行。

如果仔细阅读日志消息,您将看到应用的Exec资源名为"apt_update“,而不是"apt-update”。前者在apt类中定义,并在应用apt::ppa资源时运行。后者是您自己的Exec资源,它也将出现在日志输出中,但以Exec[apt-update]的形式出现。找找看。

在任何情况下,您在这里构建的内容都不起作用,因为您试图使用Puppet作为一个美化的Shell脚本,并且做错了它。傀儡忽略了您在清单中指定资源的顺序,而是以它认为合适的方式应用它们。因此,要确保lxc-docker包是从指定的PPA安装的,您需要确保在包资源之前应用PPA资源。

有几种方法可以做到这一点,所有这些方法都涉及到指定关系或依赖关系。有一种方法是使用链式箭头

代码语言:javascript
复制
class { 'apt':
 always_apt_update => true,
}

apt::ppa { 'ppa:dotcloud/lxc-docker':}

# Your regular packages don't know or care about the PPA
package { [
    'build-essential',
    'vim',
    'curl',
    'zsh',
    'git-core',
    'htop',
    'wget',
    'linux-image-generic-lts-raring',
    'python-software-properties'
  ]:
  ensure  => 'installed',
}

# We single lxc-docker out to be able to specify 
# the relationship to Apt::Ppa properly
package { 'lxc-docker':
  ensure => 'installed'
}

Apt::Ppa['ppa:dotcloud/lxc-docker'] ->
Package['lxc-docker']

这意味着lxc-docker包资源将在PPA的apt::ppa资源“ppa:dotcloud/lxc”应用之后应用。如前所述,apt::ppa资源已经负责在添加PPA之后更新APT缓存,因此不需要在任何地方显式调用apt-get update

票数 13
EN

Server Fault用户

发布于 2014-08-19 19:22:18

下面是使用require的另一种惯用答案:

代码语言:javascript
复制
class { 'apt':
 always_apt_update => true,
}

apt::ppa { 'ppa:dotcloud/lxc-docker':}

package { [others]: }    

package { 'lxc-docker':
  ensure  => 'installed',
  require => Apt::Ppa['ppa:dotcloud/lxc-docker']
}
票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/526919

复制
相关文章

相似问题

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