【问题标题】:How can i install a local rpm using puppet如何使用 puppet 安装本地 rpm
【发布时间】:2014-06-04 11:10:51
【问题描述】:

我正在尝试使用 puppet 安装特定的 rpm,我的 init.pp 是:

class nmap {
  package {'nmap':
    provider => 'rpm',
    source => "<Local PATH to the RPM>",
  }
}

rpm 在...modules/nmap/files

如果我将 rpm 移动到清单,并在 source => ''

中提供 rpm 名称
class nmap {
  package {'nmap':
    provider => 'rpm',
    source => "rpm-name.rpm",
  }
}

它有效,但我如何使用../files/ 指定源路径并成功应用 puppet

当我使用时:

source =&gt; 'puppet:///files/nmap-6.45-1.x86_64.rpm',

我得到一个错误:

Debug: Executing '/bin/rpm -i puppet:///files/nmap-6.45-1.x86_64.rpm' Error: Execution of '/bin/rpm -i puppet:///files/nmap-6.45-1.x86_64.rpm' returned 1: error: open of puppet:///files/nmap-6.45-1.x86_64.rpm failed: No such file or directory

Error: /Stage[main]/Nmap/Package[nmap]/ensure: change from absent to present failed: Execution of '/bin/rpm -i puppet:///files/nmap-6.45-1.x86_64.rpm' returned 1: error: open of puppet:///files/nmap-6.45-1.x86_64.rpm failed: No such file or directory `

运行命令时:

sudo puppet apply --modulepath=/home/user1/qa/puppet_qa/modules/ -e "include nmap" --debug

【问题讨论】:

  • 有时像这样测试更容易:sudo puppet apply -e "package { ['your-rpm'] : ensure =&gt; 'ver.1' ;} 而不是包含文件。

标签: puppet


【解决方案1】:

file 资源类型不同,package 类型不支持 Puppet fileserver URLs。在安装之前,您需要使用file 资源来下载rpm。如果这对您来说是一个反复出现的问题,请创建一个 defined type 一次性完成这些问题(想想宏),例如

define fileserver_package($source, $ensure='installed') {
  file { "/my/tmp/dir/$name.rpm": source => $source }
  package { $name:
    ensure => $ensure,
    provider => 'rpm',
    source => "/my/tmp/dir/$name.rpm",
    require => File["/my/tmp/dir/$name.rpm"],
  }
}

编辑:通常建议使用本地 yum 存储库,另请参阅下面@rojs 的第一条评论。

【讨论】:

  • 一个正确的答案,但我要补充一点,将 rpm 存储在您的 puppet 存储库中并每次写入文件和包资源都会很快变老。最好设置您自己的 yum 服务器并从那里输出 rpm。设置一些工作,但一旦开始,事情就会变得容易得多。
  • // , 以上适用于 Puppet 和来自 vagrantbox.es 的 puppetlabs/centos-6.6-32-puppet vagrant box。
  • provider => 'rpm' 对我来说不见了;否则 yum 正在搜索包,首先 - 在我的情况下失败
【解决方案2】:

“rpm”包可以这样安装:

 package{'epel-release-6':
            provider => 'rpm',
            ensure => 'present',
            source => '/usr/local/rpms/epel-release-latest-6.noarch.rpm',
        }

编辑:更正了确保中的错字

【讨论】:

    【解决方案3】:

    您使用的模块名称似乎是nmap。您可以像这样使用相同的source 参数,

    source => 'puppet:///modules/nmap/nmap-6.45-1.x86_64.rpm',
    

    在模块下访问文件的语法是这样的,

      puppet:///modules/<modulename>/<file you want to access>
    

    在此处查看此链接,http://docs.puppetlabs.com/puppet/latest/reference/modules_fundamentals.html#files

    【讨论】:

      【解决方案4】:

      让我们从头开始:

      在服务器上:

      $rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
      $yum -y install puppetserver
      $vi /etc/sysconfig/puppetserver #change JAVA args
      $systemctl start puppetserver
      $systemctl enable puppetserver
      $vi /etc/puppetlabs/puppet/puppet.conf #Add “dns_alt_names” in [master]
      

      代理:

      $rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
      $yum -y install puppet-agent
      $systemctl start puppet
      $systemctl enable puppet
      $vi /etc/puppetlabs/puppet/puppet.conf # Add “server = pupmaster” in [main]
      
      
      puppet cert list
      puppet cert sign
      
      
      
      
      /etc/puppetlabs/code/environments/production/manifests/site.pp:
      
      node webserver {
        class { 'apache': }
      }
      
      node dbserver {
        class { ‘mysql’: }
      }
      
      
      mkdir –p /etc/puppetlabs/code/environments/production/modules/apache/{manifests, files}
      

      apacheinstall.pp:

        class apache::apacheinstall {
      
          if $osfamily == 'redhat' {
      
                  package { 'httpd':
                            ensure => 'latest'
                          }
      
                  service {'httpd':
                             ensure => 'running',
                            require => Package["httpd"],
                          }
      
                  file { '/var/www/html/ndex.html':
                          mode => "0644",
                          owner => 'root',
                          group => 'root',
                          source => 'puppet:///modules/apache/index.html',
                        }
          }
          elsif $osfamily == 'debian' {
      
                  package { 'apache2':
                            ensure => 'latest'
                          }
      
                  service {'httpd':
                            ensure => 'running',
                            require => Package["httpd"],
                          }
          }
        }
      

      初始化.pp

        class apache {
          notify { 'Installing and Configuring Webserver for $osfamily': }
          include apache::mysqlinstall
        }
      

      Mysqlinstall.pp:

        class apache::mysqlinstall {
      
                  exec { 'wget':
                  path      => [ "/bin/", "/sbin/", "/usr/bin/", "/usr/sbin/" ],
                  command   => "/usr/bin/wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm && rpm -ivh /tmp/mysql57-community-release-el7-9.noarch.rpm",
                  cwd       => '/tmp/',
                  creates   => '/etc/firstruns/p1.done',
                  }
        }
      

      【讨论】:

      • $mysql_password = "myT0pS3cretPa55worD" in site.pp
      猜你喜欢
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多