想要快速创建一个 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 让你轻松构建
欢迎留言讨论,你的支持是我们更新的动力! 记得: 点赞 关注 评论 转发