?? 想要快速創(chuàng)建一個(gè) Ubuntu 根文件系統(tǒng)(RootFS)?
?? 用于嵌入式開發(fā)? 想在 ARM 設(shè)備上運(yùn)行 Ubuntu?
?? 用于虛擬機(jī)? 需要生成可啟動(dòng)的 Ubuntu 磁盤鏡像?
?? 用于容器、Chroot? 需要一個(gè)最小化的 Ubuntu 環(huán)境?
create_rootfs.sh 讓你輕松自動(dòng)化構(gòu)建 Ubuntu 根文件系統(tǒng),并生成一個(gè)可引導(dǎo)的磁盤鏡像! ??
?? create_rootfs.sh 介紹
?? 這個(gè) Bash 腳本能夠自動(dòng)創(chuàng)建一個(gè) Ubuntu 根文件系統(tǒng)(RootFS),并生成虛擬磁盤鏡像,主要功能包括:
? 支持多種 CPU 架構(gòu)(arm64、armhf 等)
? 使用 debootstrap 創(chuàng)建最小化 Ubuntu 系統(tǒng)
? 自動(dòng)配置用戶、網(wǎng)絡(luò)、語言環(huán)境等系統(tǒng)設(shè)置
? 生成 .img 虛擬磁盤鏡像,可用于 QEMU 或燒錄到物理設(shè)備
? 基于 qemu-debootstrap,支持在 x86 機(jī)器上交叉構(gòu)建 ARM RootFS
?? 核心功能解析
1?? 用戶自定義參數(shù)
腳本支持用戶自定義以下選項(xiàng):
ARCH="arm64" # 目標(biāo)架構(gòu)(默認(rèn) arm64)
DISTRO="bionic" # Ubuntu 版本(默認(rèn) bionic)
MIRRORSITE="https://mirrors.huaweicloud.com/ubuntu-ports"
VMDK_SIZE="4G" # 磁盤大小(默認(rèn) 4G)
EXTRA_PKGS="sudo,apt-utils,bash-completion,net-tools,openssh-server,vim"
? 支持的架構(gòu): arm64、armhf、x86_64
? 支持的 Ubuntu 版本: bionic(18.04)、focal(20.04)、jammy(22.04)
? 默認(rèn)安裝 SSH、網(wǎng)絡(luò)工具、文本編輯器
2?? 解析用戶輸入
腳本允許用戶自定義架構(gòu)、Ubuntu 版本、鏡像大小等參數(shù):
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"
這將創(chuàng)建一個(gè) 8G 大小的 ARM64 Ubuntu 20.04 根文件系統(tǒng),并安裝 nano、curl、wget。
3?? 安裝必要的工具
腳本會(huì)自動(dòng)檢查并安裝 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 生成所需的工具已安裝
? 如果缺失,自動(dòng)安裝,避免出錯(cuò)
4?? 創(chuàng)建虛擬磁盤并格式化
為了存儲(chǔ) RootFS,我們需要?jiǎng)?chuàng)建一個(gè) .img 文件,并在其上創(chuàng)建一個(gè) ext4 分區(qū):
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 創(chuàng)建虛擬磁盤文件
? 使用 parted 分區(qū),并格式化為 ext4
? 自動(dòng)掛載到 rootfs/ 目錄
5?? 使用 debootstrap 創(chuàng)建最小化 Ubuntu
create_rootfs() {
sudo qemu-debootstrap --arch="$ARCH" --components="$COMPONENTS" \
--include="$EXTRA_PKGS" "$DISTRO" "$ROOTFS_DIR" "$MIRRORSITE"
}
? qemu-debootstrap 允許在 x86 上交叉構(gòu)建 ARM RootFS
? 只安裝最小化 Ubuntu 系統(tǒng),避免不必要的軟件
? 可自定義額外安裝的包,如 vim、ssh、net-tools
6?? 配置網(wǎng)絡(luò)
configure_network() {
cat <<EOF | sudo tee "$ROOTFS_DIR/etc/network/interfaces"
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
EOF
}
? 默認(rèn)使用 DHCP 自動(dòng)獲取 IP
? 適用于虛擬機(jī)或物理設(shè)備啟動(dòng)后聯(lián)網(wǎng)
7?? 創(chuàng)建默認(rèn)用戶
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
"
}
? 創(chuàng)建 ubuntu 賬戶,默認(rèn)密碼 ubuntu
? 添加到 sudo 組,允許執(zhí)行管理操作
8?? 設(shè)置系統(tǒng)語言
configure_locale() {
sudo chroot "$ROOTFS_DIR" locale-gen en_US.UTF-8
}
? 避免 SSH 遠(yuǎn)程登錄時(shí)出現(xiàn) LC_ALL 相關(guān)錯(cuò)誤
9?? 進(jìn)入 Chroot 進(jìn)行手動(dòng)操作
在 RootFS 構(gòu)建完成后,腳本會(huì)切換到 Chroot 環(huán)境:
echo "Switching root to $ROOTFS_DIR..."
sudo chroot "$ROOTFS_DIR" /bin/bash --rcfile <(echo 'PS1="(chroot)> "')
? 可以手動(dòng)執(zhí)行 apt install 進(jìn)行額外配置
?? 運(yùn)行示例
?? 創(chuàng)建 ARM64 Ubuntu 20.04 RootFS
sudo ./create_rootfs.sh -a arm64 -d focal -s 4G
?? 創(chuàng)建 Ubuntu 22.04,增加 SSH & Vim
sudo ./create_rootfs.sh -a arm64 -d jammy -s 8G -p "openssh-server,vim"
?? 進(jìn)入 Chroot 進(jìn)行手動(dòng)操作
chroot rootfs /bin/bash
?? 適用場景
? 嵌入式開發(fā)(ARM 設(shè)備上的 Ubuntu)
? 虛擬機(jī)啟動(dòng)盤(QEMU、KVM)
? 系統(tǒng)恢復(fù)(燒錄到 SD 卡或 U 盤)
? 容器環(huán)境(快速構(gòu)建最小化 Ubuntu)
?? 結(jié)語
?? 你是否需要一個(gè)快速可用的 Ubuntu 根文件系統(tǒng)?create_rootfs.sh 讓你輕松構(gòu)建 ??
?? 歡迎留言討論,你的支持是我們更新的動(dòng)力! ?? 記得:
?? 點(diǎn)贊 ?? 關(guān)注 ?? 評(píng)論 ?? 轉(zhuǎn)發(fā) ??