我正在尝试在全新安装的 Alpine 3.8.0 Standard 上安装 VirtualBox(主机,而不是客户端)。我正在使用 VirtualBox-5.2.12-122591-Linux_amd64.run,从下载http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html在 Linux 平台 > 所有发行版 > 64 位下。
安装程序报告了各种错误,到目前为止我已经通过安装以下软件包解决了这些错误。
- coreutils(使用 -e 标志获取 readlink 可用)
- 制作
- 海湾合作委员会
- 珀尔
- linux-headers(这可能是不需要的)
- linux-vanilla-dev
安装人员还报告:
/opt/VirtualBox/vboxdrv.sh line 501: can't create /etc/udev/rules.d/60-vboxdrv.rules: \
nonexistent directory.
我通过简单地运行解决了这个问题:
mkdir -p /etc/udev/rules.d
每次安装程序失败时,它都会提示运行 /sbin/vboxconfig 以重新启动安装过程。目前,当我这样做时,它会输出:
* service vboxdrv added to runlevel default
* service vboxballoonctrl-service added to runlevel default
* service vboxautostart-service added to runlevel default
* service vboxweb-service added to runlevel default
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: failed: Look at /var/log/vbox-install.log to find out what went wrong.
There were problems setting up VirtualBox. To re-start the set-up process, run \
/sbin/vboxconfig as root.
/var/log/vbox-install.log 包含:
make V=1 CONFIG_MODULE_SIG= -C /lib/modules/4.14.52-0-vanilla/build SUBDIRS=/tmp/vbox.0 \
SRCROOT=/tmp/vbox.0 -j1 modules
getconf: LFS_CFLAGS: unknown variable
getconf: LFS_LDFLAGS: unknown variable
getconf: LFS_LIBS: unknown variable
Makefile:948: *** "Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install \
libelf-dev, libelf-devel or elfutils-libelf-devel." Stop.
make: *** [/tmp/vbox.0/Makefile.include.footer:101: vboxdrv] Error 2
即使安装 libelf-dev 也无法解决问题。每https://pkgs.alpinelinux.org/packages,没有 libelf-devel 或 elfutils-libelf-devel 包。
另外,我似乎无法同时安装 elfutils-dev 和 libelf-dev 。如果我安装一个,然后安装另一个,apk 输出:
ERROR: elfutils-dev-0.168-r1: trying to overwrite usr/lib/libelf.so owned by \
libelf-dev-0.8.13-r3.
ERROR: elfutils-dev-0.168-r1: trying to overwrite usr/lib/libelf.a owned by \
libelf-dev-0.8.13-r3.
ERROR: elfutils-dev-0.168-r1: trying to overwrite usr/include/libelf.h owned by \
libelf-dev-0.8.13-r3.
ERROR: elfutils-dev-0.168-r1: trying to overwrite usr/include/gelf.h owned by \
libelf-dev-0.8.13-r3.
ERROR: elfutils-dev-0.168-r1: trying to overwrite usr/include/nlist.h owned by \
libelf-dev-0.8.13-r3.
这是一个问题,因为 linux-vanilla-dev 需要 elfutils-dev,而 /sbin/vboxconfig 又似乎需要 elfutils-dev。如果我在未安装 linux-vanilla-dev 的情况下运行 /sbin/vboxconfig ,则会输出:
...
vboxdrv.sh: Building VirtualBox kernel modules.
This system is currently not set up to build kernel modules.
Please install the Linux kernel "header" files matching the current kernel for adding new \
hardware support to the system.
为了尝试解决这个问题,我:
- 卸载了 linux-vanilla-dev。
- 安装了 libelf-dev。
- 重新安装了 linux-vanilla-dev。
正如预期的那样,linux-vanilla-dev 及其所有依赖项已成功安装,除了 elfutils-dev 之外。我不知道没有安装 elfutils-dev 导致的任何问题,并且我认为安装 libelf-dev 更重要,因为这是 /var/log/vbox-install.log 中的错误消息中引用的包。
尽管如此,当我运行 /sbin/vboxconfig 时,vboxdrv.sh 仍然失败,并显示“无法为 CONFIG_UNWINDER_ORC=y 生成 ORC 元数据,请安装 libelf-dev、libelf-devel 或 elfutils-libelf-devel”。尽管我已经安装了 libelf-dev (或者我相信是这样)。
跑步:
apk info | grep 'libelf-dev'
输出:
libelf-dev
运行 apk fix 会导致 apk 尝试重新安装 elfutils-dev,但失败(由于前面描述的原因),但没有报告其他问题。
我将 VirtualBox-5.2.12-122591-Linux_amd64.run 下载到 Windows 机器上,并使用 7-Zip 打开它并提取 postinst-common.sh (我相信它与 /sbin/vboxconfig 是同一文件)和 vboxdrv.sh 。我没有找到附加它们的方法,但如果有人觉得有帮助,我可以附加它们的内容(总共约 600 行)。
如果我可以提供任何其他信息,请告诉我。我仍在研究这个问题,所以如果我了解更多,我会添加它。我当前的后续步骤是:
- 调查 vboxdrv.sh 看看我是否能找到它触发该错误的原因。
- 尝试使用 strace。
谢谢你!
编辑:
- postinst-common.sh 又名 /sbin/vboxconfig:https://pastebin.com/qZ6Zdx5g
- vboxdrv.sh:https://pastebin.com/FcySqEj0
答案1
尝试安装:apk添加g++
它安装下一个软件包:
(1/3) 安装 musl-dev (1.1.20-r0) (2/3) 安装 libc-dev (0.7.1-r0) (3/3) 安装 g++ (6.4.0-r8)
安装软件包后,尝试再次运行 VirtualBox 安装脚本
答案2
太长了;你需要安装musl-dev
.
我正在构建一个内核模块并收到相同的错误消息(Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y
)。我所需要做的就是运行apk add musl-dev
它来编译。建议的修复(无论是由我make
还是gcc
我不知道)是错误的,浪费了你我的时间。elf
内核包已经指定了正确的依赖关系-dev
(例如linux-virt-dev
或linux-vanilla-dev
)。