💾 想要快速创建一个 Ubuntu 根文件系统(RootFS)?
🔹 用于嵌入式开发? 想在 ARM 设备上运行 Ubuntu?
🔹 用于虚拟机? 需要生成可启动的 Ubuntu 磁盘镜像?
🔹 用于容器、Chroot? 需要一个最小化的 Ubuntu 环境?
create_rootfs.sh
让你轻松自动化构建 Ubuntu 根文件系统,并生成一个可引导的磁盘镜像! 🎯
📜 create_rootfs.sh
介绍
🚀 这个 Bash 脚本能够自动创建一个 Ubuntu 根文件系统(RootFS),并生成虚拟磁盘镜像,主要功能包括:
✅ 支持多种 CPU 架构(arm64
、armhf
等)
✅ 使用 debootstrap
创建最小化 Ubuntu 系统
✅ 自动配置用户、网络、语言环境等系统设置
✅ 生成 .img
虚拟磁盘镜像,可用于 QEMU 或烧录到物理设备
✅ 基于 qemu-debootstrap
,支持在 x86 机器上交叉构建 ARM RootFS
🔧 核心功能解析
1️⃣ 用户自定义参数
脚本支持用户自定义以下选项:
ARCH="arm64" # 目标架构(默认 arm64)
DISTRO="bionic" # Ubuntu 版本(默认 bionic)
MIRRORSITE="https://mirrors.huaweicloud.com/ubuntu-ports"
VMDK_SIZE="4G" # 磁盘大小(默认 4G)
EXTRA_PKGS="sudo,apt-utils,bash-completion,net-tools,openssh-server,vim"
✅ 支持的架构: arm64
、armhf
、x86_64
✅ 支持的 Ubuntu 版本: bionic
(18.04)、focal
(20.04)、jammy
(22.04)
✅ 默认安装 SSH、网络工具、文本编辑器
2️⃣ 解析用户输入
脚本允许用户自定义架构、Ubuntu 版本、镜像大小等参数:
usage() {
echo "Usage: $0 [options]"
echo " -a, --arch Set target architecture"
echo " -d, --distro Set Ubuntu version"
echo " -m, --mirror Set Ubuntu mirror site"
echo " -s, --size Set virtual disk size"
echo " -p, --packages Set extra packages to install"
exit 0
}
✅ 示例:
./create_rootfs.sh -a arm64 -d focal -s 8G -p "nano,curl,wget"
这将创建一个 8G 大小的 ARM64 Ubuntu 20.04 根文件系统,并安装 nano、curl、wget
。
3️⃣ 安装必要的工具
脚本会自动检查并安装 debootstrap
、qemu-user-static
、parted
等工具:
install_dependencies() {
local required=(debootstrap qemu-user-static qemu-system parted)
for cmd in "${required[@]}"; do
if ! command -v "$cmd" &>/dev/null; then
sudo apt-get install -y "$cmd"
fi
done
}
✅ 确保 RootFS 生成所需的工具已安装
✅ 如果缺失,自动安装,避免出错
4️⃣ 创建虚拟磁盘并格式化
为了存储 RootFS,我们需要创建一个 .img
文件,并在其上创建一个 ext4
分区:
create_virtual_disk() {
qemu-img create -f raw "$VMDK_IMG" "$VMDK_SIZE"
sudo parted -s "$VMDK_IMG" mklabel msdos
sudo parted -s "$VMDK_IMG" mkpart primary ext4 0% 100%
LOOP_DEV=$(sudo losetup --show --find --partscan "$VMDK_IMG")
sudo mkfs.ext4 -L rootfs "${LOOP_DEV}p1"
sudo mount "${LOOP_DEV}p1" "$ROOTFS_DIR"
}
✅ 使用 qemu-img
创建虚拟磁盘文件
✅ 使用 parted
分区,并格式化为 ext4
✅ 自动挂载到 rootfs/
目录
5️⃣ 使用 debootstrap
创建最小化 Ubuntu
create_rootfs() {
sudo qemu-debootstrap --arch="$ARCH" --components="$COMPONENTS" \
--include="$EXTRA_PKGS" "$DISTRO" "$ROOTFS_DIR" "$MIRRORSITE"
}
✅ qemu-debootstrap
允许在 x86 上交叉构建 ARM RootFS
✅ 只安装最小化 Ubuntu 系统,避免不必要的软件
✅ 可自定义额外安装的包,如 vim、ssh、net-tools
6️⃣ 配置网络
configure_network() {
cat <<EOF | sudo tee "$ROOTFS_DIR/etc/network/interfaces"
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
EOF
}
✅ 默认使用 DHCP 自动获取 IP
✅ 适用于虚拟机或物理设备启动后联网
7️⃣ 创建默认用户
configure_users() {
sudo chroot "$ROOTFS_DIR" bash -c "
echo 'root:root' | chpasswd
useradd -m -s /bin/bash ubuntu
echo 'ubuntu:ubuntu' | chpasswd
usermod -aG sudo ubuntu
"
}
✅ 创建 ubuntu
账户,默认密码 ubuntu
✅ 添加到 sudo
组,允许执行管理操作
8️⃣ 设置系统语言
configure_locale() {
sudo chroot "$ROOTFS_DIR" locale-gen en_US.UTF-8
}
✅ 避免 SSH 远程登录时出现 LC_ALL
相关错误
9️⃣ 进入 Chroot 进行手动操作
在 RootFS 构建完成后,脚本会切换到 Chroot 环境:
echo "Switching root to $ROOTFS_DIR..."
sudo chroot "$ROOTFS_DIR" /bin/bash --rcfile <(echo 'PS1="(chroot)> "')
✅ 可以手动执行 apt install
进行额外配置
🚀 运行示例
📌 创建 ARM64 Ubuntu 20.04 RootFS
sudo ./create_rootfs.sh -a arm64 -d focal -s 4G
📌 创建 Ubuntu 22.04,增加 SSH & Vim
sudo ./create_rootfs.sh -a arm64 -d jammy -s 8G -p "openssh-server,vim"
📌 进入 Chroot 进行手动操作
chroot rootfs /bin/bash
🎯 适用场景
✅ 嵌入式开发(ARM 设备上的 Ubuntu)
✅ 虚拟机启动盘(QEMU、KVM)
✅ 系统恢复(烧录到 SD 卡或 U 盘)
✅ 容器环境(快速构建最小化 Ubuntu)
📢 结语
🚀 你是否需要一个快速可用的 Ubuntu 根文件系统?create_rootfs.sh
让你轻松构建 💾
💬 欢迎留言讨论,你的支持是我们更新的动力! 👍 记得:
📌 点赞 💖 关注 🌟 评论 💬 转发 🚀