Rename webmininstall.sh to p.sh
Browse files- p.sh +759 -0
- webmininstall.sh +0 -197
p.sh
ADDED
@@ -0,0 +1,759 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/bin/bash
|
2 |
+
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
3 |
+
export PATH
|
4 |
+
LANG=en_US.UTF-8
|
5 |
+
|
6 |
+
STRIPE_LINE="----------------------------------------------------"
|
7 |
+
DOUBLE_STRIPE_LINE="============================================"
|
8 |
+
|
9 |
+
HTTP_STR="http"
|
10 |
+
|
11 |
+
XP_VERSION="v1.1.12"
|
12 |
+
|
13 |
+
API_HOST="https://api.xp.cn"
|
14 |
+
DL_HOST="https://dl.xp.cn"
|
15 |
+
|
16 |
+
current_dir=$(pwd)
|
17 |
+
INSTALL_LOG_PATH="${current_dir}/xp-install.log"
|
18 |
+
|
19 |
+
start_time=`date +%s`
|
20 |
+
|
21 |
+
IDC_CODE=""
|
22 |
+
|
23 |
+
if [ $(whoami) != "root" ];then
|
24 |
+
echo "xp面板安装命令需要root权限执行"
|
25 |
+
exit 1;
|
26 |
+
fi
|
27 |
+
|
28 |
+
is64bit=$(getconf LONG_BIT)
|
29 |
+
if [ "${is64bit}" != '64' ];then
|
30 |
+
echo "xp面板仅支持64位系统安装";
|
31 |
+
fi
|
32 |
+
|
33 |
+
arch_check=$(uname -m)
|
34 |
+
if [ "${arch_check}" != "x86_64" ] && [ "${arch_check}" != "amd64" ]; then
|
35 |
+
echo "xp面板仅支持x86_64或者amd64架构CPU的系统安装";
|
36 |
+
fi
|
37 |
+
|
38 |
+
# Centos6不支持安装
|
39 |
+
centos6_check=$(cat /etc/redhat-release | grep ' 6.' | grep -iE 'centos|Red Hat')
|
40 |
+
if [ "${centos6_check}" ];then
|
41 |
+
echo "xp面板不支持Centos6,请更换Centos7/8或更高版本的系统"
|
42 |
+
exit 1
|
43 |
+
fi
|
44 |
+
|
45 |
+
# ubuntu16以下不支持安装
|
46 |
+
ubuntu_check=$(cat /etc/issue|grep Ubuntu|awk '{print $2}'|cut -f 1 -d '.')
|
47 |
+
if [ "${ubuntu_check}" ] && [ "${ubuntu_check}" -lt "16" ];then
|
48 |
+
echo "xp面板不支持Ubuntu ${ubuntu_check},请更换Ubuntu18/20或更高版本的系统"
|
49 |
+
exit 1
|
50 |
+
fi
|
51 |
+
|
52 |
+
hostname_check=$(cat /etc/hostname)
|
53 |
+
if [ -z "${hostname_check}" ];then
|
54 |
+
echo "无法安装xp面板,因为当前主机名hostname为空,请设置hostname后重新安装"
|
55 |
+
exit 1
|
56 |
+
fi
|
57 |
+
|
58 |
+
Get_LocalInfo(){
|
59 |
+
if [ -s "/etc/redhat-release" ];then
|
60 |
+
SYS_VERSION=$(cat /etc/redhat-release | sed 's/\\n//g' | sed 's/\\l//g')
|
61 |
+
elif [ -s "/etc/issue" ]; then
|
62 |
+
SYS_VERSION=$(cat /etc/issue | sed 's/\\n//g' | sed 's/\\l//g' | tr -d '\n' | tr -d '\n')
|
63 |
+
fi
|
64 |
+
SYS_INFO=$(uname -a)
|
65 |
+
SYS_BIT=$(getconf LONG_BIT)
|
66 |
+
MEM_TOTAL=$(free -m|grep Mem|awk '{print $2}')
|
67 |
+
CPU_INFO=$(getconf _NPROCESSORS_ONLN)
|
68 |
+
DISK_USE=$(df -h / | tail -n 1 | awk '{printf "size:%s;used:%s;avil:%s;percent:%s", $2, $3, $4, $5}')
|
69 |
+
}
|
70 |
+
|
71 |
+
cd ~
|
72 |
+
SETUP_PATH="/xp"
|
73 |
+
|
74 |
+
Get_Sysinfo(){
|
75 |
+
Get_LocalInfo
|
76 |
+
|
77 |
+
echo -e ${SYS_VERSION}
|
78 |
+
echo -e Bit:${SYS_BIT} Mem:${MEM_TOTAL}M Core:${CPU_INFO}
|
79 |
+
echo -e ${SYS_INFO}
|
80 |
+
echo -e "${DOUBLE_STRIPE_LINE}"
|
81 |
+
echo -e "请截图以上报错信息发给客服人员"
|
82 |
+
echo -e "${DOUBLE_STRIPE_LINE}"
|
83 |
+
if [ -f "/usr/bin/qrencode" ];then
|
84 |
+
echo -e "微信扫码联系企业微信技术求助"
|
85 |
+
echo -e "${DOUBLE_STRIPE_LINE}"
|
86 |
+
qrencode -t ANSIUTF8 "https://work.weixin.qq.com/kfid/kfc8e99c5e9fb4761c6"
|
87 |
+
echo -e "${DOUBLE_STRIPE_LINE}"
|
88 |
+
else
|
89 |
+
echo -e "手机访问以下链接、扫码联系企业微信技术求助"
|
90 |
+
echo -e "${DOUBLE_STRIPE_LINE}"
|
91 |
+
echo -e "联系链接:https://work.weixin.qq.com/kfid/kfc8e99c5e9fb4761c6"
|
92 |
+
echo -e "${DOUBLE_STRIPE_LINE}"
|
93 |
+
fi
|
94 |
+
}
|
95 |
+
|
96 |
+
Red_Err(){
|
97 |
+
echo "${DOUBLE_STRIPE_LINE}";
|
98 |
+
printf '\033[1;31;40m%b\033[0m\n' "$@";
|
99 |
+
Get_Sysinfo
|
100 |
+
Analysis_Log
|
101 |
+
exit 1;
|
102 |
+
}
|
103 |
+
|
104 |
+
# 检测是否装了别的环境
|
105 |
+
Env_Check(){
|
106 |
+
mysqld_exists=$(ps -ef |grep mysqld|grep -v grep|grep -v /www/server/mysql)
|
107 |
+
php_exists=$(ps -ef|grep php-fpm|grep master|grep -v /www/server/php)
|
108 |
+
nginx_exists=$(ps -ef|grep nginx|grep master|grep -v /www/server/nginx)
|
109 |
+
httpd_exists=$(ps -ef |grep -E 'httpd|apache'|grep -v /www/server/apache|grep -v grep)
|
110 |
+
if [ "${php_exists}" ] || [ "${mysqld_exists}" ] || [ "${nginx_exists}" ] || [ "${httpd_exists}" ];then
|
111 |
+
Force_Install_Confirm
|
112 |
+
fi
|
113 |
+
}
|
114 |
+
|
115 |
+
# 强制安装确认
|
116 |
+
Force_Install_Confirm(){
|
117 |
+
if [ "${INSTALL_FORCE}" ];then
|
118 |
+
return
|
119 |
+
fi
|
120 |
+
echo -e "${STRIPE_LINE}"
|
121 |
+
echo -e "检查已有其他Web/mysql环境,继续安装可能影响现有站点及数据"
|
122 |
+
echo -e "Web/mysql service is alreday installed,Can't install panel"
|
123 |
+
echo -e "${STRIPE_LINE}"
|
124 |
+
echo -e "已知风险/Enter yes to force installation"
|
125 |
+
read -p "输入yes强制安装: " yes;
|
126 |
+
if [ "$yes" != "yes" ];then
|
127 |
+
echo -e "------------"
|
128 |
+
echo "取消安装"
|
129 |
+
exit;
|
130 |
+
fi
|
131 |
+
start_time=`date +%s`
|
132 |
+
INSTALL_FORCE="true"
|
133 |
+
}
|
134 |
+
|
135 |
+
# 获取包管理器
|
136 |
+
Get_PM(){
|
137 |
+
if [ -f "/usr/bin/yum" ] && [ -d "/etc/yum.repos.d" ]; then
|
138 |
+
PM="yum"
|
139 |
+
elif [ -f "/usr/bin/apt-get" ] && [ -f "/usr/bin/dpkg" ]; then
|
140 |
+
PM="apt-get"
|
141 |
+
fi
|
142 |
+
}
|
143 |
+
|
144 |
+
# 自动挂载Swap
|
145 |
+
Auto_Swap_Mem(){
|
146 |
+
MEM_TOTAL=$(free -g|grep Mem|awk '{print $2}')
|
147 |
+
if [ "${MEM_TOTAL}" -le "1" ];then
|
148 |
+
swap=$(free |grep Swap|awk '{print $2}')
|
149 |
+
if [ "${swap}" -gt 1 ];then
|
150 |
+
echo "Swap total sizse: $swap";
|
151 |
+
return;
|
152 |
+
fi
|
153 |
+
if [ ! -d /www ];then
|
154 |
+
mkdir /www
|
155 |
+
fi
|
156 |
+
swap_file="/www/swap"
|
157 |
+
dd if=/dev/zero of=$swap_file bs=1M count=1025
|
158 |
+
mkswap -f $swap_file
|
159 |
+
swapon $swap_file
|
160 |
+
echo "$swap_file swap swap defaults 0 0" >> /etc/fstab
|
161 |
+
swap=`free |grep Swap|awk '{print $2}'`
|
162 |
+
if [ $swap -gt 1 ];then
|
163 |
+
echo "Swap total sizse: $swap";
|
164 |
+
return;
|
165 |
+
fi
|
166 |
+
|
167 |
+
sed -i "/\/www\/swap/d" /etc/fstab
|
168 |
+
rm -f $swap_file
|
169 |
+
fi
|
170 |
+
}
|
171 |
+
|
172 |
+
Add_Service(){
|
173 |
+
if [ "${PM}" == "yum" ] || [ "${PM}" == "dnf" ]; then
|
174 |
+
chkconfig --add xpd
|
175 |
+
chkconfig --level 2345 xpd on
|
176 |
+
sudo cp ${SETUP_PATH}/init/xpd.service /usr/lib/systemd/system/xpd.service
|
177 |
+
sudo chmod +x /usr/lib/systemd/system/xpd.service
|
178 |
+
sudo systemctl enable xpd
|
179 |
+
elif [ "${PM}" == "apt-get" ]; then
|
180 |
+
sudo update-rc.d xpd defaults
|
181 |
+
fi
|
182 |
+
}
|
183 |
+
|
184 |
+
# 设置软件源
|
185 |
+
Set_Centos_Repo(){
|
186 |
+
huawei_check=$(cat /etc/motd |grep "Huawei Cloud")
|
187 |
+
if [ "${huawei_check}" ] && [ "${is64bit}" == "64" ];then
|
188 |
+
\cp -rpa /etc/yum.repos.d/ /etc/yumBak
|
189 |
+
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*.repo
|
190 |
+
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.epel.cloud|g' /etc/yum.repos.d/CentOS-*.repo
|
191 |
+
rm -f /etc/yum.repos.d/epel.repo
|
192 |
+
rm -f /etc/yum.repos.d/epel-*
|
193 |
+
fi
|
194 |
+
aliyun_check=$(cat /etc/motd|grep "Alibaba Cloud ")
|
195 |
+
if [ "${aliyun_check}" ] && [ "${is64bit}" == "64" ] && [ ! -f "/etc/yum.repos.d/Centos-vault-8.5.2111.repo" ];then
|
196 |
+
rename '.repo' '.repo.bak' /etc/yum.repos.d/*.repo
|
197 |
+
wget https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo -O /etc/yum.repos.d/Centos-vault-8.5.2111.repo
|
198 |
+
wget https://mirrors.aliyun.com/repo/epel-archive-8.repo -O /etc/yum.repos.d/epel-archive-8.repo
|
199 |
+
sed -i 's/mirrors.cloud.aliyuncs.com/url_tmp/g' /etc/yum.repos.d/Centos-vault-8.5.2111.repo && sed -i 's/mirrors.aliyun.com/mirrors.cloud.aliyuncs.com/g' /etc/yum.repos.d/Centos-vault-8.5.2111.repo && sed -i 's/url_tmp/mirrors.aliyun.com/g' /etc/yum.repos.d/Centos-vault-8.5.2111.repo
|
200 |
+
sed -i 's/mirrors.aliyun.com/mirrors.cloud.aliyuncs.com/g' /etc/yum.repos.d/epel-archive-8.repo
|
201 |
+
fi
|
202 |
+
mirror_check=$(cat /etc/yum.repos.d/CentOS-Linux-AppStream.repo |grep "[^#]mirror.centos.org")
|
203 |
+
if [ "${mirror_check}" ] && [ "${is64bit}" == "64" ];then
|
204 |
+
\cp -rpa /etc/yum.repos.d/ /etc/yumBak
|
205 |
+
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*.repo
|
206 |
+
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.epel.cloud|g' /etc/yum.repos.d/CentOS-*.repo
|
207 |
+
fi
|
208 |
+
}
|
209 |
+
|
210 |
+
# 安装rpm的基础包
|
211 |
+
Install_RPM_Base_Pkg(){
|
212 |
+
yum_path=/etc/yum.conf
|
213 |
+
centos8_check=$(cat /etc/redhat-release | grep ' 8.' | grep -iE 'centos|Red Hat')
|
214 |
+
if [ "${centos8_check}" ];then
|
215 |
+
Set_Centos_Repo
|
216 |
+
fi
|
217 |
+
is_exc=$(cat $yum_path|grep httpd)
|
218 |
+
if [ "$is_exc" = "" ];then
|
219 |
+
echo "exclude=httpd nginx php mysql mairadb python-psutil python2-psutil" >> $yum_path
|
220 |
+
fi
|
221 |
+
|
222 |
+
if [ -f "/etc/redhat-release" ] && [ $(cat /etc/os-release|grep PLATFORM_ID|grep -oE "el8") ];then
|
223 |
+
yum config-manager --set-enabled powertools
|
224 |
+
yum config-manager --set-enabled PowerTools
|
225 |
+
fi
|
226 |
+
|
227 |
+
if [ -f "/etc/redhat-release" ] && [ $(cat /etc/os-release|grep PLATFORM_ID|grep -oE "el9") ];then
|
228 |
+
dnf config-manager --set-enabled crb -y
|
229 |
+
fi
|
230 |
+
|
231 |
+
# 同步服务器时间
|
232 |
+
echo 'Synchronizing system time...'
|
233 |
+
get_server_time=$(curl -sS --connect-timeout 3 -m 60 ${API_HOST}/api/getTime)
|
234 |
+
if [ "${get_server_time}" ];then
|
235 |
+
date -s "$(date -d @$get_server_time +"%Y-%m-%d %H:%M:%S")"
|
236 |
+
fi
|
237 |
+
|
238 |
+
if [ -z "${centos8_check}" ]; then
|
239 |
+
yum install ntp -y
|
240 |
+
rm -rf /etc/localtime
|
241 |
+
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
242 |
+
|
243 |
+
# 尝试同步国际时间(从ntp服务器)
|
244 |
+
ntpdate 0.asia.pool.ntp.org
|
245 |
+
setenforce 0
|
246 |
+
fi
|
247 |
+
|
248 |
+
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
|
249 |
+
yum_packs="libcurl-devel wget tar gcc make zip unzip openssl openssl-devel libxml2 libxml2-devel libxslt* zlib zlib-devel libjpeg-devel libpng-devel libwebp libwebp-devel freetype freetype-devel lsof pcre pcre-devel vixie-cron crontabs icu libicu-devel c-ares libffi-devel bzip2-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel qrencode clang libaio ncurses-compat-libs"
|
250 |
+
echo "下列软件将被安装:${yum_packs}"
|
251 |
+
yum install -y --skip-broken ${yum_packs}
|
252 |
+
|
253 |
+
for yum_pack in ${yum_packs}
|
254 |
+
do
|
255 |
+
rpm_pack=$(rpm -q ${yum_pack})
|
256 |
+
pack_check=$(echo ${rpm_pack}|grep not)
|
257 |
+
if [ "${pack_check}" ]; then
|
258 |
+
yum install ${yum_pack} -y
|
259 |
+
fi
|
260 |
+
done
|
261 |
+
|
262 |
+
echo "安装必备软件:iptables"
|
263 |
+
yum install -y iptables
|
264 |
+
|
265 |
+
if [ -f "/usr/bin/dnf" ]; then
|
266 |
+
dnf install -y redhat-rpm-config
|
267 |
+
fi
|
268 |
+
|
269 |
+
ali_os=$(cat /etc/redhat-release |grep "Alibaba Cloud Linux release 3")
|
270 |
+
if [ -z "${ali_os}" ];then
|
271 |
+
yum install epel-release -y
|
272 |
+
fi
|
273 |
+
}
|
274 |
+
|
275 |
+
# 安装deb基础包
|
276 |
+
Install_Deb_Base_Pkg(){
|
277 |
+
# 如果apt存在锁,则手动删除释放锁文件
|
278 |
+
lf_pid=$(sudo lsof /var/lib/dpkg/lock-frontend | awk 'NR==2{print $2}')
|
279 |
+
if [ -n "$lf_pid" ]; then
|
280 |
+
sudo kill -9 $lf_pid
|
281 |
+
fi
|
282 |
+
l_pid=$(sudo lsof /var/lib/dpkg/lock | awk 'NR==2{print $2}')
|
283 |
+
if [ -n "$l_pid" ]; then
|
284 |
+
sudo kill -9 $l_pid
|
285 |
+
fi
|
286 |
+
|
287 |
+
ln -sf bash /bin/sh
|
288 |
+
ubuntu_22=$(cat /etc/issue|grep "Ubuntu 22")
|
289 |
+
if [ "${ubuntu_22}" ];then
|
290 |
+
apt-get remove needrestart -y
|
291 |
+
fi
|
292 |
+
aliyun_check=$(cat /etc/motd|grep "Alibaba Cloud ")
|
293 |
+
if [ "${aliyun_check}" ] && [ "${ubuntu_22}" ];then
|
294 |
+
apt-get remove libicu70 -y
|
295 |
+
fi
|
296 |
+
apt-get update -y
|
297 |
+
apt-get install bash -y
|
298 |
+
if [ -f "/usr/bin/bash" ];then
|
299 |
+
ln -sf /usr/bin/bash /bin/sh
|
300 |
+
fi
|
301 |
+
apt-get install ruby -y
|
302 |
+
apt-get install lsb-release -y
|
303 |
+
|
304 |
+
libcurl_ver=$(dpkg -l|grep libcurl4|awk '{print $3}')
|
305 |
+
if [ "${libcurl_ver}" == "7.68.0-1ubuntu2.8" ];then
|
306 |
+
apt-get remove libcurl4 -y
|
307 |
+
apt-get install curl -y
|
308 |
+
fi
|
309 |
+
|
310 |
+
deb_packs="wget curl libcurl4-openssl-dev gcc make zip unzip tar openssl libssl-dev libxml2 libxml2-dev zlib1g zlib1g-dev libjpeg-dev libpng-dev lsof libpcre3 libpcre3-dev cron net-tools swig build-essential libffi-dev libbz2-dev libncurses-dev libsqlite3-dev iptables libreadline-dev tk-dev libgdbm-dev libdb-dev libdb++-dev libpcap-dev xz-utils git qrencode libwebp-dev libsodium-dev clang libaio1 libncurses5"
|
311 |
+
echo "下列软件将被安装:${deb_packs}"
|
312 |
+
apt-get install -y -m $deb_packs --force-yes
|
313 |
+
|
314 |
+
for deb_pack in ${deb_packs}
|
315 |
+
do
|
316 |
+
pack_check=$(dpkg -l|grep ${deb_pack})
|
317 |
+
if [ "$?" -ne "0" ] ;then
|
318 |
+
apt-get install -y $deb_pack
|
319 |
+
fi
|
320 |
+
done
|
321 |
+
|
322 |
+
echo "安装必备软件:iptables"
|
323 |
+
apt-get install -y iptables
|
324 |
+
|
325 |
+
if [ ! -d '/etc/letsencrypt' ];then
|
326 |
+
mkdir -p /etc/letsencryp
|
327 |
+
mkdir -p /var/spool/cron
|
328 |
+
if [ ! -f '/var/spool/cron/crontabs/root' ];then
|
329 |
+
echo '' > /var/spool/cron/crontabs/root
|
330 |
+
chmod 600 /var/spool/cron/crontabs/root
|
331 |
+
fi
|
332 |
+
fi
|
333 |
+
}
|
334 |
+
|
335 |
+
Init_DB(){
|
336 |
+
if [ ! -d "${SETUP_PATH}/db" ];then
|
337 |
+
Red_Err "数据库文件缺失,请检查安装包"
|
338 |
+
exit 1
|
339 |
+
fi
|
340 |
+
if [ ! -f "${SETUP_PATH}/init/init.sql" ];then
|
341 |
+
Red_Err "初始化数据文件缺失,请检查安装包"
|
342 |
+
exit 1
|
343 |
+
fi
|
344 |
+
|
345 |
+
chmod -R 0777 ${SETUP_PATH}/db
|
346 |
+
|
347 |
+
time_now_str=$(date "+%Y-%m-%d %H:%M:%S")
|
348 |
+
sed -i -e "s/{port}/${panel_port}/g" -e "s/{account}/${panel_user}/g" -e "s/{pwd}/${panel_pwd}/g" -e "s/{pwdMd5}/${panel_pwd_md5}/g" -e "s/{safeEntry}/${safe_entry}/g" -e "s/{time}/${time_now_str}/g" -e "s/{xpVersion}/${XP_VERSION}/g" -e "s/{idcCode}/${IDC_CODE}/g" ${SETUP_PATH}/init/init.sql
|
349 |
+
|
350 |
+
msg=$(sqlite3 ${SETUP_PATH}/db/app.db < ${SETUP_PATH}/init/init.sql 2>&1)
|
351 |
+
if [ $? -ne 0 ];then
|
352 |
+
Red_Err "数据库初始化失败,错误信息:${msg}"
|
353 |
+
exit 1
|
354 |
+
fi
|
355 |
+
}
|
356 |
+
|
357 |
+
Down_Deps(){
|
358 |
+
for pkg in $@
|
359 |
+
do
|
360 |
+
dl_url="${DL_HOST}/deps/${pkg}.tar.gz"
|
361 |
+
cd ${SETUP_PATH}/download
|
362 |
+
wget -O ./${pkg}.tar.gz "${dl_url}"
|
363 |
+
mkdir -p ./${pkg}
|
364 |
+
tar -zxvf ./${pkg}.tar.gz -C ./${pkg}
|
365 |
+
sudo bash ./${pkg}/${pkg}_install.sh
|
366 |
+
cd $current_dir
|
367 |
+
done
|
368 |
+
}
|
369 |
+
|
370 |
+
Check_CMD(){
|
371 |
+
for cmd in $@
|
372 |
+
do
|
373 |
+
if ! command -v "$cmd" &> /dev/null; then
|
374 |
+
Red_Err "Error: Command '$cmd' not found."
|
375 |
+
exit 1
|
376 |
+
fi
|
377 |
+
done
|
378 |
+
}
|
379 |
+
|
380 |
+
Down_XP(){
|
381 |
+
mkdir -p $SETUP_PATH/download
|
382 |
+
wget -O ${SETUP_PATH}/download/xp-panel.tar.gz "${DL_HOST}/dl/xp/xp-panel.tar.gz"
|
383 |
+
}
|
384 |
+
|
385 |
+
Init_Tools(){
|
386 |
+
xp_tools_dir="/xp/tools"
|
387 |
+
|
388 |
+
if [ -d "$xp_tools_dir" ]; then
|
389 |
+
for tool in "$xp_tools_dir"/*.sh; do
|
390 |
+
filename=$(basename "$tool" .sh)
|
391 |
+
if [ -L "/usr/bin/$filename" ]; then
|
392 |
+
rm "/usr/bin/$filename"
|
393 |
+
fi
|
394 |
+
ln -s "$tool" "/usr/bin/$filename"
|
395 |
+
done
|
396 |
+
fi
|
397 |
+
}
|
398 |
+
|
399 |
+
Init_XP(){
|
400 |
+
Check_CMD sqlite3 iptables vsftpd
|
401 |
+
|
402 |
+
mkdir -p $SETUP_PATH/server
|
403 |
+
mkdir -p $SETUP_PATH/panel
|
404 |
+
mkdir -p $SETUP_PATH/wwwlogs
|
405 |
+
mkdir -p $SETUP_PATH/applogs
|
406 |
+
mkdir -p $SETUP_PATH/www
|
407 |
+
mkdir -p $SETUP_PATH/backup
|
408 |
+
mkdir -p $SETUP_PATH/db
|
409 |
+
mkdir -p $SETUP_PATH/init
|
410 |
+
|
411 |
+
cd $SETUP_PATH
|
412 |
+
sudo tar -zxvf $SETUP_PATH/download/xp-panel.tar.gz -C $SETUP_PATH > /dev/null 2>&1
|
413 |
+
|
414 |
+
sudo chown -R root /xp/*
|
415 |
+
sudo chmod -R 0777 /xp/*
|
416 |
+
|
417 |
+
# 给程序执行权限
|
418 |
+
sudo chmod +x /xp/panel/app
|
419 |
+
sudo chmod +x /xp/tasks/xp-tasks
|
420 |
+
sudo chmod +x /xp/*.sh
|
421 |
+
|
422 |
+
if [ ! -d "/etc/init.d" ];then
|
423 |
+
mkdir -p /etc/init.d
|
424 |
+
fi
|
425 |
+
|
426 |
+
if [ -f "/etc/init.d/xpd" ]; then
|
427 |
+
/etc/init.d/xpd stop
|
428 |
+
sleep 1
|
429 |
+
fi
|
430 |
+
|
431 |
+
# 添加一个www用户
|
432 |
+
run_user="www"
|
433 |
+
www_user=$(cat /etc/passwd|cut -d ":" -f 1|grep ^www$)
|
434 |
+
if [ "${www_user}" != "www" ];then
|
435 |
+
groupadd ${run_user}
|
436 |
+
useradd -s /sbin/nologin -g ${run_user} ${run_user}
|
437 |
+
fi
|
438 |
+
|
439 |
+
# 设置面板端口
|
440 |
+
panel_port="7860"
|
441 |
+
# if [ "${PANEL_PORT}" ];then
|
442 |
+
# # ��查端口是否被占用
|
443 |
+
# result=$(netstat -tln | grep ":${PANEL_PORT}")
|
444 |
+
# if [ -n "$result" ]; then
|
445 |
+
# Red_Err "安装面板失败,指定的端口 ${PANEL_PORT} 已被占用"
|
446 |
+
# fi
|
447 |
+
# panel_port=$PANEL_PORT
|
448 |
+
# else
|
449 |
+
# # 随机生成端口号
|
450 |
+
# panel_port=$(expr $RANDOM % 55535 + 10000)
|
451 |
+
# # 检查端口是否被占用
|
452 |
+
# result=$(netstat -tln | grep ":$panel_port")
|
453 |
+
# while [ -n "$result" ]; do
|
454 |
+
# panel_port=$(expr $RANDOM % 55535 + 10000)
|
455 |
+
# result=$(netstat -tln | grep ":$panel_port")
|
456 |
+
# done
|
457 |
+
# fi
|
458 |
+
|
459 |
+
# 设置面板用户名
|
460 |
+
panel_user=$(cat /dev/urandom | head -n 16 | md5sum | head -c 8)
|
461 |
+
if [ "$PANEL_USER" ];then
|
462 |
+
panel_user=$PANEL_USER
|
463 |
+
fi
|
464 |
+
|
465 |
+
# 生成面板默认密码
|
466 |
+
panel_pwd=$(cat /dev/urandom | head -n 16 | md5sum | head -c 8)
|
467 |
+
if [ "$PANEL_PWD" ];then
|
468 |
+
panel_pwd=$PANEL_PWD
|
469 |
+
fi
|
470 |
+
sleep 1
|
471 |
+
panel_pwd_md5=$(echo -n $panel_pwd | md5sum | cut -d ' ' -f 1)
|
472 |
+
|
473 |
+
# 生成安全入口
|
474 |
+
if [ -z "$SAFE_ENTRY" ];then
|
475 |
+
safe_entry="1"
|
476 |
+
else
|
477 |
+
safe_entry="1"
|
478 |
+
fi
|
479 |
+
|
480 |
+
# 安装xp服务
|
481 |
+
sudo cp ${SETUP_PATH}/init/xpd /etc/init.d/xpd
|
482 |
+
sudo chmod +x /etc/init.d/xpd
|
483 |
+
|
484 |
+
# 给xp脚本创建软连接
|
485 |
+
sudo chmod 777 /xp/xp.sh
|
486 |
+
if [ -f "/usr/bin/xp" ];then
|
487 |
+
sudo rm -f /usr/bin/xp
|
488 |
+
fi
|
489 |
+
sudo ln -s /xp/xp.sh /usr/bin/xp
|
490 |
+
|
491 |
+
# 给tools目录下的脚本创建软连接
|
492 |
+
Init_Tools
|
493 |
+
|
494 |
+
Init_DB
|
495 |
+
|
496 |
+
# 配置vsftpd
|
497 |
+
sudo touch /var/log/vsftpd.log
|
498 |
+
sudo chmod 777 /var/log/vsftpd.log
|
499 |
+
sudo touch /var/log/vsftpd_xfer.log
|
500 |
+
sudo chmod 777 /var/log/vsftpd_xfer.log
|
501 |
+
sudo setsid /usr/local/bin/vsftpd /etc/vsftpd.conf &
|
502 |
+
}
|
503 |
+
|
504 |
+
Get_IP_Info(){
|
505 |
+
IP_ADDR=""
|
506 |
+
IP_ADDR=$(curl -sS --connect-timeout 10 -m 60 ${API_HOST}/api/myIP)
|
507 |
+
|
508 |
+
LOCAL_IP=$(ip addr | grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -E -v "^127\.|^255\.|^0\." | head -n 1)
|
509 |
+
}
|
510 |
+
|
511 |
+
Kill_Old_XP(){
|
512 |
+
sudo pkill -f /xp/panel/app
|
513 |
+
sudo pkill -f /xp/tasks/xp-task
|
514 |
+
}
|
515 |
+
|
516 |
+
End(){
|
517 |
+
sudo bash $SETUP_PATH/run.sh
|
518 |
+
echo -e "\033[32m小皮面板启动中\033[0m"
|
519 |
+
|
520 |
+
Panel_Pid=$(ps -ef | grep /xp/panel/app | grep -v grep | awk '{print $2}')
|
521 |
+
Panel_Status="面板状态:未知"
|
522 |
+
if [ -n "${Panel_Pid}" ]; then
|
523 |
+
Panel_Status="\033[32m面板状态:运行中\033[0m"
|
524 |
+
else
|
525 |
+
Panel_Status="\033[31m面板状态:未运行\033[0m"
|
526 |
+
fi
|
527 |
+
|
528 |
+
Task_Pid=$(sudo ps -ef | grep /xp/tasks/xp-tasks | grep -v grep | awk '{print $2}')
|
529 |
+
Task_Status="面板状态:未知"
|
530 |
+
if [ -n "${Task_Pid}" ]; then
|
531 |
+
Task_Status="\033[32m队列状态:运行中\033[0m"
|
532 |
+
else
|
533 |
+
Task_Status="\033[31m队列状态:未运行\033[0m"
|
534 |
+
fi
|
535 |
+
echo -e "================================================================"
|
536 |
+
echo -e " \033[32m小皮面板安装成功\033[0m"
|
537 |
+
echo -e "=========================面板状态==============================="
|
538 |
+
echo -e " ${Panel_Status}"
|
539 |
+
echo -e " ${Task_Status}"
|
540 |
+
echo -e "=========================面板账户信息==========================="
|
541 |
+
echo -e ""
|
542 |
+
echo -e " 面板版本: ${XP_VERSION}"
|
543 |
+
echo -e " 外网面板地址: ${HTTP_STR}://${IP_ADDR}:${panel_port}/${safe_entry}"
|
544 |
+
echo -e " 内网面板地址: ${HTTP_STR}://${LOCAL_IP}:${panel_port}/${safe_entry}"
|
545 |
+
echo -e " username: ${panel_user}"
|
546 |
+
echo -e " password: ${panel_pwd}"
|
547 |
+
echo -e ""
|
548 |
+
echo -e "=========================面板注意事项==========================="
|
549 |
+
echo -e ""
|
550 |
+
echo -e " 【云服务器】请在安全组放行 $panel_port 端口"
|
551 |
+
echo -e " 面板工具命令: xp"
|
552 |
+
echo -e ""
|
553 |
+
echo -e "================================================================"
|
554 |
+
end_time=`date +%s`
|
555 |
+
((out_time=($end_time-$start_time)))
|
556 |
+
echo -e "安装花费时间:\033[32m $out_time \033[0m秒"
|
557 |
+
echo -e "安装日志路径:\033[32m $INSTALL_LOG_PATH \033[0m"
|
558 |
+
|
559 |
+
echo -e "安装花费时间:\033[32m $out_time \033[0m秒"
|
560 |
+
}
|
561 |
+
|
562 |
+
Install_Tip(){
|
563 |
+
echo "+${STRIPE_LINE}${STRIPE_LINE}"
|
564 |
+
echo "| xp-panel for CentOS/Ubuntu/Debian"
|
565 |
+
echo "+${STRIPE_LINE}${STRIPE_LINE}"
|
566 |
+
echo "| Copyright © 2015-2050 XP-SOFT(https://xp.cn) All rights reserved."
|
567 |
+
echo "+${STRIPE_LINE}${STRIPE_LINE}"
|
568 |
+
echo "| The WebPanel URL will be http://SERVER_IP:${PANEL_PORT} when installed."
|
569 |
+
echo "+${STRIPE_LINE}${STRIPE_LINE}"
|
570 |
+
echo "| 为了您的正常使用,请确保使用全新或纯净的系统安装小皮面板"
|
571 |
+
echo "+${STRIPE_LINE}${STRIPE_LINE}"
|
572 |
+
echo "| 安装后可能会影响您系统原有的防火墙、ftp、数据库、开发环境等"
|
573 |
+
echo "+${STRIPE_LINE}${STRIPE_LINE}"
|
574 |
+
echo "| 开始安装后将会停止系统正在运行的小皮面板,并覆盖之前面板的数据,请注意备份"
|
575 |
+
echo "+${STRIPE_LINE}${STRIPE_LINE}"
|
576 |
+
}
|
577 |
+
|
578 |
+
Open_Log(){
|
579 |
+
touch $INSTALL_LOG_PATH
|
580 |
+
exec 4>$INSTALL_LOG_PATH
|
581 |
+
exec > >(tee >(cat >&4)) 2>&1
|
582 |
+
}
|
583 |
+
|
584 |
+
Analysis_Log(){
|
585 |
+
exec 4>&-
|
586 |
+
err_end=$(grep -n "请截图以上报错信息发给客服人员" $INSTALL_LOG_PATH | cut -d: -f1 | tail -n 1)
|
587 |
+
if [ -n "$err_end" ]; then
|
588 |
+
err_start=$(($err_end - 50))
|
589 |
+
if [ $err_start -lt 0 ]; then
|
590 |
+
err_start=1
|
591 |
+
fi
|
592 |
+
err=$(sed 's/\x1B\[[0-9;]*[JKmsu]//g' $INSTALL_LOG_PATH | sed -n "${err_start},${err_end}p" | tr '\n' ';')
|
593 |
+
d='{"ver": "'${XP_VERSION}'", "err": "'${err}'","sysInfo": "'${SYS_INFO}'", "ip":"", "idc":"'${IDC_CODE}'"}'
|
594 |
+
curl -s -X POST -H "Content-Type: application/json" -d "${d}" "${API_HOST}/api/installErr" 2>&1 >/dev/null
|
595 |
+
fi
|
596 |
+
|
597 |
+
err_end=$(grep -n "状态:未运行" $INSTALL_LOG_PATH | cut -d: -f1 | tail -n 1)
|
598 |
+
if [ -n "$err_end" ]; then
|
599 |
+
err_start=$(($err_end - 50))
|
600 |
+
if [ $err_start -lt 0 ]; then
|
601 |
+
err_start=1
|
602 |
+
fi
|
603 |
+
err=$(sed 's/\x1B\[[0-9;]*[JKmsu]//g' $INSTALL_LOG_PATH | sed -n "${err_start},${err_end}p" | tr '\n' ';')
|
604 |
+
d='{"ver": "'${XP_VERSION}'", "err": "'${err}'","sysInfo": "'${SYS_INFO}'"}'
|
605 |
+
curl -s -X POST -H "Content-Type: application/json" -d "${d}" "${API_HOST}/api/installErr" 2>&1 >/dev/null
|
606 |
+
fi
|
607 |
+
}
|
608 |
+
|
609 |
+
Disable_Sudo_TTY(){
|
610 |
+
if [ -f "/etc/sudoers" ]; then
|
611 |
+
tty_mode=$(grep '^Default.*requiretty' /etc/sudoers)
|
612 |
+
if [ -n "$tty_mode" ]; then
|
613 |
+
sed -i 's/^Default.*requiretty/#&/' /etc/sudoers
|
614 |
+
fi
|
615 |
+
fi
|
616 |
+
}
|
617 |
+
|
618 |
+
Select_DlNode(){
|
619 |
+
echo "select download node..."
|
620 |
+
json_str=$(curl -s "${API_HOST}/api/dlNodes")
|
621 |
+
if ! echo $json_str | grep -q '"ip":'; then
|
622 |
+
echo "get download nodes failed, use default node"
|
623 |
+
return
|
624 |
+
fi
|
625 |
+
ips=$(echo $json_str | grep -oP '"ip"\s*:\s*"\K[^"]+')
|
626 |
+
min_delay_sec=5.0
|
627 |
+
fasted_ip=""
|
628 |
+
for ip in $ips
|
629 |
+
do
|
630 |
+
delay_sec=$(timeout 5 curl -o /dev/null -s -w "%{time_total}" ${ip} || echo 999.0)
|
631 |
+
comp_result=$(echo "${delay_sec} < ${min_delay_sec}" | awk '{print ($1 < $3) ? "1" : "0"}')
|
632 |
+
if [ $comp_result -eq 1 ]; then
|
633 |
+
min_delay_sec=$delay_sec
|
634 |
+
fasted_ip=$ip
|
635 |
+
fi
|
636 |
+
done
|
637 |
+
if [ -z "$fasted_ip" ]; then
|
638 |
+
echo "test download nodes error, use default node"
|
639 |
+
return
|
640 |
+
fi
|
641 |
+
|
642 |
+
if grep -q "dl.xp.cn" /etc/hosts; then
|
643 |
+
sed -i "s/.*dl.xp.cn.*/${fasted_ip} dl.xp.cn/g" /etc/hosts
|
644 |
+
else
|
645 |
+
echo -e "\n${fasted_ip} dl.xp.cn\n" >> /etc/hosts
|
646 |
+
fi
|
647 |
+
echo "select fasted download node finish"
|
648 |
+
}
|
649 |
+
|
650 |
+
Set_Cent_Repo_Source() {
|
651 |
+
distro=$(cat /etc/centos-release | awk '{print $1}')
|
652 |
+
version=$(cat /etc/centos-release | awk '{print $4}' | cut -d '.' -f1)
|
653 |
+
if [ "$distro" == "CentOS" ]; then
|
654 |
+
echo "开始替换 CentOS 的源为阿里源..."
|
655 |
+
if [ "$version" == "7" ]; then
|
656 |
+
echo "正在替换为 CentOS 7 的阿里源..."
|
657 |
+
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
|
658 |
+
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
|
659 |
+
sudo yum clean all && sudo yum makecache
|
660 |
+
echo "替换完成!"
|
661 |
+
elif [ "$version" == "8" ]; then
|
662 |
+
echo "正在替换为 CentOS 8 的阿里源..."
|
663 |
+
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
|
664 |
+
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
|
665 |
+
sudo yum clean all && sudo yum makecache
|
666 |
+
echo "替换完成!"
|
667 |
+
else
|
668 |
+
echo "不支持替换阿里源的 CentOS 版本:$version"
|
669 |
+
fi
|
670 |
+
fi
|
671 |
+
}
|
672 |
+
|
673 |
+
Install_Main(){
|
674 |
+
Kill_Old_XP
|
675 |
+
Env_Check
|
676 |
+
Get_PM
|
677 |
+
|
678 |
+
Auto_Swap_Mem
|
679 |
+
|
680 |
+
Set_Cent_Repo_Source
|
681 |
+
|
682 |
+
if [ "${PM}" = "yum" ]; then
|
683 |
+
Install_RPM_Base_Pkg
|
684 |
+
elif [ "${PM}" = "apt-get" ]; then
|
685 |
+
Install_Deb_Base_Pkg
|
686 |
+
fi
|
687 |
+
|
688 |
+
Get_IP_Info
|
689 |
+
|
690 |
+
Select_DlNode
|
691 |
+
|
692 |
+
Down_XP
|
693 |
+
Down_Deps sqlite3 vsftpd
|
694 |
+
|
695 |
+
Open_Log
|
696 |
+
|
697 |
+
Disable_Sudo_TTY
|
698 |
+
|
699 |
+
Init_XP
|
700 |
+
Add_Service
|
701 |
+
End
|
702 |
+
exit 0
|
703 |
+
Analysis_Log
|
704 |
+
exit 0
|
705 |
+
}
|
706 |
+
|
707 |
+
Install_Tip
|
708 |
+
|
709 |
+
# go="wait" # 确认安装的等待
|
710 |
+
# while [ ${#} -gt 0 ]; do
|
711 |
+
# case $1 in
|
712 |
+
# -u|--user)
|
713 |
+
# PANEL_USER=$2
|
714 |
+
# shift 1
|
715 |
+
# ;;
|
716 |
+
# -p|--password)
|
717 |
+
# PANEL_PWD=$2
|
718 |
+
# shift 1
|
719 |
+
# ;;
|
720 |
+
# -P|--port)
|
721 |
+
# PANEL_PORT=$2
|
722 |
+
# shift 1
|
723 |
+
# ;;
|
724 |
+
# --safe-entry)
|
725 |
+
# SAFE_ENTRY=$2
|
726 |
+
# shift 1
|
727 |
+
# ;;
|
728 |
+
# --ssl-disable)
|
729 |
+
# SSL_PL="disable"
|
730 |
+
# ;;
|
731 |
+
# -y)
|
732 |
+
# go="y"
|
733 |
+
# ;;
|
734 |
+
# *)
|
735 |
+
# IDC_CODE=$1
|
736 |
+
# ;;
|
737 |
+
# esac
|
738 |
+
# shift 1
|
739 |
+
# done
|
740 |
+
|
741 |
+
# while [ "$go" != 'Y' ] && [ "$go" != 'y' ] && [ "$go" != 'n' ] && [ "$go" != '' ]
|
742 |
+
# do
|
743 |
+
# read -p "Do you want to install xp-panel to the $SETUP_PATH directory now?(Y/n): " go;
|
744 |
+
# done
|
745 |
+
|
746 |
+
# if [ "$go" == 'n' ];then
|
747 |
+
# exit;
|
748 |
+
# fi
|
749 |
+
|
750 |
+
# Get_LocalInfo
|
751 |
+
|
752 |
+
# d='{"hostname": "'${hostname_check}'", "cpu": "'${CPU_INFO}'", "memory": "'${MEM_TOTAL}'", "diskUsage": "'${DISK_USE}'", "sysInfo": "'${SYS_INFO}'", "os": "'${SYS_VERSION}'", "idc": "'${IDC_CODE}'"}'
|
753 |
+
# curl -s -X POST -H "Content-Type: application/json" -d "${d}" "${API_HOST}/api/addInstallInfo" 2>&1 >/dev/null
|
754 |
+
|
755 |
+
Install_Main
|
756 |
+
echo -e "666666666666666666666666666666666666666666"
|
757 |
+
exit 0
|
758 |
+
# 安装完成删除安装包
|
759 |
+
rm -f $SETUP_PATH/download/xp-panel.tar.gz
|
webmininstall.sh
DELETED
@@ -1,197 +0,0 @@
|
|
1 |
-
#!/bin/sh
|
2 |
-
# shellcheck disable=SC1090 disable=SC2059 disable=SC2164 disable=SC2181
|
3 |
-
# setup-repos.sh
|
4 |
-
# Configures Webmin repository for RHEL and Debian systems (derivatives)
|
5 |
-
|
6 |
-
webmin_host="download.webmin.com"
|
7 |
-
webmin_download="https://$webmin_host"
|
8 |
-
webmin_key="developers-key.asc"
|
9 |
-
webmin_key_download="$webmin_download/$webmin_key"
|
10 |
-
webmin_key_suffix="webmin-developers"
|
11 |
-
debian_repo_file="/etc/apt/sources.list.d/webmin.list"
|
12 |
-
rhel_repo_file="/etc/yum.repos.d/webmin.repo"
|
13 |
-
download_wget="/usr/bin/wget"
|
14 |
-
download="$download_wget -nv"
|
15 |
-
|
16 |
-
# Temporary colors
|
17 |
-
NORMAL=''
|
18 |
-
GREEN=''
|
19 |
-
RED=''
|
20 |
-
ITALIC=''
|
21 |
-
BOLD=''
|
22 |
-
if tty -s; then
|
23 |
-
NORMAL="$(tput sgr0)"
|
24 |
-
GREEN=$(tput setaf 2)
|
25 |
-
RED="$(tput setaf 1)"
|
26 |
-
BOLD=$(tput bold)
|
27 |
-
ITALIC=$(tput sitm)
|
28 |
-
fi
|
29 |
-
|
30 |
-
# Check user permission
|
31 |
-
if [ "$(id -u)" -ne 0 ]; then
|
32 |
-
echo "${RED}Error:${NORMAL} \`setup-repos.sh\` script must be run as root!" >&2
|
33 |
-
exit 1
|
34 |
-
fi
|
35 |
-
|
36 |
-
# Go to temp
|
37 |
-
cd "/tmp" 1>/dev/null 2>&1
|
38 |
-
if [ "$?" != "0" ]; then
|
39 |
-
echo "${RED}Error:${NORMAL} Failed to switch to \`/tmp\` directory!"
|
40 |
-
exit 1
|
41 |
-
fi
|
42 |
-
|
43 |
-
# Check for OS release file
|
44 |
-
osrelease="/etc/os-release"
|
45 |
-
if [ ! -f "$osrelease" ]; then
|
46 |
-
echo "${RED}Error:${NORMAL} Cannot detect OS!"
|
47 |
-
exit 1
|
48 |
-
fi
|
49 |
-
|
50 |
-
# Detect OS and package manager and install command
|
51 |
-
. "$osrelease"
|
52 |
-
if [ -n "${ID_LIKE}" ]; then
|
53 |
-
osid="$ID_LIKE"
|
54 |
-
else
|
55 |
-
osid="$ID"
|
56 |
-
fi
|
57 |
-
if [ -z "$osid" ]; then
|
58 |
-
echo "${RED}Error:${NORMAL} Failed to detect OS!"
|
59 |
-
exit 1
|
60 |
-
fi
|
61 |
-
|
62 |
-
# Derivatives precise test
|
63 |
-
osid_debian_like=$(echo "$osid" | grep "debian\|ubuntu")
|
64 |
-
osid_rhel_like=$(echo "$osid" | grep "rhel\|fedora\|centos")
|
65 |
-
|
66 |
-
repoid_debian_like=debian
|
67 |
-
if [ -n "${ID}" ]; then
|
68 |
-
repoid_debian_like="${ID}"
|
69 |
-
fi
|
70 |
-
|
71 |
-
# Setup OS dependent
|
72 |
-
if [ -n "$osid_debian_like" ]; then
|
73 |
-
package_type=deb
|
74 |
-
install_cmd="apt-get install --install-recommends"
|
75 |
-
install="$install_cmd --quiet --assume-yes"
|
76 |
-
clean="apt-get clean"
|
77 |
-
update="apt-get update"
|
78 |
-
elif [ -n "$osid_rhel_like" ]; then
|
79 |
-
package_type=rpm
|
80 |
-
if command -pv dnf 1>/dev/null 2>&1; then
|
81 |
-
install_cmd="dnf install"
|
82 |
-
install="$install_cmd -y"
|
83 |
-
clean="dnf clean all"
|
84 |
-
else
|
85 |
-
install_cmd="yum install"
|
86 |
-
install="$install_cmd -y"
|
87 |
-
clean="yum clean all"
|
88 |
-
fi
|
89 |
-
else
|
90 |
-
echo "${RED}Error:${NORMAL} Unknown OS : $osid"
|
91 |
-
exit
|
92 |
-
fi
|
93 |
-
|
94 |
-
# Ask first
|
95 |
-
if [ "$1" != "-f" ] && [ "$1" != "--force" ]; then
|
96 |
-
printf "Setup Webmin repository? (y/N) "
|
97 |
-
read -r sslyn
|
98 |
-
if [ "$sslyn" != "y" ] && [ "$sslyn" != "Y" ]; then
|
99 |
-
exit
|
100 |
-
fi
|
101 |
-
fi
|
102 |
-
|
103 |
-
# Check for wget or curl or fetch
|
104 |
-
if [ ! -x "$download_wget" ]; then
|
105 |
-
if [ -x "/usr/bin/curl" ]; then
|
106 |
-
download="/usr/bin/curl -f -s -L -O"
|
107 |
-
elif [ -x "/usr/bin/fetch" ]; then
|
108 |
-
download="/usr/bin/fetch"
|
109 |
-
else
|
110 |
-
# Try installing wget
|
111 |
-
echo " Installing required ${ITALIC}wget${NORMAL} package from OS repository .."
|
112 |
-
$install wget 1>/dev/null 2>&1
|
113 |
-
if [ "$?" != "0" ]; then
|
114 |
-
echo " .. failed to install 'wget' package!"
|
115 |
-
exit 1
|
116 |
-
else
|
117 |
-
echo " .. done"
|
118 |
-
fi
|
119 |
-
fi
|
120 |
-
fi
|
121 |
-
|
122 |
-
|
123 |
-
# Check if GPG command is installed
|
124 |
-
if [ -n "$osid_debian_like" ]; then
|
125 |
-
if [ ! -x /usr/bin/gpg ]; then
|
126 |
-
$update 1>/dev/null 2>&1
|
127 |
-
$install gnupg 1>/dev/null 2>&1
|
128 |
-
fi
|
129 |
-
fi
|
130 |
-
|
131 |
-
# Clean files
|
132 |
-
rm -f "/tmp/$webmin_key"
|
133 |
-
|
134 |
-
# Download key
|
135 |
-
echo " Downloading Webmin key .."
|
136 |
-
download_out=$($download $webmin_key_download 2>/dev/null 2>&1)
|
137 |
-
if [ "$?" != "0" ]; then
|
138 |
-
download_out=$(echo "$download_out" | tr '\n' ' ')
|
139 |
-
echo " ..failed : $download_out"
|
140 |
-
exit
|
141 |
-
fi
|
142 |
-
echo " .. done"
|
143 |
-
|
144 |
-
# Setup repos
|
145 |
-
case "$package_type" in
|
146 |
-
rpm)
|
147 |
-
# Install our keys
|
148 |
-
echo " Installing Webmin key .."
|
149 |
-
rpm --import $webmin_key
|
150 |
-
cp -f $webmin_key /etc/pki/rpm-gpg/RPM-GPG-KEY-$webmin_key_suffix
|
151 |
-
echo " .. done"
|
152 |
-
# Create repo file
|
153 |
-
echo " Setting up Webmin repository .."
|
154 |
-
echo "[webmin-noarch]" >$rhel_repo_file
|
155 |
-
echo "name=Webmin - noarch" >>$rhel_repo_file
|
156 |
-
echo "baseurl=$webmin_download/download/newkey/yum" >>$rhel_repo_file
|
157 |
-
echo "enabled=1" >>$rhel_repo_file
|
158 |
-
echo "gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-$webmin_key_suffix" >>$rhel_repo_file
|
159 |
-
echo "gpgcheck=1" >>$rhel_repo_file
|
160 |
-
echo " .. done"
|
161 |
-
;;
|
162 |
-
deb)
|
163 |
-
# Remove our keys
|
164 |
-
rm -f "/usr/share/keyrings/debian-$webmin_key_suffix.gpg" "/usr/share/keyrings/$repoid_debian_like-$webmin_key_suffix.gpg"
|
165 |
-
# Install our keys
|
166 |
-
echo " Installing Webmin key .."
|
167 |
-
gpg --import $webmin_key 1>/dev/null 2>&1
|
168 |
-
cat $webmin_key | gpg --dearmor > "/usr/share/keyrings/$repoid_debian_like-$webmin_key_suffix.gpg"
|
169 |
-
echo " .. done"
|
170 |
-
# Remove Webmin repo from sources.list
|
171 |
-
sources_list=$(grep -v "$webmin_host" /etc/apt/sources.list)
|
172 |
-
echo "$sources_list" > /etc/apt/sources.list
|
173 |
-
# Create repo file
|
174 |
-
echo " Setting up Webmin repository .."
|
175 |
-
echo "deb [signed-by=/usr/share/keyrings/$repoid_debian_like-$webmin_key_suffix.gpg] $webmin_download/download/newkey/repository stable contrib" >$debian_repo_file
|
176 |
-
echo " .. done"
|
177 |
-
# Clean meta
|
178 |
-
echo " Cleaning repository metadata .."
|
179 |
-
$clean 1>/dev/null 2>&1
|
180 |
-
echo " .. done"
|
181 |
-
# Update meta
|
182 |
-
echo " Downloading repository metadata .."
|
183 |
-
$update 1>/dev/null 2>&1
|
184 |
-
echo " .. done"
|
185 |
-
;;
|
186 |
-
*)
|
187 |
-
echo "${RED}Error:${NORMAL} Cannot setup repositories on this system."
|
188 |
-
exit 1
|
189 |
-
;;
|
190 |
-
esac
|
191 |
-
|
192 |
-
# Could not setup
|
193 |
-
if [ ! -x "/usr/bin/webmin" ]; then
|
194 |
-
echo "Webmin package can now be installed using ${GREEN}${BOLD}${ITALIC}$install_cmd webmin${NORMAL} command."
|
195 |
-
fi
|
196 |
-
|
197 |
-
exit 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|