linux自动安装系统工作过程介绍:
PXE client 主要和3个不同类型的服务器交互并获取到相关信息,最后才能够自动安装系统。
第一步 PXE Client 与 DHCP Server
如果是物理机,将计算器在BIOS设置中以PXE方式启动。此时计算机会在网络中发送一个广播请求,请求通过DHCP服务器分配一个IP地址等相关信息。DHCP服务器收到客户端的请求并且验证后,它会返回给客户端请求,将IP地址、tftp服务器信息、以及一些配置文件信息告诉客户端以便让客户端继续操作。
第二步 PXE Client 与 tftp Server
客户端收到信息后,接下来会向tftp服务器请求发送系统安装的必需文件,包括pxelinux.0、pexlinux.cfg/default(内核引导文件)、vmlinuz、initrd.img。tftp server 收到客户端的请求后,服务器,BootRom(无盘启动接口)根据从tftp server 下载的安装必需文件后,根据配置文件信息,启动linux安装程序的引导内核。
第三步 PXE Client 与 nfs server
客户端安装完linux内核后,安装程序需要获取你通过什么介质来安装linux,可以通过网络安装,通过NFS,FTP,HTTP等,则此时会初始化网络,然后定位二进制包以及配置文件的位置,接着读取自动应答文件ks.cfg,根据ks.cfg的配置信息获得系统安装包并安装,安装完成后重启的话,记得从BIOS中调整为硬盘启动。
这样的话自动化安装linux系统基本完成了,在这个过程中基本上就是各个服务器的搭建,真正安装系统的时候并不需要选择什么,就像一键安装mysql一样,只要执行一个脚本就好了。
总结来看PXE网络安装系统需要以下几个步骤,部署顺序为:
① 配置NFS服务器,用于存放linux系统的安装文件。
② 配置TFTP服务器,用于提供客户端引导所必须的文件。也可以用web服务器替代,实践过也可以达到效果,但此次实验用TFTP服务器实践。
③配置DHCP服务器,用户给客户端提供IP地址以及其他信息。
④配置kickstart,用于自动应答安装。
⑤使用PXE功能引导客户机安装。
这五步其中前四步骤是在服务器端完成安装,可以放在不同的服务器上,也可以放在同一台服务器上,这里我把服务器端在同一台服务器上,然后用一台客户机实验,当然这些操作在虚拟机上也可以完成,差异性不大。接下来我们细细描述一下各个服务器的搭建安装。
注意!!此次搭建过程全程在虚拟机上完成。
[nfs安装]
配置NFS服务器,用于存放linux系统的安装文件。
将光驱挂载到mnt目录下。或者将iso镜像文件中的内容上传到共享目录下。
挂载完成后,创建了一个/data/sys的目录,准备用于NFS共享。
[[email protected]_2sys]# pwd
/data/sys #共享目录
[[email protected]_2dev]# mount /dev/cdrom /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
将mnt下的内容,拷贝到共享目录下。
[[email protected]_2sys]# cp -a /mnt/* /data/sys/
端口映射的一个工具,在centos7中将portmap改成了rpcbind,功能都没有变化
rpcbind用于对nfs连接动态分配端口
[[email protected]_2 ~]#systemctl restart rpcbind.service
[[email protected]_2 ~]#systemctl restart nfs.service
[[email protected]_2 kickstart]# showmount -e 192.168.131.132 #检查共享目录
Export list for 192.168.131.132:
/data/sys 192.168.131.0/24
[tftp安装]
安装tftp服务器,直接yum安装tftp-server*,安装tftp后会安装一个xinetd包的依赖。因为tftp是由xinted管理的。
对tftp server的操作,只需要修改tftp配置文件:
[[email protected]_2 ~]# vim /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot #tftp文件存放目录
disable = no ==》讲YES改为no
per_source = 11
cps = 100 2
flags = IPv4
}
[配置PXE linux]
[[email protected]_2isolinux]# sed -i ‘s#keepalive=0#keepalive=1#g’yum.conf
修改这个参数,可以在yum安装后将包保存下来。
[[email protected]_2pxeboot]# yum install -y syslinux
[[email protected]_2pxeboot]# rpm -ql syslinux|grep /pxelinux.0
/usr/share/syslinux/pxelinux.0
[[email protected]_2pxeboot]# cp `rpm -ql syslinux|grep /pxelinux.0` /var/lib/tftpboot/
同时将系统安装目录中images/pxeboot/{ initrd.img,vmlinuz}拷贝到tftpboot下
[[email protected]_2 pxeboot]#cp initrd.img vmlinuz /var/lib/tftpboot/
这个就是内核引导的配置文件
[[email protected]_2 isolinux]#cp isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
这里要修改一下default文件,方便之后的安装
我仅仅将有修改的部分贴出来了,供大家参考一下,如果有需要可以自行去查看一下。
[[email protected]_2 pxelinux.cfg]# cat default
default linux
prompt 1
timeout 600
......
labellinux
menu label ^Install CentOS 7
kernel vmlinuz
# append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64quiet
append ks=http://192.168.131.132/ks.cfg initrd=initrd.img
# appendks=nfs://192.168.131.132:/data/sys/kickstart/ks.cfg initrd=initrd.img
这里有2个选择,可以用nfs的方式,也可以用http的方式,我把2种修改方法都写出来了。
【default启动文件】
[[email protected]_2 /]# cd /var/lib/tftpboot/
[[email protected]_2 tftpboot]# ll
总用量 42672
-r--r--r--. 1 root root 38508192 7月 21 10:02initrd.img
-rw-r--r--. 1 root root 26771 7月 21 10:11pxelinux.0
drwxr-xr-x. 2 root root 36 7月 21 13:09pxelinux.cfg
-r-xr-xr-x. 1 root root 5156528 7月 21 10:02vmlinuz
[[email protected]_2 tftpboot]# cd pxelinux.cfg/
[[email protected]_2 pxelinux.cfg]# ll
总用量 8
-rw-r--r--. 1 root root 3095 7月 21 11:31default
[安装dhcp服务器]
直接yum安装,修改配置文件。
[[email protected]_2~]# vim /etc/dhcp/dhcpd.conf
ddns-update-stylenone;
ignoreclient-updates;
allow booting
allow bootp
default-lease-time 21600;
max-lease-time 43200
option routers 192.168.131.2
subnet 192.168.131.0 netmask 255.255.255.0 {
range fromdynamic-bootp 192.168.131.140 192.168.131.150;
next-server 192.168.131.132;
filename"/data/sys/kickstart/ks.cfg";
next-server192.168.131.132;
filename "pxelinux.0" #这里需不需要写绝对路径也不确定,可以写也可以不写,看实际情况
}
修改完配置文件重启一下。
[kickstart]
最后一步配置一下ks.cfg文件,不知道大家注意过没有,在虚拟机上安装完linux系统后,在root的家目录下有一个anaconda-ks.cfg文件,这就是本机安装的配置文件,本机安装的记录,是否图形化,磁盘分区啊,初始化网卡,创建root用户及密码都在此这里,所以这一次我们用这个配置文件当作ks配置文件安装。
[[email protected]_2 ~]# mkdir -p /data/sys/kickstart
[[email protected]_2 ~]# cp anaconda-ks.cfg/data/sys/kickstart/ks.cfg
[[email protected]_2 kickstart]# chmod 644 ks.cfg #注意,不要设置成777类似的权限,可能会获取失败。
Ks文件是系统安装时的信息,PXE client安装系统时会按照这个配置文件进行安装。
[[email protected]_2 kickstart]# cat ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
install
nfs --server=192.168.131.132 --dir=/data/sys
# Use graphical install
text
# Run the Setup Agent on first boot
firstboot --enable
......
到这里基本就完成了,接下来就自定义安装一个虚拟机可以尝试安装了。
这里是我在安装的时候碰到的一个问题,拿到这里分析一下,首先排除防火墙之类的问题,因为我已经全关了,根据提示客户端已经获取到了IP地址,连接到了TFTP,发现文件不存在,这里就是上面我提到的那个pexlinux.0文件需不需要写绝对路径的文件,我把路径去掉再重启就安装成功了。
关于ks.cfg文件,可以是像我这样直接复制原来存在的文件,当然也可以自行配置,相当于将你在系统安装时所碰到的要自行选择的信息,比如字符集,分区,添加用户之类,全部集中到ks.cfg中,客户端安装的时候只需要根据ks配置文件就行,一路操作下来直到安装完成。
整个过程大体如此,具体细节上的问题也并非特别了解,有写的不好的地方,请大家在评论中指出来,一起学习,一起进步!