开始前工作:客户机和服务器(我是在虚拟机中建立了这两台计算机)

其中客户机的内存至少要大于镜像,不然到了图形安装界面那里会出现“error setting up base repository”

主机提供的安装文件权限一定要给足,不然会出现不能下载的情况。

 

一、用http服务对客户机提供服务

1.yum install httpd

2.systemctl start httpd

3.mkdir /var/www/html/centos7      #/var/www/html这个目录是在安装并启动了httpd后创建的,并非Linux自带

4.把光盘镜像里的文件全部复制到上面第三步的目录中 #根据我们下面的配置,客户机会从这里下载centos的安装文件

5.在浏览器里用http://IP/centos7/里访问(IP地址是本机IP),如果一切顺利,那么浏览器显示如下:

配置PXE安装系统-编程知识网

二、我们打算用TFTP来提供文件传输功能(TFTP就是简单文件传输协议)

1.yum install tftp-server    #安装TFTP

2.yum install xinetd           #启动tftp服务

3.cp /etc/xinetd.d/tftp   /etc/xinetd.d/tftp_backup      #备份一下,以防配错

4.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  #是这里做了修改
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
三、DHCP服务

1.yum install dhcp

2.cp /etc/dhcp/dhcpd.conf  /etc/dhcp/dhcpd.conf_backup   (注意,要养成良好的备份习惯)

3.vim /etc/dhcp/dhcpd.conf ,编辑如下:

#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
subnet 192.168.71.0 netmask 255.255.255.0{
        range 192.168.71.240 192.168.71.254; #available IP range,注意要与本机IP处于同一网段
        option subnet-mask 255.255.255.0;
        default-lease-time 21600;
        max-lease-time 43200;
        next-server 192.168.71.130;           #指定TFTP-server-IP,这里配的是本机IP,因为我打算让本机作为TFTP服务器
        filename "/pxelinux.0";               #download pxelinux.0 from TFTP path(即/var/lib/tftpboot/)

}

4.启动DHCP

systemctl start dhcpd   #这样客户机就能拿到属于自己的IP了

四 配置PXE引导

syslinux可以用来提供pxe引导文件,即pxelinux.0

1.安装syslinux

yum install syslinux

2.复制pxelinux.0到tftp

cp /usr/share/syslinux/pxelinux.0   /var/lib/tftpboot/    #前面讲了,这里的目的路径是tftp的默认路径

cp /var/www/html/centos7/ioslinux/*   /var/lib/tftpboot/

3.新建pxelinux.cfg目录,目的是为了存放配置文件default

mkdir /var/lib/tftpboot/pxelinux.cfg

cd /var/lib/tftpboot/pxelinux.cfg

cp /var/www/html/centos7/isolinux/isolinux.cfg   ./default     #至此,我们生成了default文件

4.编辑default文件

vim default (路径/var/lib/tftpboot/pxelinux.cfg/default

保持大部分内容不变

开头的defalut 默认跟的vesamenu.c32(这个文件用来显示选择菜单),如果你要做无人值守的安装,那default后面要跟你后面设置的label名字(比如下文的"mypxe" ,就要写成default mypxe,这样就会默认走mypxe的相关配置了

在default文件里新建下面内容

label mypxe

menu label ^install my os

kernel vmlinuz

append initrd=initrd.img  inst.repo=http://192.168.71.130/centos7

5 OK 到此为止,配置完毕,建立客户机,让它从pxe启动。即可看到选单,并且可以手动继续往下安装了。

6.注意:上面配置的并非无人值守的系统,只是简单的实验一下pxe的功能。

7.如果你要配置无人值守的安装,那么需要准备一份kickstart文件

cd /var/www/html/

mkdir ksconfig

cp /root/anaconda-ks.cfg  /var/www/html/ksconfig/ks.cfg  #复制配置文件到该路径并改名

chmod 777 ks.cfg  #我的权限设置的草率了,你们可以根据需要调整

vim ks.cfg

  如下:

#version=DEVEL
# System authorization information
auth --useshadow --enablemd5
# Install OS instead of upgrade
install
url --url="http://192.168.71.130/centos7/" #这里改成这样
# Use CDROM installation media
#cdrom           
# Use graphical install
graphical
# Firewall configuration
firewall --enabled
firstboot --disable
ignoredisk --only-use=sda
# Keyboard layouts
# old format: keyboard us
# new format:
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8# Network information
network  --bootproto=dhcp --device=ens33 --activate #这里改成这样
network  --hostname=localhost.localdomain  #这里定义你的客户机名字
# Reboot after installation
reboot
# Root password
rootpw --iscrypted $1$MHB/AjYK$2B2pDyHP9P/F/XGsmdXCq.
# System services
services --enabled="chronyd"
# System timezone
timezone America/Los_Angeles --isUtc
user --groups=wheel --name=gyf --password=$6$tVoLhfwuPTe0O7MF$vgSvm.KupxRJX3QFfjKPPk6vcCEUtuKtaScwMp2isIGkEHKG.R5Ln1VKgbF4Y.mSfVv5Q9MIcoIKvaXthK6ty. --iscrypted --gecos="gyf"
# X Window System configuration information
xconfig  --startxonboot
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --fstype="xfs" --size=300
part swap --fstype="swap" --size=2048
part / --fstype="xfs" --size=18131%post
/usr/sbin/adduser pxe
/usr/sbin/usermod -p '$1$MHB/AjYK$2B2pDyHP9P/F/XGsmdXCq.' pxe
/usr/bin/chfn -f "centOS7_pxeserver" pxe
mv /etc/rc.d/rc.local /etc/rc.d/rc.local.00
echo '#!/bin/bash' > /etc/rc.d/rc.local
ln -s ../rc.local /etc/rc.d/rc5.d/S99rclocal
chmod 755 /etc/rc.d/rc.local
echo 'mkdir -p /var/log/vmware' >> /etc/rc.d/rc.local
echo 'exec 1> /var/log/vmware/rc.local.log' >> /etc/rc.d/rc.local
echo 'exec 2>&1' >> /etc/rc.d/rc.local
echo 'set -x' >> /etc/rc.d/rc.local
echo 'echo Installing Open VM Tools' >> /etc/rc.d/rc.local
echo 'set -x' >> /etc/rc.d/rc.local
echo '/bin/eject sr0 || /bin/true' >> /etc/rc.d/rc.local
echo '/bin/eject sr1 || /bin/true' >> /etc/rc.d/rc.local
echo '/bin/vmware-rpctool' \'guest.upgrader_send_cmd_line_args --default\' >> /etc/rc.d/rc.local
echo '/bin/vmware-rpctool' \'upgrader.setGuestFileRoot /tmp\' >> /etc/rc.d/rc.local
echo '/bin/vmware-rpctool' \'toolinstall.installerActive 1\' >> /etc/rc.d/rc.local
echo '/bin/vmware-rpctool' \'toolinstall.installerActive 100\' >> /etc/rc.d/rc.local
echo 'rm -f /etc/rc.d/rc.local' >> /etc/rc.d/rc.local
echo 'rm -f /etc/rc.d/rc5.d/S99rclocal' >> /etc/rc.d/rc.local
echo 'mv /etc/rc.d/rc.local.00 /etc/rc.d/rc.local' >> /etc/rc.d/rc.local
/bin/echo done
%end%packages
@base
@core
@desktop-debugging
@dial-up
@directory-client
@fonts
@gnome-desktop
@guest-desktop-agents
@input-methods
@internet-browser
@java-platform
@multimedia
@network-file-system-client
@print-client
@x11
binutils
chrony
ftp
gcc
kernel-devel
kexec-tools
make
open-vm-tools
patch
python%end%addon com_redhat_kdump --enable --reserve-mb='auto'%end

这里完成了对ks.cfg的配置,但是还需要在default文件中加入ks文件的路径,如下:

label mypxe

menu label ^install my os

kernel vmlinuz

append initrd=initrd.img  inst.repo=http://192.168.71.130/centos7 ks=http://192.168.71.130/ksconfig/ks.cfg

然后重启客户机就可以自动安装了 

 

总结:

本文用到了两种传文件的方式,一种是HTTP,另一种是TFTP

HTTP的工作目录是:/var/www/html/,根据我们的配置,其下有centos7和ksconfig两个目录。分别存储了完整的centos7安装文件和自动应答文件。HTTP在本例中只负责传输这些文件(default文件指明了要从这里下载部分文件)。当客户机进入到图形安装界面后,会从这里下载centos7的安装文件(自动应答文件指明要从这里下载centos7的全部安装文件作为安装源)。

TFTP的工作目录是:/var/lib/tftpboot/,根据我们的配置,该目录主要存放了vmlinuz和initrd.img文件,以及用于pxe引导的pxelinuz.0和pxelinux.cfg/default文件。TFTP在本例中只负责传输这些小文件。

大致路线:客户机开机,从开了DHCP服务的主机那里拿到了属于自己的IP以及default、pxelinuz.0文件。然后读取default,根据default的配置,找到vmlinuz和initrd.img并加载。再根据default配置获得安装文件地址以及ks.cfg,通过HTTP获得安装文件,在ks.cfg的加持下,完成自动化的传统式安装(即传统模式下,安装系统时要我们手动填写的部分)。

文章记录仓促,虽已尽力完善,但可能存在描述不当之处,欢迎指正,谢谢。