什么是nfs?嵌入式软件开发为什么要用到nfs 这个工具_PXE自动化安装系统工具介绍与部署...

女主宣言

对于单台服务器上的os安装,我们可以手动进行。那若是一个集群中的大量节点服务器需要安装os,手动安装显然是费时费力。作为系统运维工程师,自动化运维是我们必不可少的技能。下来就跟随作者去探索下PXE是如何通过网络来实现批量系统安装的吧。

PS:丰富的一线技术、多元化的表现形式,尽在“360云计算”,点关注哦!

1

PXE简介

PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载镜像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统。严格来说,PXE 并不是一种安装方式,而是一种引导方式。进行PXE安装的必要条件是在要安装的计算机中必须包含一个PXE支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE协议可以使计算机通过网络启动。此协议分为 Client端和 Server 端,而PXE Client则在网卡的 ROM 中。当计算机引导时,BIOS 把 PXE Client调入内存中执行,然后由PXE Client将放置在远端的文件通过网络下载到本地运行。运行 PXE 协议需要设置 DHCP 服务器和 TFTP 服务器。DHCP 服务器会给 PXE Client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE Client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。此外,在 PXE Client 的 ROM 中,已经存在了 TFTP Client,那么它就可以通过 TFTP 协议到 TFTP Server 上下载所需的文件了。

PXE的工作流程

  1. PXE Client 从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP;

  2. DHCP 服务器返回分配给客户机的IP*以及PXE文件的放置位置(该文件一般是放在一台TFTP服务器上) ;

  3. PXE Client 向本网络中的TFTP服务器索取pxelinux.0 文件;

  4. PXE Client 取得pxelinux.0 文件后执行该文件;vmlinuz是可引导的、压缩的内核,initrd.img文件是设备(/dev/ram0)的映像文件;

  5. 根据pxelinux.0 的执行结果,通过TFTP服务器加载内核和文件系统 ;

  6. 进入安装画面, 此时可以通过选择HTTP、FTP、NFS 方式之一进行安装;

ff35fc54-ca15-eb11-8da9-e4434bdf6706.png

达成PXE必须要有两个环节

  1. 其一客户端的网卡必须要支持PXE用户端功能,并且开机时选择从网卡启动,这样系统才会通过网卡进入PXE客户端的程序;

  2. 其二PXE服务器必须要提供至少含有DHCP以及TFTP的服务,其中:

  • DHCP服务必须要能够提供客户端的网络参数,还要告知客户端TFTP所在的位置;

  • TFTP则提供客户端的boot loader及kernel file下载路径。

还要加上NFS/FTP/HTTP(选择一样即可)等提供安装文件(安装镜像的解压文件),才算是比较完整的PXE服务器。一般TFTP和DHCP服务都由同一台服务器提供,且大多数时候还提供NFS/FTP/HTTP服务,所以PXE服务器一般是提供3合一的服务。

什么是Kickstart

Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在安装过程中(不只局限于生成Kickstart安装文件的机器)出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便需要安装者手工干预了。所以,如果Kickstart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启系统,并结束安装。

0636fc54-ca15-eb11-8da9-e4434bdf6706.png

满足Kickstart安装系统的需求

  1. 网卡必须支持PXE引导;

  2. 客户端需要有与Kickstart通信的IP地址,这里一般都是通过DHCP自动分配IP地址来实现;

  3. 提供引导所需的文件,内核文件,内核镜像文件等,此时一般通过tftp-server等实现;

  4. kickstart文件,它主要实现自动化安装的过程,比如配置主机名、添加用户等安装系统后的相关操作;

  5. 提供安装源,一般就是NFS/ftp/httpd等。

2

环境介绍及初绍化

环境介绍

  • 操作系统:CentOS Linux release 7.4.1708 (Core)。

  • 网卡地址:192.168.221.129。

  • 光盘镜像:CentOS-7-x86_64-DVD-1708.iso。

  • 安装工具:kickstart + dhcp + tftp-server + tftp + httpd。

准备工作

# cat /etc/redhat-releaseCentOS Linux release 7.4.1708 (Core)# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config# setenforce 0# getenforcePermissive 或者 Disabled# systemctl stop firewalld.service# systemctl disable firewalld.service# yum install -y httpd dhcp tftp-server tftp syslinux

3

配置

修改dhcp配置

# vim /etc/dhcp/dhcpd.confoption domain-name "pxe.com";option domain-name-servers ns1.pxe.com, pxe.com;default-lease-time 600;max-lease-time 7200;log-facility local7;subnet 192.168.221.0 netmask 255.255.255.0 {  //服务端IP网段及掩码option routers 192.168.221.2; //网关option subnet-mask 255.255.255.0; //掩码option domain-name-servers 192.168.221.129;range dynamic-bootp 192.168.221.130 192.168.10.230;  //dhcp分发的地址范围default-lease-time 21600; //设置默认的IP租用期限max-lease-time 43200; //设置最大的IP租用期限next-server 192.168.221.129;  //TFTP服务器地址filename "pxelinux.0"; //指定引导文件位置,这里是TFTP根目录下的pxelinux.0}# systemctl start dhcpd.service# systemctl enable dhcpd.service# netstat -tunpl |grep dhcpd

Httpd服务配置

# mkdir -pv /var/www/html/centos7# mount --bind /media/cdrom/ /var/www/html/centos7/# systemctl start httpd.service# systemctl enable httpd.service# netstat -tunpl |grep httpd

tftp服务配置

# vim /etc/xinetd.d/tftp service tftp{socket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/in.tftpdserver_args = -s /var/lib/tftpboot //修改tftp的根目录disable = no  //认disable是yes的,把它改为no即可 per_source = 11cps = 100 2flags = IPv4}# systemctl start tftp.socket# systemctl enable tftp.socket # systemctl start tftp.service# systemctl enable tftp.service# netstat -tunpl |grep 69

添加引导文件

# cp /usr/share/syslinux/pxelinux.0  /var/lib/tftpboot/# cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/# cp /media/cdrom/isolinux/{vesamenu.c32,boot.msg,splash.png} /var/lib/tftpboot/# cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/# mkdir /var/lib/tftpboot/pxelinux.cfg/# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
# vim /var/lib/tftpboot/pxelinux.cfg/defaultdefault vesamenu.c32timeout 60display boot.msgmenu clearmenu background splash.pngmenu title HQHY PXE BootMenu:Installcentos6.2 or 7.4menu vshift 8menu rows 18menu margin 8#menu hiddenmenu helpmsgrow 15menu tabmsgrow 13label linux 1  menu label ^Install CentOS 7.4  menu default  kernel centos7.4/vmlinuz net.ifnames=0 biosdevname=0  append initrd=centos7.4/initrd.img inst.repo=http://192.168.221.129/centos7.4 inst.ks=http://192.168.221.129/ks74.cfg
# vim /var/www/html/ks74.cfginstallurl --url="http://192.168.221.129/centos7.4"lang en_US.UTF-8keyboard usskipxtextrebootrootpw --iscrypted $1$PChLniYo$DG6raNbcIO5AIPRiP/js20user --name=qihoo --groups=wheel --password=$6$IK2rvMJD$TGIckBiHXQk8U9vAlfKy4KnxEgB0uQf5TR2aQVM4PhdmivzyhxWXSNxU2wo0wTdnFUOtGq6b59tjQmrNcglnm0 --iscrypted --uid=1111timezone Asia/Shanghaifirewall --enabled --port=22:tcpauthconfig --enableshadow --enablemd5selinux --permissiveclearpart --all --initlabel%include /tmp/part%packages@core@base@mail-server-dovecot-system-config-httpd-system-config-printer-gui-system-config-nfs-system-config-samba-ivtv-firmware-iwl1000-firmware-iwl100-firmware-iwl105-firmware-iwl135-firmware-iwl2000-firmware-iwl2030-firmware-iwl3160-firmware-iwl3945-firmware-iwl4965-firmware-iwl5000-firmware-iwl5150-firmware-iwl6000-firmware-iwl6000g2a-firmware-iwl6000g2b-firmware-iwl6050-firmware-iwl7260-firmware-kernel-tools-libertas-sd8686-firmware-libertas-sd8787-firmware-libertas-usb8388-firmware-microcode_ctl-NetworkManager-NetworkManager-tui-ql2100-firmware-ql2200-firmware-ql23xx-firmware-abrt-addon-ccpp-abrt-addon-python-abrt-cli-abrt-console-notification-words-pinfo-plymouth@Development toolsncurses-develntptelnetnet-snmpsysstatiptrafdevice-mapper-multipathpsmiscmcelog%end%pre#!/bin/bashset $(list-harddrives)let numd=$#/2d1=$1disk_size=`echo $2 |cut -d "." -f 1`pv=`pvs | grep $d1 | awk '{print $1}'`if ["X$pv" != "X"]; then    vg=`pvs | grep $d1 | awk '{print $2}'`    if ["X$vg" != "X"]; then        for lv in `ls /dev/$vg/*`        do             echo "y" | lvremove $lv        done    fi    if [$? -eq 0]; then        echo "y" | vgremove $vg    fi    if [$? -eq 0]; then        echo "y" | pvremove $pv    fifips=`lsblk -l |grep $d1 | awk '{if ( $1 ~ /[0-9]$/) print $1 }' | sed "s/$d1//g"`if [ "X$ps" != "x" ]; then    for i in $ps    do        /usr/sbin/parted /dev/$d1 rm Si    donefilist-harddrives |grep md127if [ $? -eq 0 ]thend1=sdafidd if=/dev/zero of=/dev/$d1 bs=512 count=1/usr/sbin/parted -s /dev/Sd1 mklabel msdosecho "bootloader --location=mbr --driveorder=$d1" > /tmp/partif [ ${disk_size} -gt 2050000 ]; then    /usr/sbin/parted -s /dev/$d1 mklabel gpt    echo "part biosboot --fstype=biosboot --size=1 --ondisk=$d1" >> /tmp/partelse    echo "clearpart --drives=$d1 --all --initlabel" >> /tmp/partfiecho "ignoredisk --only-use=$d1" >>/tmp/partecho "part /boot --fstype xfs --size=500 --ondisk=$d1 --asprimary" >> /tmp/partecho "part pv.7 --fstype="lvmpv" --size=100 --ondisk=$d1 --grow" >> /tmp/partecho "volgroup VolGroup00 --pesize=32768 pv.7" >> /tmp/partecho "logvol swap --fstype swap --name=Vol_swap --vgname=VolGroup00 --size=4000" >> /tmp/partecho "logvol / --fstype xfs --name=Vol_sys --vgname=VolGroup00 --size=10000" >> /tmp/partecho 'qihoo ALL = (ALL) ALL' >> /etc/sudoerscd /root/wget http://192.168.221.129/chushihua/centos7.4_init-1.1.3.tar.gz%end

360云计算

由360云平台团队打造的技术分享公众号,内容涉及数据库、大数据、微服务、容器、AIOps、IoT等众多技术领域,通过夯实的技术积累和丰富的一线实战经验,为你带来最有料的技术分享

0b36fc54-ca15-eb11-8da9-e4434bdf6706.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值