Linux安装-kickstart无人值守安装
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
大家做运维估计都避免不了时不时会去机房安装一台linux服务器,但是服务器启动的特别慢,有的要2分钟,有的要5分钟,甚至时间刚才,我个人比较喜欢的服务器是Dell,相对来说启动的还算是快的,像华为服务器,IBM服务器启动的到加载bootloader是特别慢的一个时间。然后等到这些流程走完了还要安装操作系统,格式化又得等时间,想了想要是能把系统的服务器都提前指定好,让它自己安装就好了,查阅了相关资料,发现/root目录下有“anaconda-ks.cfg”这么一个配置文件,凡是你安装操作系统都会有这个文件。它到底是干啥用的呢?我会在下面的内容中一一揭晓,请带着你的好奇心往下看。
在我们切入正式话题之前,我们也得先了解一些基本原理,因为原理是一通百通的,以下我只是用centos环境为实验,大家也可以用ubantu,windows这些用户常用的系统来做,其原理都大同小异,这只是自动化安装系统的冰山一角,详情请参考redhat官网,那里面有700多页的关于这个的介绍,感兴趣的朋友可以去官网看下,下面跟着我一起来学习如何配置一个无人值守安装的OS(Operating System)吧。
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 '''
1 default vesamenu.c32 #加载“vesamenu.c32”这个应用程序 2 #prompt 1 3 timeout 600 4 5 display boot.msg 6 7 menu background splash.jpg #设置菜单背景图 8 menu title Welcome to CentOS 6.6! #这是标题信息 9 menu color border 0 #ffffffff #00000000 #设置边框颜色 10 menu color sel 7 #ffffffff #ff000000 11 menu color title 0 #ffffffff #00000000 12 menu color tabmsg 0 #ffffffff #00000000 13 menu color unsel 0 #ffffffff #00000000 14 menu color hotsel 0 #ff000000 #ffffffff 15 menu color hotkey 7 #ffffffff #ff000000 16 menu color scrollbar 0 #ffffffff #00000000 17 18 label linux #linux的标签名称,在启动过程中,你可以敲击Esc键,然后输入该标签名称,就会启动该选项,而且还可以在后面加一些参数,如你不想启用图像界面 可以输入:linux text 19 menu label ^Install or upgrade an existing system #定义标题的名称,“^Install”其中这个“^”表示你敲击I就能选择这一项 20 menu default #默认选择这项 21 kernel vmlinuz #启动内核文件 22 append initrd=initrd.img #启动rd文件,也是内核文件 23 label vesa 24 menu label Install system with ^basic video driver 25 kernel vmlinuz 26 append initrd=initrd.img xdriver=vesa nomodeset #后面有参数,nomodeset表示不适用任何额外的模式 27 label rescue 28 menu label ^Rescue installed system 29 kernel vmlinuz 30 append initrd=initrd.img rescue #表示启动救援模式 31 label local 32 menu label Boot from ^local drive 33 localboot 0xffff 34 label memtest86 35 menu label ^Memory test 36 kernel memtest #内核测试程序 37 append -
1 ''' 2 启动安装界面时,boot提示符后,可以向安装内核传递许多的配置参数,用于指定安装过程的特性 3 boot: 4 test:文本安装界面 5 graphical:图形安装界面 6 askmethod:提示用户指定安装方法,让用户选择使用的安装树 7 asknetword:提示用户在安装过程中使用网络功能,并提示用户配置网络地址 8 dd:提示用户指定一个驱动程序所在的设备 9 ks=:指定一个安装过程使用的kickstart文件 10 ks={http|https}://<sevrer>/<path> 11 ks=cdrom:/<path> 12 ks=nfs:<server>:/<path> 13 repo=:指定安装树位置 14 repo=ftp://<path> 15 repo={http|https}://<path> 16 repo=nfs:<path> 17 ip: 18 netmask: 19 gateway: 20 dns: 21 noipv6: 22 '''
1 ''' 2 提示: 3 如果你的服务器是通过光盘安装的话,在启动的时候可以手动制动ks文件的所在路径,它就会去找那个路径,并根据文件的内容安装相应的软件包. 4 如: 5 '''
四.利用完整玩系统自带的kickstart文件配置自动安装系统
1 [root@yinzhengjie ~]# mkdir /yinzhengjie/media 2 [root@yinzhengjie ~]# mount /dev/sr0 /yinzhengjie/media/ 3 mount: block device /dev/sr0 is write-protected, mounting read-only 4 [root@yinzhengjie ~]# mkdir /yinzhengjie/linux_iso 5 [root@yinzhengjie ~]# cp -r /yinzhengjie/media/isolinux/ /yinzhengjie/linux_iso 6 [root@yinzhengjie ~]# cat /root/anaconda-ks.cfg > /yinzhengjie/linux_iso/ks.cf 7 [root@yinzhengjie ~]# ll /yinzhengjie/linux_iso/ 8 total 8 9 dr-xr-xr-x. 2 root root 4096 May 24 23:01 isolinux 10 -rw-r--r--. 1 root root 3350 May 24 23:03 ks.cfg 11 [root@yinzhengjie ~]# 12 [root@yinzhengjie ~]# cd /yinzhengjie/linux_iso/isolinux/ 13 [root@yinzhengjie isolinux]# more isolinux.cfg #适当修改一些参数 14 default vesamenu.c32 15 #prompt 1 16 timeout 600 17 18 display boot.msg 19 20 menu background splash.jpg 21 menu title CentOS 6.6 made in china by yinzhengjie! #修改一个标题 22 menu color border 0 #ffffffff #00000000 23 menu color sel 7 #ffffffff #ff000000 24 menu color title 0 #ffffffff #00000000 25 menu color tabmsg 0 #ffffffff #00000000 26 menu color unsel 0 #ffffffff #00000000 27 menu color hotsel 0 #ff000000 #ffffffff 28 menu color hotkey 7 #ffffffff #ff000000 29 menu color scrollbar 0 #ffffffff #00000000 30 31 label linux 32 menu label ^Install CentOs6.6 by yinzhengjie #修改安装选项名称 33 menu default 34 kernel vmlinuz 35 append initrd=initrd.img ks=cdrom:/ks.cfg #在这里指定kickstart的位置所在。 36 label vesa 37 menu label Install system with ^basic video driver 38 kernel vmlinuz 39 append initrd=initrd.img xdriver=vesa nomodeset 40 label rescue 41 menu label ^Rescue installed system 42 kernel vmlinuz 43 append initrd=initrd.img rescue 44 label local 45 menu label Boot from ^local drive 46 localboot 0xffff 47 label memtest86 48 menu label ^Memory test 49 kernel memtest 50 append - 51 52 [root@yinzhengjie isolinux]# 53 [root@yinzhengjie ~]# cd /yinzhengjie/ #修改 54 [root@yinzhengjie yinzhengjie]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CENTOS" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/yinzhengjie.iso linux_iso/ 55 I: -input-charset not specified, using utf-8 (detected in locale settings) 56 genisoimage 1.1.9 (Linux) 57 Scanning linux_iso/ 58 Scanning linux_iso/isolinux 59 Excluded: linux_iso/isolinux/TRANS.TBL 60 Excluded by match: linux_iso/isolinux/boot.cat 61 Writing: Initial Padblock Start Block 0 62 Done with: Initial Padblock Block(s) 16 63 Writing: Primary Volume Descriptor Start Block 16 64 Done with: Primary Volume Descriptor Block(s) 1 65 Writing: Eltorito Volume Descriptor Start Block 17 66 Size of boot image is 4 sectors -> No emulation 67 Done with: Eltorito Volume Descriptor Block(s) 1 68 Writing: Joliet Volume Descriptor Start Block 18 69 Done with: Joliet Volume Descriptor Block(s) 1 70 Writing: End Volume Descriptor Start Block 19 71 Done with: End Volume Descriptor Block(s) 1 72 Writing: Version block Start Block 20 73 Done with: Version block Block(s) 1 74 Writing: Path table Start Block 21 75 Done with: Path table Block(s) 4 76 Writing: Joliet path table Start Block 25 77 Done with: Joliet path table Block(s) 4 78 Writing: Directory tree Start Block 29 79 Done with: Directory tree Block(s) 2 80 Writing: Joliet directory tree Start Block 31 81 Done with: Joliet directory tree Block(s) 2 82 Writing: Directory tree cleanup Start Block 33 83 Done with: Directory tree cleanup Block(s) 0 84 Writing: Extension record Start Block 33 85 Done with: Extension record Block(s) 1 86 Writing: The File(s) Start Block 34 87 25.74% done, estimate finish Thu May 25 01:07:14 2017 88 51.39% done, estimate finish Thu May 25 01:07:14 2017 89 77.11% done, estimate finish Thu May 25 01:07:14 2017 90 Total translation table size: 4701 91 Total rockridge attributes bytes: 1438 92 Total directory bytes: 2654 93 Path table size(bytes): 26 94 Done with: The File(s) Block(s) 19284 95 Writing: Ending Padblock Start Block 19318 96 Done with: Ending Padblock Block(s) 150 97 Max brk space used 0 98 19468 extents written (38 MB) 99 [root@yinzhengjie yinzhengjie]#
修改参数后,效果图如下:
1 [root@yinzhengjie yinzhengjie]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CENTOS(可改,这里只是个卷标名称)" -b isolinux/isolinux.bin(这里要写相对路径) -c isolinux/boot.cat(这里要写相对路径) -o /root/yinzhengjie.iso(这里只是个文件名称,定义生成映像的文件名) linux_iso/ (这里要写对那个目录进行源镜像文件) 2 3 4 注意:光盘中的背景图片也是可以更改的,但是要求大小:640*480 5
五.手动自作kickstart文件
C.手动配置“kickstart”文件
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 [root@yinzhengjie ~]# cd Desktop 8 [root@yinzhengjie Desktop]# ll 9 total 4 10 -rw-r--r--. 1 root root 1394 May 25 03:33 ks.cfg 11 [root@yinzhengjie Desktop]# ksvalidator ks.cfg 12 [root@yinzhengjie Desktop]# 13 14 ''' 15 注意: 16 ksvalidator 检查kickstart文件的配置是否存在问题, centos 6和5的语法上并不完全兼容 17 18 '''
六.系统故障排除之:bash程序文件损坏
[root@yinzhengjie ~]# mv /bin/bash /tmp/ #模拟bash被删除掉的场景,然后断电重启服务器
解决方案一:
1.将光盘加载进去,启动紧急救援模式
2.选择语言
3.选择键盘类别
4.不开启网络功能
5.点击继续
6.点击OK,
7.继续点击OK
8.启动bash,点击OK
9.安装bash
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 8 ''' 9 1.启动紧急救援模式 10 2.获取到bash的rpm包: 11 #mkdir -p /yinzhengjie/media #创建挂载点 12 #mount -r /dev/dvd /yinzhengjie/media #以只读的方式挂载 13 #rpm -ivh bash-*.rpm --replacepkgs --root=/mnt/sysimage/ #安装bash,参数--root=/mnt/sysimage/ 表示你的操作系统在这个光盘启动shell的挂载点。 14 紧急救援模式:启动了一个工作于光盘上的linux,要注意的是你救援光盘要和你的光盘最好保持一致。 15 '''