【问题标题】:Curl Exec lein with Puppet on Centos Vagrant no such file or directoryCurl Exec lein with Puppet on Centos Vagrant 没有这样的文件或目录
【发布时间】:2015-12-21 10:56:05
【问题描述】:

编辑

这个sites.pp 似乎有效。

class lein {
  $lein = "/usr/local/bin/lein"
  $url = 'https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein'

  exec { 'download lein':
    command => "/usr/bin/curl -sL -o ${lein} ${url}",
    creates => $lein,
  }

  file { $lein:
    mode => '0755',
    require => Exec['download lein'],
  }

  exec { 'install lein':
    command => $lein,
    require => File[$lein],
  }
}

我正在尝试使用 Puppet 在 Centos Vagrant 上安装 lein。

要安装 lein,您只需运行脚本。我正在尝试使用 curl 下载脚本,使其可执行然后执行它,但我得到了no such file or directory。我已验证文件 /usr/local/bin/lein 存在,所以不知道为什么会出现错误。

所以我想要完成的是这个 shell 的 puppet 等价物:

curl -sL -o /usr/local/bin/lein https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein
chmod 0755 /usr/bin/local/lein
/usr/local/bin/lein

顺便说一句,是否可以以非特权用户身份运行 exec?

puppet/manifests/site.pp

class lein {
  exec { 'download lein':
    command => 'curl -sL -o /usr/local/bin/lein https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein',
    path => '/usr/bin',
  }
  file { '/usr/local/bin/lein':
    mode => '0755',
    require => Exec['download lein'],
  }
  exec { 'install lein':
    command => 'lein',
    path => '/usr/local/bin',
    require => File['/usr/local/bin/lein'],
  }
}

流浪文件

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  config.vm.box = "puphpet/centos65-x64"

  config.vm.provision "puppet" do |p|
    p.module_path = "puppet/modules"
    p.manifests_path = "puppet/manifests"
    p.manifest_file = "site.pp"
  end
end

【问题讨论】:

标签: clojure centos vagrant puppet leiningen


【解决方案1】:

顺便说一句,是否可以以非特权用户身份运行 exec?

是的,您可以,将用户添加到您的区块中

class lein {
  $lein = "/usr/local/bin/lein"
  $url = 'https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein'

  exec { 'download lein':
    command => "/usr/bin/curl -sL -o ${lein} ${url}",
    creates => $lein,
    user    => "vagrant";
  }

  file { $lein:
    mode => '0755',
    require => Exec['download lein'],
  }

  exec { 'install lein':
    command => $lein,
    require => File[$lein],
    user    => "vagrant";
  }
}

include lein

【讨论】:

  • 太棒了,但应该有一个;
  • 对,, 也可以,只要 ';'不是在中间我觉得人偶很好
【解决方案2】:

一个更简单的说明:您尝试过管道吗?

class lein {
  $command = 'curl -sL https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein | bash -s install'
  package { 'curl':
    ensure => 'installed',
  }
  exec { 'download lein':
    command => $command,
    path    => $::path,
    require => Package['curl'],
  }
}

【讨论】:

  • 我会在早上尝试,但我认为该文件在安装后兼作安装程序和二进制文件,因此它仍然需要在文件系统上。
【解决方案3】:

我通过删除两个 exec 的路径并为命令使用绝对路径来让它工作。 lein 还需要设置 HOME 环境,否则它会尝试将文件下载到 /.lein 并且需要以 vagrant 身份运行

成功的 sites.pp

class { 'jdk_oracle': }class lein {
  $lein = "/usr/local/bin/lein"
  $url = 'https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein'
  $leinhome = '/home/vagrant'

  exec { 'download lein':
    command => "/usr/bin/curl -sL -o ${lein} ${url}",
    creates => $lein,
    require => Class['jdk_oracle']
  }

  file { $lein:
    mode => '0755',
    require => Exec['download lein'],
  }

  exec { 'install lein':
    environment => ["HOME=${leinhome}"],
    command => $lein,
    require => File[$lein],
    creates => "${leinhome}/.lein/self-installs/leiningen-2.5.3-standalone.jar",
    user => 'vagrant',
  }
}

include jdk_oracle
include lein

【讨论】:

    猜你喜欢
    • 2016-10-07
    • 2020-08-05
    • 2019-09-06
    • 2014-12-21
    • 2019-03-04
    • 1970-01-01
    • 2012-02-02
    • 2015-12-04
    • 2014-05-15
    相关资源
    最近更新 更多