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

1.前言

一直以来都想制作一个最小化的Linux系统,这个小系统需要有常用的Linux 命令,以及定制化的某些功能。可是由于种种原因一直没能实现,最近终于有时间把它做了出来。

本文所说的精简的Linux系统主要由内核busybox,以及引导程序构成。

感谢网友[windy_ll](https://blog.csdn.net/qq_41374107)的文章,我是看着他的教程一步一步完成以下操作的。

2.安装配置内核所需要的依赖

我的环境是ubuntu20.04,初装的系统,软件源已配置为阿里的源。

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

apt update


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


此处下载的内核就是咱们将要制作的镜像系统的内核。

tar -zxvf linux-5.13.8.tar.gz 
cd linux-5.13.8


2.3 配置内核

常见的配置有以下几种:

  • make defconfig - 默认配置
  • make allyesconfig - 创建能选yes就选yes的配置
  • make allnoconfig - 创建能选no就选no的配置
  • make menuconfig - 基于ncurser的图形化界面配置

这里采用命令make defconfig使用默认的即可,如下图所示:

make defconfig


2.4 编译内核

make bzImage


这个过程有点漫长,先去洗个脸😄

如果没有什么报错,出现下图说明编译成功了。


编译好的内核文件在arch文件夹相应的架构文件夹下面,如下图所示:

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


3.2 编译busybox

make busybox install


编译完成后,会在当前目录下新增一个_install文件夹,里面就是编译好的busybox


3.3 制作根文件

删除_install目录下的linuxrc文件

cd _install/
rm -rf linuxrc


复制_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


在当前目录(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


然后将rootfs文件夹下的所用内容赋777权限。

cd ..
chmod 777 -R rootfs/


3.4 打包系统文件

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

find . | cpio -R root:root -H newc -o | gzip > ../rootfs.gz


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


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 .  


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

vim isolinux.cfg


添加如下内容

default kernel.gz initrd=rootfs.gz


4.4 生成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镜像已经制作好了,接下来就要验证一下这个小系统能不能跑起来了。

5.验证

首先将我们前面制作的ISO文件复制出来。

然后使用vmware虚拟机新建一个虚拟机。

和平常我们安装新的虚拟机系统一样,这里我们制作的ISO镜像使用了5.13.8的内核,在虚拟机制作时选择其他Linux5.X或更高版本内核64位









好了,挂载我们制作的镜像文件,开启一下看看吧。



好了,系统引导成功了。


探索一下这个小系统有什么吧?


简单试了一下,常用的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


ping一下宿主机。


宿主机对ping一下。


漂亮,双方对ping一切OK。

🇵🇸 至此我们的精简的linux镜像就制作完成了。可能还会有一些问题,比如我想添加多一点的命令,(关机,重启,vim),网络功能还有点弱,还想增加镜像的安装功能,那就等博主的后续文章吧。

特别感谢网友:「windy_ll」

原文地址:从零开始制作一个linux iso镜像

本文链接:https://my.lmcjl.com/post/6570.html

展开阅读全文

4 评论

留下您的评论.