一、构建debian-installer
1.安装debian系统
选择并下载系统: https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/
iso文件方式安装: 使用virtualbox虚拟机安装
制作U盘启动盘方式安装:
a. 给优盘分两个区/dev/sdx1、/dev/sdx2
b. 使用 U 盘的第一个分区,而不是整个设备
c. 安装mbr:`install-mbr /dev/sdx`
d. 建立文件系统:`mkdosfs /dev/sdx1`
e. 拷贝镜像里的文件到优盘的第一个分区
2.设置/etc/apt/sources.list中的软件源
deb http://ftp.debian.org/debian sid main
deb-src http://ftp.debian.org/debian sid main
3.安装工具软件
apt-get install myrepos git curl
apt-get install fakeroot
4.获得debian-installer源码
使用: mr bootstrap https://salsa.debian.org/installer-team/d-i/raw/master/.mrconfig debian-installer
或: https://wiki.debian.org/DebianInstaller/CheckOut 中的其他方式
目录结构如下图:
5.构建debian-installer
a. 处理依赖问题:
cd debian-installer
apt build-dep debian-installer
apt-get install “要安装的包”
b. 修改 “installer/config/common” 配置文件:
LINUX_KERNEL_ABI ?= 5.10.0-8
USE_UDEBS_FROM = stable
c. 清理操作: make reallyclean
d. 构建: fakeroot make build_cdrom_gtk
ps: 在 http://ftp.debian.org/debian/dists/stable/main/installer-amd64/current/images/ 可以找到已经编译好的现成的安装器的打包
一个问题:
a.编译好的initrd系统里,像user-setup-udeb这些包究竟放在了哪里?
6.构建installation-guide
a. 路径中不要包含中文,否则会报xml解析错误:
b. 处理依赖问题
dpkg-checkbuilddeps
aptitude install -R “要安装的包”
c. 构建
cd installation-guide
dpkg-buildpackage
d. 得到如下deb包
e. 解压一个deb即得到文档
**ps:**其实debian镜像中已经分发的有文档了,在镜像的 doc/manual/zh_CN/install.zh_CN.pdf
即是
二、debian-installer启动流程
官方说明文档在这里: https://d-i.debian.org/doc/internals/
这里结合个人理解进行一些讲解:
1.安装器系统加载的大致流程
a.系统启动的时候,加载内核
通过 内核调试技术 可以模拟一个x86机器上的linux内核加载过程:
例子:
比对debain-installer的安装 日志 可以确定安装器的初始化开始的时机:
b.内核初始化完成后执行/init程序执行了"/sbin/busybox init",读取/etc/inittab配置文件
2.debian安装器运行在哪里?
a. debian安装器在打包的时候会生成initrd.gz文件,启动系统安装的时候,安装器就运行在这个“定制版的“initrd系统里
第一进程是 /sbin/busybox init
安装前文件系统的挂载情况
debian-installer-setup.d执行完后触发initab的从新加载
b. debain安装器的initrd系统和装好后的initrd系统是 不一样的
使用内核解压命令:“gunzip initrd.gz”、“cpio -ivdu < initrd”
c. 安装好后的sbin中的init都指向了systemd (uos和debian的对比)
3.从加载main-menu模块到显示安装器界面的过程
mian-menu 的加载是由 /lib/debian-installer.d/S70Menu 脚本中执行 /lib/debian-installer/menu 脚本触发的, /lib/debian-installer/menu 脚本中执行:“exec debconf -o d-i $MENU” 其中变量值 $MENU 就是 mian-menu。这里开始 debconf 首先完成自己初始化操作,根据nDEBIAN_FRONTEND标志位判断加载gtk库还是newt字符库,之后debconf对gtk组件与main-menu程序进行绑定,触发main-menu初始化,加载第一个界面组件localchooser
Installer-Menu-Item: 控制菜单组件的加载顺序
4.安装过程
安装基本系统:使用 debootstrap 工具
5.一些想法
a. debain安装器的装系统方案和uos的装系统方案区别有哪些?
debain安装器安装系统的过程是“扩展式”,从/sbin/busybox init开始->初始化安装器设置->显示安装器界面程序main-menu->挂载/cdrom->加载分区、网络等组件->debootstrap构建安装“基本系统“->安装软件包->完成
uos服务版安装系统的时候文件系统的挂载情况:
b. debian安装器启动系统的第一进程是 “/sbin/busybox init”,uos安装器启动后第一进程是什么呢?
uos安装器启动后第一进程是 “/sbin/init livcd-insraller splash”,/sbin/init 是 /lib/systemd/system的链接
c. 对于uos安装器,debian安装器有哪些可借鉴之处呢?
1)debian安装器在网络设置阶段是首先尝试自动配置网络,以便提供网络镜像支持
2)debain安装器的组件集使用