Rubyのスナップショットをビルド―2.1.0dev & 2.0.0対応―に記した対策のうち,「intern.hに#include
しかし,めでたしめでたしです,とはいきません.別の不具合に気づきまして,一つ一つ,対応を試みましたので,報告します.
configureで止まる
ソースファイルのダウンロードと伸張までは,問題ありません.しかし./configureの実行で,出るべきメッセージが一切出なくなりました.Cygwinの複数の環境で,ビルド時にこの不具合が発生しました.
ソースのせいではありませんでした.Rubyのビルドと別のところでも,トラブルに見舞われ,そこでふと,次のコマンドを実行したときに,原因が分かったのでした.
$ which diff /cygdrive/d/w32tex/bin/diff
このパスを見て,最近,TeXインストーラ 3を使ってインストールなりアップグレードなりを行ったことを思い出しました.そのときに,platex.exeなどの実行パスが設定され,それがRubyのビルドを行うCygwinにも反映されて*1,/usr/bin/diffよりも優先してしまった,という次第です.
対策として,diffほかの基本コマンドは/usr/binのものを使うよう,zshスクリプトを書きました.
export W32TEX_BASE="" for d in c d e f do if [ -d "/cygdrive/$d/w32tex/bin" ] then W32TEX_BASE=/cygdrive/$d/w32tex break fi done if [ -n "$W32TEX_BASE" ] then PATH=$W32TEX_BASE/bin:$PATH function w32tex-disable-exe() { for f in basename cat cmp cp curl diff dirname egrep expr grep gunzip gzcat gzip mkdir nkf rm sed sort tar tie uniq unzip zip do echo "$W32TEX_BASE/bin/$f.exe => $W32TEX_BASE/bin/w32tex_$f.exe" mv $W32TEX_BASE/bin/$f.exe $W32TEX_BASE/bin/w32tex_$f.exe done } else unset W32TEX_BASE fi
zshを起動して,
$ w32tex-disable-exe (出力:略) $ which diff /usr/bin/diff
これで,configure……いつものメッセージが出るようになりました.
gem update/installでmakeに失敗
2.1.0devで出た不具合です.
Rubyのインストールまでは,うまくいきました.which ruby,そしてgem listの出力も,問題ありません.gemパッケージをアップデートしようとすると,forkがらみの異常が発生します.
$ gem update (略) Updating json Building native extensions. This could take a while... 0 [main] ruby 4060 child_info_fork::abort: unable to remap fcntl.so to sam e address as parent (005D0000) - try running rebaseall 0 [main] ruby 6216 child_info_fork::abort: unable to remap openssl.so to same address as parent (02510000) - try running rebaseall 0 [main] ruby 4268 child_info_fork::abort: address space needed by 'fcntl.so' (0x5D0000) is already occupied (Ctrl+Cで停止)
おそらくjsonだけでなく,ビルドを行う(Pure Rubyでない)パッケージのインストールやアップデートで,同様の事態になることが予想されます.
メッセージにあるとおり,rebaseallを実行します.手順は次のとおり.
- シェルで,「find ~ -name '*.so' > ~/rebase.lst」を実行します.少し時間がかかります.
- Cygwinを使用しているプログラム(シェルのほか,emacs---cmigemoを使用しているため)を終了します.
- エクスプローラで,(Cygwinのパス)\bin\ash.exeを見つけてダブルクリックします.
- 「cd」「rebaseall -v -T rebase.lst」を実行します.少し時間がかかります.
- ashを終了します.
としたところで,いつものシェルを開いて,
$ gem update (略) Updating json Building native extensions. This could take a while... Successfully installed json-1.8.0 Parsing documentation for json-1.8.0 Installing ri documentation for json-1.8.0 Installing darkfish documentation for json-1.8.0 Done installing documentation for json after 2 seconds Gems updated: json
うまくいきました.