linux自动安装系统工作过程介绍:

无人值守自动化安装linux系统_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镜像文件中的内容上传到共享目录下。

无人值守自动化安装linux系统_配置文件_02

挂载完成后,创建了一个/data/sys的目录,准备用于NFS共享。

[root@ceshiapp_2sys]# pwd

/data/sys #共享目录

[root@ceshiapp_2dev]# mount /dev/cdrom /mnt

mount: /dev/sr0 写保护,将以只读方式挂载

将mnt下的内容,拷贝到共享目录下。

[root@ceshiapp_2sys]# cp -a /mnt/* /data/sys/

端口映射的一个工具,在centos7中将portmap改成了rpcbind,功能都没有变化

rpcbind用于对nfs连接动态分配端口

[root@ceshiapp_2 ~]#systemctl restart rpcbind.service

[root@ceshiapp_2 ~]#systemctl restart nfs.service

[root@ceshiapp_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配置文件:

[root@ceshiapp_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]

[root@ceshiapp_2isolinux]#  sed -i ‘s#keepalive=0#keepalive=1#g’yum.conf

修改这个参数,可以在yum安装后将包保存下来。

[root@ceshiapp_2pxeboot]# yum install -y syslinux

[root@ceshiapp_2pxeboot]# rpm -ql syslinux|grep /pxelinux.0 

/usr/share/syslinux/pxelinux.0

[root@ceshiapp_2pxeboot]# cp `rpm -ql syslinux|grep /pxelinux.0`  /var/lib/tftpboot/

同时将系统安装目录中p_w_picpaths/pxeboot/{ initrd.img,vmlinuz}拷贝到tftpboot下

[root@ceshiapp_2 pxeboot]#cp initrd.img  vmlinuz  /var/lib/tftpboot/

这个就是内核引导的配置文件

[root@ceshiapp_2 isolinux]#cp isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

这里要修改一下default文件,方便之后的安装

我仅仅将有修改的部分贴出来了,供大家参考一下,如果有需要可以自行去查看一下。

[root@ceshiapp_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启动文件】

[root@ceshiapp_2 /]# cd /var/lib/tftpboot/

[root@ceshiapp_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

[root@ceshiapp_2 tftpboot]# cd pxelinux.cfg/

[root@ceshiapp_2 pxelinux.cfg]# ll

总用量 8

-rw-r--r--. 1 root root 3095 7  21 11:31default

[安装dhcp服务器]

直接yum安装,修改配置文件。

[root@ceshiapp_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配置文件安装。

[root@ceshiapp_2 ~]# mkdir -p /data/sys/kickstart

[root@ceshiapp_2 ~]# cp anaconda-ks.cfg/data/sys/kickstart/ks.cfg

[root@ceshiapp_2 kickstart]# chmod 644 ks.cfg #注意,不要设置成777类似的权限,可能会获取失败。

Ks文件是系统安装时的信息,PXE client安装系统时会按照这个配置文件进行安装。

[root@ceshiapp_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

......
  到这里基本就完成了,接下来就自定义安装一个虚拟机可以尝试安装了。

无人值守自动化安装linux系统_配置文件_03

  这里是我在安装的时候碰到的一个问题,拿到这里分析一下,首先排除防火墙之类的问题,因为我已经全关了,根据提示客户端已经获取到了IP地址,连接到了TFTP,发现文件不存在,这里就是上面我提到的那个pexlinux.0文件需不需要写绝对路径的文件,我把路径去掉再重启就安装成功了。

  关于ks.cfg文件,可以是像我这样直接复制原来存在的文件,当然也可以自行配置,相当于将你在系统安装时所碰到的要自行选择的信息,比如字符集,分区,添加用户之类,全部集中到ks.cfg中,客户端安装的时候只需要根据ks配置文件就行,一路操作下来直到安装完成。

  整个过程大体如此,具体细节上的问题也并非特别了解,有写的不好的地方,请大家在评论中指出来,一起学习,一起进步!