制作基于debian的linux live启动u盘(UEFI)

news/2024/9/19 12:41:01/文章来源:https://www.cnblogs.com/elight2/p/18418013

参考

  • 从零开始制作一个linux iso镜像 _
  • 详解:把 Linux 系统做成 Livecd
  • 从零制作 Ubuntu 20.04 LiveCD
  • LiveCDCustomization(ubuntu官方文档)
  • 从零开始制作 Ubuntu 22.04 Live CD
  • Create a Custom Debian Live Environment (CD or USB)

方法一: live-build

这是debian官方的live镜像构建工具,此方法相对第二种更简单

  1. 安装:apt install live-build
  2. 新建一个空文件夹,比如liveb,cd进去
  3. 进行配置:lb config --mirror-binary https://mirrors.ustc.edu.cn/debian/ \ --mirror-binary-security https://mirrors.ustc.edu.cn/debian-security/ \ --mirror-bootstrap https://mirrors.ustc.edu.cn/debian/ \ --mirror-chroot-security https://mirrors.ustc.edu.cn/debian-security/ \ --distribution bookworm
    这里的lb就是live-build的简写,这个命令使用了中科大的镜像,不使用镜像会很慢(此处镜像是一会使用lb build下载文件时的镜像),--distribution指定了debian的版本,也可以选择bullseye等别的版本,我选了debian12
  4. 此时可以自定义软件包,在liveb/config/package-lists/下面新建文件:[随便命名].list.chroot里面写上要装的软件包,比如:
vim
network-manager
htop
  • 此方法构建的liveb/chroot目录,直接chroot进去会不能联网,要手动配置/etc/resolv.conf,所以这里我直接在配置文件里写好要安装的软件包
  1. liveb中执行lb build(需要root),一般十几分钟就会完成构建,成功的话有绿色提示,在liveb根目录下有生成的iso文件,liveb/binary下面有iso文件的内容
  2. 按照方法二第11步的方法新建分区,然后把binary下面的东西复制进去,就可以启动live系统了

方法二: 手动构建

此方法全程sudo su执行即可,很多命令都要root权限

  1. apt安装debootstrap squashfs-tools,中间有其他需要的软件包我忘了是什么了,提示找不到命令自己安装一下即可
  2. 使用debootstrap构建基本根目录:
mkdir rootfs
debootstrap bookworm rootfs https://mirrors.ustc.edu.cn/debian/

此处的第一个参数是发行版,我仍然选择bookworm,第二个参数是文件夹,第三个是使用的镜像;大概需要10分钟下载完成,根目录约300MB
3. chroot rootfs,这会切换根目录
ubuntu官方文档里提到了要mount一下设备文件,然后再chroot,但是我测试发现不mount也没问题,命令如下:

mount --bind /sys ./rootfs/sys
mount --bind /proc ./rootfs/proc
mount --bind /dev/pts ./rootfs/dev/pts

卸载(离开chroot之后再卸载):

umount ./rootfs/sys
umount ./rootfs/proc
umount ./rootfs/dev/pts
  1. 为live系统安装内核,有很多方法,最简单的方法是直接apt install linux-image-6.1.0-25-amd64,但是我对内核有特殊要求,所以自己编译了,方法:debian内核编译手册,然后dpkg -i安装编译好的文件
  2. 安装必要软件包:live-boot live-boot-initramfs-tools这两个软件包是必须的!没有将会无法启动live系统
  3. 自定义系统,自己想怎么搞都行,我的脚本:
apt update
echo -e "deb http://mirrors.ustc.edu.cn/debian bookworm main contrib non-free non-free-firmware\ndeb http://mirrors.ustc.edu.cn/debian bookworm-updates main contrib non-free non-free-firmware\ndeb http://mirrors.ustc.edu.cn/debian bookworm-backports main contrib non-free non-free-firmware\ndeb http://mirrors.ustc.edu.cn/debian-security/ bookworm-security main contrib non-free non-free-firmware" > /etc/apt/sources.list
apt install -y lightdm
apt install -y lxqt-core
apt install -y firefox-esr
apt install -y bash-completion vim sudo htop network-manager gparted mpv nm-tray firmware-linux firmware-iwlwifi rfkill pciutils
sed -i '/# enable bash completion in interactive shells/{n;N;N;N;N;N;N;s/^#//gm}' /etc/bash.bashrc
passwd -d root
apt upgrade -y
apt autoclean

我这里用了lxqt的桌面,有几个坑:

  • lxqt-core软件包很小,但是不会自动安装显示管理器,所以要先装一个lightdm
  • debootstrap构建的根目录很小,很多固件都没有,要联网需要安装network-manager nm-tray firmware-iwlwifi rfkill
  1. 更新initrd:update-initramfs -c -k all必须执行,否则initrd会无法启动
  2. exit命令退出chroot
  3. 构建uefi引导:
dd if=/dev/zero of=vefi.img bs=1M count=32 # 创建虚拟硬盘
mkfs.vfat vefi.img # 在虚拟硬盘新建fat32文件系统
mkdir vefi-mnt
mount vefi.img vefi-mnt #挂载虚拟硬盘
mkdir vefi-mnt/boot
grub-install --boot-directory=vefi-mnt/boot --efi-directory=vefi-mnt --removable vefi.img #生成grub的bootx64.efi引导程序和grub.cfg
sed -i 's/^/# /' vefi-mnt/EFI/BOOT/grub.cfg
echo -e "menuentry \"Live system (amd64)\" {\n	linux	/live/vmlinuz boot=live\n	initrd	/live/initrd.img\n}" >> vefi-mnt/EFI/BOOT/grub.cfg # 配置grub
umount vefi.img # 卸载

grub-install这个命令默认选择本机的efi和boot目录,不要无参数执行,否则会更新本机的grub
10. 构建squashfs:mksquashfs rootfs/ filesystem.squashfs这会在执行目录下生成filesystem.squashfs文件,live环境一般有manifest文件,但是我没加也成功了,具体怎么生成可以参考开头那几个链接
11. 创建启动u盘:确定自己的u盘已经是gpt分区表,不是的改一下,新建一个fat32分区,我的带lxqt桌面的live系统只有1.1g,分区新建4g应该是够的,这几步用windows的diskgenius操作就行,具体操作百度即可
12. 复制文件:我的u盘目录结构(注意是刚才新建的fat32分区),initrd.img和vmlinuz是rootfs/boot下面的两个文件重命名复制来的(分别是初始文件系统和内核镜像):

main@n960kp:/media/main/linux-live$ ls -R
.:
EFI  live./EFI:
BOOT./EFI/BOOT:
BOOTX64.CSV  BOOTX64.EFI  grub.cfg  grubx64.efi  mmx64.efi./live:
filesystem.squashfs  initrd.img  vmlinuz
  • EFI和boot文件夹在vefi.img虚拟硬盘里,挂载之后再复制到u盘里,不挂载看不到文件夹
  • live这个文件夹名称不固定,但是要和grub.cfg里写的对应
  1. 完成,进入电脑bios启动吧

后记

  • ubuntu那边有一个叫cubic的软件,应该比这种手动方法方便,但是debian好像没有
  • 关于启动u盘,我只会做uefi启动的,bios启动的u盘制作应该更复杂;很多教程都要求烧写u盘,其实这对于uefi启动u盘不必要(bios启动有要求),新建分区把引导文件放进去即可,这样还可以制作多个启动选项的u盘
  • vefi-mnt/boot/grub下面有x86_64-efi i386-efi两个文件夹,下面文件很多,我也不知道有什么用,反正没复制他也能启动,u盘速度慢的可以不复制
  • live-boot live-boot-initramfs-tools两个软件包会修改initrd.img,使他可以在live环境中正常启动

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/799246.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware ESXi 8.0U3b 发布下载,新增功能概览

VMware ESXi 8.0U3b 发布下载,新增功能概览VMware ESXi 8.0U3b 发布下载,新增功能概览 同步发布 Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Hitachi (日立)、Fujitsu (富士通)、NEC (日电) 定制版 请访问原文链接:https://sysin.org/blog/vmwa…

.net core8 使用JWT鉴权(附当前源码)

说明该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。说明:OverallAuth2.0 是一个简单、易懂、功能强大的权限+可视化流程管理系统。 结合上一篇文章使用,味道更佳:.ne…

鸿蒙跨端实践-布局方案介绍

作者:京东科技 刘宁 一、前言动态化使用 jue 语言(开发风格与 Vue 一致)开发,对于视图的布局采用了标准的Flex 布局方式。对于列表类视图,动态化提供了<scroll>、<slider>、<recycle-list>、<waterfall>等标签,将子视图的布局管理封装到标签中实现…

GBASEDBTSERVER 环境变量7GBASEDBTSHMBASE 环境变量 (UNIX™)

GBASEDBTSERVER 环境变量 GBASEDBTSERVER 环境变量指定 SQL API 客户机、DB-Access 实用程序或其他 GBase 8s 产品与之建立显式或隐式连接的缺省数据库服务器。 必须先设置此环境变量,才能使用 GBase 8s 客户机产品。它具有以下语法。 dbservername 是缺省数据库服务器的名称。…

【Java】若依(ruoyi)——7.代码生成(二)细节操作

之前我们已经学习了代码生成的基础使用:https://www.cnblogs.com/luyj00436/p/18398248。即创建数据库并根据三种数据结构生成代码。 1. 基本信息和生成信息前缀 可以在配置表设置默认配置。单应用在resources目录下的application.yml,多模块ruoyi-generator中的resources目录…

史无前例,移植V8虚拟机到纯血鸿蒙系统

作者:京东科技 于飞跃 一、背景如图所示,Roma框架是我们自主研发的动态化跨平台解决方案,已支持iOS,android,web三端。目前在京东金融APP已经有200+页面,200+乐高楼层使用,为保证基于Roma框架开发的业务可以零成本、无缝运行到鸿蒙系统,需要将Roma框架适配到鸿蒙系统。…

Apple AirPods 售后服务 All In One

Apple AirPods 售后服务 All In One Apple 支持Apple AirPods 售后服务 All In One AirPods 支持 https://support.apple.com/zh-cn/airpodsAirPods 使用手册 https://support.apple.com/zh-cn/guide/airpods/welcome/web 查找 AirPods 序列号 https://support.apple.com/zh-cn…

使用sourceinsight阅读内核代码的一些问题

工具栏格式乱了怎么办 https://blog.csdn.net/qq_23327993/article/details/115567723 Linux内核中有很多宏定义,sourceinsight不识别,导致解析出问题 https://blog.csdn.net/nust20/article/details/46486947 https://www.jianshu.com/p/0b4ad9532367 https://tjtech.me/how…

error: Extra characters after test expression

问题:error: Extra characters after test expression 原因:在qt的pro文件中缺少 "/"

three

1. 扫描2. 访问http服务,并测试功能点联系方式留有电话和邮箱,得知target的域名 3. 寻找其他子域名 gobuster下的vhost模块能够枚举虚拟主机,尝试用不同的hostname发现服务器IP上其他host 使用方法如下: gobuster vhost -w /usr/share/seclists/Discovery/DNS/subdomains-to…

js Stream API简单使用

ReadableStream <script>// TextDecoder将字节转换为字符串,默认 utf-8 编码let uint8Array = new Uint8Array([72, 101, 108, 108, 111]);console.log(new TextDecoder().decode(uint8Array)); // Hellolet uint8Array1 = new Uint8Array([228, 189, 160, 229, 165, 189…

SDK实现广播的流程

其中APP:application 指应用程序 SD:softdevice    指蓝牙协议栈 SCANNER: 指扫描设备您的资助是我最大的动力!金额随意,欢迎来赏!如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】按钮。如果,您希望更容易地发现我的新博客,不妨点击一下绿色通…