Skip to content

Instantly share code, notes, and snippets.

@matsubara0507
Last active March 16, 2016 17:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save matsubara0507/dcded62bcfd04dc28f73 to your computer and use it in GitHub Desktop.
Save matsubara0507/dcded62bcfd04dc28f73 to your computer and use it in GitHub Desktop.
babunでWindowsにRuby環境を整えてみた

babunでWindowsにRuby環境を整えてみた

いきさつ

PCを新調したのでイロイロと環境構築を頑張る。
今回はRubyの環境構築。

OSはWindows10 64bit でUNIX環境をシミュレートするために babun (cugwin) を使ってみる。
(友人には仮想を使えと怒られた)

理想

  1. babun を入れて
  • rbenv を入れて
  • Ruby2.3 を入れて
  • gem (bundler) を利用する!

babunを入れる

chocolatey にあるので簡単
choco install babun でおしまい。

(gcc やpython2 がデフォルトで入ってて便利!)

rbenv を入れる....前に

素のbabunではダメみたいなのでイロイロとインストールする。

git

(参考: http://qiita.com/hisomura/items/8a1fb4550af363b34cac)

まず、rbenv 入れるためのgit が足りない
pact install gettext-devel
pact install libsasl2
pact install ca-certificates

その他

(参考: http://dqn.sakusakutto.jp/2013/12/cygwin_rbenv_ruby-build_ruby.html)

実は git だけやれば Ruby のインストールはできるんだけど、gem 使ったときとかに

`require': cannot load such file -- fiddle/inport.rb (LoadError)

みたいな感じのエラーが出た。

なので、次のをまるっとインストールしてしまえば良い(済みのやつもあるけど)

pact install gcc-core  gcc-g++ make zlib-devel curl autoconf libiconv libiconv-devel rsync patch unzip openssh openssl-devel libxml2-devel libxslt-devel  libffi-devel libgdbm-devel

rbenvを入れる

(参考: http://qiita.com/sak_hrr/items/3a02005b44fdaefd3678)

ホームディレクトリとかで
git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshenv
echo 'eval "$(rbenv init -)"' >> ~/.zshenv
exec $SHELL

rbenv --versionで確認

Ruby2.3 を入れる

イロイロとバグがあるみたいです。

Ruby2.1系やRuby2.2.2 以下だと utoa という関数が衝突して怒られる。 以下のサイトを参考にして修正すればうまくいった(2.1.6とかは)
http://d.hatena.ne.jp/takehikom/20150221/1424462400

Ruby2.2.3 とかRuby2.3は

`require': cannot load such file -- win32/resolv (LoadError)

みたいな感じで怒られる。
以下のサイトを参考にしてパッチを当てて修正すればうまくいった。
http://proglab.blog.fc2.com/blog-entry-44.html

手作業でやらなくても簡単にパッチを当てれる(と友人に教えてもらった)。

$ cat > patch_ruby
 --- ext/extmk.rb.orig   2016-01-04 19:54:05.042378000 +0900
+++ ext/extmk.rb        2016-01-04 20:36:34.009452300 +0900
@@ -496,8 +496,10 @@
 default_exclude_exts =
   if $mswin or $mingw
     %w'pty syslog'
-  else
+  elsif not $cygwin
     %w'*win32*'
+  else
+    %w''
   end
 withes, withouts = [["--with", nil], ["--without", default_exclude_exts]].collect {|w, d|
   if !(w = %w[-extensions -ext].collect {|o|arg_config(w+o)}).any?
$ rbenv install --patch 2.3.0 < patch_ruby

ちなみにcygwinでbuildしてるせいで、めちゃくちゃ時間がかかる...

gem を利用する

(参考: http://d.hatena.ne.jp/takehikom/20130305/1362426096)

gem install bundler って感じにインストールできる!
と思ったらまたはまった orz...

$ gem install bundler
Fetching: bundler-1.1.2.gem (100%)
1 [main] ruby 3812 child_info_fork::abort:  \.babun\cygwin\bin\cyggcc_s-1.dll: Loaded to different address...
(こんな感じのがずーと続く)

どうやらrebaseの問題らしい。
詳しくは(さっぱり)わからないけど、参考サイトのように入力したらうまくいった。

$ cd
$ find ~ -name '*.so' > ~/rebase_so.lst

でシェルをすべて落とし、エクスプローラーで ash.exe を検索して実行。

$ cd
$ rebaseall -T rebase_so.lst -v
$ exit

と入力(コピペではだめだった)したら、ついにうまくいった!

おしまい

@ippeif
Copy link

ippeif commented Mar 16, 2016

Cygwinでext/win32がmakeされない件のパッチですが,SVN trunk の r53868 で対応されてまして,Github だと commit 9bfa5d... がソレです。
GithubはURLを .patch にするとパッチが降ってくるお便利仕様なので,commit 9bfa5d... のパッチ を使って

$ curl -fsSL "https://github.com/ruby/ruby/commit/9bfa5d917f8cb3e123a24c86813c191d05fcf53b.patch" | \
  filterdiff -x a/ChangeLog | rbenv install --patch 2.3.0

とかやると幸せになれると思います。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment