当前位置:首页 > 技术 > 正文内容

基于 debootstrap 构建 Debian 与 Ubuntu 根文件系统

访客 技术 2026年11月4日 1

基础环境配置

在开始制作根文件系统之前,建议将主机的软件源替换为国内镜像以提高下载速度。以下操作以 Ubuntu 20.04 环境为例。

# 备份并替换镜像源
sudo sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
sudo apt update && sudo apt upgrade -y

# 安装必要工具
# qemu-user-static: 用于在当前主机架构下模拟目标架构的运行环境
# debootstrap: Debian/Ubuntu 官方提供的基础系统构建工具
sudo apt install qemu-user-static debootstrap -y

构建基础系统架构

利用 debootstrap 命令下载基础包。可以通过 --arch 指定目标架构(如 amd64, arm64, armhf),并指定对应的发行版代号。

# 定义变量
export TARGET_ROOTFS="/mnt/custom_rootfs"
export ARCH_TYPE="arm64"
export RELEASE_CODE="bookworm" # Debian 12

# 开始第一阶段下载
sudo debootstrap --foreign --verbose --arch=$ARCH_TYPE $RELEASE_CODE $TARGET_ROOTFS http://mirrors.ustc.edu.cn/debian/

# 拷贝 QEMU 仿真器到目标系统
sudo cp /usr/bin/qemu-aarch64-static $TARGET_ROOTFS/usr/bin/

# 执行第二阶段初始化
sudo LC_ALL=C LANGUAGE=C LANG=C chroot $TARGET_ROOTFS /debootstrap/debootstrap --second-stage

系统内部配置与个性化

系统初始化完成后,需要进入 chroot 环境进行用户设置、网络配置以及常用软件的安装。

# 进入虚拟根环境
sudo chroot $TARGET_ROOTFS /bin/bash

# 1. 设置系统语言与环境
export LC_ALL=C

# 2. 修改 root 密码
passwd root

# 3. 创建标准用户
USER_NAME="developer"
useradd -m -G sudo -s /bin/bash $USER_NAME
passwd $USER_NAME

# 4. 配置主机名
echo "custom-node" > /etc/hostname

# 5. 更新内部源并安装常用软件包
apt update
apt install -y vim net-tools iputils-ping ssh wget curl

# 6. (可选) 安装桌面环境
# 若需要图形界面,可以使用 tasksel
# apt install tasksel -y
# tasksel install desktop

# 清理缓存并退出
apt clean
history -c
exit

生成文件系统镜像

完成配置后,需要将目录打包为可烧录的镜像文件(如 .img 格式)。

# 1. 统计当前系统占用的空间
SYS_SIZE=$(du -ms $TARGET_ROOTFS | cut -f1)
# 增加约 20% 的剩余空间缓冲
IMG_SIZE=$((SYS_SIZE + 500))

# 2. 创建空白镜像文件
OUTPUT_IMG="rootfs_v1.0.img"
dd if=/dev/zero of=$OUTPUT_IMG bs=1M count=$IMG_SIZE

# 3. 格式化为 ext4
mkfs.ext4 $OUTPUT_IMG

# 4. 挂载镜像并同步文件
MOUNT_DIR="/tmp/img_mount"
mkdir -p $MOUNT_DIR
sudo mount $OUTPUT_IMG $MOUNT_DIR
sudo cp -a $TARGET_ROOTFS/. $MOUNT_DIR/

# 5. 卸载并清理
sudo umount $MOUNT_DIR
rm -rf $MOUNT_DIR

# 6. 镜像优化(缩减多余空间)
e2fsck -p -f $OUTPUT_IMG
resize2fs -M $OUTPUT_IMG

至此,一个定制化的根文件系统镜像制作完成。该镜像可以直接用于嵌入式设备的烧录或在虚拟机中进行测试。

标签: Debian

相关文章

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

linux screen 用法详情 (nohup 的替代方案)

一、screen 是什么?能干嘛?screen 是一个终端复用器,可以:在一个 SSH 会话中开多个“虚拟终端”SSH 断线后,程序仍然在后台运行随时重新连接到原来的会话特别适合:nohup 的替代方案跑脚本 / 爬虫 / 训练模型运维、远程开发二、安装 screen# CentOS / Rocky / Almayum install -y screen# Debian / Ubuntuapt i...

PHPStan 有什么用?怎么用?

PHPStan 是一个 PHP 的静态分析工具,在不运行代码的情况下就能帮你发现潜在问题,比如:传错类型(把 string 传给接受 int 的函数)访问不存在的属性 / 方法null 没处理好永远不会执行到的代码数组 key/值类型不一致返回值不符合声明注释和真实类型不匹配它非常适合:想提升代码质量、减少线上 bug、统一团队风格的人(尤其是中大型项目)。一、PHPStan 有什么用(通俗点说)...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。