Vmware的Ubuntu构建极简版Linux发行版

1.安装号所需文件

复制代码
sudo apt update && sudo apt install -y linux-source build-essential debootstrap squashfs-tools grub-pc-bin xorriso qemu-system-x86 cpio mtools

创建专属目录,避免文件混乱

复制代码
mkdir -p ~/minilinux/{kernel,rootfs,iso}

进入该文件夹

复制代码
cd ~/minilinux

2.构建 Ubuntu 最小根文件系统

复制代码
sudo debootstrap --arch=amd64 jammy ./rootfs http://mirrors.aliyun.com/ubuntu/

该命令会下载约 200MB 左右的基础文件,等待执行完成即可。

3.裁剪根文件系统

进入根文件系统的chroot环境

复制代码
sudo chroot ./rootfs

卸载无用包(按需删减,保留核心即可)

复制代码
apt remove -y man-db manpages wireless-tools network-manager xserver-common

apt autoremove -y

apt clean

设置 root 密码(必须,否则无法登录)

复制代码
passwd root

退出chroot环境

复制代码
exit

4.制作可引导的ISO镜像

创建iso/casper目录,在~/minilinux目录下执行以下命令,创建所需的目录结构

复制代码
sudo mkdir -p ./iso/casper

-p参数的作用:递归创建目录,如果父目录(iso)已存在,只创建子目录(casper);如果父目录不存在,会一并创建,避免 "目录不存在" 的错误。

打包根文件系统为squashfs压缩镜像

复制代码
sudo mksquashfs ./rootfs ./iso/casper/filesystem.squashfs -comp xz

复制当前系统的内核和initrd到ISO目录

复制代码
sudo cp /boot/vmlinuz-$(uname -r) ./iso/casper/vmlinuz

sudo cp /boot/initrd.img-$(uname -r) ./iso/casper/initrd

5.创建 GRUB 引导配置

复制代码
mkdir -p ./iso/boot/grub

sudo tee ./iso/boot/grub/grub.cfg <<EOF

set default="0"

set timeout=5

menuentry "Minimal Linux" {

    linux /casper/vmlinuz boot=casper root=/dev/ram0 quiet splash

    initrd /casper/initrd

}

EOF

6.生成ISO镜像

复制代码
sudo grub-mkrescue -o ./minilinux.iso ./iso/

验证镜像生成成功

复制代码
ls -lh ./minilinux.iso

发现成功生成

7.启动Linux

在当前minilinux目录下执行命令,直接模拟启动镜像,适合快速测试

复制代码
qemu-system-x86_64 -cdrom ./minilinux.iso -m 512M

其中-cdrom指定镜像文件为光盘启动源,-m 512M给虚拟机分配512MB内存。启动后若能看到GRUB菜单,选择"Minimal Linux"并成功进入系统控制台,说明镜像启动正常。

系统出现了Kernel panic(内核恐慌),错误提示是Attempted to kill init!,这说明系统的初始化进程(init)无法正常启动,是构建极简Linux时的常见问题。

8.排查问题

挂载根文件系统(之前的rootfs目录)

复制代码
sudo mount -o bind ./rootfs /mnt

检查是否存在init相关程序

复制代码
ls /mnt/bin/bash

ls /mnt/sbin/init

发现文件都在,排除了"程序缺失"的原因,那QEMU启动时出现Kernelpanic的核心问题就聚焦在GRUB配置的挂载方式不匹配。

编辑GRUB配置文件

复制代码
sudo nano ./iso/boot/grub/grub.cfg

将原有内容替换为:

复制代码
set default="0"

set timeout=5



menuentry "Minimal Linux" {

    linux /casper/vmlinuz root=/dev/ram0 init=/sbin/init quiet splash

    initrd /casper/initrd

}

重新生成ISO镜像

复制代码
sudo grub-mkrescue -o ./minilinux.iso ./iso/

用QEMU重新启动测试

复制代码
qemu-system-x86_64 -cdrom ./minilinux.iso -m 512M

系统启动时出现了根文件系统设备等待超时的问题,最终进入了BusyBox的急救Shell,这是Linux启动过程中"根文件系统挂载失败"的典型表现。

在当前的(initramfs)提示符下,尝试手动查找并挂载根文件系统,列出所有可用的块设备,找到根文件系统镜像(通常是/dev/sr0,对应光盘)

复制代码
lsblk

在initramfs的急救Shell中执行lsblk命令时提示sh:lsblk:notfound,这说明当前的初始化内存文件系统(initramfs)中缺少lsblk工具(该工具属于util-linux包,可能在构建initramfs时未被包含)。

在宿主Ubuntu中重新配置initramfs,确保包含lsblk工具,安装 util-linux(lsblk 所属包,若未安装)

复制代码
sudo apt install -y util-linux

编辑initramfs配置,强制包含lsblk,创建钩子脚本

复制代码
sudo nano /etc/initramfs-tools/hooks/lsblk

写入以下内容:

复制代码
#!/bin/sh

PREREQ=""

prereqs() {

    echo "$PREREQ"

}

case "$1" in

    prereqs)

        prereqs

        exit 0

        ;;

esac

. /usr/share/initramfs-tools/hook-functions

复制 lsblk 到 initramfs

复制代码
copy_exec /usr/bin/lsblk /bin

赋予脚本执行权限

复制代码
sudo chmod +x /etc/initramfs-tools/hooks/lsblk

重新生成initramfs

复制代码
sudo update-initramfs -u -k $(uname -r)

将更新后的initrd文件覆盖到./iso/casper/目录,确保镜像使用新的initramfs

复制代码
sudo cp /boot/initrd.img-6.8.0-40-generic ./iso/casper/initrd

重新生成ISO镜像

复制代码
sudo grub-mkrescue -o ./minilinux.iso ./iso/

用QEMU重新启动测试

复制代码
qemu-system-x86_64 -cdrom ./minilinux.iso -m 512M

尝试手动查找并挂载根文件系统,列出所有可用的块设备

复制代码
lsblk

挂载squashfs根文件系统到/root

复制代码
mount /mnt/casper/filesystem.squashfs /root

若发现没有反应,则表示执行成功,可以检查系统基本信息

查看内核版本

复制代码
uname -r

查看根文件系统挂载情况

复制代码
df -h

查看当前进程

复制代码
ps aux

测试文件操作

创建测试文件,并查看

复制代码
touch /test.txt

ls

写入内容

复制代码
echo "Hello, My Minimal Linux!" > /test.txt

读取内容

复制代码
cat /test.txt

至此,已经完成构建极简版Linux发行版。

9.将最终的minilinux.iso镜像文件提前复制到VMware所在的主机中

打开 VMware,点击「创建新的虚拟机」,选择「自定义(高级)」→ 点击「下一步」。

兼容性选择默认的「Workstation 17.x」(或对应版本)→ 点击「下一步」。

选择「安装程序光盘映像文件(ISO)」,点击「浏览」选择你的 minilinux.iso → 点击「下一步」。

选择「Linux」,版本选择「Ubuntu64位」(或与你制作的Linux架构匹配的版本,如x86_64对应64位)→点击「下一步」。

输入名称(如「MinimalLinux」),选择存储位置→点击「下一步」。

默认1个处理器即可(极简系统资源需求低)→点击「下一步」。

分配512MB(或1GB)即可,无需过高→点击「下一步」。

使用桥接网络或者仅主机模式都行

默认「LSI Logic」→ 点击「下一步」。

默认「SCSI」→ 点击「下一步」。

选择「创建新虚拟磁盘」→ 点击「下一步」。

磁盘大小:分配 2GB 即可(极简系统占用极小),选择「将虚拟磁盘存储为单个文件」→ 点击「下一步」。

点击「完成」,VMware 会自动创建虚拟机。

启动该虚拟机即可。

也可输入命令

ls

至此,已经在Vmware上部署好Minimal Linux虚拟机。

相关推荐
刘某的Cloud4 小时前
shell脚本-read-输入
linux·运维·bash·shell·read
broad-sky4 小时前
Ubuntu上查看USB相机连接的是哪个口,如何查看
linux·数码相机·ubuntu
秋深枫叶红4 小时前
嵌入式第三十七篇——linux系统编程——线程控制
linux·学习·线程·系统编程
shaohui9735 小时前
ARMv7 linux中断路由以及处理
linux·gic·cpsr·armv7
三小尛5 小时前
linux的开发工具vim
linux·运维·vim
陈陈爱java5 小时前
Conda 常用命令行
linux·windows·conda
twdnote5 小时前
dokcer 环境中集成LibreOffice
linux
ChristXlx5 小时前
Linux安装redis(虚拟机适用)
linux·运维·redis
源文雨5 小时前
PVE实现USB硬盘盒在备份前自动上电/结束后自动断电脚本
linux·运维·服务器·备份·perl·pve·usb硬盘盒