パスワードを忘れた? アカウント作成
12647584 journal
Ruby

t-nissieの日記: 【電脳】Windows 10にgnupackでインストールしたCygwinのRubyをRuby 2.3にしてみた【危険】

日記 by t-nissie

Windows 10にgnupackでインストールしたCygwinのRubyをRuby 2.3にしてみた。
ちゃんと動いているRubyを消してまでやるべきことではなかった。
cannot load such file -- win32/resolv (LoadError) を回避したり、面倒。

LANG=C apt-cyg show | grep ruby
LANG=C apt-cyg remove ruby rubygems ruby-io-console ruby-json ruby-minitest4 ruby-psych ruby-rake ruby-rdoc
 
LANG=C apt-cyg install libyaml-devel zlib-devel openssl-devel
LANG=C apt-cyg install libreadline-devel libxml2-devel
LANG=C apt-cyg install libxslt-devel libmysqlclient-devel libgmp-devel
LANG=C apt-cyg install libffi-devel libgdbm-devel xorg-x11-devel tcl-devel tcl-tk-devel
 
wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.xz
sha1sum ruby-2.3.0.tar.xz | grep 96e620e38af351c8da63e40cfe217ec79f912ba1
tar xf ruby-2.3.0.tar.xz
mkdir Shinobi
cd Shinobi/
../configure
make
make install
gem install ulmul

gem install ulmul では cannot load such file -- win32/resolv (LoadError) という
エラーが出たので、/usr/local/lib/ruby/2.3.0/resolv.rb を以下のように編集して回避した。
win32云々のエラーが出る場合には、このように適当なファイルからcygwinの項を削ればうまくゆく場合があるようだ。
Cygwinが十分UNIXに近くなっているからか。(Cygwinのパッケージ ruby-2.2.3-1-src.tar.xz の中のパッチを参考にした。)

$ gem install ulmul
/usr/local/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- win32/resolv (LoadError)
        from /usr/local/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from /usr/local/lib/ruby/2.3.0/resolv.rb:971:in `default_config_hash'
          :

--- /usr/local/lib/ruby/2.3.0/resolv.rb~    2015-11-10 20:48:14.000000000 +0900
+++ /usr/local/lib/ruby/2.3.0/resolv.rb    2016-01-11 13:11:03.461135400 +0900
@@ -168,7 +168,7 @@
 
   class Hosts
     begin
-      raise LoadError unless /mswin|mingw|cygwin/ =~ RUBY_PLATFORM
+      raise LoadError unless /mswin|mingw/ =~ RUBY_PLATFORM
       require 'win32/resolv'
       DefaultFileName = Win32::Resolv.get_hosts_path
     rescue LoadError
@@ -967,7 +967,7 @@
         if File.exist? filename
           config_hash = Config.parse_resolv_conf(filename)
         else
-          if /mswin|cygwin|mingw|bccwin/ =~ RUBY_PLATFORM
+          if /mswin|mingw|bccwin/ =~ RUBY_PLATFORM
             require 'win32/resolv'
             search, nameserver = Win32::Resolv.get_resolv_info
             config_hash = {}

また、apt-cyg install github-markdownなど、
拡張ライブラリのコンパイルが必要なgemのインストールが
unable to remapというエラーでうまくいかない

# gem install github-markdown
Building native extensions.  This could take a while...
      0 [main] ruby 5812 child_info_fork::abort: address space needed by 'digest.so' (0x27E0000) is already occupied
      1 [main] ruby 5848 child_info_fork::abort: unable to remap digest.so to same address as parent (0x27E0000) - try running rebaseall
      1 [main] ruby 5840 child_info_fork::abort: unable to remap openssl.so to same address as parent (0x2A60000) - try running rebaseall
      0 [main] ruby 5284 child_info_fork::abort: unable to remap digest.so to same address as parent (0x27E0000) - try running rebaseall

のような場合は、Cygwinで"fatal error - unable to remap"と言われたに書いてある通り、
ashを直接ダブルクリックして、開いたコマンドプロンプトから

/usr/bin/find /usr/local -name '*.so' > $TMP/ruby-so.lst
/bin/rebaseall -T $TMP/ruby-so.lst -v

とする。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー

読み込み中...