从零开始制作一个linux iso镜像

一、前言

对于一个极简化的linux系统而言,只需要三个部分就能组成,它们分别是一个linux内核、一个根文件系统和引导。以下是本文制作linux iso镜像所用到的系统和软件:

OS: ubuntu 20
软件: xorriso

二、制作linux内核

1、首先需要去官网选择一个需要的版本下载下来,官网下载地址:https://mirrors.edge.kernel.org/pub/linux/kernel/

2、利用tar将其解压,然后进入其目录中,然后配置内核,常见的配置有以下几种:
a、make defconfig – 默认配置
b、make allyesconfig – 创建能选yes就选yes的配置
c、make allnoconfig – 创建能选no就选no的配置
d、make menuconfig – 基于ncurser的图形化界面配置
这里采用命令make defconfig使用默认的即可,如下图所示:

从零开始制作一个linux iso镜像

3、然后使用 make bzImage 命令编译出内核即可,如下图所示:

从零开始制作一个linux iso镜像

编译好的内核文件在 arch 文件夹相应的架构文件夹下面,如下图所示:

从零开始制作一个linux iso镜像

三、制作根文件系统

1、我们这里利用busybox来制作一个根文件系统,busybox可以简单理解为一个linux工具的集合。首先还是下载busybox,官网下载地址:https://busybox.net/downloads/

2、编译busybox与编译内核步骤基本一致,将下载好的压缩包进行解压,然后进入文件夹中,使用make defconfig配置默认编译选项,这里需要注意的是,在生成的 .config 配置文件中,需要设置 CONFIG_STATIC=y ,如果没有,添加即可,如下图所示:

从零开始制作一个linux iso镜像

从零开始制作一个linux iso镜像

3、然后使用 make busybox install 命令编译busybox,编译好后会在当前目录下面生产一个 _install 文件夹,如下图所示:

从零开始制作一个linux iso镜像
从零开始制作一个linux iso镜像

4、然后创建一个 rootfs 文件夹,并将 _install 文件夹下面除 linuxxrc 以外的所有文件及文件夹都拷贝到 rootfs 文件夹下面,最后创建 dev 等文件夹,最后在根目录下面创建 init 文件即可,文件内容如下图所示:

从零开始制作一个linux iso镜像

从零开始制作一个linux iso镜像

5、最后利用命令 find . | cpio -R root:root -H newc -o | gzip > ../rootfs.gz 将文件系统打包,至此,一个文件系统就创建完成了,如下图所示:

从零开始制作一个linux iso镜像

四、BIOS

1、这里我们使用 syslinux 来创建 bios 引导的一个linux iso镜像, syslinux 官方下载地址如下:https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/

2、将下载好的 syslinux 解压,然后创建文件夹 isobios ,将解压后的 syslinux 文件夹下面的 bios/core/isolinux.binbios/com32/elflink/ldlinux/ldlinux.c32 复制到 isobios 文件夹下面,如下图所示:

从零开始制作一个linux iso镜像

3、在 isobios 文件夹下面创建配置文件 isolinux.cfg ,文件内容如下所示:

从零开始制作一个linux iso镜像

4、最后,在 isobios 文件夹下面使用命令 xorriso -as mkisofs -o ../testbios.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./ 生成iso镜像文件,如下图所示:

从零开始制作一个linux iso镜像

5、使用虚拟机 vmware 创建一个虚拟机,如下图所示,便是我们创建的一个linux iso镜像跑起来的样子。

从零开始制作一个linux iso镜像

五、UEFI

1、uefi这里采用 system-bootsyslinux 配合来制作,首先,创建两个文件夹 isouefitmp ,其中, isouefi 用来挂载设备, tmp 文件夹用来临时存放文件以计算大小,然后在 tmp 文件夹下面创建 EFI/BOOTloader/entries 目录,接着,将解压后的 systemboot 下面的 uefi_boot/EFI/BOOT/BOOTx64.EFI 文件拷贝到 tmp/EFI/BOOT 目录下面,如下图所示:

从零开始制作一个linux iso镜像

2、接着,在 tmp/loader 目录下面,创建文件 loader.conf 配置文件,第一行表示默认配置是 entries 目录下那个文件,第二行设置默认超时时间;然后在 entries 文件夹下面创建相应的配置文件,这里是 mll-x86_64.conf ,文件内容和 bios 的差不多,不在单独细说,最后再将前面准备好的内核和文件系统拷贝到 tmp 目录下面,如下图所示:

从零开始制作一个linux iso镜像

从零开始制作一个linux iso镜像

从零开始制作一个linux iso镜像

3、此时就可以根据 tmp 文件夹的总大小创建一个相同大小的 img 文件了,这里的 tmp11M ,为了稳妥起见,这里创建一个 12Mimg 文件,命令为 truncate -s 12M uefi.img ,然后使用 losetup -f 命令寻找一个当前未使用的逻辑设备,然后使用 losetup 命令将我们前面创建的 img 文件虚拟成改逻辑设备,接着利用 mkfs.vfat 将该设备格式化成 vfat 系统,接着使用 mount 命令将其挂载到 isouefi 文件夹下面,最后将 tmp 文件夹下面所有文件及其文件夹拷贝到 isouefi 目录下面,如下图所示:

从零开始制作一个linux iso镜像

从零开始制作一个linux iso镜像

4、接着利用 umount 命令取消挂载,这样我们就得到一个包含 内核文件系统 等的 img 文件,接着创建一个 iso 文件夹,并且在该文件夹下面将创建一个 boot 文件夹,然后将 img 复制到 iso/boot 下面,最后利用 xorriso 工具生成 iso 文件即可,如下图所示:

从零开始制作一个linux iso镜像

5、最后,新建一个虚拟机,引导选择uefi,启动即可,如下图所示:

从零开始制作一个linux iso镜像

从零开始制作一个linux iso镜像

六、相关链接

github链接:https://github.com/windy-purple/make_linux_iso

Original: https://www.cnblogs.com/aWxvdmVseXc0/p/15553891.html
Author: windy_ll
Title: 从零开始制作一个linux iso镜像

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/524369/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Cookie

    题目如下 打开靶机 根据提示,需要admin登录才能得到flag,题目介绍为Cookie欺骗,认证,伪造 打开burpsuite进行抓包,HTTP数据包是可以修改cookie值的 …

    Linux 2023年6月7日
    078
  • redis key的过期时间

    设置redis key的生存过期时间 Redis 有四个不同的命令可以用于设置键的生存时间(键可以存在多久)或过期时间(键什么时候会被删除) : EXPlRE 命令用于将键key …

    Linux 2023年5月28日
    092
  • 高等代数:6 二次型 矩阵的合同

    6 二次型 (\cdot) 矩阵的合同 1、定义1:数域K上一个 n元二次型是系数在K中的n个变量的二次齐次多项式,它的一般形式是 [\begin{aligned} &f(…

    Linux 2023年6月8日
    0124
  • 基于eNSP的NAT/NAPT协议仿真实践

    一. 基本原理 eNSP(Enterprise Network Simulation Platform)是一款由华为提供的、可扩展的、图形化 操作的网络仿真工具平台,主要对企业网络…

    Linux 2023年6月8日
    088
  • ELK收集MySQL慢日志并告警

    采用的是 filebeat采集日志, Redis做日志存储, logstash消费处理日志,将处理过的日志存储到 ES, kibana做日志展示, Elastalert做监控告警长…

    Linux 2023年5月27日
    099
  • MultipartFile上传文件异步处理时的java.io.FileNotFoundException

    参考:https://javajgs.com/archives/26157 1-1 需求 前端上传Word文档,后端将接收到的Word文档①上传到文件服务器②将Word转为Pdf。…

    Linux 2023年6月8日
    088
  • python_变量

    字符串 1.字符串方法修改大小写 mes = ‘hi, im testing string operation’ print(mes) print(mes.title()) pri…

    Linux 2023年6月7日
    084
  • podman无根用户基本设置和使用

    在允许没有root特权的用户运行Podman之前,管理员必须安装或构建Podman并完成以下配置 cgroup V2Linux内核功能允许用户限制普通用户容器可以使用的资源,如果使…

    Linux 2023年6月13日
    089
  • sed与awk命令

    1.1 sed命令语法 在看单个命令以前,需要回顾一下关于所有sed命令的两点语法。在上一个章中,我们介绍了其大部分内容。行地址对于任何命令都是可选的。它可以使一个模式,被描述为由…

    Linux 2023年6月7日
    0108
  • 经典45个git使用技巧与场合,专治不会合代码。

    前言 git对于大家应该都不太陌生,熟练使用git已经成为程序员的一项基本技能,尽管在工作中有诸如 Sourcetree这样牛X的客户端工具,使得合并代码变的很方便。但找工作面试和…

    Linux 2023年6月13日
    0128
  • 使用 ssmtp 於 shell 透過 Gmail 寄信

    有很多程式於 bash shell 執行, 執行完要自動寄信出去, 但是最近都被 Google 退信, 最好的方法是透過 Gmail 直接寄信. 本來是要另外寫隻 script 來…

    Linux 2023年5月28日
    088
  • 我懂得了什么

    站在24岁的这个档口,没有学业又没有工作的时刻,前不着村后不着店。我觉得应该要写一些总结,虽然年仅24的我相比老人家总结不出更深刻的道理,但是现在是互联网的时代,获取知识的途径已经…

    Linux 2023年6月6日
    0103
  • 那些shellcode免杀总结

    首发先知: https://xz.aliyun.com/t/7170 自己还是想把一些shellcode免杀的技巧通过白话文、傻瓜式的文章把技巧讲清楚。希望更多和我一样web狗也能…

    Linux 2023年5月28日
    081
  • 音视频技术入门课 -01 如何从色彩格式、帧率等参数角度看视频图像?

    本文将从视频 / 图像的原始数据格式、视频逐行 / 隔行扫描、帧率、图像分辨率、色域等几方面入手,对视频基础知识做一个整体性的了解。 看视频时会看到很多图像,是由一个个像素点组成的…

    Linux 2023年6月7日
    0131
  • Redis和Memcache

    redis 和memcached都支持集群 Redis支持的数据类型要丰富得多,Redis不仅仅支持简单的k/v类型的数据,同时还提供String,List,Set,Hash,So…

    Linux 2023年5月28日
    092
  • 【Leetcode】768. 最多能完成排序的块 II

    arr是一个可能包含重复元素的整数数组,我们将这个数组分割成几个”块”,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。 …

    Linux 2023年6月6日
    092
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球