3 个版本
新版本 0.1.2 | 2024 年 8 月 23 日 |
---|---|
0.1.1 | 2024 年 8 月 22 日 |
0.1.0 | 2024 年 8 月 21 日 |
358 在 命令行工具 中
每月 102 次下载
60KB
1.5K SLoC
buildfs
buildfs
是一个易于使用的 CLI 工具,旨在手动和自动(CI)使用创建可用于启动虚拟机的原始文件系统(根文件系统)镜像。它有 4 个子命令:pack
和 unpack
用于管理软件包,dry-run
用于测试软件包的正确性,以及 run
用于实际完全执行软件包。软件包可以是一个单独的 TOML 构建脚本、包含构建脚本和其他资源引用的目录,或者是一个压缩的 .tar
或 .tar.gz
目录。
入门
cargo安装 buildfs
.- 需要 root 权限(用于
mkfs
和mount/umount
),因此请确保您可以在目标机器上运行sudo
,并且它运行的是 Linux 发行版。 - 将以下构建脚本内容插入
/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" ]
- 确保
~/.cargo/bin
在您的 PATH 中,以便可以访问buildfs
,并确保已安装 Docker(也支持 Podman,只需更改构建脚本中的engine
的值并确保 Podman Unix 套接字已绑定)。 - 运行
sudo buildfs run -o debian.ext4 /tmp/build_script.toml
并等待它为您生成一个可使用的debian.ext4
根文件系统!
依赖关系
~17–30MB
~498K SLoC