Google Drive File Stream で mount_dfsfuse に失敗してた件

High SierraGoogle Drive File Stream をインストールしたんだけど、アプリ開始時になんかエラーがでて動かない。通知センターに「エラー起きたから同期を止めた」みたいなエラーが出てた。

~/Library/Application\ Support/Google/DriveFS/Logs/drive_fs.txt には以下のログ。

2017-12-02T17:37:42ZE [123145486962688] stderr: mount_dfsfuse: the DFSFUSE file system is not available (255)
2017-12-02T17:37:42ZE [123145488572416] mount.cc:92:Mount Could not mount fuse at /Volumes/GoogleDrive.
2017-12-02T17:37:42ZE [123145488572416] core.cc:235:MaybeUpdateExitCode Terminating with error: FILE_SYSTEM_FAILURE
2017-12-02T17:37:42ZE [123145486962688] stderr: fuse: failed to mount file system: No such file or directory

kextstat すると確かに dfsfuse は無く、どういうエラーが出てるのかわからないので強引に kextutil(8) してみた。

% sudo kextutil -v 6 /Library/StagedExtensions/Applications/Google\ Drive\ File\ Stream.app/Contents/MacOS/dfsfuse.kext
Kext user-space log filter changed from 0xff2 to 0xfff.
Kext kernel-space log filter changed from 0xff2 to 0xfff.
Kext library architecture set to x86_64.
Can't stat /AppleInternal - No such file or directory.
Defaulting to kernel file '/System/Library/Kernels/kernel'
Kext library recording diagnostics for: validation authentication dependencies warnings.
Reading loaded kext info from kernel.
(kernel) User-space log flags changed from 0x0 to 0xfff.
(kernel) Received 'Get Loaded Kext Info' request from user space.
(kernel) Returning loaded kext info.
Loaded kext info:
{
}

Kext rejected due to system policy: <OSKext 0x7f8833625760 [0x7fff86190570]> { URL = "file:///Library/StagedExtensions/Applications/Google%20Drive%20File%20Stream.app/Contents/MacOS/dfsfuse.kext/", ID = "com.google.dfsfuse.filesystems.dfsfuse" }
Diagnostics for /Library/StagedExtensions/Applications/Google Drive File Stream.app/Contents/MacOS/dfsfuse.kext:
%

"Kext rejected due to system policy" でググったら以下を確認せよ、と。

% sqlite3 /private/var/db/SystemPolicyConfiguration/KextPolicy '.dump kext_policy'
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE kext_policy ( team_id TEXT, bundle_id TEXT, allowed BOOLEAN, developer_name TEXT, flags INTEGER, PRIMARY KEY (team_id, bundle_id) );
INSERT INTO kext_policy VALUES('EG7KH642X6','com.vmware.kext.vmioplug.17.1.2',1,'VMware, Inc.',8);
INSERT INTO kext_policy VALUES('EG7KH642X6','com.vmware.kext.vmx86',1,'VMware, Inc.',8);
INSERT INTO kext_policy VALUES('EG7KH642X6','com.vmware.kext.vmnet',1,'VMware, Inc.',8);
INSERT INTO kext_policy VALUES('EG7KH642X6','com.vmware.kext.vmci',1,'VMware, Inc.',8);
INSERT INTO kext_policy VALUES('EQHXZ8M8AV','com.google.dfsfuse.filesystems.dfsfuse',0,'Google, Inc.',4);
COMMIT;

きっとこの flags=0 なのが悪いんだろうなと思って KextPolicy でググってたら、
Technical Note TN2459: User-Approved Kernel Extension Loading というページが見つかった。

結論として、 System Preferences の Security & Privacy に allow ボタンがあるので押せば動くようになりました。

% sqlite3 /private/var/db/SystemPolicyConfiguration/KextPolicy '.dump kext_policy'
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE kext_policy ( team_id TEXT, bundle_id TEXT, allowed BOOLEAN, developer_name TEXT, flags INTEGER, PRIMARY KEY (team_id, bundle_id) );
INSERT INTO kext_policy VALUES('EG7KH642X6','com.vmware.kext.vmioplug.17.1.2',1,'VMware, Inc.',8);
INSERT INTO kext_policy VALUES('EG7KH642X6','com.vmware.kext.vmx86',1,'VMware, Inc.',8);
INSERT INTO kext_policy VALUES('EG7KH642X6','com.vmware.kext.vmnet',1,'VMware, Inc.',8);
INSERT INTO kext_policy VALUES('EG7KH642X6','com.vmware.kext.vmci',1,'VMware, Inc.',8);
INSERT INTO kext_policy VALUES('EQHXZ8M8AV','com.google.dfsfuse.filesystems.dfsfuse',1,'Google, Inc.',1);
COMMIT;