工作环境中,运预启想要安装Linux但是维培计算机没有光驱,或者是训P行环有大批量的计算机需要同时安装Linux, 就需要通过部署环境 PXE + DHCP + TFTP + HTTP + kickstart 方式来实现了   PXE协议详解   PXE,预启动执行环境(Preboot eXecution Environment,动执PXE,境实践详解也被称为预执行环境)提供了一种使用网络接口(Network Interface)启动计算机的运预启机制   这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统   PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动   协议分为client和server两端,维培支持工作站通过网络从远端服务器下载映像,训P行环并由此支持来自网络的动执操作系统的启动过程,其启动过程中,境实践详解终端要求服务器分配IP地址,运预启再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中并执行,维培由这个启动软件包完成终端基本软件设置,训P行环从而引导预先安装在服务器中的动执终端操作系统   PXE工作原理   ①PXE client从自己的PXE网卡启动,向本网络中的境实践详解DHCP服务器请求ip地址   ②DHCP服务器收到dhcp请求后,分配dhcp地址池中ip给PXE client   ③PXE client向本网络中的TFTP服务器索取bootstarp文件   ④PXE client取得bootstarp文件后之执行pxelinux.0文件引导,使用pxelinux环境来引导os安装程序   ⑤PXE client然后读取pxelinux.cfg文件夹中的default(isolinux.cfg)引导文件,通过TFTP服务器加载内核vmlinuz和根文件系统(boot.msg,vesamenu.c32,亿华云initrd.img,splash.jpg),通过http服务器加载ks.cfg引导文件   ⑥启动linux内核完成安装  
   在上图中,PXE client是需要安装Linux的计算机,TFTP Server和DHCP Server运行部署在在PXE Server端   Bootstrap文件、配置文件、Linux内核以及Linux根文件系统都放置在Linux Server上TFTP服务器的根目录下   | PXE必要条件   1、pxe client必须支持pxe用户端功能,并且开机时选择网络启动,这样系统才能以网络的方式进入pxe启动程序   2、pxe服务器必须至少提供DHCP及TFTP的服务才行,且其中DHCP服务器必须能够除未pxe client分配ip地址外,还需告知tftp所在的位置(即pxelinux.0的文件位置)   TFTP服务器则为pxe client 提供bootloader 及 kernel 等重要文件下载服务   4、使用NFS/HTTP/FTP之一的服务器提供pxe client所需程序及软件来源等通讯协议   | PXE工作流程图  
   PXE安装DHCP   动态主机设置协议(Dynamic Host Configuration Protocol,DHCP)是一种使网络管理员能够集中管理和自动分配IP网络地址的通信协议,使用UDP协议工作,DHCP使用统一端口作为BOOTP:   服务器端使用67/udp,客户端使用68/udp。主要有两个用途:   ①用于内部网络或网络服务供应商自动分配IP地址给用户   ②用于内部网络管理员作为对所有电脑作中央管理的手段   DHCP协议的工作流程:   ①客户端在局域网广播DHCPDISCOVER报文,请求获得ip地址、网关、免费源码下载dns地址 等信息;   ②DHCP服务器收到DHCPDISCOVER报文后 ,发送DHCPOFFER 报文进行响应;   ③客户端收到DHCPOFFER报文后,发送DHCPREQUEST 报文进行请求;   ④最终DHCP 服务器发送 DHCPACK报文进行确认   | 安装配置DHCP # 安装 DHCP 服务        yum install -y dhcp        # 调整配置文件        cat > /etc/dhcp/dhcpd.conf <<EOF        # dhcpd.conf        #        option domain-name "oldboy.com"; # 全局定义域名        option domain-name-servers 223.5.5.5; # 全局定义dns 地址        default-lease-time 600; # 全局定义默认租约期限        max-lease-time 7200; # 全局定义最长租约期限        log-facility local7; # 文件属性        subnet 10.0.0.0 netmask 255.255.255.0 { # 这里改为分配的网段和掩码        range 10.0.0.100 10.0.0.200; # 改为分配的IP的范围        option routers 10.0.0.2; # 如果有网关,这里改为网关地址        next-server 10.0.0.3; # 添加 tftp服务器地址        filename="pxelinux.0"; # 告诉TFTP目录下的bootstarp文件        }        EOF          | 启动dhcp并验证dhcpd进程是否处于监听状态 # 启动dhcp        systemctl start dhcpd.service        systemctl enable dhcpd.service        # 验证dhcpd是否启动        ps aux | grep dhcpd          PXE 安装 TFTP   简单文件传输协议也称小型文件传输协议(Trivial File Transfer Protocol, TFTP),工作在UDP/69 端口,是一种于1981年在RFC 783中定义的简化的文件传输协议(FTP)   瞬时(非独立)守护进程:他们无需定义在运行级别下,只需要一次性的定义xinetd的运行级别   xinetd——为那些极少接受用户请求的服务,专门提供监听功能,如 监听tftpd进程   独立(standlone)守护进程:能自我管理,无须xinet 提供监听服务的进程   | 安装TFTP 安装TFTP和xinetd        # yum install xinetd tftp-server -y        相关目录        /etc/xinetd.d/tftp # 配置文件路径        /var/lib/tftpboot # 默认tftp存储目录        修改配置文件        # vi /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 # no 表明tftp处于启用状态 ,yes 表示tftp处于禁用状态        per_source = 11        cps = 100 2        flags = IPv4        }        启动服务        # systemctl start xinetd.service        # systemctl enable xinetd.service        # ss -tunl | grep 69        udp UNCONN 0 0 *:69 *:*          | 使用 syslinux 提供的bootstart # 安装syslinux        yum install syslinux -y        # 相关目录文件        /usr/share/syslinux # pxelinux.0 文件存储目录        # 复制pxelinux.0到 /var/lib/tftpboot 目录        cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/        # 挂载镜像光盘        mkdir /oldboyedu/iso/centos -p        mount /dev/cdrom /oldboyedu/iso/centos/          | 配置pxelinux.cfg 文件 # 创建pxelinux.cfg 文件夹        mkdir /var/lib/tftpboot/pxelinux.cfg        # 把isolinux.cfg引导文件拷贝到tftpd存储目录下的pxelinux.cfg文件中,并命名为default        cp /oldboyedu/iso/centos/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default        # 修改linux内核引导文件        # 于/var/lib/tftpboot/pxelinux.cfg/default的第61行加入        label linux        kernel vmlinuz        menu label ### PXE Install CentOS 7 ###        append initrd=initrd.img inst.repo=http://10.0.0.3/centos/os/        inst.ks=http://10.0.0.3/ks.cfg         
   | 把内核及根文件拷贝到tftpd存储目录 cp /oldboyedu/iso/centos/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/        cp /oldboyedu/iso/centos/isolinux/{boot.msg,vesamenu.c32,splash.png} /var/lib/tftpboot/          PXE环境HTTPD部署   创建kickstart文件方式:   ①复制模板 /root/anaconda-ks.cfg ,而后使用vim编辑配置   ②使用system-config-kickstart 来生成,建议也使用/root/anaconda-ks.cfg 作为模板来进行   ksvalidator 查看ks文件语法是否正确   kickstat文件的组成部分:   1、命令段:用于配置系统 ,如:install ,源码库firewall, part,lv 等   2、软件包段%packages;指定要安装的程序包组(@组包名)及程序包(程序包名),每行一个 ;在程序包之前加 “-”号,表示不希望安装   3、%pre %post脚本段:安装过程开始之前、后执行的安装预备式脚本   | 关闭防火墙 # 永久关闭firewalld防火墙        systemctl stop firewalld        systemctl disable firewalld        # 永久关闭SELinux防火墙        setenforce 0        sed -i s/^SELINUX=.*/SELINUX=disabled/ /etc/sysconfig/selinux          | httpd安装 # 安装httpd        yum install httpd -y        # 启动httpd        systemctl start httpd.service        systemctl enable httpd.service        # 拷贝模板到/var/www/html 目录,并重命名为ks.cfg        cp /root/anaconda-ks.cfg /var/www/html/ks.cfg        # 分配权限,为pxe client引导安装使用        chmod o+r /var/www/html/ks.cfg        # 拷贝安装系统        mkdir /var/www/html/centos/os -p        cp -rp /oldboyedu/iso/centos/* /var/www/html/centos/os/        # root密码加密,“1”为密码        perl -e print crypt("1",q($6$gWOj2dVM8nQl2OTG)),"\n"          以/root/anaconda.cfg 为模板,配置ks.cfg文件 ,配置repo url 和 ks.cfg   ks引用格式如下:  
   | 调整配置文件 cat >/var/www/html/ks.cfg<<EOF        #platform=x86, AMD64, or Intel EM64T        #version=DEVEL        # Install OS instead of upgrade        install        # Keyboard layouts        keyboard --vckeymap=us --xlayouts=us        # Root password        rootpw --iscrypted $6$gWOj2dVM8nQl2OTG$5ZOKI81g1N82ygU95hT5fMZFBKRKCWXksYi/jkfCWfNXtI2mioQs/nDNBgWbha8dml2BiDjARyUtXITZXe6pr1        # Use network installation        url --url="http://10.0.0.3/centos/os" //指定网络安装的服务地址及目录        # System language        lang en_US.UTF-8 --addsupport=zh_CN.UTF-8 //语言        # Firewall configuration        firewall --disabled        # System authorization information        auth --useshadow --passalgo=sha512        # Use graphical install        graphical        firstboot --disable        # SELinux configuration        selinux --disabled        # Network information        network --bootproto=dhcp --device=ens33 --onboot=yes --noipv6 --activate //启动并激活网卡的名称        # Reboot after installation        reboot        # System timezone        timezone Asia/Shanghai --isUtc --nontp //设置时区        # System bootloader configuration        bootloader --location=mbr --boot-drive=sda        # Clear the Master Boot Record        zerombr //清除mbr信息        # Partition clearing information        clearpart --all --initlabel        # Disk partitioning information //磁盘为20G的硬盘,这里根据自己来进行修改        part /boot --fstype="xfs" --size=1024        part / --fstype="xfs" --size=17408        part swap --fstype="swap" --size=1024        %packages        @base        @compat-libraries        @desktop-debugging        @development        @dial-up        @fonts        @gnome-apps        @gnome-desktop        @legacy-x        @platform-devel        @remote-desktop-clients        @x11        vinagre        %end        EOF        # 安装ksvalidator 软件        yum -y install pykickstart        # ksvalidator验证ks.cfg语法是否正确,如有报错去掉中文注释即可        ksvalidator /var/www/html/ks.cfg          | ks.cfg及repo验证  
   注:ks.cfg若不能正常打开,确认是否有读权限  
   注:若不能显示以上连接方式,确认httpd配置文件中,是否开启相关选项   至此,PXE服务器环境部署完成,出现问题时,一般需要查看系统日志,如:/var/log/messages, 通过日志报错信息进行解决   centos PXE环境测试,安装,启动   配置PXE client 客户端,网络需与PXE服务器处于同一网段 10.0.0.0/24   客户机操作系统为 Linux系统的 CentOS 7 64位版本  
   开启虚拟机,选择第一个选项  
   确认为自动分区后点击开始安装  
   设置 root 密码  
   系统重启  
   安装完成  
   总结:在本文中,我们通过一些示例学习了如何去部署PXE和对PXE的基础使用,希望能够给你们带来帮助。  |