To be free as in freedom

手动安装 Staypuft

22 Jan 2015

一晃,上一篇博客已经是四个月之前的事了,时间的魔力正是这样,一切的一切,当反转头再一次往后看的时候,都变得似乎没有丁点重量,不留一丝痕迹……

言归正传,通过前面两篇博客“OpenStack Foreman Installer 安装及基本使用”和“OpenStack Foreman Installer —— staypuft”只能搭建一个基本可用的基于 Foreman 的 OpenStack 布署工具,但是对 Foreman 和 Staypuft 其实并没有多少了解,更不用说上手做些调整和修改了,所以便有这第三篇,“手动安装 Staypuft”,只是过程记录(包括遇到问题的处理和说明):

1、准备 Foreman 服务器环境

一个 CentOS 7.0.1406 的系统,配置好 YUM REPO,最少需要有 CentOS 、EPEL 、RDO 、Foreman(包括 release 和 plugins 目录)。

其它的:

2、安装软件包

3、配置 foreman

执行 foreman-installer

# foreman-installer -i

需要改动的配置有:

foreman-installer 配置成之后,会提示 foreman Web 界面的访问地址,以及 admin 用户的密码(自动生动的随机字符串,建议第一次登陆之后修改密码)。

4、手动安装 Puppet 模块

Staypuft 需要的 Puppet 模块来源包括 foreman-installer 、 astapor 、 foreman-installer-staypuft:

将这些 puppet 模块导入到 foreman 中,有两种方法:

5、配置 foreman-discovery

foreman-discovery 是 foreman 用于实现主机发现的插件,可以使 foreman OS provision 的过程自动化程序更高。

6、配置 Provision

由于 foreman 的 bug ,新主机向 foreman 发送 facts 时会出错,下面是该 bug 的具体信息:

http://projects.theforeman.org/issues/8377

为 foreman 打上补丁之后,记得重启 httpd 服务。

这里可以把 /etc/puppet/autosign.conf 也修改一下,参见后文 “遇到的其它问题”

点击 “Infrastructure” --> “Provisioning Setup” ,然后根据向导创建新的 Provision 。

一个比较容易出现的问题是,dhcpd 服务启动不成功,原因是我的 foreman OS provision 网络会对应 OpenStack 的管理网络,不会设置网关,所以 dhcpd.conf 里面的 “option routers” 配置项没有具体的值,删除这一行,重启 dhcpd 就行。

最后,启动 OS Provision 所在网络上的一台服务器,确认从网络启动时,是否进入 foreman 引导项。

7、安装 Staypuft

# yum install gcc gcc-c++ glibc-headers libxml2-devel zlib-devel \
ruby193-ruby-devel ruby193-rubygems-devel \
ruby193-rubygem-jquery-rails ruby193-rubygem-jquery-ui-rails \
ruby193-rubygem-bootstrap-sass ruby193-rubygem-sass-rails \
ruby193-rubygem-uglifier ruby193-rubygem-therubyracer \
ruby193-rubygem-apipie-params ruby193-rubygem-algebrick \
ruby193-rubygem-sequel ruby193-rubygem-sinatra \
ruby193-rubygem-daemons ruby193-rubygem-wicked \
ruby193-rubygem-ipaddress
# scl enable ruby193 v8314 "gem install --ignore-dependencies foreman-tasks staypuft dynflow"

在 /usr/share/foreman/bundler.d/ 下新建一个文件,如 staypuft.rb ,内容如下:

gem 'staypuft'
gem 'sass-rails'
gem 'bootstrap-sass'
gem 'jquery-rails'
gem 'jquery-ui-rails'
gem 'uglifier'

最后执行:

# foreman-rake db:migrate
# foreman-rake db:seed

检查 Staypuft 数据是否初始化成功,可以参考后文 “遇到的其它问题”

重启 Foreman :

# systemctl restart httpd

8、配置 foreman-tasks

# cp /opt/rh/ruby193/root/usr/local/share/gems/gems/foreman-tasks-x.x.x/deploy/foreman-tasks.sysconfig /etc/sysconfig/foreman-tasks
# cp /opt/rh/ruby193/root/usr/local/share/gems/gems/foreman-tasks-x.x.x/deploy/foreman-tasks.service /usr/lib/systemd/system/
# cp /opt/rh/ruby193/root/usr/local/share/gems/gems/foreman-tasks-x.x.x/bin/foreman-tasks /usr/bin/

编辑 /usr/lib/systemd/system/foreman-tasks.service ,在 ExecStart 和 ExecStop 的命令中加上 scl 前缀,即

ExecStart=/usr/bin/scl enable ruby193 v8314 '/usr/bin/foreman-tasks start' 
ExecStop=/usr/bin/scl enable ruby193 v8314 '/usr/bin/foreman-tasks stop'

然后执行:

# systemctl daemon-reload

手动测试 foreman-tasks 能否启动:

# /usr/bin/scl enable ruby193 v8314 '/usr/bin/foreman-tasks start'

如果启动正常,则配置为随系统启动,并重新通过 systemctl 启动:

# /usr/bin/scl enable ruby193 v8314 '/usr/bin/foreman-tasks stop'
# systemctl enable foreman-tasks
# systemctl start foreman-tasks

这里如果之前手动启动成功,但是 systemctl 启动失败,可能有 2 个原因:

9、创建 Staypuft deployment

10、遇到的其它问题

相关链接