LoginSignup
12
7

More than 3 years have passed since last update.

macOSをCatalinaにアップデートしたらdocker-syncが動かなくなって調べたこと

Posted at

まえおき

Xcodeを過信してたらRubyから苦情もらった(docker-sync動かないorz) - https://qiita.com/CeMoReOn/items/9abb837727af5594fc0f

っていうタイムリーな記事があったので、これは rbenvとかhomebrew経由でRuby入れないとダメなのかなー・・・と思っていたけど、
Mac付属のRubyでも一応動いたのでメモっとく。

ちなみに、次のMacバージョンからそもそもRubyが付属しなくなるという噂 もあるので、この記事の賞味期限はきっとかなり短いだろう。

OSをアップデートした直後

$ docker-sync-stack start
-bash: /usr/local/bin/docker-sync-stack: /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby: bad interpreter: No such file or directory

前評判のとおり、こんなかんじのエラーは出る。

$ which ruby
/usr/bin/ruby
$ ls -l /usr/bin/ruby
-r-xr-xr-x  1 root  wheel  36624  9 30 05:28 /usr/bin/ruby

Rubyのバイナリ自体はある。

$ ls /System/Library/Frameworks/Ruby.framework/
Resources/ Ruby       Versions/ 
$ ls /System/Library/Frameworks/Ruby.framework/Versions/2.6/
Resources/      Ruby            _CodeSignature/ usr/

このあたりで、「あー、Ruby 2.3じゃなくなったのね」と察しがつく。

docker-syncを入れ直す

$ sudo gem uninstall docker-sync
$ sudo gem install docker-sync
$ docker-sync-stack start
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/include/ruby.h

You might have to install separate package for the ruby development
environment, ruby-dev or ruby-devel for example.

エラーの種類が変わった。

エラー文言でぐぐると

xcode-select --install とか xcodebuild ... みたいなコマンド叩くといいみたいなのが出てくるが、環境によっては多分それでは無理っぽい。(自分の場合はうまくいかなかった)

Xcode 11にする

これは実際に関係あるのかどうかわからないが、
とりあえず xcode-select --installxcodebuild ... を叩くだけではXcode11にはならない。

e9070a00-c7ec-49d4-a082-c59e7128ec69.jpg

なので、App StoreからXcode 11を落としてくる。

image.png

ついでに、AppleのDeveloper向けサイトからコマンドラインツールも落としてくる。

image.png

11になったことを確認。

image.png

そもそものエラーの出どころを見てみる

mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/include/ruby.h

You might have to install separate package for the ruby development
environment, ruby-dev or ruby-devel for example.

これはそもそもdocker-syncに関係のないエラーだ。ということで、エラーの出どころを見てみる。

/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb
  topdir = File.dirname(File.dirname(__FILE__))
  path = File.expand_path($0)
  until (dir = File.dirname(path)) == path
    if File.identical?(dir, topdir)
      $extmk = true if %r"\A(?:ext|enc|tool|test)\z" =~ File.basename(path)
      break
    end
    path = dir
  end
  $extmk ||= false
  if not $extmk and File.exist?(($hdrdir = RbConfig::CONFIG["rubyhdrdir"]) + "/ruby/ruby.h")
    $topdir = $hdrdir
    $top_srcdir = $hdrdir
    $arch_hdrdir = RbConfig::CONFIG["rubyarchhdrdir"]
  elsif File.exist?(($hdrdir = ($top_srcdir ||= topdir) + "/include")  + "/ruby.h")
    $topdir ||= RbConfig::CONFIG["topdir"]
    $arch_hdrdir = "$(extout)/include/$(arch)"
  else
    abort <<MESSAGE
mkmf.rb can't find header files for ruby at #{$hdrdir}/ruby.h

You might have to install separate package for the ruby development
environment, ruby-dev or ruby-devel for example.
MESSAGE
  end

RbConfig::CONFIG["rubyarchhdrdir"] RbConfig::CONFIG["topdir"] あたりがキモのようだ。

このキーワードでぐぐると

こんなページが出てきた。

$ ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0
$ ls /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0
ruby            ruby.h          universal-darwin19

お、ちゃんと ruby.h あるじゃん?

ってことはいけるんじゃね?

あらためてdocker-syncしてみる

$ docker-sync start
          ok  Starting unison for sync panel-workspace-sync

あ、動いたw

まとめ

  • docker-syncをインストールしなおす
  • Xcode 11 + コマンドラインツール 11にする

で解決したのかなぁ・・・

(どこが解決ポイントだったのかは自分でもわかっていない)

12
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
7