Linux 系统裁剪--制作一个最小化的Linux iso镜像

寸阳分阴须爱惜,休负春色与时光。这篇文章主要讲述Linux 系统裁剪--制作一个最小化的Linux iso镜像相关的知识,希望能为你提供帮助。
1.前言
一直以来都想制作一个最小化的Linux系统,这个小系统需要有常用的Linux 命令,以及定制化的某些功能。可是由于种种原因一直没能实现,最近终于有时间把它做了出来。
本文所说的精简的Linux系统主要由内核busybox,以及引导程序构成。
感谢网友[windy_ll](https://blog.csdn.net/qq_41374107)的文章,我是看着他的教程一步一步完成以下操作的。
2.安装配置内核所需要的依赖
我的环境是ubuntu20.04,初装的系统,软件源已配置为阿里的源。

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

为了保证后续软件的顺利安装先更新一下源。
apt update

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

2.1 安装依赖
==由于需要配置内核,本文的所有操作都在root用户下进行==
apt install -y make apt install -y make-guile apt install -y gcc apt install -y flex apt install -y bison apt install -y libelf-dev apt install -y openssl apt install -y libncurses-dev apt install -y libssl-dev

小插曲:就在刚刚我的ubuntu20.04 ctrl+shift + insert粘贴键不好用了,重启了一下系统又好了。读者诸君你们大可不必一个命令一个命令的去敲,使用快捷键粘贴就可以了。
2.2下载内核
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.13.8.tar.gz

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

此处下载的内核就是咱们将要制作的镜像系统的内核。
tar -zxvf linux-5.13.8.tar.gz cd linux-5.13.8

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

2.3 配置内核
常见的配置有以下几种:
  • make defconfig - 默认配置
  • make allyesconfig - 创建能选yes就选yes的配置
  • make allnoconfig - 创建能选no就选no的配置
  • make menuconfig - 基于ncurser的图形化界面配置
这里采用命令make defconfig使用默认的即可,如下图所示:
make defconfig

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

2.4 编译内核
make bzImage

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

这个过程有点漫长,先去洗个脸:smile:
如果没有什么报错,出现下图说明编译成功了。
Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

编译好的内核文件在arch文件夹相应的架构文件夹下面,如下图所示:
Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

3.制作根文件系统
3.1 下载busybox
wget https://busybox.net/downloads/busybox-1.32.1.tar.bz2

3.2 配置busybox
编译busybox与编译内核步骤基本一致,将下载好的压缩包进行解压,然后进入文件夹中,使用make defconfig配置默认编译选项,这里需要注意的是,在生成的.config配置文件中,需要设置CONFIG_STATIC=y,如果没有,添加即可,如下图所示:
cd ~/Downloads wget https://busybox.net/downloads/busybox-1.32.1.tar.bz2 tar -jxvf busybox-1.32.1.tar.bz2 cd busybox-1.32.1 make defconfig vim .config

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

3.2 编译busybox
make busybox install

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

编译完成后,会在当前目录下新增一个_install文件夹,里面就是编译好的busybox
Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

3.3 制作根文件
删除_install目录下的linuxrc文件
cd _install/ rm -rf linuxrc

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

复制_install 文件夹下的除linuxrc以外的所有文件到rootfs文件夹下面。
cd .. cd .. mkdir rootfs cd rootfs cp -r ../busybox-1.32.1/_install/bin/ . cp -r ../busybox-1.32.1/_install/sbin/ . cp -r ../busybox-1.32.1/_install/usr/ . mkdir dev proc sys

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

在当前目录(rootfs)下新增一个init文件
vim init

添加如下内容
#!/bin/shdmesg -n 1 mount -t devtmpfs none /dev mount -t proc none /proc mount -t sysfs none /sys setsid cttyhack /bin/sh

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

然后将rootfs文件夹下的所用内容赋777权限。
cd .. chmod 777 -R rootfs/

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

3.4 打包系统文件
利用命令find . | cpio -R root:root -H newc -o | gzip & gt; ../rootfs.gz将文件系统打包
find . | cpio -R root:root -H newc -o | gzip > ../rootfs.gz

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

4. 创建BIOS引导
这里我们使用syslinux来创建bios引导的一个linux iso镜像,
4.1 先下载并解压syslinux
wget https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.gz gunzip syslinux-6.03.tar.gz tar -xvf syslinux-6.03.tar

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

4.2 准备制作镜像文件所需的文件
新建一个文件夹isobios,将解压后的syslinux文件夹下面的bios/core/isolinux.bin,bios/com32/elflink/ldlinux/ldlinux.c32复制到isobios文件夹下面。
mkdir isobios cd isobios cp ../rootfs.gz . cp ../linux-5.13.8/arch/x86/boot/bzImage kernel.gz cp ../syslinux-6.03/bios/core/isolinux.bin . cp ../syslinux-6.03/bios/com32/elflink/ldlinux/ldlinux.c32 .

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

4.3 创建启动引导配置文件isolinux.cfg
vim isolinux.cfg

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

添加如下内容
default kernel.gz initrd=rootfs.gz

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

4.4 生成ISO镜像
【Linux 系统裁剪--制作一个最小化的Linux iso镜像】在isobios文件夹下面使用命令xorriso -as mkisofs -o ../testbios.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./生成iso镜像文件,如下图所示:
需要用到xorriso,要先安装
apt install -y xorriso xorriso -as mkisofs -o ../testbios.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

好了,至此我们的精简的Linux镜像已经制作好了,接下来就要验证一下这个小系统能不能跑起来了。
5.验证
首先将我们前面制作的ISO文件复制出来。
然后使用vmware虚拟机新建一个虚拟机。
和平常我们安装新的虚拟机系统一样,这里我们制作的ISO镜像使用了5.13.8的内核,在虚拟机制作时选择其他Linux5.X或更高版本内核64位
Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

好了,挂载我们制作的镜像文件,开启一下看看吧。
Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

好了,系统引导成功了。
Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

探索一下这个小系统有什么吧?
Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

简单试了一下,常用的ls,pwd,touch,ifconfig,chmod等还是有的。
如果一个linux系统没有网络功能也就失去了灵魂,接下来把我们的小系统的网络开启起来吧。
ifconfig eth0 192.168.2.110 netmask 255.255.255.0 route add default gw 192.168.2.1

Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

ping一下宿主机。
Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

宿主机对ping一下。
Linux 系统裁剪--制作一个最小化的Linux iso镜像

文章图片

漂亮,双方对ping一切OK。
:palestinian_territories: 至此我们的精简的linux镜像就制作完成了。可能还会有一些问题,比如我想添加多一点的命令,(关机,重启,vim),网络功能还有点弱,还想增加镜像的安装功能,那就等博主的后续文章吧。
特别感谢网友:「windy_ll」

    推荐阅读