kickstart之pre & post

chroot(Change Root)也就是改变程式执行时所参考的根目录位置。

/bin
  /sbin
  /usr/bin
  /home

CHROOT的目录架构:

  /hell/
  /hell/bin
  /hell/usr/bin
  /hell/home

  1. 限制被CHROOT的使用者所能执行的程式,如SetUid的程式,或是会造成 Load 的Compiler等等。
  2. 防止使用者存取某些特定档案,如/etc/passwd。
  3. 防止入侵者/bin/rm -rf /。
  4. 提供Guest服务以及处罚不乖的使用者。
  5. 增进系统的安全。

kickstart本身提供了一些对系统的基本调整和设置,例如设置root密码,设置时区等等。但是它不能做某些更细致的调整,比如通过chkconfig禁止某些服务,建立特定的目录等等。因此我们需要使用pre-和postinstall脚本来完成这些任务。

从名字就可以看出这两种脚本执行的时机:

  • pre: 在安装进行之前执行
  • post: 脚本则在整个安装过程完成以后执行
  • pre install和post install脚本都在ks文件的末尾定义
  • pre install脚本用%pre指示开头,脚本使用的语法和RPM spec文件中的类似。在安装之前这个阶段,pre install脚本只能做一些基本的操作,比如查找一些文件或者挂载NFS共享等等。
  • postintall脚本则更有潜力,postinstall脚本用%post指示开头。当OS安装已经完成以后postinstall脚本默认是在新安装好的系统上执行,新安装好的系统这个时候处于chroot环境,根目录其实是在/mnt/sysimage下。

可以使用%post –nochroot来执行一些非chroot环境下的命令。比如在chroot环境下,你是无法访问光驱中的安装光盘的,因为光盘挂载在/tmp/cdrom,它是处于non-chroot环境下的。

一般来说postinstall脚本以#!/bin/sh这样的自定义shell作为第一行,然后下边就是普通的shell脚本了。这样基本上你想做什么都可以了。

3.1 resolv.conf

如果你使用静态 IP 信息配置了网络,包括名称服务器,你可以在 %post 部分中访问网络并解析 IP 地址。如果你使用 DHCP 配置网络,当安装执行到 %post 部分时,/etc/resolv.conf文件还没有完成,你可以访问网络,但是你不能解析 IP 地址。因此,如果你使用 DHCP,你必须在 %post 这一节中指定 IP 地址。

3.2 复制安装介质里的文件

post脚本在 chroot 环境中运行,因此复制安装介质中的脚本或 RPM 之类的任务将不能被执行。 –nochroot允许你指定你想在 chroot 环境之外运行的命令,下面的例子把 /etc/resolv.conf 文件复制到刚刚安装了的文件系统上:

%post --nochroot
cp /etc/resolv.conf /mnt/sysimage/etc/resolv.conf

“–interpreter /usr/bin/python” 允许你指定不同的脚本语言,如 Python。 用你想用的脚本语言来替换 /usr/bin/python。

  • linux/os_provision/pre_post_install.txt
  • 最后更改: 2019/04/16 18:31
  • (外部编辑)