#build-script #docker #podman #firecracker #virtual-machine #virtualization #rootfs

app buildfs

一个与 CI 兼容的 CLI 工具,可以从可重播和可读的 TOML 构建脚本创建根文件系统镜像(用于虚拟机)

3 个版本

新版本 0.1.2 2024 年 8 月 23 日
0.1.1 2024 年 8 月 22 日
0.1.0 2024 年 8 月 21 日

358命令行工具

Download history 102/week @ 2024-08-16

每月 102 次下载

MIT 许可证

60KB
1.5K SLoC

buildfs

buildfs 是一个易于使用的 CLI 工具,旨在手动和自动(CI)使用创建可用于启动虚拟机的原始文件系统(根文件系统)镜像。它有 4 个子命令:packunpack 用于管理软件包,dry-run 用于测试软件包的正确性,以及 run 用于实际完全执行软件包。软件包可以是一个单独的 TOML 构建脚本、包含构建脚本和其他资源引用的目录,或者是一个压缩的 .tar.tar.gz 目录。

入门

  1. cargo安装 buildfs.
  2. 需要 root 权限(用于 mkfsmount/umount),因此请确保您可以在目标机器上运行 sudo,并且它运行的是 Linux 发行版。
  3. 将以下构建脚本内容插入 /tmp/build_script.toml。这是一个简单的配置,将使用 docker.io/library/debian:bookworm-slim 镜像创建一个精简的 Debian 根文件系统
[filesystem]
type = "Ext4"
size_mib = 250

[container]
engine = "Docker"
rootful = true
wait_timeout_s = 1
image = { name = "docker.io/library/debian", tag = "bookworm-slim" }

[[commands]]
script_inline = """
#!/bin/bash

apt update
apt install -y udev systemd-sysv iputils-ping curl

rm -f /etc/systemd/system/multi-user.target.wants/systemd-resolved.service
rm -f /etc/systemd/system/dbus-org.freedesktop.resolve1.service
rm -f /etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service

systemctl disable e2scrub_reap.service
rm -vf /etc/systemd/system/timers.target.wants/*

for console in ttyS0; do
    mkdir "/etc/systemd/system/serial-getty@$console.service.d/"
    cat <<'EOF' > "/etc/systemd/system/serial-getty@$console.service.d/override.conf"
[Service]
# systemd requires this empty ExecStart line to override
ExecStart=
ExecStart=-/sbin/agetty --autologin root -o '-p -- \\u' --keep-baud 115200,38400,9600 %I dumb
EOF
done

passwd -d root

rm -rf /usr/share/{doc,man,info,locale}

cat >> /etc/sysctl.conf <<EOF
# This avoids a SPECTRE vuln
kernel.unprivileged_bpf_disabled=1
EOF
"""

[[overlays]]
source_inline = """
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 1.1.1.1
"""
destination = "/etc/resolv.conf"

[export.directories]
include = [ "/bin", "/etc", "/home", "/lib", "/lib64", "/root", "/sbin", "/usr" ]
create = [ "/var/lib/dpkg", "/dev", "/proc", "/sys", "/run", "/tmp", "/var/lib/systemd" ]
  1. 确保 ~/.cargo/bin 在您的 PATH 中,以便可以访问 buildfs,并确保已安装 Docker(也支持 Podman,只需更改构建脚本中的 engine 的值并确保 Podman Unix 套接字已绑定)。
  2. 运行 sudo buildfs run -o debian.ext4 /tmp/build_script.toml 并等待它为您生成一个可使用的 debian.ext4 根文件系统!

依赖关系

~17–30MB
~498K SLoC