自动化装机系统-kickstart
环境准备
准备好一台用于部署kickstart服务端的机器
注意:虚拟机网卡连接方式,采用NAT模式,不要用桥接,且关闭VM网卡中的DHCP服务
环境准备如下
1.配置yum源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum clean all yum makecache 2.关闭防火墙 [root@kickstart ~]# systemctl stop firewalld [root@kickstart ~]# systemctl disable firewalld [root@kickstart ~]# sed -i 's/enforcing/disabled/g' /etc/selinux/config [root@kickstart ~]# getenforce Enforcing 3.关闭VMware的DHCP服务,设置Linux静态IP [root@kickstart ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=b48192ee-f521-4a5c-b74e-56269596c37d DEVICE=ens33 ONBOOT=yes IPADDR=10.0.0.50 NETMASK=255.255.255.0 GATEWAY=10.0.0.2 DNS1=114.114.114.114
第一步:部署DHCP服务端
[root@kickstart ~]# yum install dhcp -y [root@kickstart ~]# rpm -qa dhcp dhcp-4.2.5-83.el7.centos.1.x86_64
查看DHCP配置文件
[root@kickstart ~]# cat /etc/dhcp/dhcpd.conf # # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.example # see dhcpd.conf(5) man page #
查看DHCP示例配置文件
[root@kickstart ~]# cat /usr/share/doc/dhcp*/dhcpd.conf.example
服务端编写dhcpd.conf
查看当前网络环境,局域网段
[root@kickstart ~]# ip ad 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:6e:50:d7 brd ff:ff:ff:ff:ff:ff inet 10.0.0.50/24 brd 10.0.0.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::8d10:27e0:1c5b:e2a1/64 scope link noprefixroute valid_lft forever preferred_lft forever
配置dhcpd.conf配置文件
[root@kickstart ~]# cat /etc/dhcp/dhcpd.conf # # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.example # see dhcpd.conf(5) man page # subnet 10.0.0.0 netmask 255.255.255.0 { range 10.0.0.100 10.0.0.199; # range设置起始,结束ip范围 option subnet-mask 255.255.255.0; # 选项,设置掩码 option routers 10.0.0.2; # dhcp服务的网关设置,这里不写,客户端则无法上网 option domain-name-servers 1.2.4.8; # 保证dhcp客户端可以域名解析 default-lease-time 21600; # 默认的IP租用期限 max-lease-time 43200; # 最大的IP租用期限 next-server 10.0.0.50; # 告知客户端tftp服务器的ip filename "/pxelinux.0"; # 指明引导文件,用于指定PXE的运行程序文件,放在TFTP服务器的目录下 }
启动dhcp服务,检查日志,状态
[root@kickstart ~]# systemctl start dhcpd [root@kickstart ~]# systemctl is-enabled dhcpd disabled [root@kickstart ~]# systemctl is-active dhcpd active [root@kickstart ~]# tail -f /var/log/messages Jul 11 09:43:25 kickstart dhcpd: Internet Systems Consortium DHCP Server 4.2.5 Jul 11 09:43:25 kickstart dhcpd: Copyright 2004-2013 Internet Systems Consortium. Jul 11 09:43:25 kickstart dhcpd: All rights reserved. Jul 11 09:43:25 kickstart dhcpd: For info, please visit https://www.isc.org/software/dhcp/ Jul 11 09:43:25 kickstart dhcpd: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file Jul 11 09:43:25 kickstart dhcpd: Wrote 0 leases to leases file. Jul 11 09:43:25 kickstart dhcpd: Listening on LPF/ens33/00:0c:29:6e:50:d7/10.0.0.0/24 Jul 11 09:43:25 kickstart dhcpd: Sending on LPF/ens33/00:0c:29:6e:50:d7/10.0.0.0/24 Jul 11 09:43:25 kickstart dhcpd: Sending on Socket/fallback/fallback-net Jul 11 09:43:25 kickstart systemd: Started DHCPv4 Server Daemon.
查看dhcp端口监听udp
[root@kickstart ~]# ss -unlp State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 *:67 *:* users:(("dhcpd",pid=1217,fd=7)) UNCONN 0 0 127.0.0.1:323 *:* users:(("chronyd",pid=660,fd=5)) UNCONN 0 0 [::1]:323 [::]:* users:(("chronyd",pid=660,fd=6))
设置dhcp服务开机自启
[root@kickstart ~]# systemctl enable dhcpd Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service. [root@kickstart ~]# systemctl is-enabled dhcpd enabled
这里备注下,一般软件配置启动后,经常需要开机自启,但是Kickstart不能,且用完注意要关闭服务,因为你难道希望每次开机都重装系统吗?~~~~
第二步:配置TFTP服务器
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。
xinetd
inux服务器端tftp-server的配置
tftp服务器需要安装xinetd(守护tftp)、tftp和tftp-server 3个软件
[root@kickstart ~]# yum install -y tftp tftp-server xinetd
修改xinetd配置文件,管理tftp
[root@kickstart ~]# cat /etc/xinetd.d/tftp # default: off # description: The tftp server serves files using the trivial file transfer \ # protocol. The tftp protocol is often used to boot diskless \ # workstations, download configuration files to network-aware printers, \ # and to start the installation process for some operating systems. service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot disable = no #将yes改为no per_source = 11 cps = 100 2 flags = IPv4 }
启动xinetd服务
通过xinetd启动tftp服务即可
[root@kickstart ~]# systemctl start xinetd [root@kickstart ~]# netstat -a | grep tftp udp 0 0 0.0.0.0:tftp 0.0.0.0:* [root@kickstart ~]# lsof -i:69 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME xinetd 1296 root 5u IPv4 23572 0t0 UDP *:tftp
连接tftp
[root@kickstart ~]# tftp 10.0.0.50
默认tftp工具的目录,可以创建测试文件
[root@kickstart ~]# cd /var/lib/tftpboot/ [root@kickstart tftpboot]# ls [root@kickstart tftpboot]# ll total 0 [root@kickstart tftpboot]# touch test.txt [root@kickstart tftpboot]# ls test.txt
进入任意目录,测试下载tftp目录内容
[root@kickstart tftpboot]# cd /tmp/ [root@kickstart tmp]# ls systemd-private-21a15f37f28346569858124bf297a3d6-chronyd.service-r0QXcV vmware-root_655-4021587944 systemd-private-8c001487f38e438abed2e1b11d5362af-chronyd.service-cledQf vmware-root_656-2689274927 vmware-root_644-2730496954 vmware-root_657-4022112241 vmware-root_645-3979839588 [root@kickstart tmp]# tftp 10.0.0.50 tftp> ? tftp-hpa 5.2 Commands may be abbreviated. Commands are: connect connect to remote tftp mode set file transfer mode put send file get receive file quit exit tftp verbose toggle verbose mode trace toggle packet tracing literal toggle literal mode, ignore ':' in file name status show current status binary set mode to octet ascii set mode to netascii rexmt set per-packet transmission timeout timeout set total retransmission timeout ? print help information help print help information tftp> get test.txt tftp> quit [root@kickstart tmp]# ls systemd-private-21a15f37f28346569858124bf297a3d6-chronyd.service-r0QXcV vmware-root_645-3979839588 systemd-private-8c001487f38e438abed2e1b11d5362af-chronyd.service-cledQf vmware-root_655-4021587944 test.txt
清空测试数据
[root@kickstart tmp]# rm -rf /var/lib/tftpboot/test.txt
第三步:HTTP服务器部署网络镜像
# 安装 [root@kickstart ~]# yum install -y httpd # 插入一行配置 [root@kickstart ~]# sed -i "96i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf 96 ServerName 127.0.0.1:80 # 启动 [root@kickstart ~]# systemctl start httpd #建立站点目录 [root@kickstart ~]# mkdir /var/www/html/Centos-7/ # 通过vmware挂上centos7镜像文件,该步骤重要,如下的图片 # 挂载目录 [root@kickstart ~]# mount /dev/cdrom /var/www/html/Centos-7/ mount: /dev/sr0 is write-protected, mounting read-only # 查看挂载情况 [root@kickstart ~]# df -h | grep Centos-7 /dev/sr0 4.4G 4.4G 0 100% /var/www/html/Centos-7
# 访问站点,访问IOS镜像的内容,注意大小写,内容如下图 http://10.0.0.50/Centos-7
第四步:部署PXE
syslinux是一个功能强大的引导加载程序,而且兼容各种介质。SYSLINUX是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。
如果没有找到pxelinux.0这个文件,可以安装一下。
[root@kickstart ~]# yum install -y syslinux
拷贝pxelinux.0该文件,放入tfpt目录,便于提供给客户端下载
# 把pxelinux.0文件 发给tftp目录,用于发给客户端 [root@kickstart ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ # 拷贝启动菜单程序文件 [root@kickstart ~]# cp -a /var/www/html/Centos-7/isolinux/* /var/lib/tftpboot/ # 新建一个pxelinux.cfg目录,用于存放客户端的配置文件 [root@kickstart ~]# mkdir /var/lib/tftpboot/pxelinux.cfg/ # 拷贝PXE配置文件,且改名 [root@kickstart ~]# cp /var/www/html/Centos-7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default # 拷贝自动重启文件 [root@kickstart tftpboot]# cp /usr/share/syslinux/reboot.c32 /var/lib/tftpboot/ # 提升tftp目录权限 [root@kickstart ~]# chmod 777 -R /var/lib/tftpboot/ # 检查tftp目录下的启动菜单文件 [root@kickstart ~]# tree -F /var/lib/tftpboot/ /var/lib/tftpboot/ ├── boot.cat* ├── boot.msg* ├── grub.conf* ├── initrd.img* #驱动文件 ├── isolinux.bin* ├── isolinux.cfg* ├── memtest* ├── pxelinux.0* #启动代码 ├── pxelinux.cfg/ │ └── default* #配置文件 ├── splash.png* ├── TRANS.TBL* ├── vesamenu.c32* #界面框架 └── vmlinuz* #内核文件
这些文件内的参数,就是你开机安装系统看见的画面
[root@kickstart ~]# cat /var/lib/tftpboot/pxelinux.cfg/default default vesamenu.c32 timeout 600 display boot.msg # Clear the screen when exiting the menu, instead of leaving the menu displayed. # For vesamenu, this means the graphical background is still displayed without # the menu itself for as long as the screen remains in graphics mode. menu clear menu background splash.png menu title CentOS 7 menu vshift 8 menu rows 18 menu margin 8 #menu hidden menu helpmsgrow 15 menu tabmsgrow 13 # Border Area menu color border * #00000000 #00000000 none # Selected item menu color sel 0 #ffffffff #00000000 none # Title bar menu color title 0 #ff7ba3d0 #00000000 none # Press [Tab] message menu color tabmsg 0 #ff3a6496 #00000000 none # Unselected menu item menu color unsel 0 #84b8ffff #00000000 none # Selected hotkey menu color hotsel 0 #84b8ffff #00000000 none # Unselected hotkey menu color hotkey 0 #ffffffff #00000000 none # Help text menu color help 0 #ffffffff #00000000 none # A scrollbar of some type? Not sure. menu color scrollbar 0 #ffffffff #ff355594 none # Timeout msg menu color timeout 0 #ffffffff #00000000 none menu color timeout_msg 0 #ffffffff #00000000 none # Command prompt text menu color cmdmark 0 #84b8ffff #00000000 none menu color cmdline 0 #ffffffff #00000000 none # Do not display the actual menu unless the user presses a key. All that is displayed is a timeout message. menu tabmsg Press Tab for full configuration options on menu items. menu separator # insert an empty line menu separator # insert an empty line label linux menu label ^Install CentOS 7 kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet label check menu label Test this ^media & install CentOS 7 menu default kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet menu separator # insert an empty line # utilities submenu menu begin ^Troubleshooting menu title Troubleshooting label vesa menu indent count 5 menu label Install CentOS 7 in ^basic graphics mode text help Try this option out if you're having trouble installing CentOS 7. endtext kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 xdriver=vesa nomodeset quiet label rescue menu indent count 5 menu label ^Rescue a CentOS system text help If the system will not boot, this lets you access files and edit config files to try to get it booting again. endtext kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rescue quiet label memtest menu label Run a ^memory test text help If your system is having issues, a problem with your system's memory may be the cause. Use this utility to see if the memory is working correctly. endtext kernel memtest menu separator # insert an empty line label local menu label Boot from ^local drive localboot 0xffff menu separator # insert an empty line menu separator # insert an empty line label returntomain menu label Return to ^main menu menu exit menu end
第五步:定制pxe网络安装文件
修改/var/lib/tftpboot/pxelinux.cfg下的default文件,修改如下配置
1.修改第一行,让centos直接默认安装linux,不去手动再选择 1 # default vesamenu.c32 2 default linux 2.制定apache的系统iso下载地址 62 label linux 63 menu label ^Install CentOS 7 64 kernel vmlinuz 65 # append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet 66 append initrd=initrd.img inst.repo=http://10.0.0.50/Centos-7/ net.ifnames=0 biosdevname=0
DHCP客户端配置
再准备好一个linux虚拟机客户端,客户端注意网络连接选择,选择适配器,不要开启dhcp功能
且不要选择默认的NAT网卡,因为已经关闭了DHCP服务,你也无法获取IP地址,选择我们自己创建的DHCP服务器
VMWARE新建虚拟机
新添加一块网络适配器*
严格检查,你的配置,是否和我一样
创建lan区段和dhcp服务端同一个局域网
注意避坑:
报错一:No DHCP or proxyDHCP offers were received.
Operating System not found
起初以为是DHCP服务器配置有问题,检查多遍也没发现有错误,
原因:
取消勾选启动时连接CD/DVD
报错二:Waring:/dev/root does not exit
在网上找了说是内存不足2G,在这里不是这个原因
是因为修改的配置文件错误
出现如下界面,通过pxe网络安装系统成功
手动通过pxe远程安装,搞定,最终安装完毕系统,查看ip
kickstart自动应答装机
可以参考红帽官网:
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html-single/installation_guide/index#chap-kickstart-installations
上述我们还是通过鼠标点击,进行装机,这些步骤,可以写成脚本文件,自动化装机。
通常,我们在安装操作系统的过程中,需要大量的和服务器交互操作,为了减少这个交互过程,kickstart就诞生了。使用这种kickstart,只需事先定义好一个Kickstart自动应答配置文件ks.cfg(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了在安装过程中多次的人机交互,从而实现无人值守的自动化安装。
生成kickstart配置文件的三种方法:
- 方法1、 每安装好一台Centos机器,Centos安装程序都会创建一个kickstart配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。(生成的文件名字叫anaconda-ks.cfg位于/root/anaconda-ks.cfg)
- 方法2、Centos提供了一个图形化的kickstart配置工具。在任何一个安装好的Linux系统上运行该工具,就可以很容易地创建你自己的kickstart配置文件。kickstart配置工具命令为redhat-config-kickstart(RHEL3)或system-config-kickstart(RHEL4,RHEL5).网上有很多用CentOS桌面版生成ks文件的文章,如果有现成的系统就没什么可说。但没有现成的,也没有必要去用桌面版,命令行也很简单。
- 方法3、阅读kickstart配置文件的手册。用任何一个文本编辑器都可以创建你自己的kickstart配置文件。
学习ks文件语法
查看系统自动生成的anaconda-ks.cfg
[root@kickstart ~]# cat anaconda-ks.cfg #version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Use CDROM installation media cdrom # Use graphical install graphical # Run the Setup Agent on first boot firstboot --enable ignoredisk --only-use=sda # Keyboard layouts keyboard --vckeymap=us --xlayouts='us' # System language lang en_US.UTF-8 # Network information network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate network --hostname=localhost.localdomain # Root password rootpw --iscrypted $6$n/JpH.xQG7.m5mD4$uYnd3czLvxU.XMhQNaT3Ha3zbfFm5i8GyQZVNdPQgqfwsavCFv9bM4wxxDdxrRN3s4h4aK7e29f6z5/Kf/3vj1 # System services services --enabled="chronyd" # System timezone timezone America/New_York --isUtc # System bootloader configuration bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda autopart --type=lvm # Partition clearing information clearpart --none --initlabel %packages @^minimal @core chrony kexec-tools %end %addon com_redhat_kdump --enable --reserve-mb='auto' %end %anaconda pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty %end
ks文件语法
命令段 包组段 %packages开头,以%end结束 脚本段 以%post开头,以%end结束,在安装完系统之后,执行的linux命令,脚本 以%pre开头,以%end结束,在安装完系统之前执行的linux命令,脚本
通过工具检查ks文件语法
[root@kickstart ~]# yum install -y pykickstart ksvalidator /var/www/html/ks_config/CentOS-7-ks.cfg 该工具只是基本的对文件语法进行简单检测,并不能保证完全正确,还需人为检查 用python脚本对文件加密 [root@kickstart ~]# python -c 'import crypt;print(crypt.crypt("123456"))' $6$OcSLI4jrElJwdDgu$uHnP3ZjS9ShYipSFUMWoMVgdN3Zwjfb9hcwucikeJYfMyCWFyKWWLYZezRej/ZUVpOXfijH8qKP3EeM4juaVQ1
创建ks.csf文件
创建在apache网络站点目录下
/var/www/html/
[root@kickstart html]# mkdir ks_config
[root@kickstart html]# touch ks_config/ks.cfg
编辑ks.cfg文件
#platform=x86, AMD64, 或 Intel EM64T #version=DEVEL # Install OS instead of upgrade install # Keyboard layouts # old format: keyboard us # new format: keyboard --vckeymap=us --xlayouts='us' # Root password # Use network installation url --url="http://10.0.0.50/Centos-7" # System language lang en_US # yum configuation repo --name="Red Hat Enterprise Linux" --baseurl="http://10.0.0.50/Centos-7" --cost=100 # System authorization information auth --useshadow --passalgo=sha512 # Use text mode install text firstboot --disable # SELinux configuration selinux --disabled # System services services --enabled="chronyd" ignoredisk --only-use=sda # Firewall configuration firewall --disabled # Network information network --bootproto=dhcp --device=ens33 # Reboot after installation reboot # System timezone timezone America/New_York # System bootloader configuration bootloader --append="crashkernel=auto" --location=mbr --boot-drive=sda #autopart --type=lvm # Clear the Master Boot Record,清空分区,重新分区 zerombr # Partition clearing information clearpart --all --initlabel # Disk partitioning information part /boot --fstype="xfs" --size=500 part swap --fstype="swap" --size=2048 part / --fstype="xfs" --grow --size=1 # 安装系统软件包 %packages @core %end
修改pxe配置文件
修改pxelinux.cfg/default文件
备份原有pxe配置文件
[root@kickstart ~]# cp /var/lib/tftpboot/pxelinux.cfg/default{,.bak} [root@kickstart ~]# ls /var/lib/tftpboot/pxelinux.cfg/ default default.bak
写入新的文件信息
[root@kickstart pxelinux.cfg]# cat default #使用欢迎界面 default vesamenu.c32 #default menu.c32 #prompt 1 # 倒计时600毫秒 timeout 600 # 欢迎词 MENU TITLE welcome to centos. # 如下三个驱动 # 启动本地设备 label local menu label Boot from ^local drive localboot 0xffff # 启动来自于ks配置文件 MENU SEPARATOR label linux menu label ^Install or upgrade an existing system for ks # 系统默认选ks menu default kernel vmlinuz append initrd=initrd.img ks=http://10.0.0.50/ks_config/ks.cfg # 安装基本驱动 MENU SEPARATOR label vesa menu label Install system with ^basic video driver kernel vmlinuz append initrd=initrd.img xdriver=vesa nomodeset
检验配置是否正确
1.检验iso文件是否可以获取
[root@kickstart html]# curl http://10.0.0.50/Centos-7/
2.检验pxe文件是否可以获取
[root@kickstart html]# curl http://10.0.0.50/ks_config/ks.cfg
至此,我们就部署好了如下
- dhcp服务器
- tftp服务器
- pxe配置文件
- kickstart配置文件
开始ks自动化装机
上述准备工作,做好之后,开始装机
区别就是,本来这些选项都是图形化的,此时这里已经是黑屏的了