Linux安装-kickstart无人值守安装
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
大家做运维估计都避免不了时不时会去机房安装一台linux服务器,但是服务器启动的特别慢,有的要2分钟,有的要5分钟,甚至时间刚才,我个人比较喜欢的服务器是Dell,相对来说启动的还算是快的,像华为服务器,IBM服务器启动的到加载bootloader是特别慢的一个时间。然后等到这些流程走完了还要安装操作系统,格式化又得等时间,想了想要是能把系统的服务器都提前指定好,让它自己安装就好了,查阅了相关资料,发现/root目录下有“anaconda-ks.cfg”这么一个配置文件,凡是你安装操作系统都会有这个文件。它到底是干啥用的呢?我会在下面的内容中一一揭晓,请带着你的好奇心往下看。
在我们切入正式话题之前,我们也得先了解一些基本原理,因为原理是一通百通的,以下我只是用centos环境为实验,大家也可以用ubantu,windows这些用户常用的系统来做,其原理都大同小异,这只是自动化安装系统的冰山一角,详情请参考redhat官网,那里面有700多页的关于这个的介绍,感兴趣的朋友可以去官网看下,下面跟着我一起来学习如何配置一个无人值守安装的OS(Operating System)吧。
一.linux系统安装光盘目录结构
1.images:存放内核镜像;
2.isolinux:启动安装界面时,所用到的内核,应用程序,背景图片文件等都由该目录提供;
3.Packages:存放安装所需要的软件包(二进制的rpm包)用的,里面存放着anaconda程序
anaconda:fedora,Linux的安装程序
anaconda:将安装分成两个阶段
安装前配置阶段
键盘类型
安装过程中的语言
支持的语言
时区
选择要使用的磁盘设备
分区格式化
选择要安装的程序包
管理员密码
是否使用iptables
是否启用selinux
安装阶段
在目标磁盘上根文件系统
将选定的程序包安装至目标磁盘
二.如何启动安装过程
MBR:bootloader,本身可启动的安装光盘
网络启动安装过程
可移动设备,便携式设备
anaconda的配置文件称为kickstat
安装前配置阶段:
配置的选项:
必选项:
可选项:
三.kickstart文件的组成部分:
1.命令段:用于配置系统
install
text #文本式安装
firewall
part
lvm
2.软件包:指定要安装的程序包(程序包名)及程序包组(@组名)
%packages 标识
@Base:使用@指定包组
lftp:直接写程序包名
tree:
每行一个
注意:在程序包前加-,不安装相关包
%end :软件包结束
3.脚本段:
%pre:安装过程开始前的预备脚本,所能执行的操作较小,它是一个受限的环境,因为其是仅有简装版的shell环境。
%post:所有的软件完成之后执行的脚本,此时,具有完整意义上的shell环境,但并非所有命令都安装,先确保所有的程序包已经安装
1 [root@yinzhengjie ~]# cat anaconda-ks.cfg 2 # Kickstart file automatically generated by anaconda. 3 4 #version=DEVEL 5 install #命令段:用于配置系统,install就类似于标识符。 6 cdrom #指定安装树 7 lang en_US.UTF-8 #执行语言选项的 8 keyboard us #键盘类型 9 network --onboot yes --device eth0 --bootproto dhcp #定义网络属性 10 rootpw --iscrypted $1$wFJh7rT6$omn0IhuHv7a95SYMx/K640 #管理员的密码 11 # Reboot after installation 12 reboot #安装后会自动重启,如果不想其自动重启可以注释掉。 13 firewall --service=ssh #防火墙开启SSH功能 14 authconfig --useshadow --enablemd5 #认证的相关配置(用户密码在shadow里去找,加密算法用md5) 15 selinux --enforcing #selinux为开启模式 16 timezone --utc America/Los_Angeles #选择时区 17 bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" #指定你的MBR 18 # The following is the partition information you requested #注意:"#“后面没有空格说明是禁用功能,如果有空格说明是注释内容 19 # Note that any partitions you deleted are not expressed 20 # here so unless you clear all partitions first, this is 21 # not guaranteed to work 22 #clearpart --all --initlabel #清楚所有分区,如果你是双系统的这个要注意用哟! 23 24 #part /boot --fstype=ext4 --size=300 #指定分区/boot的分区信息,以下2行类似 25 #part / --fstype=ext4 --grow --size=3000 26 #part swap --grow --maxsize=1984 --size=1984 27 28 29 30 repo --name="CentOS" --baseurl=cdrom:sr1 --cost=100 #指定安装参考,明确指明安装树的路径 31 32 %packages #软件包:指定要安装的程序包(程序包名)及程序包组(@组名) 33 @Base #使用@指定包组,表示安装Base这个包组。 34 @Core 35 @Desktop 36 @Fonts 37 @General Purpose Desktop 38 @Internet Browser 39 @Printing client 40 @perl-runtime #在程序包前加-,不安装相关包,就说明这个包组不安装runtime这个软件包 41 @X Window System 42 binutils 43 gcc 44 kernel-devel #在程序包前加-,不安装相关包,就是这个程序包中不安装该包 45 make 46 patch 47 python 48 49 %end #软件包结束 50 51 %post #所有的软件完成之后执行的脚本 52 if [ -f /boot/grub/menu.lst -a ! -h /boot/grub/menu.lst ]; then cp /boot/grub/menu.lst /boot/grub/menu.lst.bak && sed -i 's/ rhgb//' /boot/grub/menu.lst; fi 53 if [ -f /boot/grub/grub.conf -a ! -h /boot/grub/grub.conf ]; then cp /boot/grub/grub.conf /boot/grub/grub.conf.bak && sed -i 's/ rhgb//' /boot/grub/grub.conf; fi 54 if [ -f /boot/grub2/grub.conf -a ! -h /boot/grub2/grub.conf ]; then cp /boot/grub2/grub.conf /boot/grub2/grub.conf.bak && sed -i 's/ rhgb//' /boot/grub2/grub.conf; fi 55 if [ -f /etc/rc.d/rc.local ]; then cp /etc/rc.d/rc.local /etc/rc.d/rc.local.backup; fi 56 cat >>/etc/rc.d/rc.local <<EOF 57 #!/bin/bash 58 echo 59 echo "Installing VMware Tools, please wait..." 60 if [ -x /usr/sbin/getenforce ]; then oldenforce=\$(/usr/sbin/getenforce); /usr/sbin/setenforce permissive || true; fi 61 mkdir -p /tmp/vmware-toolsmnt0 62 for i in hda sr0 scd0; do mount -t iso9660 /dev/\$i /tmp/vmware-toolsmnt0 && break; done 63 cp -a /tmp/vmware-toolsmnt0 /opt/vmware-tools-installer 64 chmod 755 /opt/vmware-tools-installer 65 cd /opt/vmware-tools-installer 66 mv upgra32 vmware-tools-upgrader-32 67 mv upgra64 vmware-tools-upgrader-64 68 mv upgrade.sh run_upgrader.sh 69 chmod +x /opt/vmware-tools-installer/*upgr* 70 umount /tmp/vmware-toolsmnt0 71 rmdir /tmp/vmware-toolsmnt0 72 if [ -x /usr/bin/rhgb-client ]; then /usr/bin/rhgb-client --quit; fi 73 cd /opt/vmware-tools-installer 74 for s in sr0 sr1; do eject -s /dev/\$s; done 75 ./run_upgrader.sh 76 if [ -f /etc/rc.d/rc.local.backup ]; then mv /etc/rc.d/rc.local.backup /etc/rc.d/rc.local; else rm -f /etc/rc.d/rc.local; fi 77 rm -rf /opt/vmware-tools-installer 78 sed -i 's/3:initdefault/5:initdefault/' /etc/inittab 79 if [ -f /boot/grub/menu.lst.bak ]; then mv /boot/grub/menu.lst.bak /boot/grub/menu.lst; fi 80 if [ -f /boot/grub/grub.conf.bak ]; then mv /boot/grub/grub.conf.bak /boot/grub/grub.conf; fi 81 if [ -f /boot/grub2/grub.conf.bak ]; then mv /boot/grub2/grub.conf.bak /boot/grub2/grub.conf; fi 82 if [ -x /usr/sbin/getenforce ]; then /usr/sbin/setenforce \$oldenforce || true; fi 83 if [ -x /bin/systemd ]; then systemctl restart prefdm.service; else telinit 5; fi 84 EOF 85 chmod 755 /etc/rc.d/rc.local 86 if [ -x /bin/systemd ]; then systemctl enable rc-local.service; fi 87 /usr/sbin/adduser yinzhengjie 88 /usr/sbin/usermod -p '$1$wFJh7rT6$omn0IhuHv7a95SYMx/K640' yinzhengjie 89 /usr/bin/chfn -f "yinzhengjie" yinzhengjie 90 /bin/echo done 91 %end #表示软件包结束 92 [root@yinzhengjie ~]#
1 #debug --graphics 2 default=0 3 splashimage=@SPLASHPATH@ #读取splash配镜图像的 4 timeout 5 5 hiddenmenu #隐藏菜单 6 title @PRODUCT@ @VERSION@ 7 kernel @KERNELPATH@ 8 initrd @INITRDPATH@ 9 title Install system with basic video driver 10 kernel @KERNELPATH@ xdriver=vesa nomodeset askmethod 11 initrd @INITRDPATH@ 12 title rescue 13 kernel @KERNELPATH@ rescue askmethod 14 initrd @INITRDPATH@ 15 16 ''' 17 其实这个信息显示的并不完全准确,因为它是被“isolinux”和“isolinux.cfg”二次包装过 18 '''