debian-installer初探

一、构建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安装器的组件集使用



三、参考文档

跟我一起写Makefile

kill -HUP pid

内核启动流程

linux文件系统初始化过程

Linux文件描述符到底是什么?

Linux上的文件描述符3有什么特别之处?

Linux中getopt函数、optind等变量使用详解

linux c解析命令行选项getopt、optarg、optind、opterr、optopt

BusyBox init及inittab文件详解

解压vmlinuz和解压initrd(initramfs)

操作系统真象还原

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值