Help us understand the problem. What is going on with this article?

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をコンパイルした場合はサクサク動いてくれるので、私はコンパイルして使ってるよ。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした