Cygwin + rbenv環境でプロビジョニングサーバーを構築する方法(第1回)~Cygwinを用いて、rbenv環境を構築する

Cygwin + rbenv環境でプロビジョニングサーバーを構築する方法(第1回)~Cygwinを用いて、rbenv環境を構築する

はじめに

Windowsでプロビジョニングサーバーを実現する方法では、msys git + Cygwinの構成で、Windows上にプロビジョニングサーバーを構築する方法を解説しました。今回は、Cygwin環境のみでプロビジョニングサーバーを構築する方法を3回に分けて解説します。第1回は、Cygwinからrbenv環境の構築方法を解説します。

Cygwin環境の構築

Cygwinを以下の手順でインストールします。なお、マシン環境は下記のとおりです。

OSWindows 7 Ultimate 32bit
ホスト名PAPA
IPアドレス192.168.0.253
仮想化ソフトウエアVirtualBox 4.2.18 r88780
  1. Cygwinのインストール

    公式サイトから32bit用または、64bit用のインストーラーをダウンロードして、デフォルトでインストールします。
    インストール時に下記の指定を行い、インストールします。

    1011-01 1011-02 1011-03 1011-04 1011-05

    なお、「Local Package Directory」は、後からインストールするapt-cygのキャッシュとしても利用しますので、Cドライブ以外のフォルダを指定します。
    また、「Choose A Download Site」は、パッケージをダウンロードするミラーサイトを指定します。

    インストールが終了すると、デスクトップ上にCygwin terminalのショートカットが作成されます。

    1011-11 1011-12
  2. 環境変数の設定

    Cygwin Terminalを起動する前に、ユーザーまたは、システム環境変数として以下の変数を設定します。

    コントロールパネル→システム→システム詳細設定の順にアクセスして、環境変数を設定します。

    1011-13
    変数名変数値
    CYGWINtty glob nodosfilewarning
    MAKEMODEUNIX
    SHELLbash
    HOME任意のフォルダ

    nodosfilewarningは、漢字ファイル名を表示する際に表示されるWarningを抑止するために設定しますが、設定しなくても問題ありません。また、HOMEを設定しない場合、ホームディレクトリがC:\cygwin\homeになってしまうため、別のドライブのフォルダを指定します。筆者の環境では、HOMEとしてD:\HOME\%USERNAME%を設定しています。

    1011-14
  3. 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
    
    1011-15

    編集を終了しTerminalを再起動すると、マウントしたフォルダが利用できるようになります。

    1011-16

apt-cygのインストール

apt-cygは、Debianやubuntuではお馴染みのapt-getとほぼ同様に使えるCygwin用のパッケージ管理プログラムです。以下の手順でインストールします。

  1. 必須ソフトウエアの追加インストール

    apt-cygのインストールでは、curlおよび、wgetを利用しますので先にダウンロードしたCygwinインストーラーを使用しして、インストールします。インストールの際に、searchエリアにパッケージ名を入力すると簡単に、パッケージを選択することができます。

    1011-17 1011-18
  2. 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をダウンロードして下さい。

    1011-21
  3. 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
    
    1011-22 1011-23
  4. ミラーサイトとキャッシュフォルダの設定

    Cygwinインストーラーで指定したミラーサイトおよび、キャッシュフォルダをapt-cygでも利用できるように設定します。なお、設定は一度行うだけで、毎回行う必要はありません。
    以下のコマンドを実行して、ミラーサイトとキャッシュフォルダを設定します。

    $ apt-cyg update -m http://ftp.iij.ad.jp/pub/cygwin/ -c /cache
    
    1011-24

以上で、apt-cygのインストールが終了します。

rbenv環境の構築

Cygwin + apt-cyg環境が構築できましたので、次にrbenv環境を構築します。

  1. 必須パッケージのインストール

    以下のコマンドを実行して、環境構築に必要なパッケージをインストールします。

    $ 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
    
  2. 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.
    
    

  3. 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
    
    1011-26

    編集を終了しTerminalを再起動すると、rbenv環境を利用可能になります。

  4. 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コマンドを実行しています。

  5. 使用する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のバージョンの指定が終了します。

  6. その他の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)
    
    
    
  7. 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を実行して下さい。

  8. 1011-33 1011-34 1011-35

まとめ

ここまで、Cygwin+rbenv環境の構築方法について、解説しました。第2回は、今回構築した環境に仮想化ソフトウエアを導入し、chef環境を構築します。

Comments are closed.