制作最小Linux系统仅需十分钟

2,025 阅读3分钟

本文正在参与 “走过Linux 三十年”话题征文活动

很高兴参加这次征文活动,借这次机会向Linux开源项目致敬!

这次给大家分享一次Linux系统制作的文章,Linux的模块化,简单化值得我们学习,加油!

制作环境

vmware 虚拟机软件

虚拟机1:安装系统 Ubuntu20

虚拟机2:一块虚拟磁盘 2 G

制作步骤

制作系统的大致流程:虚机1将最小系统制作完成后,将2G的虚拟磁盘,挂载到虚机2环境上运行。

首先进入到 虚机1, 将2G虚拟磁盘 挂载/mnt目录下

lsblk.png

进入/mnt目录中,grub-install 生成相关配置文件及结构

--root-directory 指定虚拟磁盘设备

cd /mnt
grub-install --root-directory=/mnt /dev/sda

执行后, 目录会生成boot目录,及子目录grub

grub-install.png

拷贝本机系统中内核文件到/mnt/boot目录

cd /mnt/boot
cp /boot/vmlinuz-5.11.0-27-generic vmlinuz
cp /boot/initrd.img-5.11.0-27-generic initrd.img

创建grup.cfg 引导配置文件

vim /mnt/boot/grub/grub.cfg

配置内容

default=0
timeout=10
menuentry 'mini ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-02c4dcdd-de2c-43bf-9757-3043aa5735c6' {
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_msdos
        insmod ext2
        set root='hd0,msdos5'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5 d220d03a-f1bd-4d4f-87a0-e15cf9d13418 
        else
          search --no-floppy --fs-uuid --set=root d220d03a-f1bd-4d4f-87a0-e15cf9d13418 
        fi
        linux   /boot/vmlinuz root=UUID=d220d03a-f1bd-4d4f-87a0-e15cf9d13418 ro locale=en_US quiet enforcing=0
        initrd  /boot/initrd.img
}

注意:UUID 各个磁盘不一致, 可以使用以下命令查看 ls -l /dev/disk/by-uuid/

uuid.png

创建linux目录结构

cd /mnt
mkdir -pv {bin,dev,etc,lib,lib64,proc,sys}

拷贝基础命令

cp /bin/bash /mnt/bin
cp /bin/ls /mnt/bin
cp /bin/echo /mnt/bin
cp /bin/sh /mnt/bin
cp /bin/dash /mnt/bin

拷贝依赖动态库

创建/lib/x86_64-linux-gnu目录

mkdir /mnt/lib/x86_64-linux-gnu

bash依赖的库文件

bash-ldd.png

cp /lib/x86_64-linux-gnu/libtinfo.so.6 /mnt/lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libdl.so.2 /mnt/lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libc.so.6 /mnt/lib/x86_64-linux-gnu
cp /lib64/ld-linux-x86-64.so.2 /lib64

其他依赖的库文件

cp /usr/lib/x86_64-linux-gnu/libc.so /mnt/lib/x86_64-linux-gnu
cp /usr/lib/x86_64-linux-gnu/libc.so.6 /mnt/lib/x86_64-linux-gnu
cp /usr/lib/x86_64-linux-gnu/libdl.so /mnt/lib/x86_64-linux-gnu
cp /usr/lib/x86_64-linux-gnu/libdl.so.2 /mnt/lib/x86_64-linux-gnu
cp /usr/lib/x86_64-linux-gnu/libselinux.so.1 /mnt/lib/x86_64-linux-gnu
cp /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0 /mnt/lib/x86_64-linux-gnu/
cp /usr/lib/x86_64-linux-gnu/libpthread.so.0 /mnt/lib/x86_64-linux-gnu/

创建欢迎脚本

vim /mnt/init

新增内容

#!/bin/bash
echo -e "\t Welcome to \033[31mMy Mini Ubuntu Linux\033[0m"

设置执行权限

chmod +x /mnt/init

测试用chroot命令,检查虚拟环境是否有问题

chroot /mnt

最后sync写入下磁盘

sync

上面步骤做完,最小系统就已经制作完成了。

tree.png

系统启动

首先在 vmware 虚机2 设置页面中, 选择2G虚拟磁盘

虚机2配置.png

启动后,grub页面

grub-mini-ubuntu.png

进入linux系统

mini-ubuntu.png