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 评论