はじめに
Windowsでプロビジョニングサーバーを実現する方法では、msys git + Cygwinの構成で、Windows上にプロビジョニングサーバーを構築する方法を解説しました。今回は、Cygwin環境のみでプロビジョニングサーバーを構築する方法を3回に分けて解説します。第1回は、Cygwinからrbenv環境の構築方法を解説します。
Cygwin環境の構築
Cygwinを以下の手順でインストールします。なお、マシン環境は下記のとおりです。
OS | Windows 7 Ultimate 32bit |
ホスト名 | PAPA |
IPアドレス | 192.168.0.253 |
仮想化ソフトウエア | VirtualBox 4.2.18 r88780 |
-
Cygwinのインストール
公式サイトから32bit用または、64bit用のインストーラーをダウンロードして、デフォルトでインストールします。
インストール時に下記の指定を行い、インストールします。なお、「Local Package Directory」は、後からインストールするapt-cygのキャッシュとしても利用しますので、Cドライブ以外のフォルダを指定します。
また、「Choose A Download Site」は、パッケージをダウンロードするミラーサイトを指定します。インストールが終了すると、デスクトップ上にCygwin terminalのショートカットが作成されます。
-
環境変数の設定
Cygwin Terminalを起動する前に、ユーザーまたは、システム環境変数として以下の変数を設定します。
コントロールパネル→システム→システム詳細設定の順にアクセスして、環境変数を設定します。
変数名 変数値 CYGWIN tty glob nodosfilewarning MAKEMODE UNIX SHELL bash HOME 任意のフォルダ nodosfilewarningは、漢字ファイル名を表示する際に表示されるWarningを抑止するために設定しますが、設定しなくても問題ありません。また、HOMEを設定しない場合、ホームディレクトリがC:\cygwin\homeになってしまうため、別のドライブのフォルダを指定します。筆者の環境では、HOMEとしてD:\HOME\%USERNAME%を設定しています。
- fstabの設定
UNIXでお馴染みのfstabを編集します。特にHOMEを別フォルダに指定した場合、環境変数HOMEで設定したフォルダをCygwin上のホームディレクトリとして利用できなくなってしまうため、必ず編集する必要があります。また、Cygwinインストーラーで指定したキャッシュフォルダもマウントできるように編集します。
デスクトップからCygwin Terminalのショートカットをダブルクリックして、Terminalを起動した後、/etc/fstabを編集します。
筆者の環境では、/homeと/Cacheを下記のとおり設定しています。D:/HOME /home ntfs binary 0 0 G:/Cache /cache ntfs binary 0 0
編集を終了しTerminalを再起動すると、マウントしたフォルダが利用できるようになります。
apt-cygのインストール
apt-cygは、Debianやubuntuではお馴染みのapt-getとほぼ同様に使えるCygwin用のパッケージ管理プログラムです。以下の手順でインストールします。
-
必須ソフトウエアの追加インストール
apt-cygのインストールでは、curlおよび、wgetを利用しますので先にダウンロードしたCygwinインストーラーを使用しして、インストールします。インストールの際に、searchエリアにパッケージ名を入力すると簡単に、パッケージを選択することができます。
-
apt-cygのダウンロード
以下のコマンドを実行して、apt-cygをダウンロードします。
$ mkdir ~/work/apt-cyg && cd ~/work/apt-cyg $ curl -o apt-cyg https://raw.github.com/rcmdnk/apt-cyg/master/apt-cyg
なお、apt-cygはGoogleで検索するとさまざまなバージョンが見つかりますが、必ず上記サイトのapt-cygをダウンロードして下さい。
-
apt-cygの修正
ダウンロードしたapt-cygをそのまま実行すると、xzファイルやbz2の解凍時にエラーとなってしまうため、下記のpatchを作成し適用します。
--- apt-cyg.orig 2013-11-17 17:38:04.542081900 +0900 +++ apt-cyg 2013-11-17 17:55:06.330524900 +0900 @@ -1,5 +1,5 @@ #!/bin/bash - +export LANG=C # apt-cyg: install tool for cygwin similar to debian apt-get # # Copyright (C) 2005-9, Stephen Jungels @@ -373,8 +373,16 @@ exit 1 fi + opts= echo "Unpacking..." - cat $file | bunzip2 | tar > "/etc/setup/$pkg.lst" xvf - -C / + if [ `echo $file | grep '\.bz2$'` ]; then + opts="--bzip2" + else + if [ `echo $file | grep '\.xz$'` ]; then + opts="--xz" + fi + fi + cat $file | tar $opts > "/etc/setup/$pkg.lst" -xvf - -C / gzip -f "/etc/setup/$pkg.lst" cd ../..
上記の内容をpatch.apt-cygとして保存し、以下のコマンドを実行します。
$ patch -u apt-cyg < patch.apt-cyg $ install -c -m 755 apt-cyg /usr/bin
-
ミラーサイトとキャッシュフォルダの設定
Cygwinインストーラーで指定したミラーサイトおよび、キャッシュフォルダをapt-cygでも利用できるように設定します。なお、設定は一度行うだけで、毎回行う必要はありません。
以下のコマンドを実行して、ミラーサイトとキャッシュフォルダを設定します。$ apt-cyg update -m http://ftp.iij.ad.jp/pub/cygwin/ -c /cache
以上で、apt-cygのインストールが終了します。
rbenv環境の構築
Cygwin + apt-cyg環境が構築できましたので、次にrbenv環境を構築します。
必須パッケージのインストール
以下のコマンドを実行して、環境構築に必要なパッケージをインストールします。
$ apt-cyg install git $ apt-cyg install gcc-core $ apt-cyg install gcc4 $ apt-cyg install make $ apt-cyg install rsync $ apt-cyg install patch $ apt-cyg install unzip $ apt-cyg install openssh $ apt-cyg install openssl-devel $ apt-cyg install libxml2-devel $ apt-cyg install libxslt-devel $ apt-cyg install libncurses-devel $ apt-cyg install libffi-devel $ apt-cyg install readline $ apt-cyg install libgdbm-devel
rbenvのダウンロード
以下のコマンドを実行して、rbenv環境をダウンロードします。
$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv $ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
punio@PAPA ~ $ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv Cloning into '/home/punio/.rbenv'... remote: Counting objects: 1743, done. remote: Compressing objects: 100% (749/749), done. remote: Total 1743 (delta 1131), reused 1517 (delta 962) Receiving objects: 100% (1743/1743), 254.66 KiB | 223 KiB/s, done. Resolving deltas: 100% (1131/1131), done. punio@PAPA ~ $ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build Cloning into '/home/punio/.rbenv/plugins/ruby-build'... remote: Counting objects: 2547, done. remote: Compressing objects: 100% (1432/1432), done. remote: Total 2547 (delta 1147), reused 2272 (delta 911) Receiving objects: 100% (2547/2547), 362.92 KiB | 268 KiB/s, done. Resolving deltas: 100% (1147/1147), done.
PATH設定
Cygwin環境のみで、rbenv+chef環境を構築するためPATHを再設定します。
.bashrcに下記の内容を追加します。export PATH=/bin:/usr/bin:/usr/sbin if [ -d ~/.rbenv ]; then export PATH=~/.rbenv/bin:$PATH eval "$(rbenv init - bash)" fi
編集を終了しTerminalを再起動すると、rbenv環境を利用可能になります。
rubyのビルド
rbenv環境では、さまざまなバージョンのrubyをビルドして利用することができます。
以下のコマンドを実行して、ビルド可能なrubyの一覧を表示します。$ rbenv install -l
$ rbenv install -l Available versions: 1.8.6-p383 1.8.6-p420 1.8.7-p249 1.8.7-p302 1.8.7-p334 1.8.7-p352 1.8.7-p357 1.8.7-p358 1.8.7-p370 1.8.7-p371 1.8.7-p374 1.9.1-p378 1.9.1-p430 1.9.2-p0 1.9.2-p180 1.9.2-p290 1.9.2-p318 1.9.2-p320 1.9.3-dev 1.9.3-p0 1.9.3-p125 1.9.3-p194 1.9.3-p286 1.9.3-p327 1.9.3-p362 1.9.3-p374 1.9.3-p385 1.9.3-p392 1.9.3-p429 1.9.3-p448 1.9.3-preview1 1.9.3-rc1 2.0.0-dev 2.0.0-p0 2.0.0-p195 2.0.0-p247 2.0.0-preview1 2.0.0-preview2 2.0.0-rc1 2.0.0-rc2 2.1.0-dev 2.1.0-preview1 jruby-1.5.6 jruby-1.6.3 jruby-1.6.4 jruby-1.6.5 jruby-1.6.5.1 jruby-1.6.6 jruby-1.6.7 jruby-1.6.7.2 jruby-1.6.8 jruby-1.7.0 jruby-1.7.0-preview1 jruby-1.7.0-preview2 jruby-1.7.0-rc1 jruby-1.7.0-rc2 jruby-1.7.1 jruby-1.7.2 jruby-1.7.3 jruby-1.7.4 jruby-1.7.5 jruby-1.7.6 jruby-1.7.7 jruby-1.7.8 maglev-1.0.0 maglev-1.1.0-dev maglev-2.0.0-dev mruby-dev rbx-1.2.4 rbx-2.0.0 rbx-2.0.0-dev rbx-2.0.0-rc1 rbx-2.1.0 rbx-2.1.1 ree-1.8.6-2009.06 ree-1.8.7-2009.09 ree-1.8.7-2009.10 ree-1.8.7-2010.01 ree-1.8.7-2010.02 ree-1.8.7-2011.03 ree-1.8.7-2011.12 ree-1.8.7-2012.01 ree-1.8.7-2012.02 topaz-dev
今回は、ruby 2.1.0-preview1をビルドします。
以下のコマンドを実行して、rubyをビルドします。$ LANG=C rbenv install 2.1.0-preview1 $ rbenv rehash
punio@PAPA ~ $ LANG=C rbenv install 2.1.0-preview1 Downloading ruby-2.1.0-preview1.tar.gz... -> http://dqw8nmjcqpjn7.cloudfront.net/9df4f546f6b961895ba58a8afdf857da Installing ruby-2.1.0-preview1... Installed ruby-2.1.0-preview1 to /home/punio/.rbenv/versions/2.1.0-preview1 punio@PAPA ~ $rbenv rehash
rehashコマンドは、rbenv環境に変更を加えた際に必ず実行する必要があります。このため、rubyのビルドが成功したら、rehashコマンドを実行しています。
使用するrubyのバージョンの指定
以下のコマンドを実行して、rbenv環境にインストールされたrubyのバージョンを表示します。
$ rbenv versions
今回は、2.1.0-preview1のみビルドしましたので、1つしか表示されません。また、*(アスタリスク)が付いたバージョンが無いため、使用するrubyのバージョンが無指定となっています。
以下のコマンドを実行して、使用するrubyのバージョンを指定します。$ rbenv global 2.1.0-preview1 $ rbenv versions
globalコマンドで、使用するrubyのバージョンを指定した後、versionsコマンドを実行すると*(アスタリスク)が付いた状態でバージョンが表示されます。
punio@PAPA ~ $ rbenv versions 2.1.0-preview1 punio@PAPA ~ $ rbenv global 2.1.0-preview1 punio@PAPA ~ $ rbenv versions * 2.1.0-preview1 (set by /home/punio/.rbenv/version) punio@PAPA ~ $ gem list DL is deprecated, please use Fiddle *** LOCAL GEMS *** bigdecimal (1.2.1) io-console (0.4.2) json (1.7.7) minitest (4.7.5) psych (2.0.1) rake (0.9.6) rdoc (4.1.0.preview.1) test-unit (2.1.0.0)
以上で、使用するrubyのバージョンの指定が終了します。
その他のrubyパッケージのインストール
以下のコマンドを実行して、rbenv-rehash,bundlerをインストールします。
$ gem i rbenv-rehash --no-ri --no-rdoc $ rbenv rehash $ gem i bundler --no-ri --no-rdoc
rbenv-rehashは、rbenv環境に変更を加えた際に、rehashコマンドを実行しなくても済むようにするパッケージです。
bundlerは、gemパッケージの依存関係を考慮してインストールするパッケージです。punio@PAPA ~ $ gem i rbenv-rehash --no-ri --no-rdoc DL is deprecated, please use Fiddle Fetching: rbenv-rehash-0.3.gem (100%) Successfully installed rbenv-rehash-0.3 1 gem installed punio@PAPA ~ $ rbenv rehash punio@PAPA ~ $ gem i bundler --no-ri --no-rdoc DL is deprecated, please use Fiddle Successfully installed bundler-1.3.5 1 gem installed $ ruby -v && gem -v && bundle -v ruby 2.1.0dev (2013-09-22 trunk 43011) [i386-cygwin] 2.2.0.preview.1 Bundler version 1.3.5 $ gem list DL is deprecated, please use Fiddle *** LOCAL GEMS *** bigdecimal (1.2.1) bundler (1.3.5) io-console (0.4.2) json (1.7.7) minitest (4.7.5) psych (2.0.1) rake (0.9.6) rbenv-rehash (0.3) rdoc (4.1.0.preview.1) test-unit (2.1.0.0)
rebaseallの実行
Cygwin環境では、rubyの実行だけで無くその他のプログラムの実行時に「child_info_fork::abort:」などのシステムエラーが発生することがありますので、発生した際には、以下のコマンドを実行してDLLおよび、so(Shared Object)ファイルの再配置を行います。
find /usr/bin -name "*.so" -o -name "*.dll" > /tmp/rebase.lst find ~/.rbenv -name "*.so" -o -name "*.dll" >> /tmp/rebase.lst
作成したファイルリストを、rebaseallに指定して再配置を実行します。
ash.exeまたは、dash.exeからrebaseallコマンドを実行する必要があるため、Terminalを終了し、Windowsキー + Rで、C:\cygwin\bin\ash.exe を指定し、表示されたash Terminal上で、以下のコマンドを実行します。/bin/rebaseall -v -T /tmp/rebase.lst
Cygwinのシステムエラーは、いつ起きるか予測できないのですが、システムエラーの発生時に上記の対処を行う事で改善できますので、システムエラー発生時には、rebaseallを実行して下さい。
まとめ
ここまで、Cygwin+rbenv環境の構築方法について、解説しました。第2回は、今回構築した環境に仮想化ソフトウエアを導入し、chef環境を構築します。