?? 一鍵構(gòu)建 Ubuntu 根文件系統(tǒng) | create_rootfs.sh 深度解析

?? 想要快速創(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ā) ??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容