pxe+dhcp+tftp+kickstart 实现无人值守自动安装

PXE工作原理

 第一步:PXE ClientDHCP发送请求首先,将支持PXE的网络接口卡(NIC)的客户端的BIOS设置成为网络启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向网络中的DHCP服务器索取IP地址等信息。

第二步:DHCP服务器提供信息DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。

第三步:PXE客户端请求下载启动文件客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0pxelinux.cfg/defaultvmlinuzinitrd.img等文件。

第四步Boot Server响应客户端请求并传送文件当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答用以决定启动参数。BootROM  TFTP 通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。

第五步:请求下载自动应答文件客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。或许你会说,刚才PXE不是已经获取过IP地址了吗?为什么现在还需要一次?这是由于PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。由于它们需要的内容不同造成PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序。从而进行两次获取IP地址过程。接着会读取该文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。

第六步:客户端安装操作系统ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。这个时候注意,在重新引导的过程中一定要将BIOS修改回从硬盘启动,不然的话又会重复的自动安装操作系统。在上面介绍中PXE client是需要安装Linux的计算机,TFTP ServerDHCP ServerNFS Server运行在另外一台Linux Server上。Bootstrap文件、配置文件、Linux内核都放置在Linux ServerTFTP服务器的根目录下。而Linux根文件系统存放于NFS Server的共享目录中。PXE client在工作过程中,需要三个二进制文件:bootstrapLinux 内核和Linux根文件系统。Bootstrap文件是可执行程序,它向用户提供简单的控制界面,并根据用户的选择,下载合适的Linux内核以及Linux根文件系统。

一、目的:完成自动化rhel7.0系统安装

二、系统:rhel7.0

三、工具:

http:用于安装文件网络传输

tftp:用于上传内核、入口程序等

dhcp:用于动态IP分配

pxelinux.0:安装系统入口程序

kickstart:个性化rhel7.0配置

本机ip:172.25.254.11(用于安装服务器) DNS:172.25.254.254 网关:172.25.254.250

四、步骤(机器为全新,仅有桌面iso文件)

(1)配置本地yum源(已配置好则跳过)

    # mount rhel7.0-server-x86-64.iso /mnt

    # vim /etc/yum.repo/xxxxx.repo

    [mysoftware]

    #该步骤为配置临时yum源,便于安装要用到的软件

    name=ps-test

    enable=1

    baseurl=file:///mnt

    gpgcheck=0 

    # yum clean all

    //用kisckstart配置个性化linux系统 

    # yum install system-config-kickstart -y

    # system-config-kickstart //图形界面下 packages  选择时存在bug需手动添加

    //将上步做好的ks.cfg保存到/var/www/html/下

    # vim /var/www/html/ks.cfg

    //在文件最后添加

      %packages

      @base                //最小安装

      %end

    //httd配置                          

    # yum install httpd -y

    # systemctl start httpd

    # systemctl enable httpd

    # systemctl stop firewalld

    # systemctl disable firewalld

    # mkdir /var/www/html/source

    # vim /etc/fstab

     #增加以下代码

     /root/Desktop/rhel7.0-server-x86-64.iso /var/www/html/source iso9660 defaults 0 0

    # mount -a

    # umount /mnt

    # vim /etc/yum.repo/xxxxx.repo  

     #修改baseurl

    baseurl=file:///var/www/html/source

    # yum clean all

    //dhcp配置

    //将本机IP改为静态(用作服务器使用)并重启网络服务

    # yum install dhcpd.x86_64 -y

    # cat /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example > /etc/dhcp/dhcpd.conf

    # vim /etc/dhcp/dhcpd.conf

    option domain-name "example.com";

    option domain-name-servers 172.25.254.254;

    default-lease-time 600;

    max-lease-time 7200;

    log-facility local7;

    subnet 172.25.254.0 netmask 255.255.255.0 {

    range 172.25.254.60 172.25.254.70;

    option routers 172.25.254.250;

    filename "pxelinux.0";

    next-server 172.25.254.11;}

    # systemctl restart dhcpd

    # systemctl enable dhcpd

    //tftp配置

    # yum install tftp-server -y

    # cd /var/lib/tftpboot

    # cp /var/www/html/source/isolinux/* /var/lib/tftpboot

    # mkdir pxelinux.cfg

    # cp isolinux.cfg pxelinux.cfg/default

    # vim pxelinux.cfg/default

    //修改以下条目

    timeout 60

    label linux

    menu label ^Install Red Hat Enterprise Linux 7.0

    kernel vmlinuz

    menu default

    append initrd=initrd.img repo=http://172.25.254.11/source                   ks=http://172.25.254.11/ks.cfg

    # yum install syslinux -y

    # cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot

    # vim /etc/xinetd.d/tftp

     disable                 = no

    # systemctl restart xinetd

    # systemctl enable xinetd 

    //至此所有配置完成

五、测试

    用另一PC使用网络启动(或pxe)通过引导成功进入安装界面

    系统安装过程完全自动化,只需打开PC电源即可


六、遇到的问题

    遇到问题最多的点再于DHCP的配置,dhcpd.conf 的语法要求很严格,并且没有报错机制,在

    # systemctl restart dhcpd 后需要继续执行 # systemctl status dhcpd 查看其是否运行,若状态为failed则说明配置文件有误,需查看日志排错


你可能感兴趣的:(linux,服务器,pxe)