一键PXE+Kickstart自动化部署脚本

一键PXE+Kickstart自动化部署脚本(CentOS)

八宝茶&黑兰州

于 2021-03-10 18:53:31 发布

71
收藏
分类专栏: 运维脚本 文章标签: linux centos
版权

运维脚本
专栏收录该内容
4 篇文章0 订阅
订阅专栏
基于shell的自动化部署脚本
淦!由于本人太菜的原因,一度导致就这么个破脚本浪费了四天时间!大量时间都在调错上,累到虚脱!
autoIS.sh

#############by西北苦命漢###################
#!/bin/bash
#LANG=”zh_CN.GB18030
############pxe+kickstart無人值守安裝腳本################
function Divider(){
echo “################################################################”
}
if [ $# -eq 0 ]
then
echo -e “\033[31m 缺少参数!\n使用方法:sh autoIS.sh [服务端IP地址]”
exit
fi
function show(){
echo -e “\033[31m 網絡環境異常,請檢查! \033[0m”
exit
}
function status(){
if [ $1 -eq 0 ]
then
echo -e “\033[32m $2成功! \033[0m”
else
echo -e “\033[31m $2失败! \033[0m”
fi

}
if [ `id -u` -ne 0 ]
then
echo -e “\033[31m 此腳本需管理員執行,當前用戶非管理員! \033[0m”
exit
fi
find /dev/sr0
if [[ $? != 0 ]]
then
echo -e “\033[31m error:sr0! \033[0m”
echo -e “\033[31m 请确认您的光驱内有光盘?(Y/N): \033[0m \c”
read que
if [[ $que == “n” ]] || [[ $que == “N” ]]
then
exit
fi
fi
echo -e “\033[34m 正在檢查網絡狀態,請等待! \033[0m”
ping -c 3 www.baidu.com > /dev/null && echo -e “\033[34m 開始部署環境 \033[0m” || show
####環境部署模塊####
Divider
yum install -y dhcp && echo -e “\033[32m 1.DHCP服務安裝成功! \033[0m” || echo -e “\033[31m 1.DHCP服務安裝失敗! \033[0m”
yum install -y tftp-server && echo -e “\033[32m 2.TFTP服務安裝成功! \033[0m” || echo -e “\033[31m 2.TFTP服務安裝失敗! \033[0m”
yum install -y xinetd && echo -e “\033[32m 3.Xinetd服務安裝成功! \033[0m” || echo -e “\033[31m 3.Xinetd服務安裝失敗! \033[0m”
yum install -y syslinux && echo -e “\033[32m 4.SYSlinux服務安裝成功! \033[0m” || echo -e “\033[31m 4.SYSlinux服務安裝失敗! \033[0m”
yum install -y httpd && echo -e “\033[32m 5.HTTP服務安裝成功! \033[0m” || echo -e “\033[31m 5.HTTP服務安裝失敗! \033[0m”
echo -e “\033[34m 環境部署動作結束!!! \033[0m”
mkdir /media/cdrom
mount /dev/sr0 /media/cdrom/ && echo -e “\033[32m 6.光盘挂载成功! \033[0m” || echo -e “\033[31m 6.光盘挂载失敗! \033[0m”
echo -e “[centos]\nname=centos\nbaseurl=file:///media/cdrom\ngpgcheck=0\nenabled=1” > /etc/yum.repos.d/local.repo && echo -e “\033[32m 7.仓库部署成功! \033[0m” || echo -e “\033[31m 7.仓库部署失敗! \033[0m”
systemctl enable httpd
str=`ifconfig | sed -n ‘1p’`
str1=`echo ${str%%:*}`
nmcli connection modify $str1 ipv4.method manual ipv4.addresses $1/24 ipv4.gateway “” ipv4.dns “” connection.autoconnect yes && echo -e “\033[32m 8.网卡已重新配置! \033[0m” || echo -e “\033[31m 8.网卡配置失败,请自行修改ip地址为$1 \033[0m”
nmcli connection up $str1
IP3=$1
flag=0
IP3=${IP3%.*}
sed -ri “s/([0-9]{1,3}\.){2}[0-9]{1,3}/$IP3/g” dhcpd1.txt || flag=1
sed -ri “s/([0-9]{1,3}\.){2}[0-9]{1,3}/$IP3/g” dhcpd2.txt || flag=1
status $flag “IP地址写入DHCP配置文件”
Divider
####DHCP防报错模块####
flag=0
cat ./dhcpd1.txt > /etc/dhcp/dhcpd.conf || flag=1
sed -i “2asubnet $IP3\.0 netmask 255.255.255.0 {” /etc/dhcp/dhcpd.conf || flag=1
sed -i “4aoption subnet-mask 255.255.255.0;” /etc/dhcp/dhcpd.conf || flag=1

systemctl restart dhcpd || flag=1
status $flag “DHCP服务防报错配置”
####服務配置模塊####
Divider
cat ./dhcpd2.txt > /etc/dhcp/dhcpd.conf && echo -e “\033[32m 1.DHCP配置文件寫入成功! \033[0m” || echo -e “\033[31m 1.DHCP配置文件寫入失敗! \033[0m”
sed -i “4asubnet $IP3\.0 netmask 255.255.255.0 {” /etc/dhcp/dhcpd.conf || flag=1
sed -i “5aoption subnet-mask 255.255.255.0;” /etc/dhcp/dhcpd.conf || flag=1
sed -i “6aoption domain-name-servers $1;” /etc/dhcp/dhcpd.conf || flag=1
sed -i “10anext-server $1;” /etc/dhcp/dhcpd.conf || flag=1
line=`sed -n ‘/disable/=’ /etc/xinetd.d/tftp`
sed -i “$line{s/yes/no/g}” /etc/xinetd.d/tftp && echo -e “\033[32m 2.TFTP配置文件寫入成功! \033[0m” || echo -e “\033[31m 2.TFTP配置文件寫入失敗! \033[0m”
flag=0
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ || flag=1
cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/ || flag=1
cp /media/cdrom/isolinux/{vesamenu.c32,*.msg} /var/lib/tftpboot/ || flag=1
status $flag “3.SYSlinux引导文件拷贝至TFTP目录下”
mkdir /var/lib/tftpboot/pxelinux.cfg
cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default && echo -e “\033[32m 3.开机配置文件拷贝成功! \033[0m” || echo -e “\033[31m 3.开机配置文件拷贝失敗! \033[0m”
flag=0
str1=”hd:LABEL=CentOS\x207\x20x86_64″
sed -i ‘1c default linux’ /var/lib/tftpboot/pxelinux.cfg/default || flag=1
sed -i ’64d’ /var/lib/tftpboot/pxelinux.cfg/default || flag=1
sed -i “63aappend initrd=initrd.img inst.repo=http://$1/iso ks=http://$1/pub/ks.cfg quiet” /var/lib/tftpboot/pxelinux.cfg/default || flag=1
sed -i ’70d’ /var/lib/tftpboot/pxelinux.cfg/default || flag=1
sed -i “69aappend initrd=initrd.img inst.repo=http://$1/iso rd.live.check ks=http://$1/pub/ks.cfg quiet” /var/lib/tftpboot/pxelinux.cfg/default || flag=1
status $flag “4.开机选项配置”
mkdir /var/www/html/iso && echo -e “\033[32m 5.服务目录创建成功! \033[0m” || echo -e “\033[31m 5.服务目录创建失败! \033[0m”
echo -e “\033[34m 以下拷贝时间较长,请耐心等待… \033[0m”
cp -r /media/cdrom/* /var/www/html/iso/ && echo -e “\033[32m 6.光盘镜像已拷贝到http工作目录下! \033[0m” || echo -e “\033[31m 6.光盘镜像拷贝失败! \033[0m”
firewall-cmd –permanent –add-port=69/udp && echo -e “\033[32m (tftp放行成功!) \033[0m” || echo -e “\033[31m (tftp放行失败!) \033[0m”
firewall-cmd –reload
mkdir /var/www/html/pub && echo -e “\033[32m 7.应答目录创建成功! \033[0m” || echo -e “\033[31m 7.应答目录创建失败! \033[0m”
cp ~/anaconda-ks.cfg /var/www/html/pub/ks.cfg && echo -e “\033[32m 8.应答文件已拷贝! \033[0m” || echo -e “\033[31m 8.应答文件拷贝失败! \033[0m”
chmod +r /var/www/html/pub/ks.cfg && echo -e “\033[32m 9.应答文件已授权! \033[0m” || echo -e “\033[31m 9.应答文件未授权! \033[0m”
firewall-cmd –permanent –add-service=http && echo -e “\033[32m 10.防火墙已放行! \033[0m” || echo -e “\033[31m 10.防火墙未放行 \033[0m”
firewall-cmd –reload
flag=0
line=`sed -n ‘/cdrom/=’ /var/www/html/pub/ks.cfg`
sed -i “$line{s!cdrom!url –url=http://$1/iso!g}” /var/www/html/pub/ks.cfg && `flag=1`
sed -i “s/^.*timezone .*$/timezone Asia\/Shanghai –isUtc/” /var/www/html/pub/ks.cfg && `flag=1`
line=`sed -n ‘/–none/=’ /var/www/html/pub/ks.cfg`
sed -i “$line{s!–none!–all!g}” /var/www/html/pub/ks.cfg && `flag=1`
status $flag “11.镜像安装参数配置”
Divider
#####服务启动模块#####
systemctl restart dhcpd && echo -e “\033[32m 1.DHCP服务开启成功! \033[0m” || echo -e “\033[31m 1.DHCP服务开启失败! \033[0m”
systemctl enable dhcpd
systemctl restart tftp && echo -e “\033[32m 2.TFTP服务开启成功! \033[0m” || echo -e “\033[31m 2.TFTP服务开启失败! \033[0m”
systemctl enable tftp
systemctl restart xinetd && echo -e “\033[32m 3.Xinetd服务开启成功! \033[0m” || echo -e “\033[31m 3.Xinetd服务开启失败! \033[0m”
systemctl enable xinetd
systemctl restart httpd && echo -e “\033[32m 4.HTTP服务开启成功! \033[0m” || echo -e “\033[31m 4.HTTP服务开启失败! \033[0m”
systemctl enable httpd
str=`ifconfig | sed -n ‘1p’`
str1=`echo ${str%%:*}`
nmcli connection modify $str1 ipv4.method manual ipv4.addresses $1/24 ipv4.gateway “” ipv4.dns “” connection.autoconnect yes && echo -e “\033[32m 5.网卡已重新配置! \033[0m” || echo -e “\033[31m 5.网卡配置失败,请自行修改ip地址为$1 \033[0m”
nmcli connection up $str1
echo -e “\033[34m 脚本执行完毕!!!\n \033[0m”
Divider

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
配置文件
dhcpd1.conf
防DHCP报错的,挺废的,当然是本人太菜了,不过这能解决问题!

ddns-update-style none;
ignore client-updates;
range 192.168.4.50 192.168.4.250;
option routers 192.168.4.1;
option domain-name “www.baidu.com”;
option domain-name-servers 192.168.4.1;
default-lease-time 21600;
max-lease-time 43200;
}
1
2
3
4
5
6
7
8
9
dhcpd2.conf
正式的DHCP配置文件,为啥不写在脚本里?不想!

allow booting;
allow bootp;
ddns-update-style interim;
ignore client-updates;
range dynamic-bootp 192.168.4.50 192.168.4.200;
default-lease-time 21600;
max-lease-time 43200;
filename “pxelinux.0”;
}
1
2
3
4
5
6
7
8
9
脚本使用方法:sh autoIS.sh [服务器IP]
警告:
1.在服务器上做实验的,记得连接虚拟光盘!
2.脚本执行会更改网卡配置,执行完不能上网,是很有可能的,用nmtui来恢复网卡配置就ok!

当然!这个脚本太基础了,你也可以在这个脚本的基础上加些东西,比如环境监测之类的!

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux环境安装安装CentOS1660 人正在系统学习中
————————————————
版权声明:本文为CSDN博主「八宝茶&黑兰州」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43233084/article/details/114643017