中田真秀(なかたまほ)のブログ

研究について、日常について、その他。

OS X YosemiteとMacportsでtuntap (openconnect)を用いる方法

2014-10-31 19:55:28 | 日記
OS X Yosemiteからはkernel extensionについて署名されてない場合読み込まないことになった。従って、Macportsなどでコンパイルしたkernel extensionについてはロードできないということになる。

例えば、tuntap (openconnect), fuseなどは使えない...
openconnectは理研にVPNするときに使うのでこれは致命的である!!

ここで正攻法としては署名するには、となるのだがそうすると手前でコンパイルしたものは使えない。

一時的な解決法として強制的に署名されてないバイナリを使えるようにする、ということをopenconnect(tuntap)の場合について紹介する。
$ sudo port install openconnect


$ sudo nvram boot-args="kext-dev-mode=1"

これで署名されてないkernel extensionを使えるようになる。
つぎに、

$ sudo cp -r /opt/local/Library/Extensions/tap.kext /Library/Extensions/
$ sudo cp -r /opt/local/Library/Extensions/tun.kext /Library/Extensions/

/Library/LaunchDaemons/tap.plist, /Library/LaunchDaemons/tun.plist

$ cat /Library/LaunchDaemons/tap.plist
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<false/>
<key>Label</key>
<string>tap</string>
<key>ProgramArguments</key>
<array>
<string>/sbin/kextload</string>
<string>/Library/Extensions/tap.kext</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/dev/null</string>
<key>StandardOutPath</key>
<string>/dev/null</string>
<key>UserName</key>
<string>root</string>
</dict>
</plist>

$ cat /Library/LaunchDaemons/tun.plist
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<false/>
<key>Label</key>
<string>tun</string>
<key>ProgramArguments</key>
<array>
<string>/sbin/kextload</string>
<string>/Library/Extensions/tun.kext</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/dev/null</string>
<key>StandardOutPath</key>
<string>/dev/null</string>
<key>UserName</key>
<string>root</string>
</dict>
</plist>


とする。


起動する(リブートしてもよい)。

$ launchctl load -w /Library/LaunchDaemons/tap.plist
$ launchctl load -w /Library/LaunchDaemons/tun.plist


これでtuntap(openconnect)が使えるようになる。再起動しても有効である。

お疲れ様でした。