PXE 网络安装 CentOS 7,BIOS(Legacy) 和 UEFI 启动都支持_欢迎访问我的博客-程序员宝宝

技术标签: linux  服务器  centos7  centos  

CentOS 7 配置 PXE+Kickstart 实现网络安装(无人值守)

网络安装至少需要两个系统:

  • 服务器 - 运行 DHCP服务器、TFTP 服务器从服务器提供引导文件,同时 HTTP、FTP 或者 NFS 服务器托管安装映射。
  • 客户端 - 要安装系统的机器。安装开始时,客户端会查询 DHCP 服务器,从 TFTP 服务器中获取引导文件,并从 HTTP、FTP 或者 NFS 服务器下载安装映象。

配置网络引导

网络引导配置步骤在不同的系统中有所不同,具体看要安装 Linux 的系统是使用 BIOS 还是UEFI

配置防火墙

# 关闭并禁用防火墙
[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

# 在防火墙中允许某服务的连接(本次不使用此方式)
[[email protected] ~]# firewall-cmd --add-service=tftp

配置SELinux

# 查看SELinux状态
[[email protected] ~]# getenforce
Enforcing
# 设置SELinux为permissive模式,1 是Enfocing模式
[[email protected] ~]# setenforce 0
[[email protected] ~]# getenforce
Permissive
# 彻底禁用SELinux
[[email protected] ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

配置Yum仓库

使用ISO镜像搭建本地仓库,提升安装软件包的速度。

# ISO文件挂载
[[email protected] ~]# mount -o loop,ro -t iso9660 CentOS-7-x86_64-DVD-1810.iso /media
# cdrom光盘挂载(根据自己的情况二选一)
[[email protected] ~]# mount /dev/cdrom /media
# 备份原有文件
[[email protected] ~]# cp -r /etc/yum.repos.d /etc/yum.repos.d_bak
[[email protected] ~]# rm -f /etc/yum.repos.d/*
# yum配置文件
[[email protected] ~]# cat /etc/yum.repos.d/local.repo
[development]
name=local
baseurl=file:///media/
gpgcheck=0
[[email protected] ~]# yum makecache

安装配置HTTP服务

[[email protected] ~]# yum install -y httpd
# 启动HTTP服务
[[email protected] ~]# systemctl start httpd
# 设置开机启动
[[email protected] ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

# 系统通过网络安装时需要指定安装源,这里使用HTTP服务提供安装源,也可以通过FTP服务提供
# 将ISO文件挂载后复制到/var/www/html目录即可
[[email protected] ~]# mount -o loop,ro -t iso9660 CentOS-7-x86_64-DVD-1810.iso /media
# cdrom光盘挂载(根据自己的情况二选一)
[[email protected] ~]# mount /dev/cdrom /media
[[email protected] ~]# cp -r /media /var/www/html/centos7.6

安装配置TFTP服务

[[email protected] ~]# yum install -y tftp-server
# 在 /etc/xinet.d/tftp 配置文件中,将 disabled 参数从 yes 改为 no
[[email protected] ~]# vim /etc/xinetd.d/tftp
[[email protected] ~]# cat /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files using the trivial file transfer \
#       protocol.  The tftp protocol is often used to boot diskless \
#       workstations, download configuration files to network-aware printers, \
#       and to start the installation process for some operating systems.
service tftp
{
    
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
# 启动服务
[[email protected] ~]# systemctl start tftp
[[email protected] ~]# systemctl enable tftp
Created symlink from /etc/systemd/system/sockets.target.wants/tftp.socket to /usr/lib/systemd/system/tftp.socket.
[[email protected] ~]# systemctl status tftp

安装配置DHCP服务

[[email protected] ~]# yum install -y dhcp

# subnet字段为局部设置,优先级高于全局。option在全局和局部都可设置
[[email protected] ~]# cat /etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
option space pxelinux;
option pxelinux.magic code 208 = string;
option pxelinux.configfile code 209 = text;
option pxelinux.pathprefix code 210 = text;
option pxelinux.reboottime code 211 = unsigned integer 32;
option architecture-type code 93 = unsigned integer 16;

subnet 192.168.22.0 netmask 255.255.255.0 {
    
  option routers 192.168.22.2;              # 网关
  range 192.168.22.190 192.168.22.199;      # 可分配的起始IP~结束IP

  class "pxeclients" {
    
      match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
      next-server 192.168.22.132;    # 提供引导文件的服务器IP地址,即tftp服务器地址

      if option architecture-type = 00:07 {
    
        filename "uefi/shim.efi";         # 采用shim打包的EFI引导映象
      } else {
    
        filename "pxelinux/pxelinux.0";   # SYSLINUX打包的BIOS引导映像
      }
  }
}

# 启动服务并设置开机自启
[[email protected] ~]# systemctl start dhcpd.service
[[email protected] ~]# systemctl enable dhcpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.
[[email protected] ~]# systemctl status dhcpd.service

为使用BIOS(Legacy)的机器配置

  • 需要软件包 SYSLINUX 中的 pxelinux.0 文件

    [[email protected] ~]# cp /media/Packages/syslinux-4.05-15.el7.x86_64.rpm ./
    # 提取软件包
    [[email protected] ~]# rpm2cpio syslinux-4.05-15.el7.x86_64.rpm | cpio -dimv
    [[email protected] ~]# ls -lrt usr/share/syslinux/pxelinux.0
    -rw-r--r--. 1 root root 26759 10月 31 2018 usr/share/syslinux/pxelinux.0
    
  • tftpboot 中创建 pxelinux 目录,并将 pxelinux.0 复制到该目录中

    [[email protected] ~]# mkdir /var/lib/tftpboot/pxelinux
    [[email protected] ~]# cp usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/pxelinux
    
  • pxelinux/ 目录中创建目录 pxelinux.cfg,添加名为 default 的配置文件

    [[email protected] ~]# mkdir /var/lib/tftpboot/pxelinux/pxelinux.cfg
    # 可根据/media/isolinux/isolinux.cfg修改
    ## 设置背景图片,如 menu background splash.png,要将splash.png文件放在pxelinux目录下
    ## 设置菜单风格,如 default vesamenu.c32,要将vesamenu.c32文件放在pxelinux目录下
    ## 这里直接指定从哪个label启动,省去了进入菜单的时间
    [[email protected] ~]# vim /var/lib/tftpboot/pxelinux/pxelinux.cfg/default
    default linux
    prompt 1
    timeout 600
    
    label linux
      menu label ^Install system
      kernel vmlinuz
      append initrd=initrd.img ip=dhcp inst.repo=http://192.168.22.132/centos7.6 inst.ks=http://192.168.22.132/ks.cfg
    
  • 将引导映像复制到 pxelinux/ 目录下

    [[email protected] ~]# cp /media/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/pxelinux/
    [[email protected] ~]# tree /var/lib/tftpboot/pxelinux/
    /var/lib/tftpboot/pxelinux/
    ├── initrd.img
    ├── pxelinux.0
    ├── pxelinux.cfg
    │   └── default
    └── vmlinuz
    
  • 重新载入已运行服务 tftpxinetddhcp

    [[email protected] ~]# systemctl daemon-reload
    [[email protected] ~]# systemctl restart tftp httpd dhcpd
    # 将用到的服务设置为开机自启(已设置过请忽略)
    [[email protected] ~]# systemctl enable tftp httpd dhcpd
    

为使用UEFI的机器配置

  • 需要软件包 shim 中的 shim.efi 文件,和软件包 grub2-efigrubx64.efi 文件

    [[email protected] ~]# cp /media/Packages/shim-x64-15-1.el7.centos.x86_64.rpm ./
    [[email protected] ~]# cp /media/Packages/grub2-efi-x64-2.02-0.76.el7.centos.x86_64.rpm ./
    # 提取软件包
    [[email protected] ~]# rpm2cpio shim-x64-15-1.el7.centos.x86_64.rpm | cpio -dimv
    [[email protected] ~]# rpm2cpio grub2-efi-x64-2.02-0.76.el7.centos.x86_64.rpm | cpio -dimv
    [[email protected] ~]# ls -l boot/efi/EFI/centos/shim.efi
    -rwx------. 1 root root 1205224 11月 10 2018 boot/efi/EFI/centos/shim.efi
    [[email protected] ~]# ls -l boot/efi/EFI/centos/grubx64.efi
    -rwx------. 1 root root 1090976 11月  9 2018 boot/efi/EFI/centos/grubx64.efi
    
  • tftpboot/ 目录中创建 uefi/ 目录,并将 EFI 引导映像复制到该目录下

    [[email protected] ~]# mkdir /var/lib/tftpboot/uefi
    [[email protected] ~]# cp boot/efi/EFI/centos/shim.efi /var/lib/tftpboot/uefi/
    [[email protected] ~]# cp boot/efi/EFI/centos/grubx64.efi /var/lib/tftpboot/uefi/
    [[email protected] ~]# chmod 644 /var/lib/tftpboot/uefi/shim.efi
    [[email protected] ~]# chmod 644 /var/lib/tftpboot/uefi/grubx64.efi
    
  • uefi/ 目录中添加名为 grub.cfg 的配置文件

    # 可根据/media/EFI/BOOT/grub.cfg修改
    [[email protected] ~]# vim /var/lib/tftpboot/uefi/grub.cfg
    set timeout=10
      menuentry 'RHEL 7' {
          
      linuxefi uefi/vmlinuz ip=dhcp inst.repo=http://192.168.22.132/centos7.6 inst.ks=http://192.168.22.132/ks_uefi.cfg
      initrdefi uefi/initrd.img
    }
    
  • pxeboot 引导映像复制到 uefi/ 目录下

    [[email protected] ~]# cp /media/images/pxeboot/{vmlinuz,initrd.img}  /var/lib/tftpboot/uefi/
    [[email protected] ~]# tree /var/lib/tftpboot/uefi/
    /var/lib/tftpboot/uefi/
    ├── grub.cfg
    ├── grubx64.efi
    ├── initrd.img
    ├── shim.efi
    └── vmlinuz
    
  • 重新载入已运行服务 tftpxinetddhcp

    [[email protected] ~]# systemctl daemon-reload
    [[email protected] ~]# systemctl restart tftp httpd dhcpd
    # 将用到的服务设置为开机自启(已设置过请忽略)
    [[email protected] ~]# systemctl enable tftp httpd dhcpd
    

创建Kickstart应答文件

# 操作系统安装后,root家目录下有应答文件anaconda-ks.cfg,可根据要安装的机器情况修改该文件
[[email protected] ~]# cp anaconda-ks.cfg /var/www/html/ks.cfg
[[email protected] ~]# chmod +r /var/www/html/ks.cfg
[[email protected] ~]# ls -l /var/www/html/
total 4
-rw-r--r--. 1 root root 1618 Aug 11 11:23 ks.cfg
drwxr-xr-x. 8 root root  254 Aug 11 10:49 media

# 验证 Kickstart 文件,pykickstart 软件包提供的 ksvalidator 命令
[[email protected] ~]# yum install pykickstart
[[email protected] ~]# ksvalidator ks.cfg

也可以在线编辑,如果有红帽客户门户网站帐户,则可以使用 https://access.redhat.com/labs/kickstartconfig/ 中的 Kickstart Configuration Tool 完成基本配置,并下载得到的 Kickstart 文件。

使用 ksverdiff 命令显示两本版本间 Kickstart 语法的不同。

# -f 指定要比较的第一个发行本,-t 指定要比较的最后一个发行本。
[[email protected] ~]# ksverdiff -f RHEL6 -t RHEL7

使用system-config-kickstart生成应答文件

system-config-kickstart是一款图形化工具,需要桌面环境或X11服务

# 安装system-config-kickstart
[[email protected] ~]# yum install -y system-config-kickstart
# 启动system-config-kickstart
[[email protected] ~]# system-config-kickstart

安装X11

# 服务端安装X11服务,需要重新登录自动生成.Xauthority文件
[[email protected] ~]# yum install -y xorg-x11-xauth
# 中文字体(可选)
[[email protected] ~]# yum install -y google-noto-sans-fonts wqy-unibit-fonts wqy-zenhei-fonts

安装图形界面(不建议)

[[email protected] ~]# yum groups list
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Available Environment Groups:
   Minimal Install
   Compute Node
   Infrastructure Server
   File and Print Server
   Basic Web Server
   Virtualization Host
   Server with GUI
   GNOME Desktop
   KDE Plasma Workspaces
   Development and Creative Workstation
Installed Groups:
   Legacy UNIX Compatibility
   System Administration Tools
Available Groups:
   Compatibility Libraries
   Console Internet Tools
   Development Tools
   Graphical Administration Tools
   Scientific Support
   Security Tools
   Smart Card Support
   System Management
Done

[[email protected] ~]# yum groupinstall -y "Server with GUI"
[[email protected] ~]# cat /etc/inittab
# 查看默认运行级别
[[email protected] ~]# systemctl get-default
# 设置图形化为默认
[[email protected] ~]# systemctl set-default graphical.target
# startx命令切换到图形界面

问题

  • 软件包选择时,出现“由于下载软件包失败, 软件包选择被禁止”错误

    修改Yum配置文件 local.repo,自定义标识源改为 [development]

  • 安装时出现 “no space left on device” 错误

    PXE装机内存最少要2G

参考

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Future_promise/article/details/108287038

智能推荐

嵌入式 交叉编译 php5,为ARM处理器交叉编译php-5.3.6版本_无知的迷途羔羊的博客-程序员宝宝

实际上非常的简单:做个这样的脚本:conf.sh#!/bin/shCC=arm-none-linux-gnueabi-gcc ./configure --target=arm-none-linux-gnueabi --prefix=/usr/local/armphp --enable-debug --disable-cli --enable-zend-multibyte --enable-pdo ...

乙级 PAT 1069. 微博转发抽奖(20)_编程迷悟的博客-程序员宝宝

小明PAT考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔N个人就发出一个红包。请你编写程序帮助他确定中奖名单。输入格式:输入第一行给出三个正整数M(<= 1000)、N和S,分别是转发的总量、小明决定的中奖间隔、以及第一位中奖者的序号(编号从1开始)。随后M行,顺序给出转发微博的网友的昵称(不超过20个字符、不包含空格回车的非空字符串)。注意:可能有人转发多次,但不能中...

java jdk关系_java之JVM,JRE,JDK三者的关系_十一skyi的博客-程序员宝宝

1.为什么要在本地安装JDK,相信很多人都只是为了安装而安装,自己并没有知道其具体原理吧,下面是我学习过程中总结的知识点:JVM是什么:Java Virtual Machine 虚拟机 源文件.java在虚拟机中通过编译器编译成字节码文件.class,是整个java实现跨平台的最核心的部分JRE是什么:java Runtime Environment即java运行环境,作用是运行别人写好的程...

div展开和折叠 php,div慢慢展开与折叠_傅一一的博客-程序员宝宝

22011展开/折叠效果展开jquery SimpleModal Ajax弹出对话框插件,拥有简洁风格的网页弹出层插件,风格设计比较简约大方,可弹出图片、弹出含有HTML代码的div对话框等,类似的效果已有很多,请根据自己的需要采用吧。。时间: 2011-5-2 •浏览: 2687 •分类:标签: 此文暂无标签•...

CMS 触发GC(Allocation Failure)解析之标梵信息_标梵互动的博客-程序员宝宝

针对GC中发生的"Allocation Failure",源码描述为:Allocation Failure is a cause of GC cycle to kick in."Allocation Failure" means that no more space left in Eden to allocate object. So, it is normal cause of young GC.Older JVM were not printing GC cause for minor GC cy

JavaScript中异步/等待的用法和理解_标梵互动的博客-程序员宝宝_js 等待

昨天更新的是“JavaScript中的Promise使用详解”,其实也就是说了下基本用法和自己对Promise的理解,可能有错误之处,也欢迎指出。今天就说一说“JavaScript中的async/await的用法和理解”JavaScript中异步/等待的用法和理解编程语言中任意一个关键字都是有意义的,我们先从字面意思来理解。1.asyncasync 是“异步”的简写,带async关键字的函数,是声明异步函数,返回值是promise对象,如果async关键字函数返回的不是promise,会自动用Pro

随便推点

【STM32+cubemx】0013 HAL库开发:SPI总线访问气压计BMP280/BME280_xiaobaibai_2021的博客-程序员宝宝_bmp280和bme280区别

本节我们介绍stm32的SPI总线接口,并使用SPI接口来访问气压计BMP280。

matlab 64位比32位的内存大多少,电脑刚好4G内存,安装win7是32位好还是64位好?_Momself的博客-程序员宝宝

电脑刚好4G内存,安装64位和32位win7系统差别不是很大,如果cpu性能较好,建议按装win7 64位系统,而如果cpu性能一般,则考虑按照win7 32位系统。一般按装win7 64位系统,不单单可以支持更大的内存,从性能而言比32位系统更强一些。需要注意的是cpu性能越高,越容易发挥64位系统的优势,如果cpu性能较弱,64位系统占用资源较多,整体性能方面反而不如32位系统。4G内存情况下...

mysql emoji 显示源码_MySQL中emoji字符后面的字符串被截断及Chrome中的显示问题_Momself的博客-程序员宝宝

转发了一条微博,里面有个电池的emoji表情,导致微博页面自动抓取并存入MySQL数据库后,emoji表情及后面的所有字符串被截断舍弃,所以最后只显示出了半条微博……搜索后发现,是因为该表情的UTF-8编码占用了4个字节(Unicode为1F50B[11111010100001011],UTF-8为F09F948B[11110000 10011111 10010100 10001011]),而My...

php5中哪几种流程结构,ThinkPHP5(五)_Moo Chak的博客-程序员宝宝

前言本周在进行教程的复习,对一些知识点有了更深的体会因为下周就开始开发了,我觉的下周的技术问题可能会出现特别多所以这周对照着我们的教程,整理了一下我们开发的流程思路。我们的目标:一个开发团队写出的代码,就像一个人写的一样!首先跑起来环境,搭建好数据库开发流程一、找对象分析一下我们的项目需要什么样子的的对象一个系统离不开数据库、数据表,我们需要先分析出系统需要的对象种类、以我们学习的结构为例,我们要...

关于Flash的学习(第一步(后续继续更新))_一个做底层的码农的博客-程序员宝宝

首先对于MX25L3233F型号Flash。指令部分先不说,我先介绍Flash大小换算和擦除部分。首先,我们先明确下此Flash为32M Bit,也就是4M Byte。在文章开头概括时会介绍Flash有多少个扇区对应多大的Byte、多少个块对应多大的Byte。比如这里写到的是总共1024个扇区,每隔扇区4K Byte。所以这里这么计算,就跟Flash大小对应起来了:1024*4(K By...

vue-----路由(router)的全局配置_山竹回家了的博客-程序员宝宝_vue-router全局

vue中的路由一般是指页面跳转的路径,我们需要做的事,将组件(components)映射到路由(routes),然后告诉Vue Router在哪里渲染它们。VueRouter:构造函数,通过它实例化路由模块对象routes:添加路由配置1router:注入路由router-view:路由所映射组件的展示区域router-link:路由超链接$route:获取路由参数,它是一个对象$router:实现路由跳转,以代码的方式来实现一、安装NPM安装:npm install vue-r.

推荐文章

热门文章

相关标签