• PXE+Kickstart 全自动安装部署CentOS7.4


    一、简介
    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 文件后之执行该文件;
    5)、 根据pxelinux.0 的执行结果,通过TFTP服务器加载内核和文件系统 ;
    6)、 进入安装画面, 此时可以通过选择HTTP、FTP、NFS 方式之一进行安装;
    详细工作流程,请参考下面这幅图:
     
    要达成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合一的服务
     
    2、什么是Kickstart
    Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在安装过程中(不只局限于生成Kickstart安装文件的机器)出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便需要安装者手工干预了。所以,如果Kickstart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启系统,并结束安装。
    PXE+Kickstart 无人值守安装操作系统完整过程如下:
    满足Kickstart安装系统的需求
    1. 网卡必须支持PXE引导;
    2. 客户端需要有与Kickstart 通信的IP地址,这里一般都是通过DHCP自动分配IP地址来实现;
    3. 提供引导所需的文件,内核文件,内核镜像文件等,此时一般通过tftp-server等实现;
    4. kickstart文件,它主要实现自动化安装的过程,比如配置主机名、添加用户、安装系统后相关操作;
    5. 提供安装源,一般就是NFS/ftp/httpd等;
    总结: 通过如上需求,我们就知道需要安装的相关服务,如DHCP/tftp-server/syslinux/kickstart/vsftpd等;
     
     
    二、环境介绍及初绍化
    1、环境介绍
    • 操作系统:CentOS Linux release 7.4.1708 (Core)
    • 网卡地址:192.168.10.7/24
    • 光盘镜像:CentOS-7-x86_64-DVD-1708.iso
    • 安装工具:kickstart + dhcp + tftp-server + tftp + httpd
    • Workstaion网络:VMNet3
     
    2、准备工作
    1、服务器禁用SElinux,然后进行重启操作
    [root@kickstart ~]# cat /etc/redhat-release
    CentOS Linux release 7.4.1708 (Core)
    [root@kickstart ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g'
    /etc/selinux/config
    [root@kickstart ~]# setenforce 0
    [root@kickstart ~]# systemctl reboot
    [root@kickstart ~]# getenforce
    Permissive
     
    2、关闭防火墙及清空策略
    [root@kickstart ~]# systemctl stop firewalld.service
    [root@kickstart ~]# systemctl disable firewalld.service
    Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
    Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
    [root@kickstart ~]# iptables -F
    [root@kickstart ~]# iptables -L -n
    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    Chain FORWARD (policy ACCEPT)
    target prot opt source destination
    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination
    [root@kickstart~]#
     
    3、软件安装
    [root@kickstart ~]# yum install -y httpd dhcp tftp-server tftp syslinux
    [root@kickstart ~]# rpm -q httpd dhcp tftp-server tftp syslinux
    httpd-2.4.6-67.el7.centos.x86_64
    dhcp-4.2.5-58.el7.centos.x86_64
    tftp-server-5.2-13.el7.x86_64
    tftp-5.2-13.el7.x86_64
    syslinux-4.05-13.el7.x86_64
     
    三、各组件配置及准备
    一)DHCP服务配置
    1、修改dhcpd配置文件
    [root@kickstart ~]# cp -rf /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
    [root@kickstart ~]# egrep -v "^#|^$" /etc/dhcp/dhcpd.conf
    option domain-name "contoso.com";
    option domain-name-servers ns1.contoso.com, contoso.com;
    default-lease-time 600;
    max-lease-time 7200;
    log-facility local7;
    subnet 192.168.10.0 netmask 255.255.255.0 { //服务端IP网段及掩码
    option routers 192.168.10.254; //网关
    option subnet-mask 255.255.255.0; //掩码
    option domain-name-servers 192.168.10.2;
    range dynamic-bootp 192.168.10.100 192.168.10.120; //dhcp分发的地址范围
    default-lease-time 21600; //设置默认的IP租用期限
    max-lease-time 43200; //设置最大的IP租用期限
    next-server 192.168.10.7; //TFTP服务器地址
    filename "pxelinux.0"; //指定引导文件位置,这里是TFTP根目录下的pxelinux.0
    }
     
    2、启动dhcpd服务,并设置为开机启动
    [root@ kickstart ~]# systemctl start dhcpd.service
    [root@ kickstart ~]# systemctl enable dhcpd.service
     
    3、dhcp服务端口查看
    [root@kickstart ~]# ss -nulp | grep dhcpd
    UNCONN 0 0 *:44810 *:* users:(("dhcpd",pid=5197,fd=20))
    UNCONN 0 0 *:67 *:* users:(("dhcpd",pid=5197,fd=7))
    UNCONN 0 0 :::5138 :::* users:(("dhcpd",pid=5197,fd=21))
     
     
    二)Httpd服务配置
    1、目录建立及光盘挂载
    [root@kickstart ~]# mkdir -pv /var/www/html/CentOS7
    [root@kickstart ~]# mount --bind /media/cdrom/ /var/www/html/CentOS7/
     
    2、启动httpd服务,并设置为开机启动
    [root@ kickstart ~]# systemctl start httpd.service
    [root@ kickstart ~]# systemctl enable httpd.service
     
    3、httpd服务端口查看
    [root@kickstart ~]# ss -tnl | grep 80
    LISTEN 0 128 :::80
    [root@kickstart ~]# lftp http://192.168.10.7/CentOS7 //用lftp对CentOS7进行测试
    cd: received redirection to `http://192.168.10.7/CentOS7/'
    cd ok, cwd=/CentOS7
    lftp 192.168.10.7:/CentOS7> ls
    drwxr-xr-x -- /
    -rw-r--r-- -- CentOS_BuildTag
    drwxr-xr-x -- EFI
    -rw-r--r-- -- EULA
    -rw-r--r-- -- GPL
    drwxr-xr-x -- LiveOS
    drwxr-xr-x -- Packages
    -rw-r--r-- -- RPM-GPG-KEY-CentOS-7
    -rw-r--r-- -- RPM-GPG-KEY-CentOS-Testing-7
    -rw-r--r-- -- TRANS.TBL
    drwxr-xr-x -- images
    drwxr-xr-x -- isolinux
    drwxr-xr-x -- repodata
    lftp 192.168.10.7:/CentOS7>
     
     
    三)tftp服务配置
    1、配置xinetd
    [root@kickstart ~]# 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 //认disable是yes的,把它改为no即可
    per_source = 11
    cps = 100 2
    flags = IPv4
    }
     
    2、确保tftp.socket正常
    [root@kickstart ~]# systemctl start tftp.socket
    [root@kickstart ~]# systemctl enable tftp.socket
    Created symlink from /etc/systemd/system/sockets.target.wants/tftp.socket to /usr/lib/systemd/system/tftp.socket.
    [root@kickstart ~]# systemctl status tftp.socket
    ● tftp.socket - Tftp Server Activation Socket
    Loaded: loaded (/usr/lib/systemd/system/tftp.socket; enabled; vendor preset: disabled)
    Active: active (listening) since Thu 2017-12-28 01:56:55 CST; 2min 29s ago
    Listen: [::]:69 (Datagram)
    Dec 28 01:56:55 kickstart.contoso.com systemd[1]: Listening on Tftp Server Activation Socket.
    Dec 28 01:56:55 kickstart.contoso.com systemd[1]: Starting Tftp Server Activation Socket
     
    3、然后启动tftp.service
    [root@kickstart ~]# systemctl start tftp.service
    [root@kickstart ~]# systemctl enable tftp.service
    [root@kickstart ~]# systemctl status tftp.service
    ● tftp.service - Tftp Server
    Loaded: loaded (/usr/lib/systemd/system/tftp.service; indirect; vendor preset: disabled)
    Active: active (running) since Thu 2017-12-28 02:04:32 CST; 20s ago
    Docs: man:in.tftpd
    Main PID: 1777 (in.tftpd)
    CGroup: /system.slice/tftp.service
    └─1777 /usr/sbin/in.tftpd -s /var/lib/tftpboot
     
    [root@kickstart ~]# ss -unlp | grep 69 //端口为UDP:69
    UNCONN 0 0 :::69 :::* users:(("systemd",pid=1,fd=42))
     
    3、导入必要的引导文件
    需要导入TFTP服务器的主要文件有:
    • 引导文件 - pxelinux.0
    • 内核文件:vmlinuz initrd.img
    • 引导菜单:isolinux.cfg -- 开机后选择启动项的菜单文
    1. 引导文件pxelinux.0 由软件包syslinux生成,安装syslinux软件包

      [root@kickstart ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ //boot loader文件
    1. 导入内核及菜单文件
    内核文件:vmlinuz initrd.img
    引导菜单配置文件: isolinux.cfg
    系统自带的两种窗口模块之一:vesamenu.c32
    窗口提示信息文件:boot.msg
    窗口背景图片:splash.png
     
    [root@kickstart pxeboot]# cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/ //导入内核文件
    [root@kickstart ~]# cp /media/cdrom/isolinux/{vesamenu.c32,boot.msg,splash.png} /var/lib/tftpboot/
    [root@kickstart ~]# cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/
    [root@kickstart ~]# mkdir /var/lib/tftpboot/pxelinux.cfg/ //新建pxelinux.cfg文件夹
     
    [root@kickstart ~]# ls /var/lib/tftpboot/ //查看目录下准备的文件
    boot.msg chain.c32 initrd.img mboot.c32 memdisk menu.c32 pxelinux.0 pxelinux.cfg splash.png vesamenu.c32 vmlinuz
     
    1. 复制文件进行修改
    [root@kickstart ~]# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
    [root@kickstart ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
    [root@kickstart ~]# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
     
    [root@kickstart ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
    //修改引导菜单选项:
    [root@pxe1 pxelinux.cfg]# vim /var/lib/tftpboot/pxelinux.cfg/default 
    //首先修改菜单等待时间
    timeout 600  //菜单显示等待时间,单位为1/10秒,默认等待60秒。
    //修改菜单等待时间为60,即等待6秒,若无操作则进入默认菜单;
    timeout 600
    //然后修改显示菜单,找到文件中的以下部分
    label linux  
    menu label ^Install CentOS Linux 7
    kernel vmlinuz  
    append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet
     
    label check
    menu label Test this ^media & install CentOS Linux 7  
    menu default  
    kernel vmlinuz  
    append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet
    # 将其修改为
    label linux
    menu label ^Install CentOS 7
    kernel vmlinuz
    append initrd=initrd.img
     
    label linux 2
    menu label ^Install CentOS 7 by Kickstart
    kernel vmlinuz
    append initrd=initrd.img inst.repo=http://192.168.10.7/CentOS7
    inst.ks=http://192.168.10.7/CentOS7.cfg
     
    label linux 3
    menu label ^Install CentOS 7 by Kickstart_Min
    kernel vmlinuz
    append initrd=initrd.img inst.repo=http://192.168.10.7/CentOS7 inst.ks=http://192.168.10.7/CentOS7Min.cfg
    1. 将CentOS7.kfg放到/var/www/html目录下面,CentOS7. cfg文件内容如下:
    [root@kickstart html]# cat CentOS7.cfg
    #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 $1$xBL2ptUE$hJOPvy.dysetezxpEXCaL0
    # Use network installation
    url --url="http://192.168.10.7/CentOS7" //指定网络安装的服务地址及目录
    # 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 //启动并激活网卡的名称
    network --hostname=Centos7.contoso.com //设置主机名
    # Reboot after installation
    reboot
    # System timezone
    timezone Asia/Shanghai --isUtc --nontp //设置时区
    user --groups=wheel --name=tony --gecos="tony" //增加tony用户
    # 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 //磁盘为50G的硬盘,这里根据自己来进行修改
    part /boot --fstype="xfs" --size=200
    part / --fstype="xfs" --size=20480
    part swap --fstype="swap" --size=2048
    part /usr --fstype="xfs" --size=20480
    part /tmp --fstype="xfs" --grow --size=1
     
    %packages
    @base
    @compat-libraries
    @desktop-debugging
    @development
    @dial-up
    @fonts
    @gnome-apps
    @gnome-desktop
    @legacy-x
    @platform-devel
    @remote-desktop-clients
    @x11
    vinagre
     
    %end
    说明:生成kickstart文件时,需要安装通过yum -y install system-config-kickst 安装此软件包,安装的软件包之前,首先需要repo文件中第一行写成[development],括号中建议填写development,填写其他内容会导致后面system-config-kickstart命令生成kickstart文件文件时无法选择软件包
     
    四、验证自动化安装
    启动之前准备的客户端虚拟机查看是否可以正常显示引导菜单,是否可以正常获取initrd.img和vmlinuz内核文件。
      若配置正常,会看到之前配置的引导菜单出现:
     
    先择第二项, 按Enter键后,会出现获取内核文件的界面:
      正常获取获取ks文件之后,若正常进入自动安装界面,如下图所示,等待系统安装完成即可
     
    注意:若要安装图形界面,选择内存时尽量大点(实验中我选择2GB),若太小的话,估计会报相关错误!
    https://www.cnblogs.com/cloudos/
  • 相关阅读:
    线程池。
    等待唤醒机制。
    第一册:lesson 131.
    线程同步机制。
    第一册: lesson 129。
    线程实现方式。
    第一册:lesson 125.
    第一册:Lesson 123.
    黄渤的谈话。
    K3 KFO 手册
  • 原文地址:https://www.cnblogs.com/cloudos/p/8143929.html
Copyright © 2020-2023  润新知