当前位置: 首页 > news >正文

基于BusyBox构建ISO镜像

1. 准备

  • CentOS 7.9 3.10.0-957.el7.x86_64
  • VMware Workstation

建议:系统内核<=3.10.0 使用busybox <= 1.33.2版本

2. 安装busybox

# 安装依赖
yum install syslinux xorriso kernel-devel kernel-headers glibc-static ncurses-devel -y

# 下载
wget https://busybox.net/downloads/busybox-1.33.2.tar.bz2

# 编译安装
tar -xvf busybox-1.33.2.tar.bz2
cd busybox-1.33.2
make defconfig
sed -i 's/# CONFIG_STATIC is not set/CONFIG_STATIC=y/' .config
make -j$(nproc)
make install

3. 构建RootFS

# 创建目录
mkdir -pv /rootfs/{dev,etc,mnt,proc,sys,tmp,root,var}

# 创建必要的设备节点
mknod -m 666 /rootfs/dev/console c 5 1
mknod -m 666 /rootfs/dev/null c 1 3
mknod -m 666 /rootfs/dev/tty c 4 0
mknod -m 666 /rootfs/dev/tty1 c 4 1

# 复制 BusyBox 到 rootfs
cp -a busybox-1.33.2/_install/* /rootfs/
cp -a busybox-1.33.2/examples/bootfloppy/etc /rootfs/
# 删除linuxrc
rm -rf /rootfs/linuxrc

# 更新fstab文件
cat > /rootfs/etc/fstab <<EOF
# /etc/fstab - Static file system information

# Device      Mount point    Type    Options    Dump  FSCK order
proc          /proc          proc    defaults     0     0
sysfs         /sys           sysfs   defaults     0     0
tmpfs         /tmp           tmpfs   defaults     0     0
mdev          /dev           tmpfs   defaults     0     0
EOF

# 更新inittab文件
cat > /rootfs/etc/inittab << EOF
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
EOF
# 增加执行权限
chmod +x /rootfs/etc/inittab

# 更新rcS文件
cat > /rootfs/etc/init.d/rcS <<'EOF'
PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
export PATH LD_LIBRARY_PATH

/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
echo 
echo "****************BusyBox******************"
echo "      Welcome to Minimal Linux"
echo "*****************************************"
EOF
chmod +x /rootfs/etc/init.d/rcS

# 创建init文件
cat > /rootfs/init <<EOF
#!/bin/sh
#
dmesg -n 1
mount -t sysfs sysfs /sys
mount -t proc proc /proc
mdev -s

if [ -f /sbin/init ]; then
    exec /sbin/init
fi

exec /bin/sh
EOF
# 增加执行权限
chmod +x /rootfs/init

# 更新profile
cat > /rootfs/etc/profile <<'EOF'
PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
export PATH LD_LIBRARY_PATH
EOF

4. 构建ISO镜像

# 创建iso目录
mkdir -p /iso/{boot,isolinux}

# 创建initramfs文件
cd /rootfs && find . | cpio -o -H newc | gzip -9 > /iso/boot/initrd.img
# 验证
lsinitrd /iso/boot/initrd.img

# 拷贝内核
cp /boot/vmlinuz-$(uname -r) /iso/boot/vmlinuz
# 拷贝isolinux.bin
cp /usr/share/syslinux/isolinux.bin /iso/isolinux/

# 创建isolinux.cfg
cat > /iso/isolinux/isolinux.cfg <<EOF
DEFAULT linux
PROMPT 0
TIMEOUT 50

LABEL linux
  MENU LABEL Boot Linux
  KERNEL /boot/vmlinuz
  APPEND initrd=/boot/initrd.img
EOF

# 构建iso
xorriso \
-as mkisofs \
-o busybox.iso \
-b isolinux/isolinux.bin \
-c isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table -R -J /iso

5. 测试

使用 VMware Workstation 创建虚拟机,选择iso镜像,启动虚拟机,进入Linux系统
在这里插入图片描述

http://www.dtcms.com/a/108785.html

相关文章:

  • 多模态模型:专栏概要与内容目录
  • 网络爬虫的基础知识
  • 《inZOI(云族裔)》50+MOD整合包
  • 【目标检测】【深度学习】【Pytorch版本】YOLOV2模型算法详解
  • 【现代深度学习技术】现代卷积神经网络07:稠密连接网络(DenseNet)
  • CFResNet鸟类识别:原网络基础上改进算法
  • Springboot logback日志实例
  • RK3568下的QT工程配置
  • Joomla教程—Joomla 模块管理与Joomla 模块类型介绍
  • AI SEO内容优化指南:如何打造AI平台青睐的高质量内容
  • 在 Elasticsearch 中使用 Amazon Nova 模型
  • Vue父组件调用子组件设置table表格合并
  • chromium魔改——修改 navigator.webdriver 检测
  • 【大模型系列篇】大模型基建工程:基于 FastAPI 自动构建 SSE MCP 服务器 —— 进阶篇
  • Leetcode hot 100(day 4)
  • 03.01、三合一
  • 使用Amazon Bedrock Guardrails保护你的DeepSeek模型部署
  • 一问讲透redis持久化机制-rdb aof
  • 深度优化:解决SpringBoot应用启动速度慢的8个关键策略
  • 部署大模型实战:如何巧妙权衡效果、成本与延迟?
  • 智慧园区大屏如何实现全局监测:监测意义、内容、方式
  • .NET WebApi的详细发布流程——及其部署到Linux与Windows平台
  • AG32:MCU和CPLD如何交互?
  • 6.3 八皇后问题搜索
  • 几个在面试中遇到的计算机基础问题
  • C与指针的神秘面纱
  • 【Docker-7】Docker是什么+Docker版本+Docker架构+Docker生态
  • sshd启动报错“Failed to start OpenSSH Server daemon”
  • Python不可变数据类型全解析:原理、优势与实战指南
  • C#游戏开发【第18天】 | 深入理解队列(Queue)与栈(Stack):从基础到任务队列实战