​你是否想要一个独属于自己的Debian底座的操作系统?本文将带你如何一步一步的创造一个属于自己的操作系统。

 一.准备工作

debian底座所以我们使用ubuntu来进行创建,我这里使用的ubuntu-24.04版本

1.1下载创建镜像所需的包

sudo apt install debootstrap grub-efi-amd64-bin parted dosfstools qemu-system-x86 squashfs-tools

debootstrap:用于在debian下构建最小根文件系统,可以直接从镜像库下载如/bin等文件
grub-efi-amd64-bin:包含创建grub efi镜像所需文件
parted:用于进行磁盘管理
dosfstools:用于创建efi镜像所需要的FAT32格式
qemu-system-x86:用于测试新构建的系统

1.2创建镜像文件

#创建一个6GB的镜像文件(为EFI分区预留所需的空间)
dd if=/dev/zero of=my_linux.img bs=1M count=6144
#关联loop设备
sudo losetup -fP my_linux.img
# 查看分配的loop设备
losetup -a

二.磁盘分区和格式化

2.1创建GPT分区表

# 创建 GPT 分区表
sudo parted /dev/loop0 mklabel gpt

# 创建 EFI 分区(从0开始)
sudo parted /dev/loop0 mkpart primary fat32 0% 512MiB
sudo parted /dev/loop0 set 1 esp on

# 创建根分区
sudo parted /dev/loop0 mkpart primary ext4 512MiB 100%

# 查看分区结果
sudo parted /dev/loop0 print

2.2格式化分区

#格式化EFI分区为FAT32
sudo mkfs.fat -F 32 /dev/loop0p1

#格式化根分区为ext4
sudo mkfs.ext4 /dev/loop0p2

#创建挂载点(按顺序来)
sudo mkdir -p /mnt/my_linux
sudo mount /dev/loop0p2 /mnt/my_linux
sudo mkdir -p /mnt/my_linux/boot/efi
sudo mount /dev/loop0p1 /mnt/my_linux/boot/efi

三.安装基本系统

3.1使用debootstrap安装Debin基础系统

# 安装最小Debian系统
sudo debootstrap --arch=amd64 --variant=minbase bookworm /mnt/my_linux http://deb.debian.org/debian

# 如果网络有问题,可以尝试国内镜像
# sudo debootstrap --arch=amd64 bookworm /mnt/my_linux https://mirrors.aliyun.com/debian/

3.2准备chroot环境

# 挂载必要的虚拟文件系统
sudo mount --bind /dev /mnt/my_linux/dev
sudo mount --bind /proc /mnt/my_linux/proc
sudo mount --bind /sys /mnt/my_linux/sys
sudo mount --bind /dev/pts /mnt/my_linux/dev/pts
# 挂载efivarfs以支持EFI变量访问
sudo mount -t efivarfs efivarfs /mnt/my_linux/sys/firmware/efi/efivars

# 复制网络配置
sudo cp /etc/resolv.conf /mnt/my_linux/etc/

# 进入chroot环境
sudo chroot /mnt/my_linux /bin/bash

四.基础系统设置

4.1基础设置

# 设置主机名
echo "my-custom-linux" > /etc/hostname

# 设置时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 配置locale
apt update
apt install -y locales
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
echo "zh_CN.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf

# 创建fstab文件
cat > /etc/fstab << 'EOF'
# Live system fstab - minimal entries
/dev/sr0 /cdrom iso9660 ro,noauto 0 0
/dev/disk/by-label/MY_LINUX / iso9660 ro 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devtmpfs /dev devtmpfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /run tmpfs defaults 0 0
EOF

4.2安装核心软件包

# 更新包列表
apt update

# 安装Linux内核
apt install -y linux-image-amd64

# 安装系统基础工具
apt install -y systemd systemd-sysv
apt install -y sudo curl wget vim nano
apt install -y net-tools iproute2

# 安装EFI引导相关包
apt install -y grub-efi-amd64 shim-signed efibootmgr

# 安装核心软件包,为制作iso做准备
apt install -y live-boot

# 配置静态网
cat > /etc/resolv.conf << 'EOF'
nameserver 8.8.8.8
nameserver 114.114.114.114
EOF

# 禁用 Live 环境中不必要的服务
systemctl mask systemd-timesyncd.service
systemctl mask systemd-logind.service

# 配置无线固件
mkdir -p /etc/modprobe.d
echo "options cfg80211 ieee80211_regdom=US" > /etc/modprobe.d/cfg80211.conf

4.3设置用户

# 设置root密码
passwd root

# 创建普通用户(替换yourusername为你想要的用户名)
adduser yourusername

# 将用户添加到sudo组
usermod -aG sudo yourusername

# 配置sudo(可选:设置无需密码)
echo "yourusername ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

五.安装EFI引导程序

5.1安装GRUB到EFI分区

#确保EFI分区已正确挂载
mount | grep efi

#安装GRUB(EFI模式)
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=my_linux --removable --recheck

# 生成GRUB配置文件
update-grub

#检查安装结果
ls -la /boot/efi/EFI/

如果报错显示

# grub-install: warning: EFI variables are not supported on this system.. Installation finished. No error reported.
#使用该命令确定是否可以访问EFI变量
ls /sys/firmware/efi/efivars
#如果为空或者不存在证明chroot环境无法访问EFI变量

#退出chroot
exit

#在主机shell中进行挂载
mount -t efivarfs efivarfs /mnt/my_linux/sys/firmware/efi/efivars

六.配置系统使用命令行界面

#设置GRUB终端类型为终端控制
echo 'GRUB_TERMINAL="serial console"' >> /etc/default/grub
#配置串口通信参数
echo 'GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"' >> /etc/default/grub
#配置内核控制台
echo 'GRUB_CMDLINE_LINUX="console=ttyS0,115200n8"' >> /etc/default/grub

# 更新 GRUB 配置
update-grub

七.清理系统

# 清理包缓存
apt clean
apt autoremove -y

# 清理日志和临时文件
find /var/log -type f -name "*.log" -exec truncate -s 0 {} \;
rm -rf /tmp/* /var/tmp/*

# 退出chroot环境
exit

# 卸载所有挂载点
sudo umount -l /mnt/my_linux/dev/pts
sudo umount -l /mnt/my_linux/dev
sudo umount -l /mnt/my_linux/proc
sudo umount -l /mnt/my_linux/sys
sudo umount /mnt/my_linux/boot/efi
sudo umount /mnt/my_linux

# 释放loop设备
sudo losetup -d /dev/loop0

八.启动系统

#安装OVMF包用于启动EFI模式
sudo apt install ovmf
#启动镜像
qemu-system-x86_64 \
  -drive file=my_linux.img,format=raw \
  -m 2G \
  -smp 2 \
  -netdev user,id=net0 -device e1000,netdev=net0 \
  -bios /usr/share/ovmf/OVMF.fd \
  -nographic \
  -serial mon:stdio

九.制作iso文件

9.1挂载镜像

# 挂载镜像
sudo losetup -fP my_linux.img
LOOP_DEVICE=$(losetup -a | grep my_linux.img | awk -F: '{print $1}')
sudo mount ${LOOP_DEVICE}p2 /mnt/my_linux

9.2编写配置

# 创建 ISO 目录
mkdir -p /tmp/iso/{boot/grub,live}

# 复制内核文件
sudo cp /mnt/my_linux/boot/vmlinuz-* /tmp/iso/live/vmlinuz
sudo cp /mnt/my_linux/boot/initrd.img-* /tmp/iso/live/initrd.img

# 创建文件系统
sudo mksquashfs /mnt/my_linux /tmp/iso/live/filesystem.squashfs

# 创建启动配置
echo 'set timeout=5
menuentry "My Linux" {
    linux /live/vmlinuz boot=live console=ttyS0,115200n8
    initrd /live/initrd.img
}' > /tmp/iso/boot/grub/grub.cfg

9.3制作iso

# 生成 ISO
grub-mkrescue -o my_linux.iso /tmp/iso/

# 清理
sudo umount /mnt/my_linux
sudo losetup -d $LOOP_DEVICE

9.4测试

# 测试 Live ISO
qemu-system-x86_64 -cdrom my_linux.iso -m 2G -smp 2 -nographic -serial mon:stdio
# 注意修改镜像名

声明:本站所有文章均为永久链接,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系邮箱:jyxs_top@163.com进行处理。