37 个版本

0.3.0 2024年4月11日
0.2.3 2024年3月26日
0.2.2 2023年4月16日
0.2.1 2022年11月17日
0.0.5 2019年10月30日

操作系统 类别中排名 122

MIT/Apache 协议

180KB
4.5K SLoC

uhyve - Hermit 的最小型虚拟机管理程序

crates.io Zulip Badge

简介

uhyve 是一个小型虚拟机管理程序,用于启动 Hermit 内核,Hermit 是一个针对可扩展和可预测的运行时行为进行优化的单内核操作系统,适用于高性能计算和云环境。

警告:目前,uhyve 允许从单内核内部完全访问主机文件系统,权限与运行 uhyve 的用户权限相同。因此,它不适用于需要与主机系统隔离的应用程序。

安装

需要安装 Rust 工具链。请访问 Rust 网站 并按照安装说明操作。

使用以下命令安装 uhyve:

$ cargo install --locked uhyve

需求

Linux

要检查您的系统是否支持虚拟化,您可以使用以下命令

if egrep -c '(vmx|svm)' /proc/cpuinfo > /dev/null; then echo "Virtualization support found"; fi

在 Linux 上,uhyve 依赖于基于内核的虚拟化解决方案 KVM(基于内核的虚拟机)。如果以下命令产生输出,您就可以开始了!

lsmod | grep kvm

注意:如果上述步骤不起作用,请确保在 BIOS 设置中已启用虚拟化。

macOS

免责声明:目前,uhyve 主要针对 Linux 开发。macOS 版本尚未经过充分测试,并且不支持 Linux 版本的全部功能。

必须安装 Apple 的 命令行工具。以下终端命令安装这些工具 而不使用 Apple 的 IDE Xcode

xcode-select --install

此外,包含的虚拟机管理程序基于基于 OS X Yosemite (10.10) 或更高版本的 虚拟机框架。要验证您的处理器是否支持此框架,请在您的终端运行以下命令

sysctl kern.hv_support

输出 kern.hv_support: 1 表示支持虚拟化。

从Big Sur开始,所有使用虚拟机API的过程都必须具有com.apple.security.hypervisor权限,因此必须进行签名。

从源代码构建

要从源代码构建,只需检出代码并使用cargo build

git clone https://github.com/hermitcore/uhyve.git
cd uhyve
cargo build --release

为在macOS Big Sur上运行而签名uhyve

可以使用以下命令对uhyve进行自签名。

codesign -s - --entitlements app.entitlements --force path_to_uhyve/uhyve

文件app.entitlements必须包含以下内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.hypervisor</key>
    <true/>
</dict>
</plist>

有关更多详细信息,请参阅Apple的文档

在uhyve中运行Hermit应用

使用虚拟机启动unikernel。

uhyve /path/to/the/unikernel/binary

配置

uhyve可以通过环境变量进行配置。以下变量被支持。

  • HERMIT_CPUS:指定虚拟机可能使用的核心数。
  • HERMIT_MEM:定义虚拟机的内存大小。可以使用后缀MG分别指定以兆字节或千兆字节为单位的值。
  • HERMIT_VERBOSE设置为1将使虚拟机将内核日志消息打印到终端。
  • HERMIT_GDB_PORT=port将在uhyve内部运行的应用程序中激活gdb服务器。见下文

默认情况下,加载器初始化一个包含一个核心和512 MiB RAM的系统。

示例:以下命令在一个具有4个核心和8GiB内存的虚拟机中启动演示应用程序

HERMIT_CPUS=4 HERMIT_MEM=8G uhyve /path/to/the/unikernel/binary

Hermit应用的调试(不稳定)

对(单核)应用程序的基本支持已经集成到uhyve中。通过指定变量HERMIT_GDB_PORT=port,uhyve作为gdbserver运行并等待端口port上的连接。例如,使用以下命令,uhyve在端口6677上等待连接。

HERMIT_GDB_PORT=6677 uhyve /path_to_the_unikernel/hello_world

原则上,任何具有gdb功能的IDE都应能够调试Hermit应用程序。(Eclipse,VSCode,...)

存储库hermit-rs提供了示例配置文件,以使用Visual Code调试Hermit应用程序。

Debugging Hermit apps

已知问题

  • Uhyve无法传递超过128个环境变量给unikernel。

许可

根据您的选择,许可方式为

任选其一。

贡献

除非您明确表示,否则,根据Apache-2.0许可定义的任何旨在包含在作品中的故意提交的贡献,应按照上述方式双许可,不附加任何额外条款或条件。

依赖项

~8.5MB
~162K SLoC