Help us understand the problem. What is going on with this article?

CentOS7.2(minimal)へのPuppet sever&serverspecインストール手順

More than 3 years have passed since last update.

背景

社内の勉強会で「Infrastructure as Code」をデモして見せたい!
・・・が、何から用意していいか迷ったため、Qiita他資料を参考に、これから環境構築~デモ実践までの道のりをメモする。

今回の目的

VirtualBox上にCentOS7.2(minimal)を立て、Puppet severとserverspecを導入する。

環境

ホストOS

  • Windows 10 Pro
  • VirtualBox 5.0.18

ゲストOS(Puppet server & serverspec動作環境)
ホストOS上のVirtualBoxで動作。ネットワーク設定は以下の通り。

  • アダプターはブリッジ一つ
  • OSはCentOS7.2(CentOS Linux release 7.2.1511 (Core))

CentOSの下準備

仮想マシンが立ち上がったら、まずはPuppet severとserverspecを入れる前の下準備。

  • SELinuxの無効化

# vi /etc/selinux/config

/etc/selinux/config
SELINUX=disabled

(SELinuxが無効化されるのは再起動後)

  • firewalld.serviceの停止確認(minimalでは動いてないみたい)
# systemctl status firewalld.service
● firewalld.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)
  • yumパッケージのアップデート

# yum -y update

  • ここまでやったら再起動

# reboot

Puppet serverのインストール

Christopher CarfiさんのHOW TO INSTALL PUPPET ON CENTOS7を参考にインストール。

  • パッケージライブラリにPuppetを追加

# rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs-release-7-11.noarch.rpm

  • Puppet serverをインストール

# yum install -y puppet-server

  • Puppet serverの起動

# systemctl start puppetmaster.service

  • Puppet serverの自動起動設定
# systemctl enable puppetmaster.service
Created symlink from /etc/systemd/system/multi-user.target.wants/puppetmaster.service to /usr/lib/systemd/system/puppetmaster.service.
  • Puppet serverの起動状態の確認
# systemctl status puppetmaster.service
● puppetmaster.service - Puppet master
   Loaded: loaded (/usr/lib/systemd/system/puppetmaster.service; enabled; vendor preset: disabled)
   Active: active (running) since 水 2016-05-04 00:59:59 JST; 11h ago
 Main PID: 8860 (puppet)
   CGroup: /system.slice/puppetmaster.service
           mq8860 /usr/bin/ruby /usr/bin/puppet master --no-daemonize

 5月 04 00:59:59 TESTSV01 systemd[1]: Started Puppet master.
 5月 04 00:59:59 TESTSV01 systemd[1]: Starting Puppet master...
 5月 04 01:00:01 TESTSV01 puppet[8860]: Notice: Signed certificate request for ca
 5月 04 01:00:05 TESTSV01 puppet[8860]: Notice: testsv01 has a waiting certificate request
 5月 04 01:00:05 TESTSV01 puppet[8860]: Notice: Signed certificate request for testsv01
 5月 04 01:00:05 TESTSV01 puppet[8860]: Notice: Removing file Puppet::SSL::CertificateRequest testsv01 at '/var....pem'
 5月 04 01:00:05 TESTSV01 puppet[8860]: Notice: Removing file Puppet::SSL::CertificateRequest testsv01 at '/var....pem'
 5月 04 01:00:05 TESTSV01 puppet[8860]: Notice: Starting Puppet master version 3.8.7
Hint: Some lines were ellipsized, use -l to show in full.

(補足)Puppet serverをyumでインストールすると、依存性解決によりruby, rubygemsが同時にインストールされる。

# ruby -v
ruby 2.0.0p598 (2014-11-13) [x86_64-linux]`
# gem -v
2.0.14

serverspecのインストール

  • gemでserverspecをインストールする。

# gem install serverspec

# mkdir serverspec
# cd serverspec/
# vi Gemfile
/root/serverspec/Gemfile
source 'https://rubygems.org'

gem 'serverspec'
gem 'rake'
gem 'winrm'

さて、実行。

# bundle install --path=vendor/bundle
-bash: bundle: コマンドが見つかりません

bundlerがない。gemでインストールする。

# gem install bundler

bundlerがインストールされたところでリトライ。

# bundle install --path=vendor/bundle
    Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this
    application for all non-root users on this machine.
    Fetching gem metadata from https://rubygems.org/
    Fetching version metadata from https://rubygems.org/
    Resolving dependencies...
    Rubygems 2.0.14 is not threadsafe, so your gems will be installed one at a time. Upgrade to Rubygems 2.1.0 or higher to enable parallel gem installation.
    Installing rake 11.1.2
    Installing builder 3.2.2
    Installing diff-lcs 1.2.5
    Installing ffi 1.9.10 with native extensions

    Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

        /usr/bin/ruby extconf.rb
    mkmf.rb can't find header files for ruby at /usr/share/include/ruby.h


    Gem files will remain installed in /root/serverspec/vendor/bundle/ruby/gems/ffi-1.9.10 for inspection.
    Results logged to /root/serverspec/vendor/bundle/ruby/gems/ffi-1.9.10/ext/ffi_c/gem_make.out
    Installing httpclient 2.8.0
    Installing little-plugger 1.1.4
    Installing multi_json 1.11.3
    Installing net-ssh 3.1.1
    Installing net-telnet 0.1.1
    Installing nori 2.6.0
    Installing rspec-support 3.4.1
    Installing rubyntlm 0.6.0
    Installing sfl 2.2
    Using bundler 1.12.1
    Installing gyoku 1.3.1
    An error occurred while installing ffi (1.9.10), and Bundler cannot continue.
    Make sure that `gem install ffi -v '1.9.10'` succeeds before bundling.
    [root@TESTSV01 serverspec]# gem install ffi -v '1.9.10'
    Building native extensions.  This could take a while...
    ERROR:  Error installing ffi:
            ERROR: Failed to build gem native extension.

        /usr/bin/ruby extconf.rb
    mkmf.rb can't find header files for ruby at /usr/share/include/ruby.h


    Gem files will remain installed in /usr/local/share/gems/gems/ffi-1.9.10 for inspection.
    Results logged to /usr/local/share/gems/gems/ffi-1.9.10/ext/ffi_c/gem_make.out

エラー。何かが足りない。調査すると、satzzさんの"mkmf.rb can't find header files for ruby"の対応の記事にて、ruby-develが不足していることが原因との内容が。

# yum -y install ruby-devel

ruby-develを入れてリトライ。

# bundle install --path=vendor/bundle
Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this
application for all non-root users on this machine.
Fetching gem metadata from https://rubygems.org/
Fetching version metadata from https://rubygems.org/
Resolving dependencies...
Rubygems 2.0.14 is not threadsafe, so your gems will be installed one at a time. Upgrade to Rubygems 2.1.0 or higher to enable parallel gem installation.
Using rake 11.1.2
Using builder 3.2.2
Using diff-lcs 1.2.5
Installing ffi 1.9.10 with native extensions

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /usr/bin/ruby extconf.rb
checking for ffi.h... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib64
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/usr/bin/ruby
        --with-ffi_c-dir
        --without-ffi_c-dir
        --with-ffi_c-include
        --without-ffi_c-include=${ffi_c-dir}/include
        --with-ffi_c-lib
        --without-ffi_c-lib=${ffi_c-dir}/
        --with-libffi-config
        --without-libffi-config
        --with-pkg-config
        --without-pkg-config
/usr/share/ruby/mkmf.rb:434:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
        from /usr/share/ruby/mkmf.rb:565:in `try_cpp'
        from /usr/share/ruby/mkmf.rb:1044:in `block in have_header'
        from /usr/share/ruby/mkmf.rb:895:in `block in checking_for'
        from /usr/share/ruby/mkmf.rb:340:in `block (2 levels) in postpone'
        from /usr/share/ruby/mkmf.rb:310:in `open'
        from /usr/share/ruby/mkmf.rb:340:in `block in postpone'
        from /usr/share/ruby/mkmf.rb:310:in `open'
        from /usr/share/ruby/mkmf.rb:336:in `postpone'
        from /usr/share/ruby/mkmf.rb:894:in `checking_for'
        from /usr/share/ruby/mkmf.rb:1043:in `have_header'
        from extconf.rb:16:in `<main>'


Gem files will remain installed in /root/serverspec/vendor/bundle/ruby/gems/ffi-1.9.10 for inspection.
Results logged to /root/serverspec/vendor/bundle/ruby/gems/ffi-1.9.10/ext/ffi_c/gem_make.out

出力されるメッセージが変わった!
jamonholmgrenさんのError: "You have to install development tools first." #1727の記事から、障壁はコンパイル関連・・・gccがない、もしくはパスが通っていないのでは?と思ったら案の定。

# gcc -v
-bash: gcc: コマンドが見つかりません

gccをyumでインストールする。

# yum -y install gcc

今度こそ!

# bundle install --path=vendor/bundle
Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this
application for all non-root users on this machine.
Fetching gem metadata from https://rubygems.org/
Fetching version metadata from https://rubygems.org/
Resolving dependencies...
Rubygems 2.0.14 is not threadsafe, so your gems will be installed one at a time. Upgrade to Rubygems 2.1.0 or higher to enable parallel gem installation.
Using rake 11.1.2
Using builder 3.2.2
Using diff-lcs 1.2.5
Installing ffi 1.9.10 with native extensions
Using httpclient 2.8.0
Using little-plugger 1.1.4
Using multi_json 1.11.3
Using net-ssh 3.1.1
Using net-telnet 0.1.1
Using nori 2.6.0
Using rspec-support 3.4.1
Using rubyntlm 0.6.0
Using sfl 2.2
Using bundler 1.12.1
Using gyoku 1.3.1
Installing gssapi 1.2.0
Installing logging 2.1.0
Installing net-scp 1.2.1
Installing rspec-core 3.4.4
Installing rspec-expectations 3.4.0
Installing rspec-mocks 3.4.1
Installing winrm 1.8.0
Installing specinfra 2.57.2
Installing rspec-its 1.2.0
Installing rspec 3.4.0
Installing serverspec 2.33.0
Bundle complete! 3 Gemfile dependencies, 26 gems now installed.
Bundled gems are installed into ./vendor/bundle.
[root@TESTSV01 serverspec]#
[root@TESTSV01 serverspec]#
[root@TESTSV01 serverspec]# gem install winrm
Building native extensions.  This could take a while...
Successfully installed ffi-1.9.10
Fetching: gssapi-1.2.0.gem (100%)
Successfully installed gssapi-1.2.0
Fetching: httpclient-2.8.0.gem (100%)
Successfully installed httpclient-2.8.0
Fetching: rubyntlm-0.6.0.gem (100%)
Successfully installed rubyntlm-0.6.0
Fetching: little-plugger-1.1.4.gem (100%)
Successfully installed little-plugger-1.1.4
Fetching: logging-2.1.0.gem (100%)
Successfully installed logging-2.1.0
Fetching: nori-2.6.0.gem (100%)
Successfully installed nori-2.6.0
Fetching: builder-3.2.2.gem (100%)
Successfully installed builder-3.2.2
Fetching: gyoku-1.3.1.gem (100%)
Successfully installed gyoku-1.3.1
Fetching: winrm-1.8.0.gem (100%)
Successfully installed winrm-1.8.0
Parsing documentation for ffi-1.9.10
Installing ri documentation for ffi-1.9.10
Parsing documentation for gssapi-1.2.0
Installing ri documentation for gssapi-1.2.0
Parsing documentation for httpclient-2.8.0
Installing ri documentation for httpclient-2.8.0
Parsing documentation for rubyntlm-0.6.0
Installing ri documentation for rubyntlm-0.6.0
Parsing documentation for little-plugger-1.1.4
Installing ri documentation for little-plugger-1.1.4
Parsing documentation for logging-2.1.0
Installing ri documentation for logging-2.1.0
Parsing documentation for nori-2.6.0
Installing ri documentation for nori-2.6.0
Parsing documentation for builder-3.2.2
Installing ri documentation for builder-3.2.2
Parsing documentation for gyoku-1.3.1
Installing ri documentation for gyoku-1.3.1
Parsing documentation for winrm-1.8.0
Installing ri documentation for winrm-1.8.0
10 gems installed

とりあえず、Windowsマシンにも対応可能なserverspecサーバの構築完了!

puppetマニフェスト、serverspec-initコマンドについては次回に持ち越し。。。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away