dhcp、tftp及pxe简介

 

pxe安装注意问题(注:这里只是我自己踩过的坑)

1、防火墙要关闭

2、如果使用pxe安装虚拟机,则需要客户端的内存大于1G

 

 

 

DHCP:

全称:Dynamic Host Configuration Protocol  动态主机配置协议

DHCP配置内容:

IP/Netmask

Gateway

DNS Server

 

bootp: boot protocol --> dhcp  动态指派IP,永久有效

租约:即使用期限,DHCP服务器为客户端分配IP后,客户端使用IP地址是有期限的

2hours:假如租约期限为2小时

50%: 1hours --> 2hours        过了一个小时之后就要续租

50%1hours --> 2hours   续租后又过了一个小时,就再续租,如果不用的时候,地址会自动被释放

75%: 0.5hours --> 2hours

87.5%: 0.25hours --> 2hours

dhcp discover   如果租约快要到期一直无法续租就要提前广播寻找DHCP服务器

RARP:(Reverse Address Resolution Protocol),是一种网络协议互联网工程任务组(IETF)在RFC903中描述了RARP。RARP使用与ARP相同的报头结构,作用与ARP相反。                            RARP用于将MAC地址转换为IP地址。其因为较限于IP地址的运用以及其他的一些缺点,因此渐为更新的BOOTPDHCP所取代。

RARP工作原理  

  1. 源主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;
  2. 本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
  3. 如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;
  4. 如果不存在,RARP服务器对此不做任何的响应;
  5. 源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。

DHCP的工作流程:

在客户端关机的时候地址是被释放的了,所以客户端开机后要重新做地址获取。地址获取是通过RARP协议获取的,所以客户端广播请求DHCP服务为其分配一个IP地址。分以一下4个步骤,都是以广播的方式进行的。

1Client: dhcp discover客户端发送广播寻找DHCP服务器

2Server: dhcp offer(IP/netmask, gw)  DHCP服务器端收到广播报文后会做出响应,提供与客户端MAC匹配的IP/network,gw

3Clientdhcp request  客户端选择DHCP服务器提供的IP后,要发出一个广播说采用了哪个IP。假如采用了DHCP服务器1的提供的IP,那么这台服务器就要在地址池中删除这次被采用的地                                                 址。而没有被采用的IP,DHCP服务器会回收过来 

                                             (有两种情况:1:多台DHCP服务器同时响应客户端的广播请求为客户端提供IP,2:客户端MAC相匹配的IP已经被占用)

4Server: dhcp ack DHCP  被选定地址的服务器确认

 

续租:是以单播的方式

Client: dhcp request   客户端直接给DHCP服务器发送请求采用续租的地址

服务器的响应分两种情况,一种是响应并续租地址,一种的拒绝续租

Server: dhcp ack        服务器端响应,

       Server: dhcp nak       DHCP服务器拒绝续租,如果DHCP服务器拒绝续租,有可能DHCP服务器上的地址范围被修改了,客户端请求续租的地址不在此范围内

 

假如公司的网络做了两个区域,一个区域是财务,另一个区域是技术部门,彼此之间使用路由器链接。在财务部门的网络区域中提供了一台DHCP服务器,所以财务部门获取IP地址是没有问题。但技术部门如何获取IP地址?由于路由器是广播报文的屏障,所以财务部门这边的DHCP服务器是无法收到技术部门的客户端发送的广播。那么如何才能让DHCP服务器为技术部门的客户端分配地址呢?由于DHCP协议是可以被中继的,但是需要路由器开启中继功能,即路由器在右侧网络接口上安装一个提供DHCP服务的程序,这里称为A,监听在某个接口上接收技术部门客户端的请求并分配地址。所以技术部门的客户端广播的时候路由器的A是可以接收到广播报文的。但路由器是没有DHCP功能的,所以路由器在收到报文后会定向单播给财务部门的DHCP服务器,DHCP服务器收到路由器的报文后,会定向把响应报文定向单播给路由器,路由器接收响应报文后再有A把此报文广播给技术部门的客户端。技术部门的客户端接收到IP地址后会再广播一个request,路由器接会把这个广播报文封装后再次单播给DHCO服务器。DHCP服务器接收到报文后再次单播给路由器,路由器A再次广播给技术部门的客户端。

问题:

1、DHCP服务器本身有地址,同时DHCP服务器自己的地址是不能动态分配的。

2、DHCP服务器应该跟财务部门一体。首先先满足财务部门客户端的需求,才能提供其他网络提供DHCP服务。

为每一个网络提供地址服务的功能称为作用域。所谓作用域就是能够为哪些网络提供地址池列表,从而能够完成地址分配。首先保证本地作用域,才能为其他网络提供。

 

Linux DHCP协议的实现程序:dhcp, dnsmasq

dnsmasq既可以配置成DNS转发器又可以作为DHCP server使用

# yum info dnsmasq

Dnsmasq is lightweight, easy to configure DNS forwarder and DHCP server.
: It is designed to provide DNS and, optionally, DHCP, to a small network.
: It can serve the names of local machines which are not in the global
: DNS. The DHCP server integrates with the DNS server and allows machines
: with DHCP-allocated addresses to appear in the DNS with names configured
: either in each host or in a central configuration file. Dnsmasq supports
: static and dynamic DHCP leases and BOOTP for network booting of diskless
: machines.

Linux也可以充当DHCP中继器

 

# yum install dhcp     //提供了两个守护进程,dhcp服务器和dhcp中继器,且二者取其一

/etc/dhcp/dhcpd.conf      //配置文件
/etc/dhcp/dhcpd6.conf
/etc/dhcp/scripts
/etc/dhcp/scripts/README.scripts
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
/usr/bin/omshell
/usr/lib/systemd/system/dhcpd.service 
/usr/lib/systemd/system/dhcpd6.service
/usr/lib/systemd/system/dhcrelay.service
/usr/sbin/dhcpd      -->   /etc/rc.d/init.d/dhcpd(centos6)   //启动进程
/usr/sbin/dhcrelay  -->   /etc/rc.d/init.d/dhcrelay     //中继器不需要配置文件

 

如何配置使用DHCP

# cat /etc/dhcp/dhcpd.conf   //是一个空文件

#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example   //这里有一个模板
# see dhcpd.conf(5) man page
#

# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf    //把模板copy过来用

# vim /etc/dhcp/dhcpd.conf

在dhcpd.conf配置文件中:如果定义了多个option,那么范围最小的option优先级最高

subnet {   //每一个subnet用来定义一个子网,在windows中叫作用域,所以地址池就是在子网中定义的,每一个地址再分配是,额外的属性如网关、DNS服务器等都

    ...    //通过option指定,而option既可以放在subnet之外也可以放在subnet之内,如果option放在subnet之外,则全局有效,对每一个subnet都有效。

}

host {     //固定分配给某一个主机的保留地址,有些主机来请求IP地址,都期望使用固定地址,这个地址不在地址池中,而是额外保留给某个主机使用

    ...

}

share-network {  //超级作用域,把多个对应的地址网段在同一个池中进行同一分配

#option指明除了地址和掩码以外分配的其他属性,既可以定义在全局位置,也可以定义在subnet中

option domain-name "example.org";   //搜索域,比如在主机上#ping www,这时候是不通的,如果在此处定义了搜索域,他会在www后面自动补全的
option domain-name-servers ns1.example.org, ns2.example.org;   //域名服务器,如果是域名,则需要先把域名转换成IP地址,再分配给客户端,因为客户端本来就没有域名服务器指向,没办法解析

#全局配置选项

default-lease-time 600; //默认租约期限,单位是秒钟,比如改为1天86400,后面必须是分号结尾

max-lease-time 7200; //最大租约期限

log-facility local7;  //日志

 

subnet 10.152.187.0 netmask 255.255.255.0 {    //先满足本子网,再服务其他网段。这里是为10.152.187.0分配IP地址,注意:这里定义的网络一定是配置文件当前主机所在的网络

range  10.152.187.120 10.152.187.130;     //指明起始地址和结束地址,叫地址池,这里一共定义了10个地址

}

 

对本机的dhcpd.conf进行修改

option domain-name "dongshi.com";
option domain-name-servers 8.8.8.8,8.8.4.4;

default-lease-time 86400;
max-lease-time 86400;

log-facility local7;

  subnet 192.168.184.0 netmask 255.255.255.0 {
     range 192.168.184.130 192.168.184.160;
  }

 

:.,$s/^[^#]/#/g     //然后把后面的不以#开头的内容加上#号

# systemctl start dhcpd   //  启动

监听在udp的67号端口

在另外一个主机上进行测试

# dhclient -d  //用另一个主机以工作于前台的方式动态获取地址,dhclient进程只能启动一次

此时绑定的192.168.184.130是可以登录的,客户端监听在68号端口上

如何知道DHCP服务器把地址分配给哪个主机?

# cat /var/lib/dhcpd/dhcpd.leases   //记录了DHCP的租约位置

# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.2.5

server-duid "\000\001\000\001#\260\371l\000\014)\316\370\004";

lease 192.168.184.130 {             //130地址被分配到MAC地址是最下面一行的主机
  starts 6 2018/12/22 13:41:57;     //租约的起始时间
  ends 0 2018/12/23 13:41:57;       //租约的到期时间
  cltt 6 2018/12/22 13:41:57;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 00:0c:29:67:09:fe;    //被分到IP地址的主机的MAC地址
}
lease 192.168.184.145 {
  starts 6 2018/12/22 13:47:32;
  ends 0 2018/12/23 13:47:32;
  cltt 6 2018/12/22 13:47:32;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 00:0c:29:cf:00:6b;
}

 在node2上查看绑定的地址

在node3上查看绑定的地址

如何分配网关呢?

# vim dhcpd.conf   //编辑配置文件指定网关

option domain-name "dongshi.com";
option domain-name-servers 8.8.8.8,8.8.4.4;
option routers 192.168.184.141;        //添加此行,放在这里是全局使用,如果有subnet的话,也可以把option放在指定的subnet中,一般routers都是定义在subnet中

# systemctl restart dhcpd

再在node2上查看网关,依然没有,因为dhclient功能有限,所以在设置node2网络采用内部网关通道,自定义下的VMnet2

这里未能实验成功

如何指定DNS服务器?

在/etc/dhcp/dhcpd.conf配置文件中已经定义了

可以在利用动态获取IP地址的主机进行查看

# cat /etc/resolv.conf   //这个文件是自动覆盖的

如果不想使用DHCP服务器端分配的地址,该怎么做?在网卡设备的配置文件中进行设置

# vim /etc/sysconfig/network-scripts/ifcfg-eth0

PEERDNS=no   //添加此行,此时再查看#cat /etc/resolv.conf中的就没有变化  https://www.jianshu.com/p/63153f37158c

当在eth接口启用DHCP后,本地resolv.conf文件将被修改,resolv.conf文件中的DNS地址将被改为从DHCP获取到的地址。这种从DHCP获得的DNS即是Peer DNS。

启用DHCP后即便修改/etc/resolv.conf,不久又恢复成原样。如何解决这个问题?此时,你得要在 /etc/sysconfig/network-scripts/ifcfg-eth0 内,增加一行:『PEERDNS=no』,然后重新启动网络即可。

其它配置选项:https://www.jianshu.com/p/2cbebcb7a00f

filename:指明引导文件名称,用于指定PXE的运行程序文件,一般是在TFTP服务器的工作目录下,这个是关于PXE启动的配置。流程如下:

    1. 客户机通过网络启动,一般采用的就是intel的PXE来启动;

    2. PXE首先指定DHCP,获取自身IP地址、TFTP服务器或者NFS服务器的IP地址、PXE程序等内容;

    3. 执行获取的PXE程序,获得详细配置内容,再获取linux虚拟系统和intrid等内容;

    4. 最后加载整个linux系统到内核。

next-server server-name(一般是IP):客户端启动后,获得了IP地址,会加载引导文件,这里就定义提供引导文件的服务器IP地址,默认是0.0.0.0

       group {
         filename "Xncd19r";      //指明文件名,一般是绝对路径
         next-server ncd-booter;  //指明主机,即通过ncd-booter主机加载Xncd19r文件,注意:这个主机通常是TFTP server

         host ncd1 { hardware ethernet 0:c0:c3:49:2b:57; }
         host ncd4 { hardware ethernet 0:c0:c3:80:fc:32; }
         host ncd8 { hardware ethernet 0:c0:c3:22:46:81; }
       }

如何提供TFTP服务器

TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。

TFTP是一个传输文件的简单协议,它基于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的。此协议设计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。

# yum install tftp-server

# rpm -ql tftp-server        //查看安装文件

/etc/xinetd.d/tftp      //配置文件,超级进程管理下的一个瞬时守护进程
/usr/lib/systemd/system/tftp.service   //启动脚本
/usr/lib/systemd/system/tftp.socket
/usr/sbin/in.tftpd      //启动程序
/usr/share/doc/tftp-server-5.2
/usr/share/doc/tftp-server-5.2/CHANGES
/usr/share/doc/tftp-server-5.2/README
/usr/share/doc/tftp-server-5.2/README.security
/usr/share/man/man8/in.tftpd.8.gz
/usr/share/man/man8/tftpd.8.gz
/var/lib/tftpboot

由于in.tftpd进程是一个超级进程管理下的瞬时守护进程,如果在centos6上启动,需要做以下工作

# chkconfig tftp on

# service xinetd restart

# netstat -unlp  //就可以看到

在centos7上进行配置

# vim /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    //此处改为no
    per_source      = 11
    cps         = 100 2
    flags           = IPv4
}

# systemctl restart xinetd   //重新启动守护进程

Failed to restart xinetd.service: Unit not found.  //如果显示此错误信息

# yum -y install xinetd     //安装此程序

# service xinetd restart   //也可以直接在centos7上使用centos6的启动服务命令
   Redirecting to /bin/systemctl restart xinetd.service  

# vim /etc/xinetd.d/tftp   //在centos7中修改此文件

disable     =yes   //此处改为yes

# service xinetd restart    //重新启动守护进程

# systemctl start tftp   //此时是无法启动的,所以依然安装上面的方法把disable后面的值改为no,再利用# systemctl restart xinetd进行启动

# rpm -ql tftp-server   //对应目录下有

/var/lib/tftpboot   //提供文件访问的根目录,文件映射的根目录,即通过tftp server访问的所有文件都在这个目录下

# cp /etc/fstab /var/lib/tftpboot/    //将fstab文件复制到此目录下,然后利用另外一台主机访问tftp server,查看此目录下的的文件

# yum install tftp   //适用192.168.184.142进行访问,但首先需要在此主机上安装tftp客户端程序包

tftp [ options... ] [host [port]] [-c command]   //通过man文档可以看出是指明主机和端口即可

# tftp 192.168.184.141   //这里指指明主机IP,使用get下载文件后,直接退出,可以在根目录即/root目录下看到下载的文件

 

以上就是TFTP server的配置和使用,非常简单

PXE配置和使用

重要:https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/installation_guide/index

 

PEX:Preboot eXecution Environment    wiki.archlinux.org/index.php/PXE_(简体中文)   zh.wikipedia.org/wiki/预启动执行环境

PXE可以让客户端从服务器端加载域引导启动文件即DHCP服务器上指定的filename文件,把这个文件下载到客户端本地,并基于这个文件引导启动客户端操作系统。

依赖于dhcp服务(提供地址),tftp服务(提供文件),yum源(提供操作系统的安装文件,可以是ftp服务或http服务)

预启动执行环境也被称为预执行环境,提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。

通过使用像网际协议(IP)、用户数据报协议(UDP)、动态主机设定协定(DHCP)、小型文件传输协议(TFTP)等几种网络协议全局唯一标识符(GUID)、通用网络驱动接口(UNDI)、通用唯一识别码(UUID)的概念并通过对客户机(通过PXE自检的计算机)固件扩展预设的API来实现目的。

PXE客户机(client)这个术语是指机器在PXE启动过程中的角色。一个PXE客户机(client)可以是一台服务器、桌面级计算机、笔记本电脑或者其他装有PXE启动代码的机器。

协议

PXE 协议大致上结合了DHCP和TFTP,虽然都有在两者上面有改进。DHCP用于查找合适的启动服务器,TFTP用于下载初始引导程序和附加文件。

为了开始一个PXE自检会话,PXE固件广播一个带有明确的PXE选项DHCPDISCOVER包(扩展DHCPDISCOVER)到67/UDP端口(DHCP服务端口)。PXE选项是PXE固件有PXE能力的鉴定,但是会被一般的DHCP服务忽略。当固件受到从这样的服务受到DHCPOFFER包时,它会通过要求其提供配置信息来自我配置。

DHCP代理

当PXE重定向服务(DHCP代理)收到一个扩展DHCPDISCOVER 包时,它会通过发送一个带有明确的PXE选项DHCPDISCOVER包到PXE客户机的68/UDP端口 (DHCP 客户机端口)来回答。 一个扩展DHCPDISCOVER包主要包含:

    • 一个PXE发现控制领域,以决定是使用多播广播(网路)单播来联系PXE启动服务器。
    • 一个列出可用的PXE启动服务器类型的地址表。
    • 一个代表每个PXE启动服务器类型的条目单。
    • 一个带有提示用户按下哪一个键来看到启动菜单的PXE启动菜单
    • 一个超过多长时间就启动第一启动菜单的超时数值。

一个DHCP代理服务可能在相同的主机上运行一个标准的DHCP服务器。尽管两个服务不可以共享67/UDP 端口,DHCP代理服务在4011/UDP 端口上运行,要求从客户端来的DHCPDISCOVER 包变成DHCPREQUEST 包。标准DHCP服务在其发送的DHCPOFFER 包中加入特殊的PXE 选项组合,这样PXE客户端知道可以在同一个主机的 4011/UDP 端口找到一个DHCP代理服务。

联系启动服务

和一个正在启动系统的启动服务联系必须有一个IP地址(可能来自DHCP服务)。

通过多播单播一个带有特殊的PXE选项的 DHCPREQUEST 包(扩展DHCPREQUEST包)到 4011/UDP端口,或者广播(网路)这种包到 67/UDP端口。这种包包含有PXE启动服务类型和PXE启动层,一个守护进程允许运行多个启动服务类型。 一个扩展 DHCPREQUEST包可能是一个DHCPINFORM包。

配置实例(环境是:centos7)

首先准备DHCP服务器,并指明通过那台服务器让客户端加载所需要用到的引导文件,通过网络引导Linux安装的文件叫pxelinux.0,由syslinuxe提供

# yum install syslinux   //需要安装

# rpm -ql syslinux | grep -w pxelinux.0

/usr/share/syslinux/pxelinux.0  //需要把这个文件复制到tftp的所能够提供文件的目录里面去,即上面讲到的/var/lib/tftpboot

# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/   

另外

需要把发行版操作系统所提供的光盘提供的isolinux和/images/pxeboot目录中的文件复制到/var/lib/tftpboot目录下,三种方法:

1、登录centos的官方网站,找到yum源,里面有iso目录

2、使用U盘制作了启动盘,直接从windows可以看到isolinux和/images/pxeboot文件,可以用ssh复制到虚拟机中。

3、把U盘制作启动盘或者直接把制作好的光盘挂载到主机上,找到/isolinux和/images/pxeboot目录 

   https://jingyan.baidu.com/article/6525d4b163d167ac7c2e9443.html

首先把鼠标指向所要挂载的wmvare虚拟机里,插入成功后会有如下显示

# fdisk -l

# mount /dev/sdb4 /mnt/    //挂载U盘到/mnt目录下

# cd /mnt   //可以看到/images/pxeboot文件,把此目录下的initrd.img和vmlinuz文件复制到/var/lib/tftpboot目录下

 

# cp vmlinuz initrd.img /var/lib/tftpboot/                  //先复制/images/pxeboot目录下的文件

# cp boot.cat vesamenu.c32 splash.png /var/lib/tftpboot/    //复制isolinux下面的文件

# mkdir /var/lib/tftpboot/pxelinux.cfg                      //创建目录

# cp isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default    //复制isolinux下面的文件isolinux.cfg到此目录,并命名为default

下面配置dhcpd.conf文件

# vim /etc/dhcp/dhcpd.conf

subnet 192.168.184.0 netmask 255.255.255.0 {
    range 192.168.184.160 192.168.184.170;
    option routers 192.168.184.167;
    filename "pxelinux.0";          //引导文件
    next-server 192.168.184.141;    
}

# systemctl restart dhcpd  //重启服务

下面新建一个虚拟机

启动虚拟机,然后选择Install Centos 7

首先此主机先动态申请IP,

启动过程完成,如果有kickstart文件的话,就可以直接启动安装过程

为了能够完整的启动,可以找一台主机(这里是DHCP服务器192.168.184.141)配置为一个web服务器或者ftp服务器来提供yum源

一、       http://hmli.ustc.edu.cn/doc/linux/centos-autoinstall.htm

# yum install httpd

# mkdir /var/www/html/centos7   //可以把刚才配置的U盘挂在至此目录下,当作本地yum源使用

# mount --bind /mnt/ /var/www/html/centos7/      //因为之前已经把U盘挂载至/mnt目录下,所以直接用bind至/var/www/html/centos7/   

 

二、

# vim /var/www/html/centos7.cfg   //提供kickstart文件,这个目录在httpd服务的目录下

实验所有ks文件

 

 1 auth --enableshadow --passalgo=sha512
  2 install
  3 url --url="http://192.168.128.131/centos7/"
  4 text
  5 firstboot --disable
  6 firewall --disabled
  7 ignoredisk --only-use=sda
  8 # Keyboard layouts
  9 keyboard --vckeymap=us --xlayouts='us'
 10 # System language
 11 lang en_US.UTF-8
 12 
 13 # Network information
 14 network  --bootproto=dhcp --device=ens33 --ipv6=auto --activate
 15 network  --hostname=localhost.localdomain
 16 reboot
 17 # Root password
 18 rootpw --iscrypted $6$N2EKWmWYNJhq64I6$KgBYf9dG9vPprEDc.DS/fpkqawRS69qqG1sAaJm7BpqcBmafVYX9qU.Zoy7TT/Zp4rK9AC/6ksGvW.GalD.CD/
 19 selinux --disabled
 20 # System services
 21 services --enabled="chronyd"
 22 skipx
 23 # System timezone
 24 timezone Asia/Shanghai
 25 # System bootloader configuration
 26 bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
 27 # Partition clearing information
 28 clearpart --all --initlabel
 29 part /boot --fstype="ext4" --ondisk=sda --size=512
 30 part / --fstype="ext4" --ondisk=sda --size=2850
 31 
 32 %packages
 33 @^minimal
 34 @core
 35 chrony
 36 kexec-tools
 37 
 38 %end
 39 
 40 %addon com_redhat_kdump --enable --reserve-mb='auto'
 41 
 42 %end

对ks.cfg文件进行检查

# yum -y install pykickstart

[root@node1 html]# pwd
/var/www/html
[root@node1 html]# ksvalidator centos7.cfg    //此处无错误输出表示ks文件没有问题

可参考KS文件

 

setform=x86, AMD64, 或 Intel EM64T
#version=CentOS7
# Install OS instead of upgrade #全新安装而不是升级
xconfig --startxonboot
keyboard --vckeymap=cn --xlayouts='cn'
reboot
# Root password
rootpw --iscrypted $1$y10oqPAp$qCWLZ7KzL/QgFYlg3C2R10 #采用加密记录
#rootpw --plaintext 123456 #采用明文记录
# System language
timezone Asia/Shanghai
url --url="http://192.168.184.141/centos7"    //这里修改为本地yum源的路径,即httpd服务提供的页面路径
lang en_US

network --bootproto=dhcp --device=eth0
# System authorization information #设定NIS信息
auth  --useshadow  --passalgo=123456
# Use text mode install #安装方式,文本界面,图形的话graphy
text
firstboot --disable
# SELinux configuration #关闭SELinux
selinux --permissive
# Do not configure the X Window System #不配置X图形界面
#skipx

# Use NFS installation media #设定安装方式
#nfs --server=192.168.100.254 --dir=/centos
# Use http installation source
#url --url=http://192.168.100.254/centos/7/
# Network information #采用DHCP获取IP
#network  --bootproto=dhcp
#reboot
# System timezone
#timezone Asia/Shanghai
# System bootloader configuration
ignoredisk --only-use=sda
bootloader --location=mbr --boot-drive=sda
# Partition clearing information #清除原有分区
clearpart --all
# Disk partitioning information
part / --fstype="xfs" --size=10000
part /boot --fstype="xfs" --size=200
part swap --fstype="swap" --size=8000
part /tmp --fstype="xfs" --grow --size=1

%packages #设定所需要的软件包,按需要调整
@base #@表示一组软件包
@network-server
@performance
@system-admin-tools
sdparm
tree
tuned
tuned-utils
ypbind
nfs-utils
vim-enhanced
#-表示从默认软件包的需要去除的软件包
-lvm2
-nano
-pcmciautils
-plymouth
-rfkill
-rsync
-system-config-firewall-tui
-system-config-network-tui
-unzip
-vconfig
-wireless-tools
%end #%packages结尾

%pre #预案装脚本,非必须
date
%end #%pre结尾

%post #安装后脚本,非必须
cat >>/root/.bashrc <>/etc/fstab
%end #%post结尾rver 3.centos.pool.ntp.org iburst                         

# systemctl restart httpd

# cd /var/lib/tftpboot/

# vim /var/lib/tftpboot/pxelinux.cfg/default //定义刚开始启动时引导过程显示的内容的

.......
label linux menu label
^Install CentOS 7 kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet ks=http://192.168.184.141/centos7.cfg //在此段添加ks=,但是此处是之前用USB安装的文件,需要对此做一下修改,不然会出错
.......

# systemctl restart xinetd

# systemctl restart dhcpd

# sync

此时dhcp服务器192.168.184.141主机挂载的U盘一直在持续闪烁,表示在工作,但是此次实现没有完成,应该是kickstart没有配置正确,待后续

总结上述步骤

PXE:preboot execute environment, Intel

dhcp, tftp, file server(yum repository)

 

CentOS 6 PXE:

yum -y install syslinux tftp-server

 

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

cp /media/cdrom/images/pxelinux/{vmlinuz,initrd.img} /var/lib/tftp/boot/

cp /media/cdrom/isolinux/{boot.cfg,vesamenu.c32,splash.png} /var/lib/tftp/boot/

mkdir /var/lib/tftpboot/pxelinux.cfg/

cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default/

 

以上配置是centos6的,下面配置自动安装的另外一种方法是centos7的,基于以上的配置进行修改

把cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/复制的文件删除掉

# rm -f boot.cat splash.png vesamenu.c32    //删除之前复制的文件

# cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/   //复制新的文件到此目录下,大小写无所谓

# vim /var/lib/tftpboot/pxelinux.cfg/default   可以参考这个目录  # cat /mnt/isolinux/isolinux.cfg

:.,$d     //内容全部删除并添加新配置

default menu.c32
    prompt 0   
    timeout 30       //等待用户选择的时间
    MENU TITIL CentOS 7 PXE Menu   //显示菜单

    LABEL centos7
    MENU LABEL Install Centos7 x86_64
    KERNEL vmlinuz       //指明内核文件
    APPEND initrd=initrd.img inst.repo=http://192.168.184.141/centos7 ks=http://192.168.184.141/centos7.cfg  //inst.repo指安装时使用的yum源,centos7.cfg就是kickstart文件

 

以上配置好之后就可以重新启动虚拟机了

 

此处出现了/dev/root does not exist错误,是因为本次的iso文件是制作U盘启动后,U盘里面的文件,所以isolinux.cfg(即default)文件中启动是从U盘启动的,而不是从linux硬盘启动的,所以需要更改

参考文章:

https://funcptr.net/2015/07/08/cobbler-with-centos-7-failure-to-boot/kickstart/

https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/installation_guide/sect-kickstart-syntax

http://hmli.ustc.edu.cn/doc/linux/centos-autoinstall.htm

#vim /var/lib/tftpboot/pxelinux.cfg/default   //修改此文件

........
 61 label linux
 62   menu label ^Install CentOS 7
 63   kernel vmlinuz
 64   append initrd=initrd.img ksdevice=bootif lang= kssendmac text ks=http://192.168.128.131/centos7.cfg   //以此为准
 65   #append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet ks=http://192.168.128.131/centos7.cfg
.......

 

总结

CentOS 7 PXE:

yum -y install syslinux tftp-server

 

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

cp /media/cdrom/images/pxelinux/{vmlinuz,initrd.img} /var/lib/tftp/boot/

cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/

mkdir /var/lib/tftpboot/pxelinux.cfg/

 

创建/var/lib/tftpboot/pxelinux.cfg/default

以上适合于centos7

 

posted @ 2018-12-22 23:28  Study~Column  阅读(4168)  评论(0编辑  收藏  举报