作用:引导装机
PXE客户端:相当于等待安装系统的服务器
DHCP服务:给服务器分配IP地址
TFTP服务:文件传输,简单的传输服务
http服务:用于下载ks.cfg以及系统镜像文件
Readhat系主要有两种:Kickstart 和 Cobbler
[root@elk-1 ~]# cat /etc/redhat-release //系统版本
ntOS Linux release 7.6.1810 (Core)
[root@elk-1 ~]# uname -r //内核版本
3.10.0-957.el7.x86_64
[root@elk-1 ~]# getenforce //selinux,必须关闭,否则失败
Disabled
[root@elk-1 ~]# ifconfig ens32|awk -F "[ :]+" 'NR==2 {print $3}'
10.0.0.114
dhcp服务端口 67
DHCP 动态主机配置协议,通常被应用在大型局域网环境中,主要作用是集中管理、分配IP地址、使网络环境中的主机自动获取IP地址、网关地址、DNS服务器地址等信息,并能够提升地址的使用率。
注:DHCP服务器会默认保存两个小时客户端的登录信息。
[root@elk-1 ~]# yum install dhcp -y
......
Dependency Updated:
dhclient.x86_64 12:4.2.5-79.el7.centos dhcp-common.x86_64 12:4.2.5-79.el7.centos
dhcp-libs.x86_64 12:4.2.5-79.el7.centos
Complete!
[root@elk-1 ~]# rpm -ql dhcp|grep "dhcpd.conf"
/etc/dhcp/dhcpd.conf
/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
/usr/share/doc/dhcp-4.2.5/ldap/dhcpd-conf-to-ldap
/usr/share/man/man5/dhcpd.conf.5.gz
[root@elk-1 ~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example //配置模板文件位置
# see dhcpd.conf(5) man page
#
[root@elk-1 ~]# grep -Ev "^$|#" /etc/dhcp/dhcpd.conf
subnet 100.100.100.0 netmask 255.255.255.0 {
range 100.100.100.100 100.100.100.120;
option subnet-mask 255.255.255.0;
default-lease-time 21600;
max-lease-time 43200;
next-server 100.100.100.2;
filename "/pxelinux.0";
}
------
参数说明:
subnet:网段
netmask:子网掩码
range:给客户端分配的地址池
option subnet-mask:分配给客户端的子网掩码
default-lease-time:租期
max-lease-time:最大租期
next-server:TFTP服务器地址(本机IP)
filename:TFTP给PXE客户端的文件名
[root@elk-1 ~]# systemctl start dhcpd
[root@elk-1 ~]# netstat -lntup|grep dhcp
udp 0 0 0.0.0.0:67 0.0.0.0:* 7191/dhcpd
如果是多网卡模式,默认是监听eth0网卡,需手动指定监听网卡。
# vim /etc/sysconfig/dhcpd 在这个文件中,不是/etc/dhcp/dhcpd.conf
# Command line options here
DHCPDARGS=eth1 # 指定监听网卡
TFTP服务端口 69
TFTP 简单文件传输协议,是TCP/IP协议族中的一个,用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,端口号为69.
[root@elk-1 ~]# yum install tftp-server -y
......
Installed:
tftp-server.x86_64 0:5.2-22.el7
Complete!
[root@elk-1 ~]# 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 //指定目录,保持默认
disable = no //将yes改为no
per_source = 11
cps = 100 2
flags = IPv4
}
[root@elk-1 ~]# systemctl start xinetd.service
[root@elk-1 ~]# netstat -lntup|grep 69
udp 0 0 0.0.0.0:69 0.0.0.0:* 8872/xinetd
[root@elk-1 ~]# yum install httpd -y
......
Dependency Updated:
httpd-tools.x86_64 0:2.4.6-93.el7.centos
Complete!
[root@elk-1 ~]# sed -i "95i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf
在95行插入ServerName 127.0.0.1:80,否则启动报错。
[root@elk-1 ~]# mkdir /var/www/html/centos7.6
www是yum安装的默认站点目录。
内核文件、虚拟根文件以及菜单文件,我们都是通过tftp服务来提供的,由于系统及版本的不同,对于一个比较复制机群来说,我们需要准备不同系统,不同版本的内核文件,initrd.img文件。菜单文件只需要一份即可。/var/lib/tftpboot/目录规划如下:
挂载移动光驱:
[root@localhost mnt]# ls -l /dev/
lrwxrwxrwx 1 root root 3 4月 25 23:58 cdrom -> sr0
crw-rw---- 1 root cdrom 21, 1 4月 25 23:58 sg1
brw-rw---- 1 root cdrom 11, 0 4月 25 23:58 sr0 #找到光驱设备名
#mkdir /var/www/html/centos7.6 ##由于使用HTTP安装,所以镜像文件到挂到http根目录下部署不同的镜像创建不通目录
#mount /dev/sr0 /var/www/html/centos7.6 #挂载移动镜像设备到我们创建的http主页目录
如果是镜像文件已上传到linux中,可以这样挂
#mount -o loop /opt/CentOS-7-x86_64-Minimal-1511.iso /var/www/html/centos7.6
# ls /var/www/html/centos7.6
-rw-rw-r-- 3 root root 14 9月 5 2017 CentOS_BuildTag
drwxr-xr-x 3 root root 2048 9月 5 2017 EFI
-rw-rw-r-- 3 root root 227 8月 30 2017 EULA
-rw-rw-r-- 3 root root 18009 12月 10 2015 GPL
drwxr-xr-x 3 root root 2048 9月 5 2017 images
drwxr-xr-x 2 root root 2048 9月 5 2017 isolinux
drwxr-xr-x 2 root root 2048 9月 5 2017 LiveOS
drwxrwxr-x 2 root root 641024 9月 5 2017 Packages
drwxr-xr-x 2 root root 4096 9月 5 2017 repodata
-rw-rw-r-- 3 root root 1690 12月 10 2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r-- 3 root root 1690 12月 10 2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r-- 1 root root 2883 9月 6 2017 TRANS.TBL
不管怎么弄,只要把安装光盘内容能通过web发布即可。如果复制镜像就有点浪费时间,但生产环境就一定要复制了。光盘读取速度优先。
syslinux是一个功能强大的引导加载程序,而且兼容各种介质。
syslinux是一个小型的linux操作系统,它的目的是简化首次安装linux的时间,并建立维护或其它特殊用途的启动盘。
[root@elk-1 ~]# yum install syslinux -y
......
Installed:
syslinux.x86_64 0:4.05-15.el7
Dependency Installed:
mtools.x86_64 0:4.0.18-5.el7
Complete!
[root@elk-1 ~]# ll /usr/share/syslinux/pxelinux.0
-rw-r--r-- 1 root root 26759 Oct 31 2018 /usr/share/syslinux/pxelinux.0
#复制启动菜单程序文件
[root@elk-1 ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
##复制引导程序到tftp目录
[root@elk-1 ~]# cp -a /var/www/html/CentOS-7.6/isolinux/* /var/lib/tftpboot/
这里有一个很大的坑:
若不给tftpboot目录下所有文件执行权限的话,后面启动界面安装系统的时候会报错:PXE-T00 permission denied
chmod -R 777 /var/lib/tftpboot/
#创建一个pxelinux.cfg的目录,存放客户端的配置文件
[root@elk-1 ~]# mkdir -p /var/lib/tftpboot/pxelinux.cfg
[root@elk-1 ~]# cp /var/www/html/CentOS-7.6/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
%packages:软件包开头的标识位
@groupname:指定安装的包组
package_name:指定安装的包
-package_name:指定不安装的包
%pre:安装系统前执行的命令或脚本(由于只依赖于启动镜像,支持的命令很少)
%post:安装系统后执行的命令或脚本(基本支持所有命令)
install 告知安装程序,这儿是一次全新安装,为不是升级upgrade。
url 通过ftp或http从远程服务器上安装。
nfs 从指定的nfs服务器安装
text 使用文本模式安装
lang 设置语言 lang en_US.UFT-8
keyboard 设置系统键盘类型 keyboard us
zerombr 清除mbr引导信息,系统引导相关配置。
clearpart 设置分区
reboot 装机完成后必须重启
关键字 | 含义 |
---|---|
install | 告知安装程序,这是一次全新安装,而不是升级upgrade 。 |
url --url=" " | 通过FTP 或HTTP 从远程服务器上的安装树中安装。url --url="http://10.0.0.7/CentOS-6.7/" url --url ftp:// |
nfs | 从指定的NFS 服务器安装。nfs --server=nfsserver.example.com --dir=/tmp/install-tree |
text | 使用文本模式安装。 |
lang | 设置在安装过程中使用的语言以及系统的缺省语言。lang en_US.UTF-8 |
keyboard | 设置系统键盘类型。keyboard us |
zerombr | 清除mbr 引导信息。 |
bootloader | 系统引导相关配置。 bootloader --location=mbr --driveorder=sda --append=“crashkernel=auto rhgb quiet” –location=,指定引导记录被写入的位置.有效的值如下:mbr(缺省),partition(在包含内核的分区的第一个扇区安装引导装载程序)或none(不安装引导装载程序)。 –driveorder,指定在BIOS引导顺序中居首的驱动器。 –append=,指定内核参数.要指定多个参数,使用空格分隔它们。 |
network | 为通过网络的kickstart安装以及所安装的系统配置联网信息。 network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6 –bootproto=[dhcp/bootp/static]中的一种,缺省值是dhcp。bootp和dhcp被认为是相同的。 static方法要求在kickstart文件里输入所有的网络信息。 network --bootproto=static --ip=10.0.0.100 --netmask=255.255.255.0 --gateway=10.0.0.2 --nameserver=10.0.0.2 请注意所有配置信息都必须在一行上指定,不能使用反斜线来换行。 –ip=,要安装的机器的IP地址. –gateway=,IP地址格式的默认网关. –netmask=,安装的系统的子网掩码. –hostname=,安装的系统的主机名. –onboot=,是否在引导时启用该设备. –noipv6=,禁用此设备的IPv6. –nameserver=,配置dns解析. |
timezone | 设置系统时区。timezone --utc Asia/Shanghai |
authconfig | 系统认证信息。authconfig --enableshadow --passalgo=sha512 设置密码加密方式为 sha512 启用shadow 文件。 |
rootpw | root 密码 |
clearpart | 清空分区。clearpart --all --initlabel --all 从系统中清除所有分区,--initlable 初始化磁盘标签 |
part | 磁盘分区。 part /boot --fstype=ext4 --asprimary --size=200 part swap --size=1024 part / --fstype=ext4 --grow --asprimary --size=200 –fstype=,为分区设置文件系统类型.有效的类型为ext2,ext3,swap和vfat。 –asprimary,强迫把分区分配为主分区,否则提示分区失败。 –size=,以MB为单位的分区最小值.在此处指定一个整数值,如500.不要在数字后面加MB。 –grow,告诉分区使用所有可用空间(若有),或使用设置的最大值。 |
firstboot | 负责协助配置redhat一些重要的信息。firstboot --disable |
selinux | 关闭selinux 。selinux --disabled |
firewall | 关闭防火墙。firewall --disabled |
logging | 设置日志级别。logging --level=info |
reboot | 设定安装完成后重启,此选项必须存在,不然kickstart显示一条消息,并等待用户按任意键后才重新引导,也可以选择halt 关机。 |
# mkdir /var/www/html/ks_config
[root@elk-1 /var/www/html/ks_config]# cat centos7.6-ks.cfg
# 告知安装程序,这是一次全新安装,而不是升级
install
# 通过http下载安装镜像
url --url="http://100.100.100.2/Centos7.6"
# 以文本格式安装
text
# Run the Setup Agent on first boot
firstboot --disable
ignoredisk --only-use=sda
# 键盘和语言
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# 网络配置
# Network information
network --bootproto=dhcp --device=ens33 --ipv6=auto --activate
network --hostname=localhost.localdomain
# 设置用户密码123456
# Root password
auth --enableshadow --passalgo=sha512
rootpw --iscrypted $6$0Hu4r5pwNdX1zdsJ$Y58jOsbs0kSlplbtVf3lacoA7Etbf8tHH6BwxR78VT74Ut6D1Q/g.rS5GSwYZD5rAZpA4NmNlTBSZkyNZP3JZ0
# 启动服务
# System services
services --enabled="chronyd"
selinux --disabled
firewall --disabled
# 时区
# System timezone
timezone Asia/Shanghai --isUtc --nontp
#添加内核参数 指定mbr引导 选择sda启动
# System bootloader configuration
bootloader --append="crashkernel=auto rhgb quiet" --location=mbr --boot-drive=sda
# Clear the Master Boot Record清除mbr引导信息。
zerombr
##清空分区
clearpart --all --initlabel
##分区
part /boot --fstype=ext4 --asprimary --size=500
part swap --size=65536
part / --fstype=ext4 --size=1 --grow --asprimary
# 安装完成重启
reboot
# 最小化安装和指定的安装软件
%packages
@base
@compat-libraries
@development
net-tools
sysstat
lrzsz
telnet
wget
vim
%end
# KDUMP禁止
%addon com_redhat_kdump --disable --reserve-mb='auto'
%end
# 安装完成后执行的命名,这里设置阿里云的yum源镜像
%post
/usr/bin/yum-config-manager --add-repo=http://mirrors.aliyun.com/repo/Centos-7.repo
%end
给配置文件执行权限
# chmod 777 /var/www/html/ks_config/
[root@elk-1 /var/lib/tftpboot/pxelinux.cfg]# cat default
default ks
prompt 0
label ks
kernel vmlinuz
append initrd=initrd.img ks=http://10.0.0.114/ks_config/centos7.6-ks.cfg
8.1 dell服务器开机F12进行PXE装机后如果一直没反应,检查服务端的DHCP和PXE问题
8.2开机后进入PXE安装,但是出现下图问题:
我遇到的原因是:
/var/lib/tftpboot/pxelinux.cfg/default #此文件中指定的 网卡名字和客户端的网卡名字不符,导致卡在这步,正常来说按照上面配置不会遇到这个
8.3开机后提示http://10.0.0.114/var/www/html/ks_config/centos7.6-ks.cfg not found 404
这是因为default文件路径写错了,服务器获取不到centos7.6-ks.cfg文件,无法进行安装操作。
参考地址:
https://blog.csdn.net/openbox2008/article/details/80089567
https://note.youdao.com/publicshare/?id=de7548ccd42f223683e12a3d4d94ad27&type=note