LoginSignup
9
8

More than 5 years have passed since last update.

macOS標準Vimでvimproc実行時に署名エラーが発生する問題の回避方法

Last updated at Posted at 2018-12-12

背景

Vimを愛用していて、そこそこプラグイン入れる派です。
プラグイン管理は長らくNeoBundle + vimprocにお世話になっています。
先日、久々にMac上のVimで:NeoBundleUpdateを実行したところ、エラーが出て動かなくなってしまいました。
回避方法を見つけるまで結構時間を使ってしまったので、記事にしておきたいと思います。

エラーが発生した環境

  • macOS Mojave (10.14.1)
  • Vim 8.0, macOS標準のwithout GUI版

High Sierraでは問題なかったと思いますが、自信がありません。。。
Sierraでは間違いなく問題ありませんでした。
他に心当たりが全くないので、OSアップグレードが引き金だろうと推測。

エラー内容

エラーメッセージ全文
[vimproc] function neobundle#commands#install[40]..<SNR>17_install[21]..neobundle#installer#sync[51]..neobundle#installer#get_revision_number[17]..neobundle#util#system[7]..vimproc#
system[25]..<SNR>83_system[10]..vimproc#pgroup_open[15]..<SNR>83_pgroup_open[7]..vimproc#plineopen3[6]..<SNR>83_plineopen[64]..<SNR>83_vp_pipe_open[10]..<SNR>83_libcall, line 1
[vimproc] Vim(let):dlerror = "dlopen(/Users/hrnrhty/.vim/bundle/vimproc.vim/lib/vimproc_mac.so, 0x0005): code signature in (/Users/hrnrhty/.vim/bundle/vimproc.vim/lib/vimproc_mac.so
) not valid for use in process: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed."
[vimproc] Error occurred in calling s:vp_pipe_open()
[vimproc] a:argv = ['/usr/bin/git', 'rev-parse', 'HEAD']
[vimproc] original a:argv = ['/usr/bin/git', 'rev-parse', 'HEAD']
[vimproc] Vim(if):E121: Undefined variable: fdlist
[vimproc] function neobundle#commands#install[40]..<SNR>17_install[21]..neobundle#installer#sync[70]..neobundle#installer#lock_revision[5]..neobundle#installer#get_revision_number[1
7]..neobundle#util#system[7]..vimproc#system[25]..<SNR>83_system[10]..vimproc#pgroup_open[15]..<SNR>83_pgroup_open[7]..vimproc#plineopen3[6]..<SNR>83_plineopen[64]..<SNR>83_vp_pipe_
open[10]..<SNR>83_libcall, line 1
[vimproc] Vim(let):dlerror = "dlopen(/Users/hrnrhty/.vim/bundle/vimproc.vim/lib/vimproc_mac.so, 0x0005): code signature in (/Users/hrnrhty/.vim/bundle/vimproc.vim/lib/vimproc_mac.so
) not valid for use in process: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed."
[vimproc] Error occurred in calling s:vp_pipe_open()
[vimproc] a:argv = ['/usr/bin/git', 'rev-parse', 'HEAD']
[vimproc] original a:argv = ['/usr/bin/git', 'rev-parse', 'HEAD']
[vimproc] Vim(if):E121: Undefined variable: fdlist
[vimproc] function neobundle#commands#install[40]..<SNR>17_install[21]..neobundle#installer#sync[86]..vimproc#pgroup_open[15]..<SNR>83_pgroup_open[7]..vimproc#plineopen2[6]..<SNR>83
_plineopen[64]..<SNR>83_vp_pipe_open[10]..<SNR>83_libcall, line 1
[vimproc] Vim(let):dlerror = "dlopen(/Users/hrnrhty/.vim/bundle/vimproc.vim/lib/vimproc_mac.so, 0x0005): code signature in (/Users/hrnrhty/.vim/bundle/vimproc.vim/lib/vimproc_mac.so
) not valid for use in process: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed."
[vimproc] Error occurred in calling s:vp_pipe_open()
[vimproc] a:argv = ['/usr/bin/git', 'pull', '--ff', '--ff-only']
[vimproc] original a:argv = ['/usr/bin/git', 'pull', '--ff', '--ff-only']
Error detected while processing function neobundle#commands#install[40]..<SNR>17_install[21]..neobundle#installer#sync[86]..vimproc#pgroup_open[15]..<SNR>83_pgroup_open[7]..vimproc#
plineopen2[6]..<SNR>83_plineopen[64]..<SNR>83_vp_pipe_open:
line   25:
E121: Undefined variable: fdlist
E116: Invalid arguments for function len(fdlist)
E15: Invalid expression: a:npipe != len(fdlist)

たくさん出ていますが、大事そうなのは以下。

エラーメッセージ抜粋
[vimproc] Vim(let):dlerror = "dlopen(/Users/hrnrhty/.vim/bundle/vimproc.vim/lib/vimproc_mac.so, 0x0005): code signature in (/Users/hrnrhty/.vim/bundle/vimproc.vim/lib/vimproc_mac.so
) not valid for use in process: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed."

vimproc_mac.soが署名されていないことが原因、ということでしょう。
色々調べた結果、以下の記事が参考になりました。

Mac標準のApacheにhomebrewでインストールしたPHPモジュールを指定するとエラーになる問題の解決方法

今回の現象に当てはめると、macOSのアップグレードでOS標準のVimが署名されたものになり、署名されていないvimproc_mac.soを呼んだ時にエラーが発生するようになった、と類推できます。

署名を確認してみる

まずmacOS標準Vim。

macOS標準Vimの署名確認
$ codesign -vd /usr/bin/vim
Executable=/usr/bin/vim
Identifier=com.apple.vim
Format=Mach-O thin (x86_64)
CodeDirectory v=20100 size=14558 flags=0x0(none) hashes=451+2 location=embedded
Platform identifier=5
Signature size=4485
Info.plist=not bound
TeamIdentifier=not set
Sealed Resources=none
Internal requirements count=1 size=64

署名されています。

続いて、一応vimproc_mac.soも。

vimproc_mac.soの署名確認
$ codesign -vd ~/.vim/bundle/vimproc.vim/lib/vimproc_mac.so 
/Users/hrnrhty/.vim/bundle/vimproc.vim/lib/vimproc_mac.so: code object is not signed at all

エラーメッセージに書いてあったので当然ですが、やはり署名されていません。
vimproc_mac.soに署名するのが最も良い方法のように思いますが、これはGitHubから取得したソースをローカルでビルドしたもの。この場合どのように署名すべきなのか、よくわかりません。。。

回避方法

再び先の記事を参考にすると、署名されていないもの同士であればエラーは発生せず、また、HomebrewのVimは署名されていない可能性が高そうです。
インストールしてみます。

Homebrew版Vimインストール
$ brew update
$ brew install vim --with-override-system-vi

これで、単にvimと叩けばHomebrew版Vimが起動するようになります。

続いて、署名を確認してみます。

Homebrew版Vimの署名確認
$ codesign -vd /usr/local/bin/vim
/usr/local/bin/vim: code object is not signed at all

ナイス!署名されていません、期待通りです。

Vimを起動して:NeoBundleUpdateしてみると、無事エラーは発生しなくなりました。

9
8
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
9
8