Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

背景

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してみると、無事エラーは発生しなくなりました。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>