====== FreeBSD 11.0RにしたらVirtualBoxが動かなくなった(´・ω・`) ======
先日、家鯖をFreeBSD 11.0-RELEASEに更新してからVirtualBoxが動かなくなった。起動しようとすると''VirtualBox: supR3HardenedExecDir: sysctl failed''とエラーを吐いて終了する。sysctlに失敗するってどういうこっちゃ。
当該ソースは''SUPR3HardenedMain.cpp''の1243行目付近で、VirtualBox自身の実行ファイルパスを取得してる部分。
# else /* RT_OS_FREEBSD */
int aiName[4];
aiName[0] = CTL_KERN;
aiName[1] = KERN_PROC;
aiName[2] = KERN_PROC_PATHNAME;
aiName[3] = getpid();
size_t cbPath = sizeof(g_szSupLibHardenedExePath);
if (sysctl(aiName, RT_ELEMENTS(aiName), g_szSupLibHardenedExePath, &cbPath, NULL, 0) < 0)
supR3HardenedFatal("supR3HardenedExecDir: sysctl failed\n");
g_szSupLibHardenedExePath[sizeof(g_szSupLibHardenedExePath) - 1] = '\0';
int cchLink = suplibHardenedStrLen(g_szSupLibHardenedExePath); /* paranoid? can't we use cbPath? */
# endif
何の変哲もないコードだし、特に最近変わったような雰囲気もない。原因切り分けのため、上記コードと同じ事をする簡単なテストコードをでっちあげて実行してみたら、同じように失敗する。
#include
#include
#include
int main(void)
{
int pid = getpid();
int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, pid };
printf("pid = %d\n", pid);
size_t bufSize = 1024;
char buf[bufSize];
int result = sysctl(mib, 4, buf, &bufSize, NULL, 0);
if (result < 0)
{
perror("sysctl");
}
return 0;
}
-------- 実行結果 --------
$ ./sysctltest
pid = 66245
sysctl: No such file or directory
''supR3HardenedExecDir''でググると[[https://lists.freebsd.org/pipermail/freebsd-ports/2009-June/055251.html|procfsをマウントし忘れてんじゃね?]]という投稿が出てくるが、今回の問題箇所は[[https://www.virtualbox.org/pipermail/vbox-dev/2009-December/007728.html|procfsを不要とするため]]の部分なのでprocfsをマウントしようがしまいが変わらない(大体今までprocfsマウントしてなくても動いてたし…)、と思いつつ藁をも掴む思いでマウントしてみたけど、やっぱり何の解決にもならなかった\(^o^)/
portsでソースからのインストールも試みたけどビルドがコケるし、もぅマヂ無理。リスカしょ…。
===== 参考サイト =====
* [[https://lists.freebsd.org/pipermail/freebsd-ports/2009-June/055251.html|[Call For Testing] VirtualBox for FreeBSD!]]
* [[https://www.virtualbox.org/pipermail/vbox-dev/2009-December/007728.html|[vbox-dev] [patch] FreeBSD without procfs]]
* [[https://bompopo.wordpress.com/2009/11/02/virtualbox%E3%81%8C%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F/|VirtualBoxが起動しなかった | サーバいじくり雑記]]