Firecracker 是一种开源虚拟化技术,专为创建和管理安全的多租户容器和功能服务而设计,这些服务提供无服务器运行模型。 Firecracker 在 MicroVMs 中运行工作负载,这些虚拟机结合了硬件虚拟化技术提供的安全性和隔离特性,以及容器的速度和灵活性。
# 没错就这么点
sudo pacman -S firecracker --needed
ARCH="$(uname -m)"
# 启动 Docker
sudo systemctl start docker
# 克隆 Firecracker 仓库
git clone https://github.com/firecracker-microvm/firecracker firecracker_src
# 构建 Firecracker
#
# 可以通过传递参数 "-l gnu" 来构建 GNU 版本
#
# 这将在以下位置生成 firecracker 和 jailer 二进制文件:
# `./firecracker/build/cargo_target/${toolchain}/debug`
#
sudo ./firecracker_src/tools/devtool build
# 重命名可执行文件为 "firecracker"
sudo cp ./firecracker_src/build/cargo_target/${ARCH}-unknown-linux-musl/debug/firecracker firecracker
ARCH="$(uname -m)"
release_url="https://github.com/firecracker-microvm/firecracker/releases"
latest=$(basename $(curl -fsSLI -o /dev/null -w %{url_effective} ${release_url}/latest))
curl -L ${release_url}/download/${latest}/firecracker-${latest}-${ARCH}.tgz \
| tar -xz
# 重命名可执行文件为 "firecracker"
mv release-${latest}-$(uname -m)/firecracker-${latest}-${ARCH} firecracker
docker,请提前安装。# 1. 克隆仓库
git clone https://github.com/torvalds/linux.git linux.git --depth=1
git clone https://github.com/firecracker-microvm/firecracker firecracker.git --depth=1
cd linux.git
## 2. 配置内核
cp ../firecracker.git/resources/guest_configs/microvm-kernel-ci-x86_64-6.1.config ./.config
make olddefconfig
# 你可以在这一步配置内核选项,配置方法不仅限执行 `make menuconfig`
# 你可以将 PCI 支持打开,官方也推荐启用 PCI 确保 MicroVM 的性能与安全性(方便起见,本教程不启用 PCI)
make menuconfig
## 3. 编译内核(可能超过 3 分钟,这取决于 CPU 的性能)
make vmlinux -j$(nproc)
执行上述步骤后,Kernel 镜像将会生成在 linux.git/vmlinux 文件中。(文件大小约为 30MB)
为了标准化 RootFS 中的内容,我建议你使用 Dockerfile 构建镜像并导出。
FROM docker.io/library/alpine:3.23.3
# Install utils
RUN apk add openrc \
&& apk add util-linux
# Setup agetty
RUN ln -s agetty /etc/init.d/agetty.ttyS0 \
&& echo ttyS0 > /etc/securetty \
&& rc-update add agetty.ttyS0 default
# Setup openrc
RUN rc-update add devfs boot \
&& rc-update add procfs boot \
&& rc-update add sysfs boot
# Set root password
RUN echo "root:root" | chpasswd
# 1. 准备一个合适大小的文件,示例中可用大小为 50MB,你可以通过修改后面的 `50` 来修改文件大小
# 大小最少需要 30MB
dd if=/dev/zero of=rootfs.ext4 bs=1M count=50
# 2. 创建 ext4 文件系统(不能使用 btrfs、xfs 等其他文件系统,Firecracker 只支持 ext4)
mkfs.ext4 rootfs.ext4
# 3. 挂载 RootFS
mkdir /tmp/my-rootfs
sudo mount rootfs.ext4 /tmp/my-rootfs
sudo chmod 777 /tmp/my-rootfs # 方便起见,使用 777 权限(允许读写)
# 4. 构建 Docker 镜像
docker build --tag=rootfs --file Dockerfile .
docker create --name rootfs rootfs
docker export rootfs -o rootfs.tar
docker rm rootfs
# 你可以删除 Docker 镜像
# docker rmi rootfs
# 5. 导出到 RootFS
tar -xf rootfs.tar -C /tmp/my-rootfs
# 6. 卸载 RootFS
sudo umount /tmp/my-rootfs
firectl 作为运行 Firecracker 的工具。
在 ArchLinux 发行版中,你可以安装 firectl AUR 包。# 使用 ttyS0 串口,Panic 时重启
firectl --root-drive=rootfs.ext4 --kernel=vmlinux --kernel-opts="console=ttyS0 reboot=k panic=1"
如果出现了登陆提示符,那么恭喜你,Firecracker 已经可以成功运行了。
你可以执行 reboot 退出并销毁 MicroVM。(在最小化配置下,reboot 是最可靠的退出方式)。
如果你无法登陆系统,请 pkill firectl 停止 firectl,并挂载 RootFS 镜像(rootfs.ext4),chroot 进去,接着使用 passwd 修改密码:
sudo mount rootfs.ext4 /tmp/my-rootfs
sudo chroot /tmp/my-rootfs /bin/sh
passwd
exit
sudo umount /tmp/my-rootfs
如果 MicroVM 立即结束运行,没有出现登陆提示符(终端上会出现 Kernel panic 的信息),你需要仔细检查上面的步骤,确保没有错误,因为发生了 Kernel Panic。