在亚马逊 EC2 实例上安装 Foreman

在亚马逊 EC2 实例上安装 Foreman

大家好,感谢您的阅读,

我目前正在为我们的 ec2 实例设置一个 puppet 服务,并决定尝试一下 foreman(节点证书管理和自动乘客设置看起来不错)。

不幸的是,我在安装过程中遇到了困难。我使用的是全新的“Amazon Linux AMI x86_64 PV”:

[root@hostname ~]# uname -a
Linux hostname 3.10.35-43.137.amzn1.x86_64 #1 SMP Wed Apr 2 09:36:59 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

并尝试了以下操作:

sudo yum -y update
sudo yum -y install http://yum.theforeman.org/releases/1.1/el6/x86_64/foreman-release.rpm
sudo yum -y install foreman-installer

结果是:

Error: Package: rubygem-foreman_api-0.1.11-1.el6.noarch (foreman)
       Requires: rubygem(rest-client) >= 1.6.1
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest

这些建议似乎毫无用处(--skip-broken 会安装除 foreman/puppet 之外的所有依赖项)。我最终这里 并尝试安装存储库(删除旧存储库后)

sudo yum -y remove epel-release
sudo yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

现在我再次尝试:

sudo -y update
sudo -y install foreman-installer

导致相同的错误。无需先前更新即可进行安装(尽管 yum 会抱怨公钥),并导致以下错误:

[ec2-user@hostname ~]$ foreman-installer
/usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- highline/import (LoadError)
        from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from /usr/sbin/foreman-installer:3:in `<main>'

我在尝试设置乘客时遇到了类似的问题,最终放弃了。我认为这是由于 ruby​​ 版本冲突造成的,因此:

[root@hostname puppet]# ruby --version
ruby 2.0.0p451 (2014-02-24 revision 45167) [x86_64-linux]
[root@hostname puppet]# gem --version
2.0.14
[root@hostname puppet]# ls /usr/bin | grep ruby
ruby
ruby1.8
ruby2.0
[root@hostname puppet]# ls /usr/bin | grep gem
gem
gem2.0

有人遇到过同样的问题吗?我该如何解决这个问题?

提前致谢并感谢您阅读这一切!

答案1

Red Hat Enterprise Linux 及其克隆的软件包与 Amazon Linux 不兼容。您需要找到其他方法来安装 Foreman,或者最好使用其他 Linux 发行版(Amazon Linux 存在许多问题,因此通常不适合用于几乎所有用途)。

答案2

由于我最近在亚马逊上花了很多时间使用 puppet,所以我想更新一下这个。

由于 amazon linux 上的 puppet 版本显然与默认的 ruby​​2.0 安装不兼容,因此您必须安装缺少的 ruby​​1.8 内容并链接到正确的文件。这应该可以解决问题:

安装准备:

if ! yum repolist | grep -q puppetlabs;
then
    echo "..enabling puppet repository.."
    # https://tickets.puppetlabs.com/browse/PUP-2132
    echo -e "[main]\nenabled = 0" > /etc/yum/pluginconf.d/priorities.conf
    rpm --quiet -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-10.noarch.rpm
fi

echo "..updating.."
yum -y --quiet clean all
yum -y --quiet update

if readlink /etc/alternatives/ruby | grep -q "ruby2\.0"
then
    echo "..making ruby1.8 default.."
    ln -sf /usr/bin/ruby1.8 /etc/alternatives/ruby
fi

if readlink /etc/alternatives/gem | grep -q "gem2\.0"
then
    echo "..making gem1.8 default.."
    ln -sf /usr/bin/gem1.8 /etc/alternatives/gem
fi

并使用 apache 安装 puppet:

PACKAGE="puppet"
#PACKAGE="puppet-server"

echo "..installing "$PACKAGE" and requirements.."
yum -y --quiet install "$PACKAGE" rubygem18-json

最后是乘客:

echo "..installing passenger and requirements.."
yum -y install httpd httpd-devel mod_ssl ruby18-devel rubygems gcc gcc-c++ curl-devel openssl-devel zlib-devel
gem install rack passenger

passenger-install-apache2-module --auto

不要忘记执行常规操作(config.ru 和 apache 的 vhost 配置),然后一切都会正常工作。我没有用 foreman 尝试这个,因为我们选择不使用它,但它可能是可行的,如果是这样,应该工作得相当类似。

答案3

我能够使用 foreman-installer 在 Amazon Linux 上安装 foreman,它还会安装 foreman-proxy。

因为 puppet 和 foreman 使用 ruby​​1.8 而 amazon linux 默认使用 2.0

  • echo -e “[main] \ nenabled = 0”> /etc/yum/pluginconf.d/priorities.conf
  • yum 安装 ruby​​18
  • yum 安装 ruby​​gems18
  • alternatives --config ruby​​ => 选择 ruby​​1.8

接下来,epel 中的 scl-utils 包(版本 20120229)没有此文件 /usr/bin/scl_source。您需要此版本 20120927。我在这里找到了它:

接下来你需要安装 ipmitool 包。我在 centos 机器上使用 yum 下载器,并安装了

  • yum 本地安装 ipmitool-1.8.15-2.el6.x86_64.rpm。

此后 foreman-installer -i 成功完成。

答案4

我在 CentOS 6 系统上遇到了同样的错误。事实证明,我需要按照 foreman 安装指南中的说明安装一个额外的存储库:

http://theforeman.org/manuals/1.5/index.html#3.3.1RPMPackages

所有 RHEL 及其衍生产品都需要 Red Hat 软件集合 (RHSCL) 1.0 或重建,例如 CentOS 的软件集合。RHEL 客户可以以单独的存储库或子频道的形式获取 RHSCL。有关 CentOS 软件集合的更多信息可在此处获取,有关 Scientific Linux 的更多信息可在此处获取。

我认为您应该在 AWS 实例中做类似的事情。

相关内容