pxe安装KS文件--实现优化IP分配

本文介绍了一种使用Kickstart文件自动安装CentOS并进行系统配置的方法。通过viks.cfg文件详细配置了网络参数、分区方案、用户管理及系统优化等。此外还提供了自动设置静态IP地址的脚本。

vi ks.cfg #编辑

# Kickstart file automatically generated by anaconda.

install

url --url=http://192.168.21.128/os/

lang en_US.UTF-8

zerombr yes

key --skip

keyboard us

network --device eth0 --bootproto dhcp --onboot on

#network --device eth0 --bootproto static --ip 192.168.21.250 --netmask 255.255.255.0 --gateway 192.168.21.2 --nameserver 8.8.8.8 --hostname CentOS5.10

rootpw --iscrypted $1$QqobZZ1g$rYnrawi9kYlEeUuq1vcRS/

firewall --enabled --port=22:tcp

authconfig --enableshadow --enablemd5

selinux --disabled

timezone Asia/Shanghai

bootloader --location=mbr --driveorder=sda

# 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 --linux

clearpart --all --initlabel

part / --bytes-per-inode=4096 --fstype="ext3" --size=2048

part /boot --bytes-per-inode=4096 --fstype="ext3" --size=128

part swap --bytes-per-inode=4096 --fstype="swap" --size=500

part /data --bytes-per-inode=4096 --fstype="ext3" --grow --size=1

reboot

%packages

ntp

expect

@base

@core

@dialup

@editors

@text-internet

keyutils

trousers

fipscheck

device-mapper-multipath

%post

#同步系统时间

ntpdate cn.pool.ntp.org

hwclock --systohc

echo -e "0 1 * * * root /usr/sbin/ntpdate cn.pool.ntp.org > /dev/null" >> /etc/crontab

service crond restart

#添加用户组

groupadd maintain

groupadd develop

mkdir -p /home/maintain

mkdir -p /home/develop

#添加用户

useradd -g maintain user01 -d /home/maintain/user01 -m

echo "123456"|passwd user01 --stdin

useradd -g maintain user02 -d /home/maintain/user02 -m

echo "123456"|passwd user02 --stdin

useradd -g maintain user03 -d /home/maintain/user03 -m

echo "123456"|passwd user03 --stdin

useradd -g maintain user04 -d /home/maintain/user04 -m

echo "123456"|passwd user04 --stdin

#禁止root用户直接登录系统

sed -i "s/#PermitRootLogin yes/PermitRootLogin no/g" '/etc/ssh/sshd_config'

service sshd restart

#禁止开机启动的服务

chkconfig acpid off

chkconfig atd off

chkconfig autofs off

chkconfig bluetooth off

chkconfig cpuspeed off

chkconfig firstboot off

chkconfig gpm off

chkconfig haldaemon off

chkconfig hidd off

chkconfig ip6tables off

chkconfig isdn off

chkconfig messagebus off

chkconfig nfslock off

chkconfig pcscd off

chkconfig portmap off

chkconfig rpcgssd off

chkconfig rpcidmapd off

chkconfig yum-updatesd off

chkconfig sendmail off

#允许开机启动的服务

chkconfig crond on

chkconfig kudzu on

chkconfig network on

chkconfig readahead_early on

chkconfig sshd on

chkconfig syslog on

#禁止使用Ctrl+Alt+Del快捷键重启服务器

sed -i "s/ca::ctrlaltdel:\/sbin\/shutdown -t3 -r now/#ca::ctrlaltdel:\/sbin\/shutdown -t3 -r now/g" '/etc/inittab'

telinit q

#优化系统内核

echo -e "ulimit -c unlimited" >> /etc/profile

echo -e "ulimit -s unlimited" >> /etc/profile

echo -e "ulimit -SHn 65535" >> /etc/profile

source /etc/profile

sed -i "s/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g" '/etc/sysctl.conf'

echo -e "net.core.somaxconn = 262144" >> /etc/sysctl.conf

echo -e "net.core.netdev_max_backlog = 262144" >> /etc/sysctl.conf

echo -e "net.core.wmem_default = 8388608" >> /etc/sysctl.conf

echo -e "net.core.rmem_default = 8388608" >> /etc/sysctl.conf

echo -e "net.core.rmem_max = 16777216" >> /etc/sysctl.conf

echo -e "net.core.wmem_max = 16777216" >> /etc/sysctl.conf

echo -e "net.ipv4.netfilter.ip_conntrack_max = 131072" >> /etc/sysctl.conf

echo -e "net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180" >> /etc/sysctl.conf

echo -e "net.ipv4.route.gc_timeout = 20" >> /etc/sysctl.conf

echo -e "net.ipv4.ip_conntrack_max = 819200" >> /etc/sysctl.conf

echo -e "net.ipv4.ip_local_port_range = 10024 65535" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_retries2 = 5" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_syn_retries = 1" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_synack_retries = 1" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_timestamps = 0" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_tw_len = 1" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_keepalive_time = 120" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_keepalive_probes = 3" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_keepalive_intvl = 15" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_max_tw_buckets = 36000" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_max_orphans = 3276800" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_max_syn_backlog = 262144" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_wmem = 8192 131072 16777216" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_rmem = 32768 131072 16777216" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_mem = 94500000 915000000 927000000" >> /etc/sysctl.conf

/sbin/sysctl -p

#执行外部脚本

cd /root

wget http://192.168.21.128/autoip.sh

sh /root/autoip.sh

:wq! #保存退出



添加脚本,自动设置Linux系统静态IP地址、DNS、网关、计算机名称

cd /var/www/html

vi autoip.sh #编辑

#!/bin/sh

ROUTE=$(route -n|grep "^0.0.0.0"|awk '{print $2}')

BROADCAST=$(/sbin/ifconfig eth0|grep -i bcast|awk '{print $3}'|awk -F":" '{print $2}')

HWADDR=$(/sbin/ifconfig eth0|grep -i HWaddr|awk '{print $5}')

IPADDR=$(/sbin/ifconfig eth0|grep "inet addr"|awk '{print $2}'|awk -F":" '{print $2}')

NETMASK=$(/sbin/ifconfig eth0|grep "inet addr"|awk '{print $4}'|awk -F":" '{print $2}')

cat >/etc/sysconfig/network-scripts/ifcfg-eth0<<EOF

DEVICE=eth0

BOOTPROTO=static

BROADCAST=$BROADCAST

HWADDR=$HWADDR

IPADDR=$IPADDR

NETMASK=$NETMASK

GATEWAY=$ROUTE

ONBOOT=yes

EOF

IPADDR1=$(echo $IPADDR|awk -F"." '{print $4}')

cat >/etc/sysconfig/network-scripts/ifcfg-eth1<<EOF

DEVICE=eth1

BOOTPROTO=static

BROADCAST=10.0.0.255

HWADDR=$(/sbin/ifconfig eth1|grep -i HWaddr|awk '{print $5}')

IPADDR=10.0.0.$IPADDR1

NETMASK=255.255.255.0

ONBOOT=yes

EOF

HOSTNAME=OsYunWei_HZ_$(echo $IPADDR|awk -F"." '{print $4}')

cat >/etc/sysconfig/network<<EOF

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=$HOSTNAME

GATEWAY=$ROUTE

EOF

echo "127.0.0.1 $HOSTNAME" >> /etc/hosts

hostname=$HOSTNAME

echo "nameserver 8.8.8.8" > /etc/resolv.conf

echo "nameserver 8.8.4.4" >> /etc/resolv.conf

:wq! #保存退出

### 概述 PXE(Preboot eXecution Environment)是一种由Intel开发的网络引导技术,允许计算机在没有本地存储设备的情况下通过网络从远程服务器下载引导镜像并加载操作系统。这种技术特别适用于需要大规模部署操作系统的场景,如数据中心、学校机房或企业IT部门。PXE工作在Client/Server模式下,客户端通过网络与服务器通信,获取必要的引导文件和操作系统镜像。 ### 环境准备 为了成功搭建PXE批量部署服务器,首先需要确保网络环境的稳定性。服务器和客户端应处于同一局域网内,以便于通信。接下来,服务器端需要配置以下服务: - **DHCP服务**:负责为客户端分配IP地址,并告知客户端TFTP服务器的地址以及引导文件的名称。 - **TFTP服务**:用于传输引导文件(如`pxelinux.0`、`vmlinuz`、`initrd.img`等),这些文件通常存放在TFTP服务器的特定目录中。 - **HTTP/FTP/NFS服务**:用于提供操作系统安装镜像,客户端在引导后会从这些服务中下载完整的系统文件。 ### 服务器端配置 #### 1. 安装并配置DHCP服务 安装`dhcp`包,并编辑`/etc/dhcp/dhcpd.conf`文件,配置如下内容: ```bash subnet 192.168.17.0 netmask 255.255.255.0 { range 192.168.17.100 192.168.17.200; option routers 192.168.17.1; option domain-name-servers 8.8.8.8; filename "pxelinux.0"; next-server 192.168.17.17; } ``` 确保DHCP服务开机启动并启动服务: ```bash systemctl enable dhcpd systemctl start dhcpd ``` #### 2. 安装并配置TFTP服务 安装`xinetd`和`tftp-server`包,并编辑`/etc/xinetd.d/tftp`文件,确保以下配置: ```bash 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 } ``` 创建TFTP根目录并复制引导文件: ```bash mkdir -p /var/lib/tftpboot cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ cp /mnt/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/ cp /usr/share/syslinux/{menu.c32,memdisk,mboot.c32,chain.c32} /var/lib/tftpboot/ mkdir /var/lib/tftpboot/pxelinux.cfg ``` 创建默认引导配置文件`/var/lib/tftpboot/pxelinux.cfg/default`,内容如下: ```bash default menu.c32 prompt 0 timeout 300 menu title ########## PXE Boot Menu ########## label 1 menu label ^1. Install CentOS 7 kernel vmlinuz append initrd=initrd.img method=http://192.168.17.17/centos7 ``` 确保TFTP服务开机启动并启动服务: ```bash systemctl enable xinetd systemctl start xinetd ``` #### 3. 安装并配置HTTP服务 安装`httpd`包,并将CentOS 7的ISO镜像挂载到Web服务器的根目录: ```bash mount -o loop /path/to/CentOS-7-x86_64-DVD-2009.iso /mnt ln -s /mnt /var/www/html/centos7 systemctl enable httpd systemctl start httpd ``` ### 客户端测试 确保客户端支持PXE启动,并在BIOS设置中将网络启动设为首选。重启客户端后,应能看到PXE引导菜单,选择相应的选项后开始安装过程。安装过程中,系统会从HTTP服务器下载必要的安装文件并完成操作系统的安装。 ### 高级配置 #### 多版本操作系统支持 如果需要支持多个版本的操作系统,可以在`/var/lib/tftpboot/pxelinux.cfg/default`中添加更多的`label`条目,每个条目对应不同的内核和安装源。例如: ```bash label 2 menu label ^2. Install Ubuntu 20.04 kernel ubuntu/vmlinuz append initrd=ubuntu/initrd.img method=http://192.168.17.17/ubuntu2004 ``` 同时,需要将Ubuntu的引导文件安装镜像放置在TFTP和HTTP服务器的相应目录中。 #### 自动化安装(Kickstart) 为了进一步提高部署效率,可以使用Kickstart文件实现无人值守安装。创建Kickstart文件(如`ks.cfg`),并在HTTP服务器上发布。修改PXE引导配置,添加`ks=`参数指向Kickstart文件: ```bash append initrd=initrd.img method=http://192.168.17.17/centos7 ks=http://192.168.17.17/ks.cfg ``` Kickstart文件包含安装过程中的所有配置选项,如分区方案、软件包选择、用户创建等,极大地简化了大规模部署的操作。 ### 故障排查 - **DHCP请求失败**:检查DHCP服务是否正常运行,确保客户端与服务器在同一子网,且防火墙未阻止UDP 67/68端口。 - **TFTP文件无法访问**:确认TFTP服务已启动,文件路径正确,且SELinux或防火墙未阻止访问。 - **HTTP镜像下载缓慢或失败**:优化网络带宽,确保HTTP服务正常运行,必要时可考虑使用NFS或FTP作为替代方案。 - **引导失败**:检查TFTP目录结构是否正确,引导文件是否完整,PXE配置文件中的路径是否准确。 ### 总结 通过PXE技术,可以高效地批量部署服务器操作系统,减少人工干预,提高部署速度和一致性。结合DHCP、TFTP和HTTP服务,能够构建一个稳定可靠的网络引导环境,适用于多种操作系统和场景。自动化安装(如Kickstart)进一步提升了部署的灵活性和效率,是现代数据中心不可或缺的技术之一。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值