编译一个基于debian/ubuntu,centos,arhlinux第三方系统

目录

前言

准备工作

下载linux源码进行编译

linux源码下载

网站

问题

解决办法

编译

可能会遇到的问题

chroot下载debian环境

进入虚拟环境

把chroot的根目录文件打包为.gz文件

编译init文件(用于系统启动时的一系列引导)

给予文件夹权限

创建bios引导

下载syslinux解压

创建iso文件夹方便管理

把一系列文件复制到其中

编辑引导文件

生成镜像


前言

这边由于操作比较多,整合了许多大佬的教程以及自行的摸索,流程会长一些,可能对于一些程序的错误以及bug可能会忘记提及,不过我印象比较深亦或者是网上几乎找不到答案的bug和错误都会提及

准备工作

  • 一台装有linux的电脑或者虚拟机用于编译(博主的环境是ubuntu23.10)debian系的都也可以(理论上其他系的也可以,但是部分安装软件的命令要做改变,这边不多做阐述)。
  • 一台装有VMware的虚拟机用于验证安装镜像(或者其他装有可以进行虚拟化软件/系统(pve,exsi...)都行
  • 一个善于发现问题解决问题的心(

下载linux源码进行编译

linux源码下载

网站

The Linux Kernel Archiveshttps://kernel.org/

问题

由于部分版本的linux内核编译的有些设置冲突会出错,非常难以调整。

解决办法

这边我试了几个版本的内核,最终确定为6.6.17

官网可能会没有这边给出123云盘链接

linux-6.6.17.tar.xz官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘123云盘为您提供linux-6.6.17.tar.xz最新版正式版官方版绿色版下载,linux-6.6.17.tar.xz安卓版手机版apk免费下载安装到手机,支持电脑端一键快捷安装https://www.123pan.com/s/HrkuVv-X9FX.html

编译

更新软件源

复制代码
apt update
bash 复制代码
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

(灵性一点,其他诸如红帽系的linux改一下安装命令后面不多讲了)

把下载好的源码通过xftp传到linux中(我这边的目录为/mnt,之后解压好),并且修改名称方便管理

bash 复制代码
tar -xvf linux-6.6.17.tar.xz
mv linux-6.6.17 linux_kenel

接下来进入文件夹然后编译

bash 复制代码
mv linux_kenel
make defconfig    #使用默认配置
make bzImage -j 4    #使用4个核心编译(没有这么多减几个,核心够加几个),并且编译为bzImage格式

bzImage 是 Linux 内核的一种格式,它是压缩过的内核镜像,包含了启动时所需的所有代码和数据。

最后执行好后内核在/mnt/linux_kenel/arch/x86/boot目录下的bzImage也就是相对路径的./arch/x86/boot

可能会遇到的问题

可能会有一些文件缺失,不过百度一下错误都会有,就是打几遍apt命令就是了

chroot下载debian环境

放回mnt目录下

输入以下命令

bash 复制代码
apt install debootstrap
mkdir debian
debootstrap stable ./debian http://deb.debian.org/debian

这里面要等的久一些

安装好后进入mnt下的debian目录如下

像啊!很像我们debian目录下的文件(其实就是)

进入虚拟环境

接下里进入这个chroot虚拟环境

bash 复制代码
chroot /mnt/debian

可以看到我们以及借用chroot虚拟出来了一个debian环境(主要是获取其中的环境以及文件)

接下来就是要安装其他的软件或者是桌面环境了,这里和其他的网上教程一样,不多做赘述。

建议新建立一个用户

bash 复制代码
useradd 用户名

之后设定密码之类的就不多说了

然后退出虚拟环境

bash 复制代码
exit

把chroot的根目录文件打包为.gz文件

在mnt文件夹中新建一个文件夹rootfs,并且进入

bash 复制代码
mkdir /mnt/rootfs
cd /mnt/rootfs

把chroot根目录下所有文件拷贝到rootfs中

bash 复制代码
cp -r ../chroot-debian/* ./

编译init文件(用于系统启动时的一系列引导)

bash 复制代码
nano /mnt/rootfs/init
bash 复制代码
#!/bin/sh
dmesg -n 1
mount -t devtmpfs none /dev
mount -t proc none /proc
mount -t sysfs none /sys
setsid cttyhack /bin/sh

给予文件夹权限

bash 复制代码
cd ../
chmod 777 /mnt/rootfs

将一个目录打包为一个压缩的root文件系统映像文件。

bash 复制代码
cd /mnt/rootfs
find . | cpio -R root:root -H newc -o | gzip > ../rootfs.gz

创建bios引导

下载syslinux解压

bash 复制代码
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

创建iso文件夹方便管理

bash 复制代码
mkdir isobios
cd isobios

把一系列文件复制到其中

bash 复制代码
cp ../rootfs.gz .
cp ../linux_kenel/arch/x86/boot/bzImage kernel.gz
cp ../syslinux-6.03/bios/core/isolinux.bin .
cp ../syslinux-6.03/bios/com32/elflink/ldlinux/ldlinux.c32 .

编辑引导文件

bash 复制代码
nano isolinux.cfg

编辑如下

复制代码
default kernel.gz initrd=rootfs.gz

生成镜像

复制代码
sudo apt install -y xorriso -y
xorriso -as mkisofs -o ../mybios.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./

在目录/mnt下有mybios.iso文件

用该镜像文件生成虚拟机

虚拟机截图(注意现在时不带安装界面的,需要可以写一个刻录脚本即可)

相关推荐
阿豪只会阿巴2 小时前
【多喝热水系列】从零开始的ROS2之旅——Day10 话题的订阅与发布1:Python
开发语言·c++·python·ubuntu·ros2
yeflx3 小时前
Ubuntu下Colmap源码编译调试
ubuntu·3d
宇宙帅猴3 小时前
【Ubuntu踩坑及解决方案(一)】
linux·运维·ubuntu·go
_Xiaosz3 小时前
Photo-SLAM / ORB-SLAM3 编译报错解决:undefined reference to DUtils::Random
linux·ubuntu
阿豪只会阿巴5 小时前
【多喝热水系列】从零开始的ROS2之旅——Day9 初识话题通信:基本命令
c++·笔记·python·ubuntu·ros2
阿豪只会阿巴7 小时前
项目心得——发布者和订阅者问题解决思路
linux·开发语言·笔记·python·ubuntu·ros2
音无八重8 小时前
Linux(Ubuntu)下无法连接ppa.launchpadcontent.net的解决方法
linux·运维·ubuntu
Configure-Handler10 小时前
ubuntu 22.04 配置VNC远程连接
linux·运维·ubuntu
木卫二号Coding10 小时前
在 Ubuntu 上安装 noVNC
linux·运维·ubuntu
有时.不昰沉默11 小时前
ubuntu 20.04 启动直接进入 tty1,而非 图形界面
linux·运维·ubuntu·tty1