一.自动化安装的大致流程
- 提取iso镜像中的initrd.gz vmlinuz,pool/ dist/ .disk文件
- 将编辑好的preseed.cfg文件放到initrd.gz中
- 制作u盘启动,引导vmlinuz内核和initrd.gz文件系统
debian iso下载
jigdo教程
jigdo是什么
- Jigdo(“Jigsaw download”,曲线下载)是为Debian套件设计的下载工具,可以从几个镜像站点下载不同的文件,然后再生成一个CD映像。jigdo也可下载其他系统的镜像。
如何使用
- jigdo可以在window和linux系统使用,本教程以linux为例,使用的虚拟机是ubuntu。
apt-get install jigdo-file
安装jigdo工具- 在终端中输入
jigdo-lite
则会提示输入jigdo文件url地址,复制粘贴你想下载的镜像地址
注意:复制粘贴的url地址一般是https开头的,终端里需要输入的地址必须是http开头,需要手动修改,否则会无法识别。
4. 如果您是首次使用,在Files to scan提示符出现时,只需按下回车键。
5. 在提示符Ubuntu Mirror中输入你想从哪个镜像源下载,系统会自动识别/etc/apt/source.list中已经配置的镜像源,按回车键即可开始下载。(如果没有配置,会默认使用debian官方镜像源,下载速度慢)
二. 编辑preseed.cfg文件
- preseed.cfg提供了一种对安装过程中提出的问题设置答案的方法,而无需在安装运行时手动输入答案。这使得完全自动化大多数类型的安装成为可能,甚至提供了一些在正常安装期间不可用的功能。
- 下面是配置文件参考(只贴出了部分内容,其他的选项可以简单的看下这个配置文件,比较容易理解,主要是配置地区,网络,镜像源设置,创建用户密码,时区设置,分区,bootloader安装,预定义脚本等待)。
- 分区设置(该项目只分了一个区/):
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表示分配剩下的所有磁盘空间),文件系统类型。
- 预定义脚本设置
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/下搜索不到内容,就会报这个错误。
- 安装完成后的行为
####################################################################
# 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镜像文件
- 在opt/目录下
mkdir isofile
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文件内容,添加了点灯操作,指示安装的状态。
- 目前点灯程序设置的状态说明:
- 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包,以及修改系统中的一些配置文件等等。 - 贴出比较重要的内容
- 安装实时内核
### 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盘启动
- 将u盘格式化成FAT32格式。
- 将镜像中的pool/ dists/ .disk vmlinuz和已经修改好的initrd.gz拷贝到u盘根目录中。
- 将t3000/ syslinux.cfg和syslinux.exe拷贝到u盘根目录中,此时u盘中应该有如下几个文件:
- 以管理方式打开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