Recruit Technologies Open Lab #03 テーマ:Infrastructure as Codeに参加した話

先日Recruit Technologies Open LabのVol3に参加してきた。

主催はServerspec開発者&元ペパボのmizzyさん所属のRecruitだ。
インフラグループのみんなでYYしながら向かうこととなった。

実際の話についてだが、共通する項目が多かったように思う。
特にこれからの「Infrastructure as Code」については、ソフトウェアとインフラの境界が少なくなってくるということだった。
これは、言い換えれば「Infrastructure as Code」に限ったことではなく、インフラエンジニアのこれからも指し示しているのではないかと思う。

もちろん今ハードウェアがなくなるようなシステムは無いし、多くの企業が自前のDCをもたなくなる日が来るとしても、まだ先の話のように思える。※なんだかんだオンプレ運用は今をもってしても主流だったりする。
しかしながら、働き方という意味では大きく変わってくるのではないかと思う。

インフラエンジニアはより、ソフトウェアよりに。
アプリ開発エンジニアは、インフラ領域もみるように。

これらが実現されているチームもきっとあるだろうけど、まだまだ多くの企業はインフラとソフトウェアは分断されている。

究極はミドルウェアという概念がなくなって、ソフトとハードのみになることだったり、ミドルウェア自体が共通の言語や設定ファイルで書かれることかもしれない。
そうなった時、私は何をしているのだろうか。
また、何をしていきたいのだろうか。

今から考えておいた方が良さそうな未来がやってきているような気がする。

rpmで依存するライブラリが含まれるパッケージをYumで検索する

Yumはなにも考えなくても依存関係を綺麗に調整してくれるから、便利だと思う。
しかしながら、どうしてもrpmパッケージをインストールしたいことは多々ある。

先日、rpmのインストールをしようとした所、下記依存関係のエラーが出た。

libssl.so.6()(64bit) is needed by HOGEHOGE

ありがちなエラーである。
さて、みなさんはこんなエラーが出たらどうするだろうか。
私は、今までこのようなエラーが出たら、ググッて解決していた。
先人のみなさんがブログなどに必ず残していてくれるから、まずまず解決できることが殆どだった。
しかしながら、たまたま色々調べていたらこんな記事を見つけた。

なんと、依存するライブラリをYum検索できるらしいのだ。ねぇみんな知ってた? 知ってるって? あぁそうでしたか…。

試しに上記ライブラリを検索してみた。

[vagrant@test vagrant]$ yum whatprovides libcrypto.so.6
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.kddilabs.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
openssl098e-0.9.8e-20.el6.centos.1.i686 : A compatibility version of a general cryptography and TLS library
Repo        : base
Matched from:
Other       : libcrypto.so.6

おおぅ!ちゃんと出てくるではないか。。

ブログにもある通り、検索対象は/etc/yum.repos.d/配下のリポジトリなので、野良rpmはヒットしない。
だけど、標準のリポジトリ内のパッケージであればこのように検索出来るようだ。

今まで幾度と無くrpmパッケージをインストールしてきては、怒られたら地道にググッて依存関係を解決していたのだけど、今後はもう少し時間を短縮できそうだ。
ブログを書かれた方には感謝したい。

まだまだ知らないオプションは沢山ありそうだから、たまにはmanコマンドを眺めて知らないオプションを使ってみることにしよう。

Serverspecのトラブルシューティング

Serverspecを実行した際にエラーが発生して、しばらくウンウン悩んでしまったので残しておく。

Running Tests on testweb
Vagrant experienced a version conflict with some installed plugins!
This usually happens if you recently upgraded Vagrant. As part of the
upgrade process, some existing plugins are no longer compatible with
this version of Vagrant. The recommended way to fix this is to remove
your existing plugins and reinstall them one-by-one. To remove all
plugins:

    rm -r ~/.vagrant.d/plugins.json ~/.vagrant.d/gems

Note if you have an alternate VAGRANT_HOME environmental variable
set, the folders above will be in that directory rather than your
user's home directory.

The error message is shown below:

Bundler could not find compatible versions for gem 'bundler':
  In Gemfile:
    vagrant (= 1.8.1) was resolved to 1.8.1, which depends on
      bundler (>= 1.10.6, <= 1.5.2)

  Current Bundler version:
    bundler (1.12.5)
This Gemfile requires a different version of Bundler.
Perhaps you need to update Bundler by running `gem install bundler`?

Could not find gem 'bundler (<= 1.10.6, >= 1.5.2)&#39;, which is required by gem 'vagrant (= 1.8.1)', in any of the sources.


Failures:

  1) Package nginx; should be installed
     On host `testweb';
     Failure/Error: it { should be_installed }
     Errno::ECONNREFUSED:

対処方法

検索して一番上にgs3のブログが出てきたので参考にした。感謝。

gem install bundler -v 1.10.5
Fetching: bundler-1.10.5.gem (100%)
Successfully installed bundler-1.10.5
Parsing documentation for bundler-1.10.5
Installing ri documentation for bundler-1.10.5
1 gem installed

bundlerはバージョンが低いものがインストールされたように見えるが、テストに失敗した。

gem list bundler

*** LOCAL GEMS ***

bundler (1.12.5, 1.10.5)

2つはいってしまってる。
切り分けのために新しい方を削除した。

gem uninstall bundler -v 1.12.5
Successfully uninstalled bundler-1.12.5

gem list bundler

*** LOCAL GEMS ***

bundler (1.10.5)

テストを実行する。

running Tests on testweb
..........

Finished in 0.57037 seconds (files took 3.13 seconds to load)
10 examples, 0 failures

テストが通るようになった。
rubyの環境設定周り、特にbundleとかgemとか理解が浅いので、しっかり理解していったほうが良さそうだ。
バージョンの違うgemが入った場合に、どちらを使うとか指定できるのか分からなかったので、とりあえずは都度バージョン指定インストールしたり、削除したりしていこうと思う。
bundlerの使い方については、公式ドキュメントを翻訳したサイトがあって、大変わかり易く説明してあるので熟読したい。

http://ruby.studio-kingdom.com/bundler/