#/bin/bash
#PXE unattended installation
#Hetingliang
if
[ "$USER" != "root"]
then
echo "不是root用户,权限不够!"
exit 0
fi
#关闭防火墙
systemctl stop firewlld.service && systemctl enable firewlld.service
#关闭selinux
sed '7s/enforcing/disabled/g' /etc/sysconfig/selinux && setenforce 0
IP=$(ifconfig ens33 |grep "inet"|awk '{print $2}'|head -1)
mask=$(ifconfig ens33 |grep "inet"|awk '{print $4}'|head -1)
a=$(ifconfig ens33 |grep "inet"|awk '{print $2}'|head -1|awk -F . '{print $1}')
b=$(ifconfig ens33 |grep "inet"|awk '{print $2}'|head -1|awk -F . '{print $2}')
c=$(ifconfig ens33 |grep "inet"|awk '{print $2}'|head -1|awk -F . '{print $3}')
if
[ $mask = "255.255.255.0" ]
then
BOD=$a.$b.$c.255
fi
if
[ $mask = "255.255.0.0" ]
then
BOD=$a.$b.255.255
fi
if
[ $mask = "255.0.0.0" ]
then
BOD=$a.255.255.255
exit 3
fi
mkdir -p /var/ftp/centos7
mkdir /mnt/cdrom
mount /dev/sr0 /mnt/cdrom/
if [ ! $? = 0 ]
then
echo "请检查是否安装光驱,如已安装则查看脚本光驱是否符合本机。"
fi
echo "/dev/sr0 /mnt/cdrom auto defaults 0 0">>/etc/fstab
cp -rf /mnt/cdrom/* /var/ftp/centos7
cd /var/ftp/centos7/Packages/
rpm -ivh vsftpd-3.0.2-28.el7.x86_64.rpm
systemctl start vsftpd && systemctl enable vsftpd
cd && mkdir repo
mv /etc/yum.repos.d/*repo /root/repo
echo "[base]
name=htl
baseurl=ftp://$IP/centos7
gpgcheck=0
enabled=1" > /etc/yum.repos.d/centos7.repo
yum -y install tftp-server.x86_64
echo "# 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
per_source = 11
cps = 100 2
flags = IPv4
}">/etc/xinetd.d/tftp
systemctl start tftp && systemctl enable tftp
if [ ! $? = 0 ]
then
echo "请检查ftp配置是否有误,如检查无问题则重新执行脚本。"
fi
cd /mnt/cdrom/images/pxeboot/
cp vmlinuz initrd.img /var/lib/tftpboot/
yum -y install syslinux
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxelinux.cfg
echo "
default auto
prompt 0
label auto
kernel vmlinuz
append initrd=initrd.img method=ftp://$IP/centos7 ks=ftp://$IP/centos7/ks.cfg
label linux text
kernel vmlinuz
append text initrd=initrd.img method=ftp://$IP/centos7
label linux rescue
kernel vmlinuz
append rescue initrd=initrd.img method=ftp://$IP/centos7">/var/lib/tftpboot/pxelinux.cfg/default
yum -y install dhcp
echo "
subnet $a.$b.$c.0 netmask $mask {
range $a.$b.$c.20 $a.$b.$c.200;
option domain-name-servers 8.8.8.8,$a.$b.$c.2;
option routers $a.$b.$c.2;
option broadcast-address $BOD;
default-lease-time 600;
max-lease-time 7200;
next-server $IP;
">>/etc/dhcp/dhcpd.conf
echo 'filename "pxelinux.0";
}'>>/etc/dhcp/dhcpd.conf
systemctl start dhcpd && systemctl enable dhcpd
if [ ! $? = 0 ]
then
echo "请检查dhcp配置后确认无误重启脚本。"
fi
yum -y install system-config-kickstart
cd && touch ks.cfg
cat >> /root/ks.cfg <
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password 12345678
rootpw --iscrypted $1$PF3u/5O/$fY2QpcGueIrSUgNijUNUT0
# System language
lang zh_CN
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled
# Network information
network --bootproto=dhcp --device=ens33
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Use network installation
url --url="ftp://$IP/centos7"
# System bootloader configuration
bootloader --location=mbr
# Partition clearing information
clearpart --all
# Disk partitioning information
part / --fstype="xfs" --grow --size=4096
part /boot --fstype="xfs" --grow --size=2048
part /home --fstype="xfs" --grow --size=4096
part swap --fstype="swap" --grow --size=2048
%post --interpreter=/bin/bash
rm -rf /etc/yum.repos.d/*
echo "[base]
name=htl
baseurl=ftp://$IP/centos7
gpgcheck=0
enabled=1" > /etc/yum.repos.d/centos7.repo
%end
%packages
@^gnome-desktop-environment
@base
@core
@desktop-debugging
@development
@dial-up
@directory-client
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@java-platform
@multimedia
@network-file-system-client
@networkmanager-submodules
@print-client
@x11
kexec-tools
%end
EOF
cp /root/ks.cfg /var/ftp/centos7/ks.cfg
#@^gnome-desktop-environment:这是一个软件包组,它包含了GNOME桌面环境所需的所有软件包。GNOME是一个流行的开源桌面环境,提供了图形用户界面。@前缀表示这是一个软件包组,而^前缀(在某些Kickstart版本中)可能表示这是一个顶级软件包组,它会自动包含其他依赖的软件包组。
#@base:基本软件包组,包含了系统运行所必需的最小软件包集合。
#@core:核心软件包组,提供了系统核心功能所需的软件包。
#@desktop-debugging:桌面调试工具软件包组,包含了用于调试桌面环境相关问题的工具。
#@development:开发工具和库软件包组,包含了编译和开发软件所需的各种工具和库。
#@dial-up:拨号网络支持软件包组,虽然现在较少使用拨号上网,但这个组可能包含了一些与网络连接相关的工具。
#@directory-client:目录客户端软件包组,可能包含用于与LDAP或其他目录服务交互的工具和库。
#@fonts:字体软件包组,包含了系统显示文本所需的字体文件。
#@gnome-desktop:GNOME桌面环境的额外软件包组,可能包含@gnome-desktop-environment之外的GNOME特定软件包。但在这个上下文中,它可能是重复的或特定于某些发行版的。
#@guest-agents:虚拟化环境中用于增强来宾操作系统性能的代理软件包组。
#@guest-desktop-agents:与@guest-agents类似,但可能更专注于桌面环境的优化。
#@input-methods:输入法软件包组,包含了支持不同语言输入法的软件包。
#@internet-browser:互联网浏览器软件包组,可能包含了一个或多个Web浏览器。
#@java-platform:Java平台软件包组,包含了Java运行时环境和可能的其他Java开发工具。
#@multimedia:多媒体软件包组,包含了音频、视频处理和其他多媒体相关工具。
#@network-file-system-client:网络文件系统客户端软件包组,如NFS客户端。
#@networkmanager-submodules:NetworkManager的附加模块软件包组,NetworkManager是Linux下用于管理网络连接的工具。
#@print-client:打印客户端软件包组,包含了与打印机交互所需的工具和库。
#@x11:X11(或X Window System)软件包组,提供了X Window系统所需的基本组件,它是许多Linux桌面环境的基础。
#kexec-tools:一个单独的软件包,提供了kexec命令,该命令允许在不停机的情况下启动另一个内核。
#%end标记了%packages部分的结束。