Amazon Linuxでserverspec-initができない(`require’: cannot load such file — io/console (LoadError))

 


 

Amazon Linuxでserverspecのインストールはできるが、

serverspec-initができない。

Amazon LinuxのAMI IDはamzn-ami-hvm-2017.03.0.20170417-x86_64-gp2 (ami-923d12f5)、

Rubyのバージョンはruby 2.0.0p648 (2015-12-16) [x86_64-linux]、

rakeのバージョンはrake, version 12.0.0。

 
serverspec-initを実行すると、


[ec2-user@ip-192-168-11-11 serverspec]$ serverspec-init
/usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- io/console (LoadError)
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/ec2-user/.gem/ruby/2.0/gems/net-ssh-4.1.0/lib/net/ssh/prompt.rb:1:in `'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/ec2-user/.gem/ruby/2.0/gems/net-ssh-4.1.0/lib/net/ssh/key_factory.rb:2:in `'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/ec2-user/.gem/ruby/2.0/gems/net-ssh-4.1.0/lib/net/ssh/authentication/key_manager.rb:2:in `'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/ec2-user/.gem/ruby/2.0/gems/net-ssh-4.1.0/lib/net/ssh/authentication/session.rb:4:in `'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/ec2-user/.gem/ruby/2.0/gems/net-ssh-4.1.0/lib/net/ssh.rb:12:in `'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/ec2-user/.gem/ruby/2.0/gems/specinfra-2.67.9/lib/specinfra/backend/ssh.rb:3:in `'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/ec2-user/.gem/ruby/2.0/gems/specinfra-2.67.9/lib/specinfra/backend.rb:3:in `'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/ec2-user/.gem/ruby/2.0/gems/specinfra-2.67.9/lib/specinfra/core.rb:7:in `'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/ec2-user/.gem/ruby/2.0/gems/specinfra-2.67.9/lib/specinfra.rb:1:in `'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/ec2-user/.gem/ruby/2.0/gems/serverspec-2.38.0/lib/serverspec.rb:2:in `'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/ec2-user/.gem/ruby/2.0/gems/serverspec-2.38.0/bin/serverspec-init:5:in `'
from /home/ec2-user/bin/serverspec-init:23:in `load'
from /home/ec2-user/bin/serverspec-init:23:in `

'

となる。

ログを見て、ああ、io-consoleがないのね、と思い、gem install io-console するが、


[ec2-user@ip-192-168-11-11 serverspec]$ gem install io-console
Fetching: io-console-0.4.6.gem (100%)
Building native extensions. This could take a while...
ERROR: Error installing io-console:
ERROR: Failed to build gem native extension.

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

Gem files will remain installed in /home/ec2-user/.gem/ruby/2.0/gems/io-console-0.4.6 for inspection.

となる。

むむーーーーーー

ヘッダーファイルがみつからない的なエラーが出ているため、

sudo yum -y install ruby-devel

したが変わらず。

それではということで、

sudo yum install -y ruby20-devel gcc-c++

したらio-consoleインストールできた!!!!!!!!!

 
というわけで、無事serverspec-initもできた。

最近のAmazon LinuxのRubyだと起きる・・?
 

awspecでspecファイルをgenerateすると(中略)awsecrets-1.10.1/lib/awsecrets.rb:59:in `exist?’: no implicit conversion of nil into String (TypeError)

 


 

Infrastructure as codeである。

 
「エンタープライズにAWS?早い早い」などという担当者の方の冷笑はいまや昔。

今日ではあの三菱東京UFJ銀行までがAWSを利用しようかというご時勢である。

そんな時流に乗り、弊社も忙しい。とっても忙しい。

手のぬくもりを大切にした環境構築ではもはや追いつかない。

そこで自動化を推進するわけである。

Terraformは以前からちょいちょい触っていたが、インフラ構築にもTDDをということで、

awsspecを検証してみた。

 
Amazon Linuxに2.x系のRubyを入れ(詳細は割愛する)、


gem install awspec
mkdir awspec
cd awspec
awspec init

ここまでは順調。

問題はこの後、


echo "require 'spec_helper'" > spec/ec2_and_rds_spec.rb
awspec generate vpc vpc-xxxxxxxxxc >> spec/ec2_and_rds_spec.rb

しようとすると、


$ awspec generate vpc vpc-1871177c >> spec/ec2_and_rds_spec.rb
/home/ec2-user/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/awsecrets-1.10.1/lib/awsecrets.rb:59:in `exist?': no implicit conversion of nil into String (TypeError)

というエラーが出る。

 
“secrets”とあるからてっきりaws configure関連かと思ったが、実行しても変わりはない。

こんな時は公式サイトを見るのだ。

 
結局、

・specディレクトリの下にsecrets.ymlを作成

$ cat <<EOF > spec/secrets.yml
region: ap-northeast-1
aws_access_key_id: XXXXXXXXXXXXXXXXXXXX
aws_secret_access_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
EOF

awsecretsをインストールする

$ gem install awsecrets

とやったところ、specファイルが生成され、自動テストが実行できるようになった。

 
パラメータシートとにらめっこして画面ショットを取るのもせつないので、

うまく活用していきたい。

 

Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス
Kief Morris
オライリージャパン
売り上げランキング: 9,259

クアラルンプールの空港で、飛行機内に水を持ち込みたい

 

セキュリティのため、空港でチェックイン後、飛行機内に水を持ち込むことが

禁止されているケースが多々ありますね。

マレーシアのクアラルンプール国際空港(Kuala Lumpur International Airport)も、

同様に手荷物検査を受けて後は搭乗するのみ、

という状態であっても、水を機内に持ち込むことは禁止されています。

 
わたしはのどが渇きやすい体質なので、いちいち添乗員さんにお水を頼むのはめんどくさい。

なんとかして水を機内に持ち込みたいと思い、

搭乗ゲートの職員さんに聞いてみました。

 
結果、機内持ち込み用のシールバッグに入れられた水であれば、機内持ち込み可、とのこと!!!

よかったーーーーーー

 
しかし、「シールバッグに入れられた水」が売られている店を探すのに苦労したので、

将来また必要になった時のためにメモしておきます。

 
KLIAの空港内モノレールに乗った後、たくさんのお店があります。

「シールバッグに入れられた水」が買えるのは、

オレンジの12、「WHSmith」というお店です。

おお!!!あった!!!

めっちゃ探したわ・・

空港の職員さん「あっちの方のPharmacy」としか教えてくれないんだもん・・。

こうして無事シールバッグ入りのエビアンを購入し、快適な空の旅を過ごすことができました。

クアラルンプールで同じように困った方の参考になりますように。

 

evian Dash Button
evian Dash Button

posted with amazlet at 17.04.01
Amazon (2016-12-05)
売り上げランキング: 11
カテゴリー: Diary | コメントは受け付けていません。