大家好,感谢您的阅读,
我目前正在为我们的 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 版本显然与默认的 ruby2.0 安装不兼容,因此您必须安装缺少的 ruby1.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 使用 ruby1.8 而 amazon linux 默认使用 2.0
- echo -e “[main] \ nenabled = 0”> /etc/yum/pluginconf.d/priorities.conf
- yum 安装 ruby18
- yum 安装 rubygems18
- alternatives --config ruby => 选择 ruby1.8
接下来,epel 中的 scl-utils 包(版本 20120229)没有此文件 /usr/bin/scl_source。您需要此版本 20120927。我在这里找到了它:
yum 本地安装 scl-utils-20120927-27.el6_6.i686.rpm
接下来你需要安装 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 实例中做类似的事情。