PXE+kickstart无人值守安装

一:实验环境版本:
1.1:测试环境
  虚拟机版本:VMware® Workstation 12 Pro
  内核版本:2.6.32-504.el6.x86_64
  操作系统版本:Red Hat Enterprise Linux Server release 6.6 (Santiago)
1.2:PXE概述
  PXE:(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动。协议分为client和server两端,PXE client在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行.
1.3:PXE工作流程图

 

 

二:准备工作
  生成ks.cfg 文件需要system-config-kickstart 工具,而此工具依赖于X Windows,所以我们需要安装X Windows 和Desktop 并重启系统,操作如下:后面附了ks.cfg文件,这一步操作可以不做,要是想自己了解可以先安装包然后用下面链接的流程做就可以了.

  [root@pxe_server ~]# yum groupinstall "X Window System" -y
  [root@pxe_server ~]# yum groupinstall "Desktop" -y
  [root@pxe_server ~]# yum install system-config-kickstart -y

  具体生成ks.cfg语法参见感谢大佬提供资源:http://www.cnblogs.com/mchina/p/centos-pxe-kickstart-auto-install-os.html

三:DHCP,TFTP,RPC,NFS服务安装,开机3级别下启动

  [root@pxe_server ~]# yum install nfs* -y
  [root@pxe_server ~]# yum install rpc* -y
  [root@pxe_server ~]# yum install dhcp* -y
  [root@pxe_server ~]# yum install tftp* -y

  [root@pxe_server ~]# chkconfig --level 3 nfs
  [root@pxe_server ~]# chkconfig --level 3 dhcp
  [root@pxe_server ~]# chkconfig --level 3 rpcbind on
  [root@pxe_server ~]# chkconfig --level 3 xinetd on

四:配置TFTP服务

[root@pxe_server ~]# 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
}

五:TFTP+PXE配置

  要实现远程安装操作系统,首先需要在TFTPBOOT目录指定相关PXE内核模块及相关参数,配置如下:
  注意:5.x系统tftpboot在根下,6.x在/var/lib/下,所以6.x是需要做软链接到根目录下.
5.1 挂载镜像

[root@pxe_server ~]# mount /dev/cdrom /mnt

5.2 拷贝pxe程序到tftpboot下做引导

[root@pxe_server ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

5.3 拷贝系统初始化引导文件到tftpboot下

[root@pxe_server ~]# cp /mnt/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/
[root@pxe_server ~]# cp /mnt/isolinux/vesamenu.c32 /var/lib/tftpboot/
[root@pxe_server ~]# cp /mnt/isolinux/boot.msg /var/lib/tftpboot/

5.4 在/var/lib/tftpboot/下创建目录

[root@pxe_server ~]# mkdir -pv /var/lib/tftpboot/pxelinux.cfg

5.5 拷贝系统镜像的菜单文件并且命名为default

[root@pxe_server ~]# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

5.6 修改default文件(由于原文件较长,所以复制了一部分内容)

[root@pxe_server pxelinux.cfg]# cat default 
default vesamenu.c32
#prompt 1
timeout 60    #原600秒改成6秒
display boot.msg
********
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
# 在这行加入以下内容,注意,nfs后面挂载的地址要和redhatinstall匹配,信息从网卡eth0出去
label redhat6.6
      menu default
      kernel vmlinuz
      append ks=nfs:192.168.79.9:/redhatinstall/ks.cfg ksdevice=eth0 initrd=initrd.img

label linux
      menu label ^Install or upgrade an existing system
      #menu default
      kernel vmlinuz
      append initrd=initrd.img
********

5.7 TFTP配置完毕,由于是TFTP是非独立服务,需要依赖xinetd服务来启动

/etc/init.d/xinetd restart

六:配置NFS服务
6.1 启动rpcbind服务,有关rpcbind服务如下图:

 

6.2 NFS网络文件系统如下图:

 

6.3 启动顺序
先启动rpcbind服务器,因为NFS是主动向rpc服务发起注册的

[root@pxe_server ~]# /etc/init.d/rpcbind restart
[root@pxe_server ~]# /etc/init.d/nfs restart
[root@pxe_server ~]# rpcinfo localhost #此项是验证rpc服务是否已经和NFS建立了连接,建立了的话会显示很多tcp和udp协议的连接

6.4 用NFS共享/redhatinstall目录
在/etc/exports 里面加入如下内容

[root@pxe_server ~]# cat /etc/exports 
/redhatinstall *(rw,sync)    #*号代表所有网段,括号里面的是以读写挂载,sync是对修改的数据实时同步到磁盘,有关NFS参数请参见 /var/lib/nfs/etab,NFS优化会涉及里面参数,这里不做过多的讲解

6.5 平滑重启NFS服务

[root@pxe_server ~]# /etc/init.d/nfs reload

6.6 检查是否已经共享成功参数IP在server端意义一样

[root@pxe_server ~]# showmount -e 192.168.79.9
Export list for 192.168.79.9:
/redhatinstall *
[root@pxe_server ~]# showmount -e localhost
Export list for localhost:
/redhatinstall *

6.7 复制系统镜像所有文件到/redhatinstall目录下

[root@pxe_server ~]# cp -Rp /mnt/* /redhatinstall/

6.8 创建ks.cfg文件,cp到/redhatinstall目录下,一定要给777权限.否则读不到文件内容

 

[root@pxe_server redhatinstall]# ll -l ks.cfg 
-rwxrwxrwx. 1 root root 2928 Nov 13 12:16 ks.cfg

 

七:配置DHCP服务
7.1 dhcp配置

[root@pxe_server ~]# vim /etc/dhcp/dhcpd.conf    #加入以下内容
ddns-update-style interim;  #忽略客户端更新
ignore client-updates;
next-server 192.168.79.9;    #dhcp的服务器IP
filename "pxelinux.0";    #指向tftp文件
allow booting;
allow bootp;
subnet 192.168.79.0 netmask 255.255.255.0 {
#    ---------default gateway----------
option routers 192.168.79.1;
option subnet-mask 255.255.255.0;
range dynamic-bootp 192.168.79.30 192.168.79.100;     #指定这个网段的起始和结束位置
}

7.2 最后重启以下服务

[root@pxe_server ~]# /etc/init.d/nfs restart
[root@pxe_server ~]# /etc/init.d/rpcbind restart
[root@pxe_server ~]# /etc/init.d/xinetd restart
[root@pxe_server ~]# /etc/init.d/dhcpd restart

八:问题
8.1 我们知道是通过网络传输,那么计算机在启动时,它的IP地址由谁来配置?
主要通过DHCP Server解决,由DHCP server来给PXE client分配一个IP地址,DHCP Server是用来给DHCP Client动态分配IP地址的协议,不过由于这里是给PXE Client分配IP地址,所以在配置DHCP Server时,需要增加相应的PXE特有配置.如下图:

8.2 通过什么协议下载Linux内核和根文件系统?
  在PXE client所在的ROM中,已经存在了TFTP Client.PXE Client使用TFTP Client,通过TFTP协议到TFTP Server上下载所需的文件这样,PXE协议运行的条件就具备了,下面我们就来看看PXE协议的工作过程.
8.3 pexlinux.0是什么文件?
  官方解释:PXELINUX is a SYSLINUX derivative, for booting Linux off a network server
  我的理解:PXELINUX.0就跟平时的grub程序用来引导kernel和initrd,pexlinux.0是syslinux的一个派生品,用于支持从网络启动.

九:ks.cfg附件,分区信息可以根据自身环境设置

# Kickstart file automatically generated by anaconda.

#version=DEVEL
install

# text install
text

# check cdrom skip
key --skip

# Use NFS installation media
nfs --server=192.168.79.9 --dir=/redhatinstall

# Use language
lang en_US.UTF-8

# Keyboard
keyboard us

# Network information
network  --bootproto=dhcp --device=eth0 --noipv6

# root password
rootpw  --iscrypted $6$lQw81OhBZYvvz6dH$3wWbz479gIfuF7c7BiBOeqAqTa8J9/cN6c1dMIV8qQM2grnNP7NLqp7725.nN.BgOU2AtFizUWIsAjfHCrfBt.

# firewall disable
firewall --disabled

# System authorization information
authconfig --enableshadow --passalgo=sha512

# disable selinux
selinux --enforcing

# system date
timezone Asia/Shanghai

# System bootloader configuration
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"

# Clear the Master Boot Record
zerombr

# Partition clearing information
clearpart --all --initlabel

# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --none

part /boot --fstype=ext4 --size=200
part / --fstype=ext4 --size=10240
part swap --size=1024



%packages
@base
@compat-libraries
@core
@debugging
@development
@dial-up
@performance
@server-policy
python-dmidecode
sgpio
device-mapper-persistent-data
systemtap-client
%end

%post
# Set selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# Chkconfig opt
for tfqh in `chkconfig --list | grep "3:on" | awk '{print $1}' | grep -vE "crond|network|sshd|rsyslog|sysstat"`;do chkconfig $tfqh off;done;
/etc/init.d/iptables stop >/dev/null 2>&1

# Set sshd
sed -i 's%#UseDNS yes%UseDNS no%' /etc/ssh/sshd_config
sed -i 's%GSSAPIAuthentication yes%GSSAPIAuthentication no%' /etc/ssh/sshd_config
/etc/init.d/sshd restart >/dev/null 2>&1

# Del user
for u in bin adm lp halt mail uucp operator games gopher dbus vcsa abrt ntp saslauth postfix tcpdump;do userdel $u;done;

# File handle
echo "*                -      nofile          65535" >> /etc/security/limits.conf

# kernel parameter opt
cat << EOF >> /etc/sysctl.conf
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 32768
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_wmem = 8192 131072 16777216
net.ipv4.tcp_rmem = 32768 131072 16777216
net.ipv4.tcp_mem = 786432 1048576 1572864
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.ip_conntrack_max = 65536
net.ipv4.netfilter.ip_conntrack_max=65536
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
EOF
%end

 

posted @ 2019-03-14 23:04  OS_Performance  阅读(579)  评论(0编辑  收藏  举报