【转】重新打包DebianISO实现无人应答安装(UEFI+BIOS)

转自:重新打包DebianISO实现无人应答安装(UEFI+BIOS) - 全部 - 真不是你的

 

之前我写过打包DebianISO的文章,但是那种打包的方法只能用在引导是BIOS的机器上,按照正常的情况,应该是UEFI+BIOS同时支持。

正好前两天给甲骨文重装系统的时候需要重新打包支持UEFI的ISO用作本地测试,所以这里把UEFI的打包过程也记录一下。

Debian的无人应答安装难就难在preseed的配置,因为没有一个完整的文档可以参考,基本上只能自己一个配置一个配置的去试,少一个配置可能就会在安装的界面弹提示框,出了提示框就不能实现无人应答安装了。

不过好在我之前已经折腾出了一个Debian10可以完美用的preseed配置,所以在甲骨文的机器上装,只需要做一下关于UEFI的支持即可。

所以这也就是为啥要在本地测试的原因,先在虚拟机内跑,虚拟机没问题了再放到甲骨文上试。不过即便是这样我也还是翻车了很多次,甲骨文的机器也删了很多台。。这里就不细说了。。

安装打包需要用到的工具:

apt -y update
apt -y install xorriso isolinux syslinux-utils p7zip-full

下载debian的iso并解压:

wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.9.0-amd64-netinst.iso
7z x debian-10.9.0-amd64-netinst.iso -oimlala

把install.amd目录给写权限:

chmod +w -R imlala/install.amd

解压出initrd:

gunzip imlala/install.amd/initrd.gz

bios和uefi引导需要修改的文件不同,这里只记录uefi引导需要修改的位置,bios引导的可以参考我之前的文章。

首先需要把iso内关于uefi引导的grub配置进行修改,编辑如下文件:

nano imlala/boot/grub/grub.cfg

设置一个超时时间,这里我设置为5秒,默认情况下是没有超时的,也就是说当iso挂载上去后,菜单内必须要人工手动去选择,为了实现无人应答安装,必须设置超时,过了超时时间让iso自动进入相应的grub菜单:

set timeout=5

然后把图形化安装菜单和文本安装菜单的位置调换一下,默认是图形化安装在grub菜单的第一位,为啥要调换位置?因为图形化菜单是不支持preseed的:

menuentry --hotkey=i 'Install' {
set background_color=black
linux    /install.amd/vmlinuz vga=788 --- quiet
initrd   /install.amd/initrd.gz
}
menuentry --hotkey=g 'Graphical install' {
set background_color=black
linux    /install.amd/vmlinuz vga=788 --- quiet
initrd   /install.amd/gtk/initrd.gz
}

具体改动的位置:

然后就是老套路了,新建一个preseed配置文件:

nano preseed.cfg

写入你需要的配置,下面这个配置是我经过测试的,目前可以用在debian10.9上:

# 配置语言
d-i debian-installer/locale string en_US
# 配置键盘
d-i keyboard-configuration/xkb-keymap select us
# 使用自动的方式配置网络(DHCP)
d-i netcfg/choose_interface select auto
# 配置hostname和domain
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain
d-i netcfg/hostname string imlala
# 配置软件源
d-i mirror/country string manual
d-i mirror/http/hostname string ftp.jp.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
# 开启root登录并设置root密码,关闭普通用户创建
d-i passwd/root-login boolean true
d-i passwd/make-user boolean false
d-i passwd/root-password password 123456
d-i passwd/root-password-again password 123456
# 设置时区为东八区
d-i clock-setup/utc boolean true
d-i time/zone string Asia/Shanghai
d-i clock-setup/ntp boolean false
# 硬盘分区,注意/dev/sda这里的设备名,要改为你自己的设备名,一般虚拟机如VMware/VirtualBox都是这个设备名
d-i partman-auto/disk string /dev/sda
d-i partman-auto/method string regular
# 手动划分分区大小
d-i partman-auto/expert_recipe string         \
boot-root ::                                \
1 1 1 free                                \
$bios_boot{ }                           \
method{ biosgrub }                      \
.                                         \
256 2 256 fat32                           \
$primary{ }                             \
$iflabel{ gpt }                         \
$reusemethod{ }                         \
method{ efi } format{ }                 \
mountpoint{ /boot/efi }                 \
.                                         \
512 3 512 ext4                            \
$primary{ }                             \
$bootable{ }                            \
method{ format } format{ }              \
use_filesystem{ } filesystem{ ext4 }    \
mountpoint{ /boot }                     \
.                                         \
1024 5 1024 linux-swap                    \
$primary{ }                             \
method{ swap } format{ }                \
.                                         \
1 4 -1 ext4                               \
$primary{ }                             \
method{ format } format{ }              \
use_filesystem{ } filesystem{ ext4 }    \
mountpoint{ / }                         \
.                                         \
# 因甲骨文的机器是efi引导,所以这里强制使用gpt分区表
d-i partman-efi/non_efi_system boolean true
d-i partman-partitioning/choose_label string gpt
d-i partman-partitioning/default_label string gpt
# 如果硬盘内之前有lvm或是raid的分区,全部删除
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/device_remove_lvm boolean true
# 下面的这些配置可以做到没有交互式的完成硬盘分区
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
# 禁止在安装的时候弹出CD/DVD扫描提示
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
d-i apt-setup/cdrom/set-first boolean false
d-i apt-setup/cdrom/set-next boolean false
d-i apt-setup/cdrom/set-failed boolean false
# 软件包选择
tasksel tasksel/first multiselect standard
# 安装额外的软件包,不更新系统
d-i pkgsel/include string openssh-server
d-i pkgsel/upgrade select none
# 禁止在安装的时候弹出popularity
popularity-contest popularity-contest/participate boolean false
# grub安装
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
d-i grub-installer/bootdev string default
# 安装完成之后不要弹出安装完成的界面,直接重启
d-i finish-install/reboot_in_progress note
# 允许ssh服务使用root用户登录
d-i preseed/late_command string in-target sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config

这里详细说一下关于手动分区的配置,可能很多人不理解分区这块的配置。

分区那里的三个数字,比如说512 3 512,第一个512代表最小分区大小,第二个数字代表优先级,数字越小表示优先级越高,第三个数字代表最大分区大小。如果第三个数字设置为-1就代表剩下的空间全部划分给这个分区。

然后尤其注意这个配置:

d-i partman-efi/non_efi_system boolean true

如果在preseed内配置了这个BIOS引导直接失效,它将强制使用UEFI引导,所以如果你要UEFI+BIOS同时支持,这个配置需要从preseed中删除。

接下来把改好的配置内嵌到initrd:

echo preseed.cfg | cpio -H newc -o -A -F imlala/install.amd/initrd

重新压缩initrd:

gzip imlala/install.amd/initrd

还原install.amd目录之前的权限:

chmod -w -R imlala/install.amd

最后重新打包iso:

xorriso -as mkisofs \
-isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
-c isolinux/boot.cat \
-b isolinux/isolinux.bin \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
-eltorito-alt-boot \
-e boot/grub/efi.img \
-no-emul-boot \
-isohybrid-gpt-basdat \
-o preseed-debian-10.9.0-amd64-netinst.iso \
imlala

在虚拟机上启用uefi引导:

测试安装,文本安装选项在第一启动位:

等待5秒超时过后,自动安装开始:

参考文献:

https://wiki.syslinux.org/wiki/index.php?title=Isohybrid
https://wiki.debian.org/DebianInstaller/Preseed/EditIso

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

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

相关文章

定制mini2440 wince启动界面

定制mini2440 wince启动界面过程 我的显示屏是7寸的,所以应该按照分辨率制作一张800*480像素的图片。 详细步骤如下: 1、我用photoshop的制作的,如下图: 2、用bmp2T.exe转换这个图片,在命令符下输入bmp2T空格图片名…

Copying to tmp table Problem Solving

Labels: MySQL, MySQL_Problem_Solving 今天一早突然系统突然报慢,查了一下是以下语句: 6177700 username ip db——name Query 549 Copying to tmp table SELECT ....................原因如下:Copying to tmp table on disk The tempora…

WinCE启动界面的定制

本文将以模拟器为例,简单介绍如何定制WinCE的启动界面,实现动画效果。在实际硬件平台上一般在BOOTLOADER中定制开机界面。如果BOOT从Flash加载NK到内存的时间较长,通常也会加一个进度条显示。如果从NK加载完成到进入CE桌面的时间也很长&#…

【转】CT辐射量如何计算?

转自:CT辐射量如何计算? - 知乎 作者:西门子中国 链接:https://www.zhihu.com/question/27399697/answer/190062962 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 CT检查后&am…

linux c++连接mysql示例

编译和连接程序 MySQL中有一个特殊的脚本,叫做mysql_config. 它会为你编译MySQL客户端,并连接到MySQL服务器提供有用的信息.你需要使用下面两个选项. 1. --libs 选项 - 连接MySQL客户端函数库所需要的库和选项. $ mysql_config --libs 2. --cflags 选项 - 使用必要的include文件…

ucGUI内存管理

ucGUI内存管理分析 1. 概述 ucGUI为了提高在不同硬件与软件平台的可移植性,它的内存分配没有用到像molloc和free这样的与平台相关的函数。它有自己的一套机制来管理内存。以下详细描述其内存管理机制。 2. ucGUI需要管理的内存 a) 窗体&#x…

【转】TCP和UDP的区别

TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UDP协议与TCP/IP协议的联系,很多人犯糊涂了, 一直都是说TCP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! TCP/IP协议是一个协议簇。里面包括很多协议…

用js将form表单同时提交到两个不同页面的方法

用js将form表单同时提交到两个不同页面的方法: <script type"text/javascript"> function dosubmit(){ window.open(first.php?var1window.form.var1.value&var2window.form.var2.value); window.open(second.php?var1window.form.var1.value&var2wi…

ucGUI文件说明

ucGUI文件说明 1. ucGUI目录结构概述 ucGUI目录结构如下表&#xff1a; 目录 内容 Config 配置文件 GUI/AntiAlias 抗锯齿支持 GUI/ConvertMono 灰度显示的色彩转换 GUI/ConvertColor 彩色显示的色彩转换 GUI/Core 内核文件 GUI/LCDDriver LCD驱动 GUI/To…

【转】关于InfiniBand几个基本知识点解释

转自&#xff1a;关于InfiniBand几个基本知识点解释_架构师技术联盟-CSDN博客 IP网络协议如TCP/IP&#xff0c;具有转发丢失数据包的特性&#xff0c;网络不良时要不断地确认与重发&#xff0c;基于这些协议的通信也会因此变慢&#xff0c;极大地影响了性能。与之相比&#xf…

SmartFox中的類型轉換

今天在使用SmartFox中的用戶變量UserVariables 時發現了一個問題&#xff0c;就是在使用方法SetUserVariables 來發送坐標的時候&#xff0c;在調試信息中發現發送和接受到的變量都是空的&#xff0c;測試了一下發送其他信息卻是成功的&#xff0c;于是在發送時把坐標轉換成str…

WinCE EBOOT中的BootPart分析

应该说BootPart算是微软提供的一个用于分区的模块&#xff0c;可以在EBOOT中使用。不过说实话&#xff0c;我很少使用它&#xff0c;知道有些厂商的BSP里面支持这个功能&#xff0c;而且也算是EBOOT的一部分&#xff0c;所以还是介绍一下。先看一下架构&#xff0c;如图&#x…

【转】语义化版本 2.0.0

转自&#xff1a;语义化版本 2.0.0 | Semantic Versioning 语义化版本 2.0.0 摘要 版本格式&#xff1a;主版本号.次版本号.修订号&#xff0c;版本号递增规则如下&#xff1a; 主版本号&#xff1a;当你做了不兼容的 API 修改&#xff0c;次版本号&#xff1a;当你做了向下…

心情随笔

不好意思&#xff0c;在这里又要让大家听我的牢骚了&#xff0c;但是我实在是没有地方可以发泄&#xff0c;所以只好对不起大家了&#xff0c;在近两个月的找工作历程中心智成熟了很多&#xff0c;同时言语也少了很多&#xff0c;知道没有用的话是白费口舌所以很少发表自己的意…

wince编译问题

一般来说&#xff0c;在VS2008中修改注册表文件&#xff0c;不需要从新编译内核&#xff0c;只需要copy files to release directory和make run-time image即可。但发现不好用&#xff0c;暂时不知道为什么。 看了看BSP目录下的文件&#xff0c;手动修改了X:\WINCE600\PLATFOR…

【转】Ubuntu:永久修改MAC地址

转自&#xff1a;Ubuntu&#xff1a;永久修改MAC地址 - YeeYang - BlogJava 前面发了一篇文章&#xff1a;Ubuntu&#xff1a;修改网卡的MAC地址&#xff0c;最后提到了重启后MAC地址会还原的问题&#xff0c;本文将介绍如何永久修改MAC地址&#xff08;当然不能重装系统&#…

陌生的是人心,是人性,是社会,是世道

偶然中得到这样一本书&#xff0c;它是一本都市小说&#xff0c;写自己的经历&#xff0c;不是很乏味的经历&#xff1b;它是一本职场小说&#xff0c;有着对每个人的、不同侧重点的、外表及心理刻画&#xff0c;披露了鲜为人知的职场黑幕&#xff1b;它又是一本悬疑小说&#…

【转】PF_INET 和 AF_INET 的区别

转自&#xff1a;PF_INET 和 AF_INET 的区别 - 52php - 博客园 在写网络程序的时候&#xff0c;建立TCP socket&#xff1a; 1 sock socket(PF_INET, SOCK_STREAM, 0); 然后再绑定本地地址或连接远程地址时需要初始化sockaddr_in结构&#xff0c;其中指定address family时一…

可以让你少奋斗10年的工作经验

第一&#xff1a;不要认为停留在心灵的舒适区域内是可以原谅的。     每个人都有一个舒适区域&#xff0c;在这个区域内是很自我的&#xff0c;不愿意被打扰&#xff0c;不愿意被push&#xff0c;不愿意和陌生的面孔交谈&#xff0c;不愿意被人指责&#xff0c;不愿意按照规…

【转】PF_RING学习笔记

转自&#xff1a;Qt迭代器&#xff08;Java类型和STL类型&#xff09;详解 1、PF_RING简介 PF_RING是Luca研究出来的基于Linux内核级的高效数据包捕获技术。简单来说PF_RING 是一个高速数据包捕获库,通过它可以实现将通用 PC 计算机变成一个有效且便宜的网络测量工具箱,进行数…