自动化无人值守系统
使用光盘镜像来安装Linux系统的方法,该方法适用于只安装少量Linux系统的情况。如果生产环境中有数百台服务器都需要安装系统。这时,我们就需要使用PXE + TFTP +FTP + DHCP + Kickstart服务搭建出一个无人值守安装系统。这种无人值守安装系统可以自动地为数十台服务器安装系统,也大大提升了系统安装的效率
部署的基本流程:
安装系统的设备需要通过bios设置,设置成网络启动。一台服务器需要有DHCP服务;方便分配ip给安装系统的设备。一台服务器要有TFTP服务,TFTP服务器是需要提供一下启动所需要的文件; 在安装的过程中,需要有些分区的指定、主机名;因此也需要一种自动应答的机制;---->kickstart技术就是设定了自动应答的文件;
操作环境
操作软件:VMware虚拟机 ??操作系统:CentOS Linux release 7.4.1708 ??网络连接:NAT模式? ?主机模式 ??服务端IP:NAT模式IP:192.168.100.31? ? ?主机模式IP:192.168.20.11
安装环境
#关闭selinux setenforce 0 sed -ri '/^[^#]*SELINUX=/s#=.+$#=disabled#' /etc/selinux/config systemctl stop firewalld systemctl disable firewalld ?#关闭防火墙: systemctl disable firewalld.service #重启使生效: shutdown -r now ?
安装yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
##配置阿里镜像提供的epel源
wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all # 清除系统所有的yum缓存
yum makecache # 生成yum缓存
安装配置DHCP,tftp-server syslinux vsftpd 服务
[root@localhost ~]# yum install -y dhcp tftp-server syslinux vsftpd -y
添加主机模式网络
?然后系统多个网卡,ens33为主机模式网卡,ens160为NAT模式网卡
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::67b2:bb23:d93e:261e prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:b4:39:5f txqueuelen 1000 (Ethernet)
RX packets 26 bytes 8892 (8.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 64 bytes 11328 (11.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.31 netmask 255.255.255.0 broadcast 192.168.100.255
inet6 fe80::f192:baab:eec0:800a prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:b4:39:55 txqueuelen 1000 (Ethernet)
RX packets 2838 bytes 3937313 (3.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1192 bytes 107057 (104.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]#
配置静态主机模式ip地址
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
NAME="ens33"
UUID="4d9af6bf-36bd-481c-9cf3-bbc3bba19499"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.20.11"
PREFIX="24"
GATEWAY="192.168.20.2"
#DNS1="192.168.20.254"
#DNS2="223.5.5.5"
[root@localhost ~]# ifconfig ens33 down ###关闭网卡
[root@localhost ~]# ifup ens33 ##开启网卡
[root@localhost ~]# ip ad sh dev ens33
3: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:b4:39:5f brd ff:ff:ff:ff:ff:ff
inet 192.168.20.11/24 brd 192.168.20.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feb4:395f/64 scope link
valid_lft forever preferred_lft forever
[root@localhost ~]#
配置dhcpd文件,启动DHCP服务
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
allow booting; allow bootp;
ddns-update-style none;
ignore client-updates;
subnet 192.168.20.0 netmask 255.255.255.0 ## 分配多少个ip
{
range 192.168.20.11 192.168.20.250; #指定了具体分配的范围,两个范围要用空格隔开;
option routers 192.168.20.2; ## 网关
option subnet-mask 255.255.255.0; ## 子网掩码
option domain-name-servers 192.168.20.11; ## dns信息--固定格式
default-lease-time 21600; ## 作用时间21600秒--6小时
max-lease-time 43200; ## 最大租约时间12小时
next-server 192.168.20.11; #tftp服务端IP地址
filename "pxelinux.0"; ## 用户加载的引导文件
}
#保存
wq!
[root@localhost ~]# systemctl restart dhcpd.service
[root@localhost ~]# systemctl enable dhcpd
[root@localhost ~]# systemctl status dhcpd
查看客户机dhcp获取情况
[root@localhost ~]# cat /var/lib/dhcpd/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.2.5
lease 192.168.20.128 {
starts 4 2022/06/30 07:24:38;
ends 4 2022/06/30 13:24:38;
tstp 4 2022/06/30 13:24:38;
cltt 4 2022/06/30 07:24:38;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:0c:29:f9:ff:c2;
}
server-duid "\000\001\000\001*P\013\377\000\014)\2649_";
[root@localhost ~]#
TFTP服务器配置
[root@localhost ~]# 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
disable = no ##disable修改为no表示开启tftp服务
per_source = 11
cps = 100 2
flags = IPv4
}
启动TFTP服务
[root@localhost ~]# systemctl restart tftp
[root@localhost ~]# systemctl enable tftp
Created symlink from /etc/systemd/system/sockets.target.wants/tftp.socket to /usr/lib/systemd/system/tftp.socket.
连接cd驱动器,挂载镜像
[root@localhost ~]# mkdir /media/cdrom
[root@localhost ~]# mount /dev/cdrom /media/cdrom/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# mount /dev/cdrom /media/cdrom/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /media/cdrom 忙
/dev/sr0 已经挂载到 /media/cdrom 上
[root@localhost ~]# df -lh
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 46G 2.7G 43G 6% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 148M 867M 15% /boot
tmpfs 380M 0 380M 0% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /media/cdrom
[root@localhost ~]#
##进入/var/lib/tftpboot 我们首先需要把SYSLinux提供的引导文件复制到TFTP服务程序的默认目录中,也就是前文提到的文件pxelinux.0,这样客户端主机就能够顺利地获取到引导文件了。另外在RHEL 7系统光盘镜像中也有一些我们需要调取的引导文件。确认光盘镜像已经被挂载到/media/cdrom目录后,使用复制命令将光盘镜像中自带的一些引导文件也复制到TFTP服务程序的默认目录中。
[root@localhost ~]# cd /var/lib/tftpboot
[root@localhost tftpboot]# ls
[root@localhost tftpboot]# cp /usr/share/syslinux/pxelinux.0 .
[root@localhost tftpboot]# cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} .
[root@localhost tftpboot]# cp /media/cdrom/isolinux/{vesamenu.c32,boot.msg} .
[root@localhost tftpboot]# ls
boot.msg initrd.img pxelinux.0 vesamenu.c32 vmlinuz
[root@localhost tftpboot]#
##然后在TFTP服务程序的目录中新建pxelinux.cfg目录,虽然该目录的名字带有后缀,但依然也是目录,而非文件!将系统光盘中的开机选项菜单复制到该目录中,并命名为default。这个default文件就是开机时的选项菜单
[root@localhost tftpboot]# mkdir pxelinux.cfg
[root@localhost tftpboot]# cp /media/cdrom/isolinux/isolinux.cfg pxelinux.cfg/default
##默认的开机菜单中有两个选项,
要么是安装系统,
要么是对安装介质进行检验。
既然我们已经确定采用无人值守的方式安装系统,还需要为每台主机手动选择相应的选项,未免与我们的主旨(无人值守安装)相悖。现在我们编辑这个default文件,把第1行的default参数修改为linux,这样系统在开机时就会默认执行那个名称为linux的选项了。对应的linux选项大约在64行,我们将默认的光盘镜像安装方式修改成FTP文件传输方式,并指定好光盘镜像的获取网址以及Kickstart应答文件的获取路径:
[root@localhost tftpboot]# vim pxelinux.cfg/default
第一行 default vesamenu.c32 ##改为 default linux
第64行 append initrd=initrd.img inst.stage2=ftp://192.168.20.11 ks=ftp://192.168.20.11/pub/ks.cfg quiet ###改 (64行)
##配置VSFtpd服务程序
[root@localhost tftpboot]# systemctl restart vsftpd
[root@localhost tftpboot]#
[root@localhost tftpboot]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
[root@localhost tftpboot]#
##在确认系统光盘镜像已经正常挂载到/media/cdrom目录后,把目录中的光盘镜像文件全部复制到vsftpd服务程序的工作目录中。
[root@localhost tftpboot]# cp -r /media/cdrom/* /var/ftp ##这个过程大约需要3~5分钟
##创建KickStart应答文件
? ? ? ? Kickstart应答文件中包含了系统安装过程中需要使用的选项和参数信息,系统可以自动调取这个应答文件的内容,从而彻底实现了无人值守安装系统。那么,既然这个文件如此重要,该去哪里找呢?其实在root管理员的家目录中有一个名为anaconda-ks.cfg的文件,它就是应答文件。下面将这个文件复制到vsftpd服务程序的工作目录中(在开机选项菜单的配置文件中已经定义了该文件的获取路径,也就是vsftpd服务程序数据目录中的pub子目录中)。使用chmod命令设置该文件的权限,确保所有人都有可读的权限,以保证客户端主机可以顺利获取到应答文件及里面的内容: ?
[root@localhost tftpboot]# cp ~/anaconda-ks.cfg /var/ftp/pub/ks.cfg
[root@localhost tftpboot]# chmod +r /var/ftp/pub/ks.cfg
##首先把第5行的光盘镜像安装方式修改成FTP协议,仔细填写好FTP服务器的IP地址,并用本地浏览器尝试打开下检查有没有报错。然后把第25行的时区修改成上海(Asia/Shanghai),最后再把30行的磁盘选项设置为清空所有磁盘内容并初始化磁盘:
[root@localhost tftpboot]# vim /var/ftp/pub/ks.cfg
# Use CDROM installation media
5行 cdrom 更改为 url --url=ftp://192.168.20.11
25行 timezone Asia/Shanghai --isUtc
30行 clearpart --none --initlabel 更改为 clearpart --all --initlabel
重启所有服务
[root@localhost tftpboot]# systemctl enable dhcpd vsftpd tftp
[root@localhost tftpboot]# systemctl restart dhcpd vsftpd tftp
在按照以上方法成功部署各个相关的服务程序后,就可以使用PXE + Kickstart无人值守安装系统了。在采用下面的步骤建立虚拟主机时,一定要把客户端的网卡模式设定成与服务端一致的“仅主机模式”,否则两台设备无法进行通信,也就更别提自动安装系统了。
自动安装
添加虚拟机设置为稍后安装操作系统
?
?设置网络适配器为“主机模式” ,设备状态 点击启动
?然后就开始自动安装Centos系统
?
?
?
?
?自动安装的账号密码为;服务器端的账号密码 IP可以看出已经DHCP获取到了。
?PXE+Kickstart 自动化无人值守安装服务搭建就完成了
|