定制Ubuntu文件系统

本文介绍了如何从ubuntu-base包开始,通过挂载虚拟文件系统、模拟启动、安装更新和添加必要组件,构建一个功能更齐全的Ubuntu系统。过程中涉及到下载ubuntu-base、修改rootfs、模拟启动环境以及制作文件系统镜像等步骤,并提供了一个快速构建脚本的GitHub链接。
摘要由CSDN通过智能技术生成

上一篇文章介绍了如何构建一个Linux系统,里面用到了一个叫ubuntu-base的包,这个包就是个最简化的ubuntu文件系统,如果使用qemu模拟器启动这个系统会发现里面除了基础文件读写功能外啥玩意也没有,甚至没有网络?这能忍?这篇文章就介绍如何从ubuntu-base包里构建出一个功能更加完善的ubuntu系统。

获取Ubuntu-base

Ubuntu-base可以从Ubuntu-cdimage网站获取,网址为:http://cdimage.ubuntu.com/,如果你身处中国大陆,推荐从中科大镜像中下载该文件以加快下载速度,网址为:https://mirrors.ustc.edu.cn/ubuntu-cdimage/,选择你需要的版本和构架,笔者使用从中科大镜像站中下载amd_64 focal版本作为演示:

mkdir rootfs
cd rootfs
wget https://mirrors.ustc.edu.cn/ubuntu-cdimage/ubuntu-base/releases/focal/release/ubuntu-base-20.04.1-base-amd64.tar.gz
tar xvzf ubuntu-base-20.04.1-base-amd64.tar.gz
rm ubuntu-base-20.04.1-base-amd64.tar.gz

执行上面的命令之后可以得到一个rootfs目录,里面保存着Ubuntu-base的所有文件。

修改Ubuntu-base

cp -b /etc/resolv.conf rootfs/etc/resolv.conf #拷贝本地dns配置到rootfs,让网络可用
cp /usr/bin/qemu-*-static rootfs/usr/bin/ #拷贝模拟器到rootfs中,为下一步的模拟做准备
cp  -r /etc/skel rootfs/etc/ #拷贝用户配置
chmod 777 rootfs/tmp

模拟启动Ubuntu-base

这里的模拟启动和上篇文章介绍的不一样,不需要内核镜像文件,通过模拟环境模拟目标构架来安装或者修改系统中的信息并保存到rootfs里面。

1.挂载虚拟文件系统

linux系统里面有很多不占用硬盘空间的目录,例如/proc /dev /sys等这些目录是系统实时的运行信息,需要先在rootfs上挂载虚拟的文件系统才能正常模拟:

mount -v --bind /dev rootfs/dev
mount -vt devpts devpts rootfs/dev/pts -o gid=5,mode=620
mount -vt proc proc rootfs/proc
mount -vt sysfs sysfs rootfs/sys
mount -vt tmpfs tmpfs rootfs/run

启动模拟环境

完成上面的步骤后直接在根目录运行sudo chroot .就能启动模拟,在模拟环境中,刚刚修改过的rootfs就是根目录,物理机的实时环境就是模拟环境的实时环境,这事可以像普通的机器上执行命令去修改这个rootfs了,比如:

apt update && apt upgrade #更新系统
passwd root #修改root用户密码

完成修改后在模拟环境中运行exit命令就能退出模拟环境回到物理机器的终端中,退出后一定要记得卸载虚拟文件系统,否则在备份rootfs时会造成拷贝失败,物理机的实时运行环境也会受到影响,执行下面的命令就能卸载模拟环境:

umount -vt devpts rootfs/dev/pts
umount -vt proc rootfs/proc 
umount -vt sysfs rootfs/sys
umount -vt tmpfs rootfs/run
umount -v rootfs/dev

再清理掉一些垃圾文件:

rm -rf rootfs/usr/bin/qemu-*-static
rm -rf rootfs/etc/apt/sources.list.d/*.key
rm -rf rootfs/var/lib/apt/lists/*

备份制作文件系统镜像

sudo dd if=/dev/zero of=rootfs.img bs=1M count=300 #这里注意要以做好的rootfs目录大小为准定义大小bs=1M的意思是一步1M大小count=300的意思是300步,也就是做一个300M的镜像,修改这两个值就可以修改制作的镜像大小
sudo mkfs.ext4 rootfs.img
mkdir tmp
sudo mount rootfs.img tmp
sudo cp -rf rootfs/* tmp/
sudo umount tmp
sudo e2fsck -p -f rootfs.img
sudo resize2fs -M rootfs.img

快速构建

我开源了一个ubuntu文件系统的快速构建脚本,github地址:https://github.com/Jubian540/ubuntu-rootfs-build.git,项目中的README.md中有具体使用说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值