CoreOS在启动过程中,先加载内核,内核再加一个参数,来判断是不是第一次启动。
如果第一次启动,就执行ignitoin配置。
通过研究,在/boot/coreos
下touch一个名称为first_boot
的空文档 ,内核就认为是第一次启动了
注: 查看 /boot/coreos/grub/grub.cfg.tar 的解压后文档,可以知道整个启动流程。
在 /usr/share/oem/config.ign
这个文档中,保存的就是我们首次安装CoreOS时,配置文档 ignition.json
的内容
通过查看系统挂载信息可以知道目录 /usr/share/oem
是可写的
core@localhost ~ $ mount
/dev/mapper/usr on /usr type ext4 (ro,relatime,seclabel)
/dev/sda6 on /usr/share/oem type ext4 (rw,nodev,relatime,seclabel)
...
那么问题就简单了,要重新配置,则:
- 编写新的
config.yaml
配置文档再使用ct 工具,转换为.json
格式的文档; - 用将新的配置文档内容替换掉
/usr/share/oem/config.ign
的内容; - 在
/boot/coreos/
目录下, touch 一个 名为first_boot
的空文档; - reboot;
Ignition是coreos开发的一种新型的系统初始化配置方式,有以下特点:
- 只运行一次。在系统安装完成后,第一次开机启动时运行。
- 执行时间非常早,在内核加载后,initramfs阶段执行。
- 所以可以进行很多在系统阶段无法操作的工作。如格式化磁盘,调整网络配置,对只读文件系统进行写操作等。