Shell脚本实现Centos系统自动安装宝塔

具体脚本代码

复制脚本在服务器执行即可安装:curl -o installbt.sh http://xz.itcytblog.cn/installbt1.sh && sh installbt.sh

复制脚本在服务器执行即可安装:curl -o installbt.sh http://xz.itcytblog.cn/installbt2.sh && sh installbt.sh


宝塔面板是市面上大多数人选择的免费较好用的网站管理平台,但是宝塔默认是安装在系统盘/www目录下,如果系统盘损坏,这样不利于数据的安全。目前该脚本只适用于Centos系统执行自动挂载数据盘再按系统版本自动进行安装,其他系统提供官方安装集合包。

宝塔的安装脚本连接参数已经写在本脚本的开头,如果连接失效,请包宝塔官网www.bt.cn进行更换换。

该脚本实现了yum的检查更换及自动挂载和宝塔更换端口的功能

宝塔安装器的脚本代码如下所示:

installbt1.sh

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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
#! /bin/env bash
bt=http://download.bt.cn/install/install_6.0.sh
system=`cat /etc/redhat-release | cut -d' ' -f1`
if [ $system == CentOS ];then

dnstest=`cat /etc/resolv.conf | grep nameserver | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'`
if [ -z $dnstest ];then
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
echo "nameserver 114.114.114.114" >> /etc/resolv.conf
fi

cat /etc/yum.repos.d/CentOS-Base.repo | grep mirrors.aliyun.com
if [ $? -ne 0 ];then
release=`cat /etc/redhat-release|tr -d ' a-zA-Z()'|cut -d '.' -f1`
if [ $release -gt 7 ];then
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://mirror.centos.org|baseurl=https://opentuna.cn|g' \
-i.bak \
/etc/yum.repos.d/CentOS-Linux-*.repo

yum makecache &>/dev/null
else
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://mirror.centos.org|baseurl=https://opentuna.cn|g' \
-i.bak \
/etc/yum.repos.d/CentOS-*.repo

yum makecache &>/dev/null
fi

fi

num=`find /sys/block/ | awk -F/ '{ print $4 }'|grep -v '^$'|grep -vE [0-9]|wc -l`
a=1
for i in `seq $num`
do

dbname=`find /sys/block/ | awk -F/ '{ print $4 }'|grep -v '^$'|grep -vE [0-9]|sed -n ${i}p`
lsblk | grep -oE $dbname'[0-9]{1,3}' &>/dev/null
if [ $? -eq 0 ];then
array2+="第$a块盘:$dbname"
let a++
else
array+="第$a块盘:$dbname"
let a++
fi

done

echo "检测新磁盘,请选择安装在哪个磁盘上"
echo $array

if [ -z $array ];then
echo "检查没有可用新磁盘,以下是已有分区磁盘,如该盘数据可以清空请继续"
echo $array2
while [ "$go" != 'y' ] && [ "$go" != 'n' ]
do
read -p "请问是否继续格式化$db2所选盘安装宝塔?(y/n) " go;
done

if [ "$go" == 'n' ];then
echo "退出安装!"
exit 1;
else
read -p "请输入需要安装的磁盘名:" db2
y=${#dbname}
z=${#db2}
if [[ $z -eq $y ]];then

if [[ ${array2} =~ ${db2} ]];then
echo "继续安装。。"
else
echo "输入可用新磁盘名错误,退出安装"
exit
fi
else
echo "输入错误,退出安装"
exit 1;
fi
dbname2=`df -h | grep ${db2}1|tr -d ' '|cut -d '/' -f4`
dbum=`df -h | grep ${db2} | awk '{print $1}'`
db2test=`fdisk -l|grep ${db2}|awk '{print $1}'|grep -oE '[a-zA-Z]{1,5}[0-9]{1,2}'`
id=`cat -n /etc/fstab|grep -w ${db2test}|awk '{print $1}'`
dbcum=`fdisk -l|grep ${db2}|awk '{print $1}'|grep -oE '[a-zA-Z]{1,5}[0-9]{1,2}'|wc -l`
cp /etc/fstab /etc/fstab.bak
if [[ -z $dbname2 && -n $db2test ]];then
for d in `seq $dbcum`
do
fdisk /dev/$db2 <<-EOF &>/dev/null
d


wq
EOF
done
fdisk /dev/$db2 <<-EOF &>/dev/null
n
p
1


wq
EOF

mkfs.ext4 /dev/${db2}1 &>/dev/null
mkdir /www
echo '/dev/'${db2}1' /www ext4 defaults 0 0' >> /etc/fstab
mount -a
df -h
else
for t in $id
do
sed -i ${t}d /etc/fstab
sleep 1.5
done
umount $dbum &>/dev/null
if [ $? -eq 0 ];then
echo "格式化相应目录挂载,继续安装"
else
yum install -y psmisc &>/dev/null
fuser -m -v -i -k $dbum
umount $dbum
fi
mkfs -t ext4 $dbum &>/dev/null
mkdir /www &>/dev/null
echo $dbum /www ext4 defaults 0 0 >> /etc/fstab
mount -a
df -h
fi
fi

mountck=`df -h |grep ${db2} |tr -d '/'|awk '{print $6}'`
if [[ $mountck != www ]];then
echo "已存在www挂载,挂载失败,请检查,退出安装"
yes|rm ./installbt.sh &>/dev/null
exit
fi
else


read -p "请输入需要安装的磁盘名:" db
n=${#dbname}
m=${#db}
if [[ $m -eq $n ]];then

if [[ ${array} =~ ${db} ]];then
echo "继续安装。。"
else
echo "输入可用新磁盘名错误,退出安装"
exit
fi
else
echo "输入错误,退出安装"
exit 1;
fi

fdisk /dev/$db <<-EOF &>/dev/null
n
p
1



wq
EOF

mkfs.ext4 /dev/${db}1 &>/dev/null
mkdir /www
echo '/dev/'${db}1' /www ext4 defaults 0 0' >> /etc/fstab
mount -a
df -h
mountck=`df -h |grep ${db} |tr -d '/'|awk '{print $6}'`
if [[ $mountck != www ]];then
echo "已存在www挂载,挂载失败,请检查,退出安装"
yes|rm ./installbt.sh &>/dev/null
exit
fi
fi


yes|yum install -y wget &>/dev/null
wget $bt &>/dev/null
echo "[正在安装中,安装过程在10分钟左右,请勿退出!如需中断安装,可以按Ctrl+z进行中断]"
echo -e "\033[32m- - - - - - - - - - - - - - - - - -开始安装 - - - - - - - - - - - - - - - - - -\033[0m "
yes|sh install_6.0.sh
[ "$?" -eq 0 ]&&echo "[最新版宝塔安装完成]"&&clear||exit
echo "[官方安装默认是8888端口,为了防止被爆破扫描,现在更换端口]"
A1=$[$RANDOM%10]
A2=$[$RANDOM%10]
A3=$[$RANDOM%10]
numb=8$A1$A2$A3
echo $numb > /www/server/panel/data/port.pl
/etc/init.d/bt restart &>/dev/null
firewall-cmd --permanent --zone=public --add-port=$numb/tcp &>/dev/null
firewall-cmd --reload &>/dev/null
yes|rm ./install.sh &>/dev/null
yes|rm ./install_6.0.sh &>/dev/null
yes|rm ./installbt.sh &>/dev/null
bt default

else

echo "该系统不是centos系统,将帮您安装宝塔官方提供的三系统集合安装包:Centos/Ubuntu/Debian安装命令 独立运行环境(py3.7)"
echo "目前默认是安装在系统盘,没有优化检查源和挂载,如需要安装在其他盘,可以取消安装,自行到宝塔官网https://www.bt.cn/bbs/thread-19376-1-1.html执行脚本安装。"
curl -sSO http://download.bt.cn/install/install_panel.sh && bash install_panel.sh
fi

installbt2.sh

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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
#!/bin/env bash

yum6=http://xz.itcytblog.cn/CentOS6-Base.repo
yum7=https://mirrors.aliyun.com/repo/Centos-7.repo
yum8=https://mirrors.aliyun.com/repo/Centos-8.repo
bt7=http://download.bt.cn/install/install_6.0.sh
bt6=http://download.bt.cn/install/install.sh

system=`cat /etc/redhat-release | cut -d' ' -f1`
if [ $system == CentOS ];then

release=`cat /etc/redhat-release|tr -d ' a-zA-Z()'|cut -d '.' -f1`
if [ $release -ge 7 ];then
echo "[当前版本为centos7以上的系统,执行安装最新版本宝塔]"
timeout 20 yum install -y wget &>/dev/null
if [ $? -ne 0 ];then
if [ $release -eq 8 ];then
echo "[测试源不可用,更换系统yum源...........]"
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak &>/dev/null
curl -o /etc/yum.repos.d/CentOS-Base.repo $yum8 &>/dev/null
timeout 60 yum makecache &>/dev/null
if [ "$?" -eq 0 ];then
echo "[centos8更换源成功,进行下步安装]"
else
mkdir -p /etc/yum.repos.d/yumbak &>/dev/null
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/yumbak &>/dev/null
curl -o /etc/yum.repos.d/CentOS-Base.repo $yum8 &>/dev/null
timeout 60 yum makecache &>/dev/null
if [ "$?" -eq 0 ];then
echo "[centos8更换源成功,进行下步安装]"
else
echo "[centos8更换yum源失败请自行检查/etc/yum.repos.d/文件的yum配置,及时更换其他有效源]"
exit
fi
fi

else
echo "[测试源不可用,更换系统yum源...........]"
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak &>/dev/null
curl -o /etc/yum.repos.d/CentOS-Base.repo $yum7 &>/dev/null
timeout 60 yum makecache &>/dev/null

if [ "$?" -eq 0 ];then
echo "[centos7更换源成功,进行下步安装]"
else
mkdir -p /etc/yum.repos.d/yumbak &>/dev/null
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/yumbak &>/dev/null
curl -o /etc/yum.repos.d/CentOS-Base.repo $yum7 &>/dev/null
timeout 60 yum makecache &>/dev/null
if [ "$?" -eq 0 ];then
echo "[centos7更换源成功,进行下步安装]"
else
echo "[centos7更换yum源失败请自行检查/etc/yum.repos.d/文件的yum配置yum配置,及时更换其他有效源]"
exit
fi
fi

fi
fi
db=`fdisk -l|grep sectors|grep ^D|tr -d '1-9 ,.'|tr ':' '/'|cut -d '/' -f3|grep db`
db2=`fdisk /dev/$db -l|grep ^/dev|tr ' ' '/'|cut -d '/' -f3|wc -l`
if [ $db2 -eq 0 ];then
fdisk /dev/$db <<-EOF &>/dev/null
n
p
1



wq
EOF
db1=`fdisk /dev/$db -l|grep ^/dev|tr ' ' '/'|cut -d '/' -f3|grep 1`
if [ $? -eq 0 ];then
mkfs.ext4 /dev/$db1 &>/dev/null
mkdir /www
echo '/dev/'$db1' /www ext4 defaults 0 0' >> /etc/fstab
mount -a
df -h
else
echo "[ $db1数据盘不存在或分区未成功,请检查。]"
while [ "$go" != 'y' ] && [ "$go" != 'n' ]
do
read -p "请问是否继续安装宝塔到默认系统盘?(y/n) " go;
done

if [ "$go" == 'n' ];then
yes|rm ./installbt.sh &>/dev/null
echo "退出安装!"
exit
fi

fi
else

echo "[ 第二块磁盘数据盘已经在使用,请检查下,不要覆盖数据盘的数据。]"
while [ "$go" != 'y' ] && [ "$go" != 'n' ]
do
read -p "请问是否继续格式化$db1数据盘安装宝塔?(y/n) " go;
done

if [ "$go" == 'n' ];then
yes|rm ./installbt.sh &>/dev/null
echo "退出安装!"
exit
else
dbname=`df -h | grep ${db}1|tr -d ' '|cut -d '/' -f4`
id=`cat -n /etc/fstab|grep $dbname|tr -d '[:blank:]'|cut -d '/' -f1`
idwc=`cat -n /etc/fstab|grep $dbname|tr -d '[:blank:]'|cut -d '/' -f1|wc -l`
if [ $idwc -eq 1 ];then
umount /$dbname &>/dev/null
if [ $? -eq 0 ];then
echo "格式化相应目录挂载,继续安装"
else
yum install -y psmisc &>/dev/null
sed -i ${id}d /etc/fstab
fuser -m -k /$dbname
umount /$dbname
fi
sed -i ${id}d /etc/fstab
mkfs -t ext4 /dev/${db}1 &>/dev/null
mkdir /www &>/dev/null
echo /dev/${db}1 /www ext4 defaults 0 0 >> /etc/fstab
mount -a
df -h
else
echo "[fstab文件配置错误或没有相关${db}1磁盘的挂载,请检查${db}1分区是否还有数据,挂载备份后,重新执行脚本]"
yes|rm ./installbt.sh &>/dev/null
exit
fi
fi

fi


yes|yum install -y wget &>/dev/null
wget $bt7 &>/dev/null
echo "[正在安装中,安装过程在10分钟左右,请勿退出!如需中断安装,可以按Ctrl+z进行中断]"
echo "yuming- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "
yes|sh install_6.0.sh &> /dev/null
[ "$?" -eq 0 ]&&echo "[最新版宝塔安装完成]"||exit
echo "[官方安装默认是8888端口,为了防止被爆破扫描,现在更换端口]"
A1=$[$RANDOM%10]
A2=$[$RANDOM%10]
A3=$[$RANDOM%10]
numb=8$A1$A2$A3
echo $numb > /www/server/panel/data/port.pl
/etc/init.d/bt restart &>/dev/null
firewall-cmd --permanent --zone=public --add-port=$numb/tcp &>/dev/null
firewall-cmd --reload &>/dev/null
yes|rm ./install.sh &>/dev/null
yes|rm ./install_6.0.sh &>/dev/null
yes|rm ./installbt.sh &>/dev/null
bt default
exit

else
echo "[当前版本为centos7以下的系统,执行安装旧版本宝塔]"
echo " - - - - - - - - - - - - - - - - - - - - - - - - "
echo "[CentOS6已经进入EOL寿命终了阶段,yum源将失效,进行更换其他有效源]"
curl -o /etc/yum.repos.d/CentOS-Base.repo $yum6 &> /dev/null
yum makecache &> /dev/null
if [ "$?" -eq 0 ];then
echo "[更换源成功,进行下步安装]"
else
mkdir -p /etc/yum.repos.d/yumbak &>/dev/null
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/yumbak &>/dev/null
curl -o /etc/yum.repos.d/CentOS-Base.repo $yum6 &>/dev/null
timeout 60 yum makecache &>/dev/null
if [ "$?" -eq 0 ];then
echo "[centos6更换源成功,进行下步安装]"
else
echo "[centos6更换yum源失败请自行检查/etc/yum.repos.d/文件的yum配置yum配置,及时更换其他有效源]"
exit
fi

fi
db=`fdisk -l|grep Disk|grep bytes|tr -d ' 1-9,:'|tr '.' '/'|cut -d '/' -f3|grep db`
db2=`fdisk /dev/$db -l|grep ^/dev|tr ' ' '/'|cut -d '/' -f3|wc -l`
if [ $db2 -eq 0 ];then
fdisk /dev/$db <<-EOF &>/dev/null
n
p
1



wq
EOF
db1=`fdisk /dev/$db -l|grep ^/dev|tr ' ' '/'|cut -d '/' -f3|grep 1`
if [ $? -eq 0 ];then
mkfs.ext4 /dev/$db1 &>/dev/null
mkdir /www
echo '/dev/'$db1' /www ext4 defaults 0 0' >> /etc/fstab
mount -a
df -h

else
echo "[ ${db}1数据盘不存在或分区未成功,请检查。]"
while [ "$go" != 'y' ] && [ "$go" != 'n' ]
do
read -p "请问是否继续安装宝塔到默认系统盘?(y/n) " go;
done
if [ "$go" == 'n' ];then
yes|rm ./installbt.sh &>/dev/null
echo "退出安装!"
exit
fi

fi

else
echo "[ 第二块磁盘数据盘已经在使用,请检查下,不要覆盖数据盘的数据。]"
while [ "$go" != 'y' ] && [ "$go" != 'n' ]
do
read -p "请问是否继续格式化$db1数据盘安装宝塔?(y/n) " go;
done

if [ "$go" == 'n' ];then
yes|rm ./installbt.sh &>/dev/null
echo "退出安装!"
exit
fi
dbname=`df -h | grep ${db}1|tr -d ' '|cut -d '/' -f4`
id=`cat -n /etc/fstab|grep $dbname|tr -d '[:blank:]'|cut -d '/' -f1`
idwc=`cat -n /etc/fstab|grep $dbname|tr -d '[:blank:]'|cut -d '/' -f1|wc -l`
if [ $idwc -eq 1 ];then
umount /$dbname &>/dev/null
if [ $? -eq 0 ];then
echo "格式化相应目录挂载,继续安装"
else
yum install -y psmisc &>/dev/null
sed -i ${id}d /etc/fstab
fuser -m -k /$dbname
umount /$dbname
fi
sed -i ${id}d /etc/fstab
mkfs -t ext4 /dev/${db}1 &>/dev/null
mkdir /www &>/dev/null
echo /dev/${db}1 /www ext4 defaults 0 0 >> /etc/fstab
mount -a
df -h
else
echo "[fstab文件配置错误或没有相关${db}1磁盘的挂载,请检查${db}1分区是否还有数据,挂载备份后,重新执行脚本]"
yes|rm ./installbt.sh &>/dev/null
exit
fi



fi

yes|yum install -y wget &>/dev/null
wget $bt6 &>/dev/null
echo "[正在安装中,安装过程在10分钟左右,请勿退出!如需中断安装,可以按Ctrl+z进行中断]"
echo "yuming- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"
yes|sh install.sh &>/dev/null
[ "$?" -eq 0 ]&&echo "[宝塔5.9安装完成]"||exit
echo "[官方安装默认是8888端口,为了防止被爆破扫描,现在更换端口]"
B1=$[$RANDOM%10]
B2=$[$RANDOM%10]
B3=$[$RANDOM%10]
numb2=8$B1$B2$B3
echo $numb2 > /www/server/panel/data/port.pl
/etc/init.d/bt restart &>/dev/null
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport $numb2 -j ACCEPT &>/dev/null
service iptables save &>/dev/null
yes|rm ./install.sh &>/dev/null
yes|rm ./installbt.sh &>/dev/null
bt default
exit
fi

else

echo "该系统不是centos系统,将帮您安装宝塔官方提供的三系统集合安装包:Centos/Ubuntu/Debian安装命令 独立运行环境(py3.7)"
echo "目前默认是安装在系统盘,没有优化检查源和挂载,如需要安装在其他盘,可以取消安装,自行到宝塔官网https://www.bt.cn/bbs/thread-19376-1-1.html执行脚本安装。"
curl -sSO http://download.bt.cn/install/install_panel.sh && bash install_panel.sh
fi