基于d-i方式的Debian自动化安装

一.自动化安装的大致流程

  1. 提取iso镜像中的initrd.gz vmlinuz,pool/ dist/ .disk文件
  2. 将编辑好的preseed.cfg文件放到initrd.gz中
  3. 制作u盘启动,引导vmlinuz内核和initrd.gz文件系统

debian iso下载

jigdo教程

jigdo是什么

  • Jigdo(“Jigsaw download”,曲线下载)是为Debian套件设计的下载工具,可以从几个镜像站点下载不同的文件,然后再生成一个CD映像。jigdo也可下载其他系统的镜像。

如何使用

  1. jigdo可以在window和linux系统使用,本教程以linux为例,使用的虚拟机是ubuntu。
  2. apt-get install jigdo-file 安装jigdo工具
  3. 在终端中输入jigdo-lite则会提示输入jigdo文件url地址,复制粘贴你想下载的镜像地址
    在这里插入图片描述
    在这里插入图片描述

注意:复制粘贴的url地址一般是https开头的,终端里需要输入的地址必须是http开头,需要手动修改,否则会无法识别。
4. 如果您是首次使用,在Files to scan提示符出现时,只需按下回车键。
5. 在提示符Ubuntu Mirror中输入你想从哪个镜像源下载,系统会自动识别/etc/apt/source.list中已经配置的镜像源,按回车键即可开始下载。(如果没有配置,会默认使用debian官方镜像源,下载速度慢)
在这里插入图片描述

二. 编辑preseed.cfg文件

  • preseed.cfg提供了一种对安装过程中提出的问题设置答案的方法,而无需在安装运行时手动输入答案。这使得完全自动化大多数类型的安装成为可能,甚至提供了一些在正常安装期间不可用的功能。
  • 下面是配置文件参考(只贴出了部分内容,其他的选项可以简单的看下这个配置文件,比较容易理解,主要是配置地区,网络,镜像源设置,创建用户密码,时区设置,分区,bootloader安装,预定义脚本等待)。
  1. 分区设置(该项目只分了一个区/):
d-i partman-auto/choose_recipe select series3600
d-i partman-auto/expert_recipe string                         \
      series3600 ::                                            \
              300 50 -1 ext4                                  \
                      $primary{ } $bootable{ }               \
                      method{ format } format{ }              \
                      use_filesystem{ } filesystem{ ext4 }    \
                      mountpoint{ / }                     \
              .                                               \

 第四行的300 50 -1 ext4分别表示最小分区大小(单位:MB),优先级(如果有多个分区,该值越小,优先级越高,优先给该分区分配指定的磁盘空间),最大分区大小(-1表示分配剩下的所有磁盘空间),文件系统类型。

  1. 预定义脚本设置
d-i preseed/early_command string umount /media
####################################################################
# Software Installation
####################################################################
d-i preseed/late_command string \
 cp -a /cdrom/t3000 /target/tmp; \
 cp -f /var/log/syslog /target/var/log/cm_installation.log; \
 in-target sh /tmp/t3000/install_cm.sh; \
 mount /cdrom/ -o remount,rw; \
 cp -f /target/var/log/cm_installation.log /cdrom/; \
 sync; \
 [ -f /target/var/install_cm_error ] && /sbin/installation_led ERROR || /sbin/installation_led INSTALLED &

 该工程中比较重要的一点是第一行d-i preseed/early_command ---,这解决了安装过程中碰到的一个问题 your installation CD-ROM couldn’t be mounted。这个问题是在安装时探测和挂载u盘时出现的,原因是此时u盘被挂载到了/media目录下,正常应该是挂载到/cdrom/目录下,安装程序在/cdrom/下搜索不到内容,就会报这个错误。

  1. 安装完成后的行为
####################################################################
# Finishing up the installation 
####################################################################
#d-i finish-install/keep-consoles boolean true
d-i finish-install/reboot_in_progress note
d-i cdrom-detect/eject boolean false
d-i debian-installer/exit/halt boolean true

 取消keep-consoles行的注释,在安装完成后会保留控制台程序,按CTRL+ALT+F2进入后台,通过命令行进行一些调试工作。

三. 解压ISO镜像文件

  1. 在opt/目录下mkdir isofile
  2. bsdtar -C isofiles/ -xvf debian.iso,将iso镜像解压到isofile目录下
    3.在isofile/目录下将会看到如下内容
    在这里插入图片描述

vmlinuz

  • vmlinuz是可引导、压缩的内核。vmlinuz和内核编译产生的bzImage是一样的,只是名字不一样(cp bzImage vmlinuz)

initrd.gz

  • 在 linux内核启动前, boot loader 会将存储介质中的 initrd 文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的 initrd 文件系统。根文件系统可以存储在包括IDE、SCSI、USB在内的多种介质上,如果将这些设备的驱动都编译进内核,会导致内核很臃肿。
  • linux 发行版必须适应各种不同的硬件架构,将所有的驱动编译进内核是不现实的,initrd 技术是解决该问题的关键技术。Linux 发行版在内核中只编译了基本的硬件驱动,在安装过程中通过检测系统硬件,生成包含安装系统硬件驱动的 initrd,是一种即可行又灵活的解决方案。

initrd.gz解包

1. gunzip initrd.gz
2. mkdir tmp
3. cd tmp
4. cpio -id < ../initrd

此时可以将preseed.cfg放到/tmp/目录下,也可以根据需求编辑文件系统内容,该项目中更改了etc/inittab文件内容,添加了点灯操作,指示安装的状态。
inittab
myStart.sh

  • 目前点灯程序设置的状态说明:
  • Start installation: COM-led on && RUN-led off
  • install successful: COM-led off && RUN-led off
  • error installation: COM-led on && RUN-led on

initrd.gz封包

1. cd tmp
#下面这条命令要在tmp目录下执行
2. find . | cpio --create --format='newc' > ../initrd
3. cd ..
4. gzip initrd

pool && dists && .disk

  • pool/里包含了大量的debian基础包。
  • dists/记录了pool里的包的结构。
  • .disk暂时不知道是干啥用的,但是没有他安装会失败。

其他文件

  • isofile/目录下的其他文件都是isolinux引导工具所需要的,该项目中使用syslinux引导,isolinux相关的文件都不需要

四. 系统配置

  • 在preseed.cfg中有个配置in-target sh /tmp/t3000/install_cm.sh; \,表示安装完系统之后再执行install_cm.sh这个脚本对已经装好的系统进行一些配置。该项目中主要是替换实时内核,安装一些额外的debian包,以及修改系统中的一些配置文件等等。
  • 贴出比较重要的内容
  1. 安装实时内核
### Kernel package 
cd ${PKG_ROOT}/kernel
dpkg -i libklibc_2.0.4-9_i386.deb
dpkg -i klibc-utils_2.0.4-9_i386.deb
dpkg -i linux-base_4.5_all.deb
dpkg -i initramfs-tools-core_0.130_all.deb
dpkg -i initramfs-tools_0.130_all.deb
dpkg -i linux-firmware-image-4.9.228-rt147_4.9.228-rt147-3_i386.deb
dpkg -i linux-libc-dev_4.9.228-rt147-3_i386.deb
dpkg -i linux-image-4.9.228-rt147_4.9.228-rt147-3_i386.deb >> $LOGFILE 2>&1

安装内核包时手动决定安装的顺序以解决依赖问题,如果用dpkg -i .deb安装可能会出现意想不到的错误(主要是依赖顺序的问题),导致无法产生initrd-**.img文件,没有该文件,安装好的系统就无法引导。

五. syslinux引导u盘启动

  1. 将u盘格式化成FAT32格式。
  2. 将镜像中的pool/ dists/ .disk vmlinuz和已经修改好的initrd.gz拷贝到u盘根目录中。
  3. 将t3000/ syslinux.cfg和syslinux.exe拷贝到u盘根目录中,此时u盘中应该有如下几个文件:
    u盘根目录内容
  4. 以管理方式打开cmd界面,切换到u盘所在的目录。假设u盘的盘符是f:,则敲入如下图片的命令(命令执行成功后没有任何提示)。
    在这里插入图片描述
    -m: copies the master boot record
    -a: checks and sets the partition to active
    -d /: points to the directory where the syslinux.cfg is

附录

一些参考链接

  1. Modifying an installation ISO image to preseed the installer from its initrd
  2. DebianInstallerPreseed
  3. 告诉你如何修改debian iso的pool(该项目没有修改pool)
  4. Debian GNU/Linux Installation Guide
  5. 如何制作自己的linux发行版镜像(这个回答使我了解了制作iso镜像的大致原理)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值