第十三章无人值守安装
要利用kickstart进行无人值守部署大量用户操作系统,需要具备以下两点:1)用户端的网卡必须支持pxe的功能,并且设备网卡为第一启动项;2)网络中PXE服务器必须含有DHCP,TFTP,FTP等服务。本章主要讲解利用kickstart无需手动操作安装Linux操作系统。
8学习目标:
l 了解什么是pxe
l 熟练DHCP,TFTP在无人值守安装等服务的作用
l 了解ks文件
13.1 利用PXE环境网络安装系统
13.1.1 什么是PXE
PXE的英文全称:Preboot Execution Environment(开机前的执行环境)。无人值守安装依赖PXE机制从网络获取开机管理程序并载入系统核心程序。要实现这个PXE需要具备:1)用户端的网卡必须支持pxe用户端的功能,并且它必须作为开机的第一启动项,这样系统才能通过网络进入pxe用户端的程序。2)网络中的kickstart服务器必须要有DHCP,TFTP等服务,为了完成无人值守安装,还需要有ftp或者nfs等服务提供ks文件的传输。
13.1.2 PXE工作流程
首先,PXE客户端向网络中DHCP服务器的UDP port 67要求IP等网络参数,DHCP服务器会回应客户端想要网络参数;PXE客户端向DHCP服务器要求开机管理程序与相关的参数,DHCP会提供TFTP服务器的地址也就是开机管理程序所在的位置;PXE客户端会访问TFTP服务器的地址(通过UDP port 69),要求下载开机管理程序,TFTP服务器会响应开机管理程序的程序码,并且告知内核等相关文件的位置;PXE客户端取得开机管理程序之后,并下载内核等文件,开始执行操作。
13.2 安装DHCP,TFTP和FTP服务器
13.2.1 DHCP在kickstart中的作用
可以发现,DHCP在kickstart无人值守安装的过程中,负责提供IP地址给PXE客户端,并且告诉客户端TFTP的地址和告知BootLoader文件的名字。在Redhat中,BootLoader的文件名一般为:pxelinux.0。客户端可以通过DHCP服务渠道到TFTP服务器下载pxelinux.0文件。
1. 安装DHCP服务。
[root@server ~]# yum install -y dhcp
2. 配置DHCP服务。
[root@server ~]# vim /etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
subnet 172.25.0.0 netmask 255.255.255.0
{
range 172.25.0.100 172.25.0.200;
option broadcast-address 255.255.255.255;
option routers 172.25.0.254;
default-lease-time 3600;
max-lease-time 7200;
next-server 172.25.0.11;
filename "pxelinux.0";
}
注意:next-server就是指定TFTP的地址,filename表示到TFTP服务器地址下载pxelinux.0的文件。
3. 关闭防火墙和SELinux。
[root@server ~]# systemctl disable firewalld
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
[root@server ~]# systemctl stop firewalld
[root@server ~]# setenforce 0
[root@server ~]# sed s/SELINUX\=enforcing/SELINUX\=disable/g /etc/selinux/config -i
4. 重启DHCP服务。
[root@server ~]# systemctl enable dhcpd
ln -s '/usr/lib/systemd/system/dhcpd.service' '/etc/systemd/system/multi-user.target.wants/dhcpd.service'
[root@server ~]# systemctl start dhcpd
5. 验证
注意:客户端需要在BIOS里面设置开机第一启动项为网卡。
这里可以看到PXE客户端获取到172.25.0.100的地址。但是连接TFTP服务是超时,原因是我们目前为止还没有安装TFTP服务器,所以接下来需要安装TFTP服务。
13.2.2 TFTP在kickstart中的作用。
利用kickstart无人值守部署系统的时候,由于kickstart的局限性,必须使用TFTP服务提供引导文件pxelinux.0等文件给客户端。在DHCP服务的配置文件里面,我们可以发现TFTP服务必须提供pxelinux.0文件。所以必须把pxelinux.0文件添加到在TFTP的根目录。同时,我们也通过TFTP服务把安装系统所需要的kernel等文件提供给客户端。
1. 安装TFTP以及TFTP的守护进程xinetd。
[root@server ~]# yum install -y tftp-server xinetd
2. 编辑TFTP配置文件。
[root@server ~]# vim /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 #这是TFTP默认的根目录
disable = yes #改为no
per_source = 11
cps = 100 2
flags = IPv4
}
3. 安装syslinux并把pxelinux.0文件cp到TFTP的根目录。
Ps:syslinux是一个功能强大的引导加载程序,安装完syslinux之后会出现p
xelinux.0文件。
[root@server ~]# yum install -y syslinux
~~~~~~~~~~~
[root@server ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
4. 重启TFTP的守护进程。
[root@server ~]# systemctl restart xinetd
5. 验证客户端。
客户机已经成功引导,但是没有获取到配置文件isolinux.cfg(用来指定内核文件在哪里),把isolinux.cfg文件放在/var/lib/tftpboot/pxelinux.cfg目录下并命名为default
6. 创建/var/lib/tftpboot/pxelinux.cfg目录,并且把镜像文件中的isolinux.cfg拷贝进来,把它改名为default。最后重启xinetd服务。
[root@server ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@server ~]# cp /mnt/iso/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
[root@server ~]# systemctl restart xinetd
[root@server ~]#
7. 验证客户端。
客户端可以加载locate配置文件,但是vesamenu.32找不到,也就是菜单模块找不到,所以我们必须把菜单模块放置在tftp默认目录下
8. 把菜单模块传入TFTP的根目录。再重启xinetd服务。
[root@server ~]# cp /mnt/iso/isolinux/vesamenu.c32 /var/lib/tftpboot/
[root@server ~]# systemctl restart xinetd
9. 验证客户端
系统已经成功引导,可以找到配置文件和菜单,但是没有找到Linux的内核文件,无法进入系统,所以我们必须要把vmlinux加入到TFTP根目录。
10. 把镜像文件里面的内核文件拷贝到TFTP根目录,再重启xinetd服务。
[root@server ~]# cp /mnt/iso/isolinux/vmlinuz /var/lib/tftpboot/
[root@server ~]# systemctl restart xinetd
[root@server ~]#
11. 验证客户端。
可以发现成功找到内核,但是找不到驱动文件。找不到驱动文件,把驱动文件拷贝到tftp默认目录
12. 把镜像文件里面的驱动文件拷贝到TFTP根目录,在重启xinetd服务。
[root@server ~]# cp /mnt/iso/isolinux/initrd.img /var/lib/tftpboot/
root@server ~]# systemctl restart xinetd
[root@server ~]#
13. 验证客户端。
13.2.3FTP在kickstart中的作用。
ftp服务器作用:作为文件传输的服务器,我们用到它传输镜像文件,和ks.cfg配置文件等等。
1. 安装ftp服务。
[root@server ~]# yum install -y *ftp*
[root@server ~]#
拷贝镜像文件LiveOS内容到ftp的根目录。
2. 在ftp的根目录创建LiveOS目录,并且把镜像文件都拷贝到里面
[root@server ~]# mkdir /var/ftp/pub/LiveOS
[root@server ~]# cp /mnt/iso/LiveOS/* /var/ftp/pub/LiveOS/
[root@server ~]#
3. 启动vsftpd服务。
[root@server ~]# systemctl start vsftpd
[root@server ~]# systemctl enable vsftpd
ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service'
[root@server ~]#
4. 修改default文件,把伪根文件的路劲修改为ftp的根目录。
[root@server ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
label linux
menu label ^Install Red Hat Enterprise Linux 7.1
kernel vmlinuz
append initrd=initrd.img inst.stage2=ftp://172.25.0.11/pub quiet
5. 重启xinetd服务。
[root@server ~]# systemctl restart xinetd
[root@server ~]#
6. 验证。
13.3 kickstart的配置以及ks文件
13.3.1 kickstart的原理
kickStart是一种无人职守安装方式。KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的文件;在其后的安装过程中(不只局限于生成KickStart安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。这样,如果KickStart文件涵盖了安装过程中出现的所有需要填写的参数时,安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中设置的重启选项来重启系统,并结束安装。
13.3.2 kickstart的工作流程。
客户机先从网络上启动,执行pxe程序(PXE的作用就像是在网卡ROM里的一个小小的操作系统,它把自己的网络引导功能提供给系统的BIOS,就可以通过网络启动linux),再向dhcp服务器请求IP地址,获得到dhcp服务器发来的IP地址之后会请求引导文件(pxelinux.0),服务器发送引导文件;客户机引导成功之后,再向服务器请求配置文件(pxelinux.cfg),服务器发送配置文件,再请求内核文件(vmlinuz),发送内核文件,请求传送根文件系统(initrd.img),然后内核启动,请求ks文件,安装程序会根据ks.cfg中设置的选项来安装系统。
13.3.3 kickstart的作用
在red hat enterprise Linux中,可以使用Kickstart功能自动执行Linux系统的安装。系统安装程序anaconda需要知道如何安装系统:磁盘如何分区,配置网络接口,选择要安装的软件包等,默认情况下,这是一种交换式的过程。但是kickstar安装使用一个文本文件,这个文件中提供这些问题的所有答案,因此无需进行交换。
13.3.4 ks文件创建
1. 安装kickstart。
[root@server ~]# yum install -y *kickstart*
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
软件包 pykickstart-1.99.43.17-1.el7.noarch 已安装并且是最新版本
正在解决依赖关系
--> 正在检查事务
~~~~~~
作为依赖被安装:
system-config-date.noarch 0:1.10.6-2.el7
system-config-date-docs.noarch 0:1.0.11-4.el7
system-config-keyboard.noarch 0:1.4.0-4.el7
system-config-keyboard-base.noarch 0:1.4.0-4.el7
system-config-language.noarch 0:1.4.0-6.el7
完毕!
2. 利用system-config-kickstart工具创建ks文件。
利用system-config-kickstart生成ks文件。
注意:相对应的选择配置必须正确。配置完之后,保存在指定目录,然后需要修改保存的ks文件(由于图形化配置ks文件的时候,不能将安装包写入,所以需要修改保存的ks文件将安装包部分加入),如下如所示:
[root@server ~]# cat ks.cfg
#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Halt after installation
halt
# Root password
rootpw --plaintext redhat
# System timezone
timezone Asia/Shanghai
# Use network installation
url --url="ftp://172.25.0.11/pub"
# System language
lang en_US
# Firewall configuration
firewall --disabled
# Network information
network --bootproto=dhcp --device=eth0
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical
# SELinux configuration
selinux --enforcing
# Do not configure the X Window System
skipx
# System bootloader configuration
bootloader --location=none
# Partition clearing information
clearpart --all
autopart --type=lvm
#以下加粗部分为修改部分
%packages
@base
@core
@desktop-debugging
@dial-up
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@multimedia
@print-client
@x11
kexec-tools
%end
[root@server ~]#
注意:我们这里URL必须要指定为ftp的根目录。并且这个根目录里面必须要有镜像文件。
13.3.5 将kickstart配置文件发布到安装程序。
以上,我们可以发现我们利用ftp服务提供ks文件给客户端。所以,我们必须要把ks文件传输到ftp的根目录。并且,需要把镜像文件里面的内容全部拷贝到ftp的根目录。
1. 复制ks文件到ftp的根目录。
[root@server ~]# cp ks.cfg /var/ftp/pub/
[root@server ~]#
2. 复制镜像文件的内容到ftp的根目录。
[root@server ~]# cp -r /mnt/iso/* /var/ftp/pub/
[root@server ~]#
13.3.6 利用kickstart无人值守安装系统
1. 修改pxelinux.cfg/default配置文件,指定ks文件的路径。
[root@server ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
label linux
menu label ^Install Red Hat Enterprise Linux 7.1
kernel vmlinuz
append ks=ftp://172.25.0.11/pub/ks.cfg initrd=initrd.img inst.stage2=ftp://172.25.0.11/pub quiet
2. 重启xinetd和ftp服务。
[root@server ~]# systemctl restart xinetd
[root@server ~]# systemctl restart vsftpd
[root@server ~]#
3. 开启客户端验证