
Debian构建根文件系统
Debian 不像 Ubuntu 提供 Ubuntu-Base 那样提供打包好的 rootfs, 而是提供了一个制作 rootfs 的工具 debootstrap. 下面介绍使用在 amd64 环境中使用 debootstrap 制作 aarch64/arm64 Debian rootfs 的过程.
环境:
Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm
工具:
sudo apt update
sudo apt install apt-transport-https qemu qemu-user-static qemu-system-arm binfmt-support debootstrap qemu-user-static debootstrap
qemu-system-arm 用于模拟arm架构的设备,在此平台上进行debian系统的运行演示
debootstrap 构建debian基本文件子系统的工具
qemu-user-static 用于模拟arm运行环境
创建目标文件系统目录或镜像文件
根据需求选择以下两种方式之一:
方式 1:直接使用目录
sudo mkdir -p /mnt/rootfs
方式 2:创建镜像文件并挂载
dd if=/dev/zero of=debian-rootfs.img bs=1M count=2048 status=progress
mkfs.ext4 debian-rootfs.img
sudo mkdir -p /mnt/rootfs
sudo mount -o loop debian-rootfs.img /mnt/rootfs
使用 debootstrap
创建基础系统
运行 qemu-debootstrap
,生成最小化的 Debian ARM64 系统:
sudo qemu-debootstrap --arch=arm64 --variant=minbase --foreign bullseye /mnt/rootfs https://mirrors.ustc.edu.cn/debian
-–arch:指定目标架构为
arm64
-–foreign :用于第一阶段的引导,构建基本文件系统
—bullseye:Debian 11 的代号。如果需要其他版本,可以替换为
bookworm
(Debian 12)或其他版本。/mnt/rootfs:指定存放下载内容的目录
http://mirrors.ustc.edu.cn/debian :使用中科大镜像源加速下载
-–variant 说明: minbase: 只包含必要的包和apt
buildd: 包含编译工具包
fakechroot: 包含不用root权限的包
scratchbox: 包含scratchbox(交叉编译工具链)相关包
注意:这里一定要使用qemu-debootstrap
构建,使用debootstrap
指定arm64架构仍会构建amd64架构的文件系统。
完成后,复制 QEMU 静态二进制文件到目标文件系统中:
sudo cp /usr/bin/qemu-aarch64-static /mnt/rootfs/usr/bin/
进入 chroot
环境并完成第二阶段
挂载本地设备文件到rootfs
sudo mount --bind /dev /mnt/rootfs/dev
sudo mount --bind /proc /mnt/rootfs/proc
sudo mount --bind /sys /mnt/rootfs/sys
sudo mount -t devpts devpts /mnt/rootfs/dev/pts
进入 chroot
环境:
sudo chroot /mnt/rootfs /bin/bash
运行以下命令以确认当前环境是 ARM64 架构:
dpkg --print-architecture
如果输出不是 arm64
,说明之前的步骤可能有问题,请检查是否正确指定了架构(--arch=arm64
)以及是否复制了正确的 QEMU 静态二进制文件。
执行二阶段下载:
/debootstrap/debootstrap --second-stage
等待几分钟后,终端输出“I: Base system installed successfully.”即为系统下载完成。
配置环境
设置语言和时区
在 chroot
环境中,设置语言和时区:
echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
locale-gen
update-locale LANG=en_US.UTF-8
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
dpkg-reconfigure --frontend noninteractive tzdata
换源
默认的 Debian 源可能较慢,建议切换为国内镜像源(如中科大源):
sed -i 's#http://deb.debian.org#http://mirrors.ustc.edu.cn#g' /etc/apt/sources.list
sed -i 's#http://security.debian.org#http://mirrors.ustc.edu.cn/debian-security#g' /etc/apt/sources.list
更新软件包列表:
apt update && apt upgrade -y
安装必要工具
安装常用的工具和组件:
apt install -y rsyslog udev dbus kmod openssh-server openssh-client netplan.io man vim wget net-tools sysstat tmux less wireless-regdb wireless-tools ethtool crda dosfstools parted sudo git iputils-ping systemd ifupdown htop wpasupplicant
如果需要编译工具链,可以安装 GCC 和 G++:
apt install -y gcc g++
配置 SSH 允许 root 登录:
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
配置网络信息
静态 IP 配置
创建 Netplan 配置文件 /etc/netplan/50-cloud-init.yaml
:
cat > /etc/netplan/50-cloud-init.yaml <<EOF
network:
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.6/24]
gateway4: 192.168.168.1
nameservers:
addresses: [192.168.168.1]
version: 2
EOF
应用配置:
netplan apply
DHCP 配置
如果需要动态获取 IP 地址,可以使用以下配置:
cat > /etc/netplan/50-cloud-init.yaml <<EOF
network:
ethernets:
eth0:
dhcp4: yes
version: 2
EOF
同样应用配置:
netplan apply
配置系统信息
设置主机名和 hosts 文件:
echo 'Debian10' > /etc/hostname
echo "127.0.0.1 localhost" > /etc/hosts
echo "127.0.0.1 Debian10" >> /etc/hosts
配置系统挂载磁盘
编辑 /etc/fstab 文件,添加以下内容:
vim /etc/fstab
#添加以下内容
# UNCONFIGURED FSTAB FOR BASE SYSTEM
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
配置 Swap 分区(可选)
如果需要启用 Swap 分区,可以按照以下步骤操作:
dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress # 创建 2GB 的交换空间
chmod 600 /swapfile # 设置正确的权限
mkswap /swapfile # 格式化 swap 文件
swapon /swapfile # 启用 swap 文件
echo '/swapfile none swap defaults 0 0' >> /etc/fstab # 添加到 fstab
如果需要关闭 Swap 分区,可以执行以下命令:
swapoff /swapfile
rm /swapfile
sed -i '/\/swapfile none swap defaults 0 0/d' /etc/fstab
添加用户
创建普通用户并设置密码:
useradd -m yourusername -g sudo -s /bin/bash -d /home/yourusername
# 设置密码,取消挂载,退出chroot
passwd yourusername
设置 root 用户密码:
passwd root
优化空间
删除不必要的文件以节省空间:
rm -rf /usr/share/doc/*
rm -rf /usr/share/man/*
rm -rf /usr/share/locale/*
测试镜像文件
退出 chroot
环境并卸载所有挂载点:
exit
sudo umount /mnt/rootfs/dev/pts
sudo umount /mnt/rootfs/dev
sudo umount /mnt/rootfs/proc
sudo umount /mnt/rootfs/sys
sudo umount /mnt/rootfs
使用 QEMU 测试镜像文件是否正常工作:
qemu-system-aarch64 \
-M virt \
-cpu cortex-a57 \
-m 1024 \
-kernel /path/to/vmlinuz \
-initrd /path/to/initrd.img \
-drive file=rootfs_raw.ext4,format=raw \
-append "root=/dev/vda console=ttyAMA0" \
-nographic
-M virt:指定虚拟机类型为 virt。 -cpu cortex-a57:模拟 ARM Cortex-A57 CPU。 -m 1024:分配 1GB 内存。 -kernel 和 -initrd:指定内核和 initrd 文件路径。 -drive:指定根文件系统镜像。 -append:传递内核参数。
Comments
Leave a comment