Edited at

Cygwin で RubyとGitをコンパイルして使おう

More than 5 years have passed since last update.

Cygwinを使ってRuby、Git最新版(今回は1.8.5)、Vagrantを使えるようにしてみた。


※投稿した方法でGitをインストールした場合、git cloneをhttps転送で実行するとfatal: Unable to find remote helper for 'https'エラーになることが判明。

こちらのブログに、その原因と対処を記載。2014/3/20 追記


Cygwin setup

ポイントのみ記載する。詳細手順についてはgoogle先生に聞くと画像付で教えてくれるので割愛した。


ディレクトリとバージョン


  • E:\cygwin ディレクトリを作ってそこへ setup-x86.exe を保存。exeを実行するとパッケージの保管先を聞いてくるので、 E:\cygwin\packages とした。ダウンロードサイトは日本なら http://ftp.jaist.ac.jp などでいいと思う。

  • OSがWindowsXPなので32 bit版を使った。このときのCygwin setupバージョンは2.8.31。


インストールパッケージ


  • Base/gawk *


  • Base/tar *


  • Devel/git


  • Utils/bzip2


  • Web/wget


※アスタリスク印はデフォルトでチェックが入っているので、実質「git、bzip、wget」のみチェックを入れた。


  • インストール後、E:\cygwin\etc\passwd ファイルを編集。使うユーザーのグループIDを545(Users)に変更。ホームディレクトリを変える場合はここで。例では”/home/user”に変更。

  :

- username:unused:1004:513:username,U-WINXP\username,S-1-...-1004:/home/username:/bin/bash
+ username:unused:1004:545:username,U-WINXP\username,S-1-...-1004:/home/user:/bin/bash
:


  • E:\cygwin\etc\group ファイルを編集。なしをnobodyに変更。

  :

- なし:S-1-...-513:513:
+ nobody:S-1-...-513:513:
:


起動バッチとhomeディレクトリを用意


  • E:\cygwin へ Cygwin_mintty.bat を作成。


Cygwin_mintty.bat

@echo off

%~d0
set cygdrive=%~d0
set cygdir=%~dp0
cd %~dp0\bin

set PATH=%SystemRoot%\system32
set MAKE_MODE=unix
set CYGWIN=noacl nontsec nosmbntsec
set SHELL=/bin/bash
set HOME=

bash.exe -c "/usr/bin/mintty -&"
exit



  • 作った Cygwin_mintty.bat を実行。minttyでbashが起動するか確認。


  • Cygwin実行後、Windowsでもわかりやすい場所にhomeディレクトリを用意(例としてD:\home\user)。Cygwinからシンボリックリンク作成。


$ cd /home

$ mv user user_bk # 元のhomeディレクトリを退避
$ ln -s /cygdrive/d/home/user/ user # D:\home\userをcygwinのhomeディレクトリとして見えるようにする
$ cp user_bk/.* user/ # ドットファイルを新しいhomeディレクトリにコピー


apt-cygのインストール

当初、オリジナルのapt-cygを使ったが、cygwinのミラーサイトの構造が変わったようで、パッケージがうまくダウンロードできなかった。

なので、下記のgithubリポジトリのapt-cygを使わせていただく。


(詳細:http://wiki.livedoor.jp/kou1okada/d/apt-cyg

$ mkdir /tmp/apt-cyg

$ cd /tmp/apt-cyg
$ git clone https://github.com/kou1okada/apt-cyg .
$ chmod +x apt-cyg
$ mv apt-cyg /bin/
$ apt-cyg --use-setuprc
$ apt-cyg update


コンパイラ/ライブラリ/ツールのインストール

$ apt-cyg install gcc-core

$ apt-cyg install make patch vim
$ apt-cyg install libncurses-devel openssl-devel readline libsqlite3-devel libxml2-devel libxslt-devel


git最新版(1.8.5)インストール


事前準備とgitのコンパイル

$ apt-cyg install autoconf zlib zlib-devel libiconv python openssh tcl

$ apt-cyg install gettext-devel
$ cd /tmp
$ git clone git://github.com/git/git.git
$ cd git
$ make configure
$ ./configure --prefix=/usr/local
$ make all
$ make install
$ cd
$ git --version
: # 古いgitのバージョンが表示される
$ export PATH=/usr/local/bin:$PATH
$ git --version
: # 新しいgitのバージョンが表示される
$ echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bash_profile


git1.8.5のmanページのインストール

$ mkdir /tmp/git-manpages

$ cd /tmp/git-manpages
$ wget https://www.kernel.org/pub/software/scm/git/git-manpages-1.8.5.tar.gz --no-check-certificate
$ mkdir /usr/local/man
$ tar xvfz git-manpages-1.8.5.tar.gz -C /usr/local/man
$ man git
: # 最下段までスクロールするとバージョンが表示されるので確認。


Rubyのインストール


(方法1)Rubyをコンパイルしてインストール

$ mkdir /tmp/ruby

$ cd /tmp/ruby
$ wget http://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p353.tar.gz
$ tar xvfz ruby-2.0.0-p353.tar.gz
$ cd ruby-2.0.0-p353
$ ./configure
$ make
$ make install
$ ruby -v


(方法2)rbenvでインストール


  • rbenvのインストール



    $ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv

    $ echo 'export PATH="$PATH:$HOME/.rbenv/bin"' >> ~/.bash_profile

    $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

    $ source ~/.bash_profile


  • ruby-buildのインストール


$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/rucby-build


  • Rubyのインストール

$ rbenv install --list

: # インストールできるrubyバージョンのリストが出るので、お目当てのバージョンを探す
$ rbenv install 2.0.0-p247
: # めっちゃ時間かかる(笑)
$ rbenv rehash
$ rbenv global 2.0.0-p247
$ which ruby
: # rubyのインストール場所を確認
$ ruby -v
$ gem -v


.gemrc の作成

これを作っておくと、gemインストール時にドキュメントが含まれずインストールが早くなる。

echo 'gem: --no-document' > .gemrc


VirtualBoxのインストール


  • Windowsインストーラで4.2.18をインストール


  • インストール先はD:\opt\VirtualBox


  • D:\opt をcygwin起動時に /opt へマウントするように fstab ファイルを編集する。


    :

d:\opt /opt ntfs override,noacl,binary,auto 0 0


  • fstabの反映と、VirtualBoxディレクトリのパスを通す。

$ mount -a

$ export PATH="/opt/VirtualBox:$PATH"
$ echo 'export PATH="/opt/VirtualBox:$PATH"' >> ~/.bash_profile


Vagrantのインストール


  • 1.3.5を使用


  • D:\opt\Vagrant へインストール


  • Vagrant設定ファイルの保管場所を設定し、binディレクトリのパスを通す。


$ export VAGRANT_HOME="$HOME/.vagrant.d"

$ echo 'export VAGRANT_HOME="$HOME/.vagrant.d"' >> ~/.bash_profile
$ export PATH="/opt/Vagrant/bin:$PATH"
$ echo 'export PATH="/opt/Vagrant/bin:$PATH"' >> ~/.bash_profile


  • Vagrantにおまじない

$ dos2unix /opt/Vagrant/bin/vagrant


(任意)gitコミットログをsakuraエディタで書けるようにしておく


  • cygwin独特のパスを解決させるようにスクリプトを組んでおく。


  • d:/opt/sakura/sakura.exeにある前提。


#!/bin/bash

argv=("$@")

for i in `seq 1 $#` ; do
case ${argv[$i-1]} in
-*) ;; # オプション引数はそのまま
*) argv[$i-1]=`cygpath -w "${argv[$i-1]}"` ;; # ファイルパスはcygpathで変換
esac
done

/cygdrive/d/opt/Sakura/sakura.exe ${argv[@]}

  :

[core]
editor = 'sakura' \"$1\" \"-CODE=4 -GROUP=9\"
:


(任意)git-completionの利用とプロンプトにgitブランチ名を表示する

git-completionの利用とプロンプトにgitブランチ名を表示する場合は、gitコンパイル時に /tmp/git/contrib/completion ディレクトリに .git-completion.* と git-prompt.sh ファイルが生成されているので、それをhomeディレクトリに.ファイルとしてコピーして、.bashrcに下記を追加する。

  :

# git-completionの設定
if [ -e "${HOME}/.git-completion.bash" ] ; then
source "${HOME}"/.git-completion.bash
fi

# プロンプト
PS1='\[\033]0;Cygwin:${PWD//[^[:ascii:]]/?}\007\]' # set window title
PS1="$PS1"'\n' # new line
PS1="$PS1"'\[\033[32m\]' # change color
PS1="$PS1"'\u@\h ' # user@host<space>
PS1="$PS1"'\[\033[33m\]' # change color
PS1="$PS1"'\w' # current working directory
if [ -e "${HOME}/.git-prompt.sh" ] ; then
source "${HOME}"/.git-prompt.sh
PS1="$PS1"'$(__git_ps1 "(%s)")' # git branch name
fi
PS1="$PS1"'\[\033[0m\]' # change color
PS1="$PS1"'\n' # new line
PS1="$PS1"'\$ ' # prompt: # or prompt: $
export PS1
:


その他

gemなどをインストールして使おうとすると、下記のようなメッセージが出るときがある。

この場合、「cygwin gem インストール rebaseall」でgoogle先生に尋ねると良い。

$ gem update --system

Updating rubygems-update
Fetching: rubygems-update-2.1.11.gem (100%)
Successfully installed rubygems-update-2.1.11
Installing RubyGems 2.1.11
1 [main] ruby 2180 child_info_fork::abort: unable to remap openssl.so to same address as parent (0x1080000) - try running rebaseall
0 [main] ruby 2160 child_info_fork::abort: unable to remap fcntl.so to same address as parent (0x2410000) - try running rebaseall
1 [main] ruby 2828 child_info_fork::abort: unable to remap openssl.so to same address as parent (0x1080000) - try running rebaseall
:


  • (参考)cygwin上で下記を実行。

$ find /usr -name '*.so' > /tmp/rebase_so.lst

$ find /usr -name '*.dll' >> /tmp/rebase_so.lst


  • (参考)ashを起動して下記を実行。

$ /bin/rebaseall -T /tmp/rebase_so.lst -v


実際に使ってみた感想

Cygwinは日本語も使えるコマンドライン環境で結構好きー。


rbenvを使うと、少々重い感じでした。Rubyをコンパイルした場合はサクサク動いてくれるので、私はコンパイルして使ってるよ。