PXE 网络装机

发布时间:2024年01月19日

linux 操作系统的安装方式

常用的linux安装方式有U盘启动盘安装、光驱安装、PXE远程安装等。

1. U盘启动盘安装

????????u盘启动盘安装是较为常见的linux系统安装方法,要求待安装的计算机BIOS固件支持u盘启动选项,同时提前做好待安装linux系统的u盘启动盘。

2. 光驱安装

????????一般是有正版系统安装光盘,在待安装的计算机启动时,选择CD/DVD/CD-RM Drive... 光盘启动,接下来步骤一般默认选择即可。

3. PXE远程安装

3.1 什么是 PXE

????????PXE 的全称是 preboot execute environment它其实是Intel在很久以前提出来的一项用于通过网络来引导系统的标准。允许客户机通过网络从远程服务器上下载引导镜像,并加载安装文件或者整个操作系统。

pxe是通过网卡引导启动

1.1实现的硬件条件

1.BIOS支持

2.网卡支持(现在基本都已支持)

3.需要在bios中开启开关,服务器一般没打开(bmc界面里打开)

4.网络中有一台 DHCP 服务器以便为客户机自动分配地址、指定引导文件位置 网卡自带DHCP功能 dhcp 指明分配的ip地址

vsftpd tftp

5.服务器通过 tftp服务(简单文件传输协议)来提供系统内核和引导镜像的下载 udp()协议 网卡自带这个功能(不支持其他的远程共享服务)

自带的站点(/var/lib/tftp?)   initrd.img(驱动)   vmlinuz(内核)  
  pxelinux.cfg/default(引导文件)    pxelinux.0(小型的grub程序)   tftp 指明?

4. 系统安装过程

  • 加载boot loader

Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境

  • 加载启动安装菜单

  • 加载内核和initrd系统(文件才能使用文件)

  • 加载根系统()

  • 运行anaconda的安装向导

Linux安装光盘的安装相关文件

在系统光盘的isolinux目录下有和安装相关的文件

  • boot.cat: 相当于grub的第一阶段

  • isolinux.bin:光盘引导程序,在mkisofs的选项中需要明确给出文件路径,这个文件属于SYSLINUX项目

  • isolinux.cfg:启动菜单的配置文件,当光盘启动后(即运行isolinux.bin),会自动去找isolinux.cfg文件

  • vesamenu.c32:是光盘启动后的启动菜单图形界面,也属于SYSLINUX项目,menu.c32提供纯文本的菜单

  • memtest:内存检测程序

  • splash.png:光盘启动菜单界面的背景图

  • vmlinuz:是内核映像

  • initrd.img:ramfs文件(精简版的linux系统,文件系统驱动等)

实现过程讲解

1.网卡需要查找相关的dhcp服务器(获取地址时间)

2.找到后dhcp服务器提供ip地址,和引导程序(boot loader)的地址 还提供给客户机TFTPserver地址(dhcp本身不提供tftp服务)

3.网卡使用tftp客户端吧引导程序加载到内存中来

4.bios执行引导程序

5.引导程序会去TFTP去查找配置文件

6.根据配置文件去引导安装系统

7.系统安装过程

pxelinux.0 引导文件
vmlinuz    内核
initrd.img 虚拟文件系统

搭建过程中服务详解

PXE 远程安装服务器集成了 CentOS 7 安装源、TFTP 服务、DHCP 服务,能 够向客户机裸机发送 PXE 引导程序、Linux 内核、启动菜单等数据,以及提供安装文件。

TFTP服务

????????TFTP(简单文件传输协议):内核和引导文件

????????是一种基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于小型文件传输的应用场合。TFTP服务默认由xinetd服务进行管理,使用UDP69端口。

vsftp:安装系统镜像文件获取方式

????????可以使用http ftp等方式,ftp文件传输的一种。

syslinux

????????syslinux是一个功能强大的引导加载程序,而且兼容各种介质。它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。它的安装很简单,一旦安装syslinux好之后,sysLinux启动盘就可以引导各种基于DOS的工具,以及MS-DOS/Windows或者任何其它操作系统。

DHCP服务

????????分配网址给新加入的主机。

pxe 优点

1.规模化:同时装配多台服务器

2.自动化:安装系统、配置各种服务

3.远程实现:不需要光盘、U盘等安装介质

一、实验具体步骤:

第一步:安装相关软件

[root@localhost ~]#yum install tftp-server   vsftpd   syslinux  dhcp   -y 

第二步:将配置文件模板复制到dhcp目录下

[root@localhost ~]#rpm -qc dhcp
/etc/dhcp/dhcpd.conf
/etc/dhcp/dhcpd6.conf
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
/var/lib/dhcpd/dhcpd.leases
/var/lib/dhcpd/dhcpd6.leases

[root@localhost ~]#cat /etc/dhcp/dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example  //配置文件模板在此目录下
#   see dhcpd.conf(5) man page
#

[root@localhost ~]#find / -name 'dhcpd.conf.example'
/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example

[root@localhost ~]#cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf 
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y    //将模板文件覆盖掉配置文件


[root@localhost ~]#vim /etc/dhcp/dhcpd.conf

subnet 192.168.80.0 netmask 255.255.255.0 {
  range 192.168.80.100 192.168.80.200;
  option routers 192.168.80.2;
  next-server 192.168.80.7;            //指定tftp的服务器地址
  filename "pxelinux.0";               //指定启动文件
  option domain-name-servers  114.114.114.114;
}

第三步:配置 tftp-server?(需要安装 tftp-server)

[root@localhost ~]#vim /etc/xinetd.d/tftp

#每项详解
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = no    //wait no表示客户机可以多台一起连接,yes表示客户机只能一台一台连接,表示是否开启多线程一起工作,否则需要等待
        user                    = root
        server                    = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot    //指定TFTP根目录(引导文件的存储路径) -c允许上传
        disable                 = no   //disable no表示开启TFTP服务 
        per_source              = 11    //通过限制一个主机的最大连接数,从而防止某个主机独占某个服务,这里每个IP地址的连接数是11个
        cps                     = 100 2   //表示服务器最多启动100个连接,如果达到这个数目将停止启动新服务2秒。在此期间不接受任何请求
        flags                   = IPv4
}

第四步:拷贝?引导程序文件 (需要安装 syslinux)

[root@localhost ~]#rpm -ql syslinux |grep pxelinux.0   //安装完成后找到引导程序文件的地址
/usr/share/syslinux/gpxelinux.0

/usr/share/syslinux/pxelinux.0    //就是这个


[root@localhost ~]#cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
//拷贝到站点文件里

第五步:挂载光驱文件到 /var/ftp/centos 文件下 并拷贝文件到站点文件中

[root@localhost ~]#mkdir /var/ftp/centos7
[root@localhost ~]#
[root@localhost ~]#mount /dev/sr0 /var/ftp/centos7/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]#
[root@localhost ~]#cd /var/ftp/centos7/
[root@localhost centos7]#ls
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL

[root@localhost centos7]#cd images/pxeboot/
[root@localhost pxeboot]#
[root@localhost pxeboot]#ls
initrd.img  TRANS.TBL  vmlinuz
[root@localhost pxeboot]#cp initrd.img vmlinuz  /var/lib/tftpboot/
[root@localhost pxeboot]#
[root@localhost pxeboot]#
[root@localhost pxeboot]#cd /var/lib/tftpboot/
[root@localhost tftpboot]#
[root@localhost tftpboot]#mkdir pxelinux.cfg
[root@localhost tftpboot]#cd pxelinux.cfg/
[root@localhost pxelinux.cfg]#
[root@localhost pxelinux.cfg]#vim default

default linux
timeout 600

label linux
        kernel vmlinuz
        append initrd=initrd.img method=ftp://192.168.80.7/centos7



[root@localhost pxelinux.cfg]#cd ..
[root@localhost tftpboot]#
[root@localhost tftpboot]#ls
initrd.img  pxelinux.0  pxelinux.cfg  vmlinuz     #四大文件

第六步:开启服务 关闭防火墙

[root@localhost tftpboot]#systemctl stop firewalld.service
[root@localhost tftpboot]#setenforce 0
[root@localhost tftpboot]#systemctl start dhcpd
[root@localhost tftpboot]#systemctl start tftp
[root@localhost tftpboot]#systemctl start vsftpd

验证:创建一台未有镜像的虚拟机 并设置网络启动(网卡类型要是NAT)内存要 2G 以上

可以看到我们进入到了安装界面,但是这并不是我们想要的。如果有一千台我们就需要配置一千次这种安装界面。这时候我们就需要用到一个软件:Kickstart

二、kickstart 无人值守安装

kickstart文件主要包括三个部分:命令段,程序包段,脚本段

命令段:指明各种安装前配置,如键盘类型等

命令段中的常见命令:

keyboard: 设定键盘类型

lang: 语言类型

zerombr:清除mbr

clearpart:清除分区

part: 创建分区

rootpw: 指明root的密码

timezone: 时区

text: 文本安装界面

network:指定网络设置

firewall:设置防火墙设置

selinux:设置selinux设置

reboot:安装完自动重启

user:安装完成后为系统创建新用户

url: 指明安装源

程序包段:指明要安装的程序包组或程序包,不安装的程序包等

 %packages

 @^environment group: 指定环境包组,如:@^minimal-environment

 @group_name

 package

 -package

 %end

脚本段:

 %pre: 安装前脚本 

 %post: 安装后脚本


%post
useradd wang
%end

注意:

CentOS 8,7,6 不同版本的kickstart文件格式不尽相同,不可混用

[root@localhost tftpboot]#yum install system-config-kickstart -y
#安装图形化工具

2.1 基本配置

1. 基本配置?

2. 选择安装方法:

3. 引导文件

4. 分区

5. 防火墙配置

6. 取消图形化安装

7. 保存

回到xshell??

[root@localhost pxelinux.cfg]#cd /var/lib/tftpboot/pxelinux.cfg
[root@localhost pxelinux.cfg]#
[root@localhost pxelinux.cfg]#ls
default
[root@localhost pxelinux.cfg]#vim default


default linux
timeout 600

label linux
        kernel vmlinuz
        append initrd=initrd.img method=ftp://192.168.80.7/centos7 ks=ftp://192.168.80.7/ks.cfg



[root@localhost pxelinux.cfg]#systemctl restart tftp

验证:继续网络启动

添加配置文件

[root@localhost pxelinux.cfg]#cd /var/ftp/
[root@localhost ftp]#ls
#查看应答文件
centos7  ks.cfg  pub
[root@localhost ftp]#cd 
#回到家目录
[root@localhost ~]#ls
abc.txt  anaconda-ks.cfg  initial-setup-ks.cfg  公共  模板  视频  图片  文档  下载  音乐  桌面
#anaconda-ks.cfg 应答文件模板  复制里面的软件包
%packages
@^minimal
vim-enhanced
wget
curl
tree
%end

root@localhost tftpboot]#cd /var/ftp/
[root@localhost ftp]#vim ks.cfg 
#复制到 自己的ks文件中


[root@localhost ftp]#cd /var/lib/tftpboot/
[root@localhost tftpboot]#ls
initrd.img  menu.c32  pxelinux.0  pxelinux.cfg  vmlinuz
[root@localhost tftpboot]#cd pxelinux.cfg
[root@localhost pxelinux.cfg]#vim default 
#将应答文件 位置指明

default linux
timeout 600

label linux
        menu label Auto Install CentOS Linux ^7
        kernel vmlinuz
        append initrd=initrd.img method=ftp://192.168.80.7/centos7 ks=ftp://192.168.80.7/ks.cfg


#以下可以不用加
label text
        kernel vmlinuz
        append text initrd=initrd.img method=ftp://192.168.100.100/centos7


label rescue
        kernel vmlinuz
        append rescue initrd=initrd.img method=ftp://192.168.100.100/centos7


[root@localhost ftp]#cd /usr/share/syslinux/
[root@localhost syslinux]#ls
altmbr.bin     dosutil       ifcpu64.c32         kbdmap.c32   pcitest.c32     syslinux.com
altmbr_c.bin   elf.c32       ifcpu.c32           linux.c32    pmload.c32      syslinux.exe
altmbr_f.bin   ethersel.c32  ifplop.c32          ls.c32       poweroff.com    ver.com
cat.c32        gfxboot.c32   int18.com           lua.c32      pwd.c32         vesainfo.c32
chain.c32      gptmbr.bin    isohdpfx.bin        mboot.c32    pxechain.com    vesamenu.c32
cmd.c32        gptmbr_c.bin  isohdpfx_c.bin      mbr.bin      pxelinux.0      vpdtest.c32
config.c32     gptmbr_f.bin  isohdpfx_f.bin      mbr_c.bin    reboot.c32      whichsys.c32
cpuid.c32      gpxecmd.c32   isohdppx.bin        mbr_f.bin    rosh.c32        zzjson.c32
cpuidtest.c32  gpxelinux.0   isohdppx_c.bin      memdisk      sanboot.c32
diag           gpxelinuxk.0  isohdppx_f.bin      memdump.com  sdi.c32
disk.c32       hdt.c32       isolinux.bin        meminfo.c32  sysdump.c32
dmitest.c32    host.c32      isolinux-debug.bin  menu.c32     syslinux64.exe
[root@localhost syslinux]#cp menu.c32 /var/lib/tftpboot/
#将菜单背景加入
default menu.c32
prompt 1
#timeout 600

label auto
        #menu label Auto Install CentOS Linux ^7
        #加入这句话就可以了

三 、Cobbler 的工作原理

  • client裸机配置了从网络启动后,开机后会广播包请求DHCP服务器(cobbler server)发送其分配好的一个IP

  • DHCP服务器(cobbler server)收到请求后发送responese,包括其ip地址

  • client裸机拿到ip后再向cobbler server发送请求OS引导文件的请求

  • cobbler server告诉裸机OS引导文件的名字和TFTP server的ip和port

  • client裸机通过上面告知的TFTP server地址通信,下载引导文件

  • client裸机执行执行该引导文件,确定加载信息,选择要安装的os,期间会再向cobbler server请求kickstart文件和os image

  • cobbler server发送请求的kickstart和os iamge

  • client裸机加载kickstart文件

  • client裸机接收os image,安装该os image

3.1 实际操作

安装相关包并启动服务

[root@centos7 ~]#yum install epel-release.noarch -y
[root@centos7 ~]#yum install cobbler dhcp httpd   -y
[root@centos7 ~]#systemctl enable --now cobblerd httpd tftp dhcpd
修改cobbler相关的配置

#根据以上提示,只需要做1,2,8这三项即可


1: /etc/cobbler/settings中的server'字段必须设置为localhost以外的东西,否则kickstarting功能将无法工作。这应该是引导服务器的可解析主机名或IP,所有使用它的计算机都可以访问它。


2:为了使PXE正常工作,/etc/cobbler/settings中的'next_server'字段必须设置为127.0.0.1以外的东西,并且应该与PXE网络上的引导服务器的IP相匹配。


8:新安装机器的样例模板使用的默认密码(default_password_crypted in /etc/cobbler/settings)仍然设置为'cobbler',应该更改,尝试:"openssl passwd -1 -salt 'randomphrase-here' 'your-password-here'"来生成新的密码

先 生成新密码:

[root@localhost ~]#openssl passwd -1 '123123'
$1$xMGPentx$fthotXAtZ4QGhoP/SYHVh1

使用??vim /etc/cobbler/settings 修改下面五行

default_password_crypted: "$1$1spuisnh$j34LNmyTQWs3l6xKxCZY60"
next_server:< tftp服务器的 IP 地址>   192.168.91.100
server:<cobbler服务器的 IP 地址>
manage_dhcp:1 ?#设置为1,表示通过cobbler生成dhcpd.conf配置文件
pxe_just_once: 1 #设置为1,防止重复安装系统

一、

[root@localhost ~]#vim +101 /etc/cobbler/settings
#复制后使用此命令粘贴即可

二、

[root@localhost ~]#vim +278 /etc/cobbler/settings

next_server: 192.168.80.7

三、

[root@localhost ~]#vim +390 /etc/cobbler/settings

server: 192.168.80.7

四、

[root@localhost ~]#cat /etc/cobbler/settings|grep -n 'manage_dhcp:'
242:manage_dhcp: 0

#设置为1,表示通过cobbler生成dhcpd.conf配置文件


[root@localhost ~]#vim +242 /etc/cobbler/settings
manage_dhcp: 1

五、

[root@localhost ~]#cat /etc/cobbler/settings|grep -n 'pxe_just_once:'
298:pxe_just_once: 0

#设置为1,防止重复安装系统


[root@localhost ~]#vim +298 /etc/cobbler/settings
pxe_just_once: 1
实现dhcp服务
#修改dhcp的模版文件下面的行,用来生成dhcp的配置文件
[root@centos7 ~]#vim /etc/cobbler/dhcp.template

subnet 192.168.80.0 netmask 255.255.255.0{
     option routers             192.168.80.2;
     option domain-name-servers 8.8.8.8;
     option subnet-mask         255.255.255.0;
     range dynamic-bootp        192.168.80.100 192.168.80.200;
     default-lease-time         21600;
     max-lease-time             43200;
     next-server                192.168.80.7;

#自动生成dhcp配置文件并启动

[root@centos7 ~]#cobbler sync

导入CentOS系统的安装文件,生成相应的YUM源
[root@localhost /]#mount /dev/sr0 /mnt

[root@centos7 ~]#cobbler import --name=centos-7-x86_64 --path=/mnt --arch=x86_64



#也可以在导入yum源的同时进行关联自定义的kickstart文件
[root@centos7 ~]#cobbler import --name=centos-7.7-x86_64 --path=/mnt --arch=x86_64 --kickstart=/var/lib/cobbler/kickstarts/centos7.cfg


[root@centos7 ~]#du -sh /var/www/cobbler/ks_mirror/*
#查看 生成情况



#设置默认安装菜单, 这样未装系统的设备会自动从pxe引导启动你需要安装的系统, 不需要再手动接显示器选了

[root@centos7 ~]#cobbler system add --name=default --profile=centos-7-x86_64

验证:

文章来源:https://blog.csdn.net/fhjtg/article/details/135647043
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。