GGSheng's picture
feat: deploy Gemma 4 to hf space
08c964e verified
#!/bin/bash
PATH=/www/server/panel/pyenv/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
pluginPath=/www/server/panel/plugin/mail_sys
pluginStaticPath=/www/server/panel/plugin/mail_sys/static
Get_Public() {
public_file=/www/server/panel/install/public.sh
publicFileMd5=$(md5sum ${public_file} 2>/dev/null | awk '{print $1}')
md5check="8e49712d1fd332801443f8b6fd7f9208"
if [ "${publicFileMd5}" != "${md5check}" ]; then
wget -O Tpublic.sh https://download.bt.cn/install/public.sh -T 20
publicFileMd5=$(md5sum Tpublic.sh 2>/dev/null | awk '{print $1}')
if [ "${publicFileMd5}" == "${md5check}" ]; then
\cp -rpa Tpublic.sh $public_file
fi
rm -f Tpublic.sh
fi
. "${public_file}"
download_Url=$NODE_URL
}
cpu_arch=$(arch)
if [[ $cpu_arch != "x86_64" ]]; then
echo 'Does not support non-x86 system installation'
exit 0
fi
. /etc/os-release
#if [ -f "/usr/bin/apt-get" ]; then
# systemver='ubuntu'
#elif [ -f "/etc/redhat-release" ]; then
# systemver7=$(cat /etc/redhat-release | sed -r 's/.* ([0-9]+)\..*/\1/')
# systemver8=$(cat /etc/redhat-release | sed -r 's/.* ([0-9]+)\..*/\1/' | grep -o '8')
# postfixver=$(postconf mail_version | sed -r 's/.* ([0-9\.]+)$/\1/')
#elif [ $NAME == "OpenCloudOS" ]; then
# systemver='opencloudos'
#else
# echo 'Unsupported system version'
# exit 0
#fi
check_linux() {
. /etc/os-release
if [ $NAME == "OpenCloudOS" ] || [ $ID == "amzn" ]; then
systemver='opencloudos'
elif [ $ID == "centos" ]; then
systemver7=$(cat /etc/redhat-release | sed -r 's/.* ([0-9]+)\..*/\1/')
systemver8=$(cat /etc/redhat-release | sed -r 's/.* ([0-9]+)\..*/\1/' | grep -o '8')
postfixver=$(postconf mail_version | sed -r 's/.* ([0-9\.]+)$/\1/')
systemver='centos'
elif [ $ID == "almalinux" ]; then
systemver='almalinux'
elif [ $ID == "ubuntu" ] || [ $ID == "debian" ]; then
systemver='ubuntu'
elif [ $ID == "alinux" ] || [ $ID == "rocky" ]; then
systemver='alinux'
else
echo 'Unsupported system version'
exit 0
fi
}
Install_almalinux(){
if [[ $cpu_arch != "x86_64" ]]; then
echo 'Does not support non-x86 system installation'
exit 0
fi
yum install epel-release -y
# 卸载系统自带的postfix
if [[ $cpu_arch = "x86_64" && $postfixver != "3.4.7" ]]; then
yum remove postfix -y
rm -rf /etc/postfix
fi
# 安装postfix和postfix-sqlite
yum install postfix -y
yum install postfix-sqlite -y
if [[ ! -f "/usr/sbin/postfix" ]]; then
echo "postfix3-3.8.3-1.gf.el7.x86_64.rpm安装失败,请联系堡塔官方人员"
exit 1
fi
# 安装dovecot和dovecot-sieve
yum install dovecot-pigeonhole -y
if [[ ! -f "/usr/sbin/dovecot" ]]; then
yum install dovecot -y
fi
# 安装rspamd
install_rspamd
yum install cyrus-sasl-plain -y
}
Install_opencloudos() {
if [[ $cpu_arch != "x86_64" ]]; then
echo 'Does not support non-x86 system installation'
exit 0
fi
yum install epel-release -y
# 卸载系统自带的postfix
if [[ $cpu_arch = "x86_64" && $postfixver != "3.4.7" ]]; then
yum remove postfix -y
rm -rf /etc/postfix
fi
# 安装postfix和postfix-sqlite
yum install postfix -y
yum install postfix-sqlite -y
if [[ ! -f "/usr/sbin/postfix" ]]; then
echo "postfix3-3.8.3-1.gf.el7.x86_64.rpm安装失败,请联系堡塔官方人员"
exit 1
fi
# 安装dovecot和dovecot-sieve
yum install dovecot-pigeonhole -y
if [[ ! -f "/usr/sbin/dovecot" ]]; then
yum install dovecot -y
fi
# 安装rspamd
install_rspamd
if ps -ef|grep rspamd|grep -v grep; then
echo "Rspamd is running."
else
compile_rspamd
fi
yum install cyrus-sasl-plain -y
}
Install_centos7() {
if [[ $cpu_arch != "x86_64" ]]; then
echo 'Does not support non-x86 system installation'
exit 0
fi
yum install epel-release -y
# 卸载系统自带的postfix
if [[ $cpu_arch = "x86_64" && $postfixver != "3.4.7" ]]; then
yum remove postfix -y
rm -rf /etc/postfix
fi
# 安装postfix和postfix-sqlite
mkdir $pluginPath/rpm
wget -O $pluginPath/rpm/postfix3-3.8.3-1.gf.el7.x86_64.rpm $download_Url/install/plugin/mail_sys/rpm/postfix3-3.8.3-1.gf.el7.x86_64.rpm -T 5
wget -O $pluginPath/rpm/postfix3-sqlite-3.8.3-1.gf.el7.x86_64.rpm $download_Url/install/plugin/mail_sys/rpm/postfix3-sqlite-3.8.3-1.gf.el7.x86_64.rpm -T 5
yum localinstall $pluginPath/rpm/postfix3-3.8.3-1.gf.el7.x86_64.rpm -y
yum localinstall $pluginPath/rpm/postfix3-sqlite-3.8.3-1.gf.el7.x86_64.rpm -y
if [[ ! -f "/usr/sbin/postfix" ]]; then
echo "postfix3-3.8.3-1.gf.el7.x86_64.rpm安装失败,请联系堡塔官方人员"
exit 1
fi
# 安装dovecot和dovecot-sieve
yum install dovecot-pigeonhole -y
if [[ ! -f "/usr/sbin/dovecot" ]]; then
yum install dovecot -y
fi
#安装rspamd
if [ $ping_url != "200" ]; then
install_rspamd
else
install_rspamd
fi
yum install cyrus-sasl-plain -y
# 安装pflogsumm 日志分析工具
yum install postfix-pflogsumm -y
}
install_rspamd() {
# 优先尝试系统源安装并启动
local installed_ok=0
if command -v apt-get >/dev/null 2>&1; then
apt-get update
if apt-get install -y rspamd; then
systemctl enable rspamd || true
systemctl restart rspamd || true
if systemctl is-active --quiet rspamd && [ -x /usr/bin/rspamd ]; then
installed_ok=1
fi
fi
else
if command -v dnf >/dev/null 2>&1; then
if dnf install -y rspamd; then
systemctl enable rspamd || true
systemctl restart rspamd || true
if systemctl is-active --quiet rspamd && [ -x /usr/bin/rspamd ]; then
installed_ok=1
fi
fi
else
if yum install -y rspamd; then
systemctl enable rspamd || true
systemctl restart rspamd || true
if systemctl is-active --quiet rspamd && [ -x /usr/bin/rspamd ]; then
installed_ok=1
fi
fi
fi
fi
# 如果系统源安装不可用,则使用官方源安装
if [ "$installed_ok" != "1" ]; then
if [[ $systemver7 = "7" ]]; then
wget -O /etc/yum.repos.d/rspamd.repo https://rspamd.com/rpm-stable/centos-7/rspamd.repo
rpm --import https://rspamd.com/rpm-stable/gpg.key
yum makecache -y
yum install rspamd -y
elif [ $systemver8 = "8" ] || [ $systemver = "centos" ]; then
wget -O /etc/yum.repos.d/rspamd.repo https://rspamd.com/rpm-stable/centos-8/rspamd.repo
rpm --import https://rspamd.com/rpm-stable/gpg.key
yum makecache -y
yum install rspamd -y
elif [ $systemver = "opencloudos" ] || [ $systemver = "alinux" ]; then
source /etc/os-release
export EL_VERSION=`echo -n $PLATFORM_ID | sed "s/.*el//"`
curl https://rspamd.com/rpm-stable/centos-${EL_VERSION}/rspamd.repo > /etc/yum.repos.d/rspamd.repo
yum install rspamd -y
elif [ $systemver = "almalinux" ]; then
source /etc/os-release
export EL_VERSION=`echo -n $PLATFORM_ID | sed "s/.*el//"`
curl https://rspamd.com/rpm-stable/centos-${EL_VERSION}/rspamd.repo > /etc/yum.repos.d/rspamd.repo
yum install rspamd -y
else
apt-get install -y lsb-release wget gpg # for install
CODENAME=`lsb_release -c -s`
mkdir -p /etc/apt/keyrings
wget -O- https://rspamd.com/apt-stable/gpg.key | gpg --dearmor | tee /etc/apt/keyrings/rspamd.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/rspamd.gpg] http://rspamd.com/apt-stable/ $CODENAME main" | tee /etc/apt/sources.list.d/rspamd.list
echo "deb-src [signed-by=/etc/apt/keyrings/rspamd.gpg] http://rspamd.com/apt-stable/ $CODENAME main" | tee -a /etc/apt/sources.list.d/rspamd.list
apt-get update
apt-get --no-install-recommends install rspamd -y
fi
systemctl enable rspamd || true
systemctl restart rspamd || true
if ! systemctl is-active --quiet rspamd || [ ! -x /usr/bin/rspamd ]; then
if command -v apt-get >/dev/null 2>&1; then
echo "官方源安装失败,请检查网络或源配置"
exit 1
else
echo "官方源安装失败,尝试RPM安装..."
Install_rspamd_rpm
systemctl enable rspamd || true
systemctl restart rspamd || true
if ! systemctl is-active --quiet rspamd || [ ! -x /usr/bin/rspamd ]; then
echo "rspamd安装失败,请检查网络或源配置"
exit 1
fi
fi
fi
fi
# 补充前端资源
wget -O /usr/share/rspamd/www/rspamd.zip $download_Url/install/plugin/mail_sys/rspamd.zip -T 5
cd /usr/share/rspamd/www
unzip -o rspamd.zip
}
Install_rspamd_rpm() {
if [[ $systemver7 = "7" ]]; then
wget $download_Url/src/rspamd-3.4-1.x86_64.rpm
rpm -ivh rspamd-3.4-1.x86_64.rpm
rm -f rspamd-3.4-1.x86_64.rpm
elif [[ $systemver8 = "8" ]] || [[ $systemver = "centos" ]]; then
wget $download_Url/src/rspamd-3.4-1.x86_64.rpm
rpm -ivh rspamd-3.4-1.x86_64.rpm --nodeps
rm -f rspamd-3.4-1.x86_64.rpm
elif [ $systemver = "opencloudos" ] || [ $systemver = "alinux" ]; then
wget $download_Url/src/rspamd-3.4-1.x86_64.rpm
rpm -ivh rspamd-3.4-1.x86_64.rpm --nodeps
rm -f rspamd-3.4-1.x86_64.rpm
elif [ $systemver = "almalinux" ]; then
wget $download_Url/src/rspamd-3.4-1.x86_64.rpm
yum install rspamd-3.4-1.x86_64.rpm
rm -f rspamd-3.4-1.x86_64.rpm
else
apt-get install -y lsb-release wget gpg # for install
CODENAME=`lsb_release -c -s`
mkdir -p /etc/apt/keyrings
wget -O- https://rspamd.com/apt-stable/gpg.key | gpg --dearmor | tee /etc/apt/keyrings/rspamd.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/rspamd.gpg] http://rspamd.com/apt-stable/ $CODENAME main" | tee /etc/apt/sources.list.d/rspamd.list
echo "deb-src [signed-by=/etc/apt/keyrings/rspamd.gpg] http://rspamd.com/apt-stable/ $CODENAME main" | tee -a /etc/apt/sources.list.d/rspamd.list
apt-get update
apt-get --no-install-recommends install rspamd -y
fi
wget -O /usr/share/rspamd/www/rspamd.zip $download_Url/install/plugin/mail_sys/rspamd.zip -T 5
cd /usr/share/rspamd/www
unzip -o rspamd.zip
}
compile_rspamd() {
if [[ $systemver = "opencloudos" ]]; then
dnf install -y git cmake gcc make gcc-c++ ragel lua lua-devel openssl-devel zlib-devel pcre2-devel glib2-devel libevent-devel libicu-devel sqlite-devel json-c-devel hiredis-devel libcurl-devel libarchive libarchive-devel luajit-devel libsodium-devel
else
echo "Unsupported system version"
exit 0
fi
wget -O $pluginPath/rspamd-rspamd-3.8.zip $download_Url/install/plugin/mail_sys/rspamd-rspamd-3.8.zip
unzip $pluginPath/rspamd-rspamd-3.8.zip -d $pluginPath
cd $pluginPath/rspamd-rspamd-3.8
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr
make
make install
mv ../rspamd.service /lib/systemd/system/rspamd.service
mkdir -p /etc/rspamd
cp -r /usr/etc/rspamd/ /etc/rspamd/
useradd -r -M -s /sbin/nologin _rspamd
mkdir -p /var/log/rspamd
chown -R _rspamd:_rspamd /var/log/rspamd
chmod 755 /var/log/rspamd
systemctl daemon-reload
systemctl enable rspamd
systemctl start rspamd
make clean
rm -rf $pluginPath/rspamd-rspamd-3.8/
compile=1
wget -O /usr/share/rspamd/www/rspamd.zip $download_Url/install/plugin/mail_sys/rspamd.zip -T 5
cd /usr/share/rspamd/www
unzip -o rspamd.zip
}
#获取rspamd网站,检查判断返回是否200
ping_url=$(curl -I -m 10 -o /dev/null -s -w %{http_code}"\n" https://rspamd.com)
Install_centos8() {
yum install epel-release -y
# 卸载系统自带的postfix
if [[ $cpu_arch = "x86_64" && $postfixver != "3.4.9" ]]; then
yum remove postfix -y
rm -rf /etc/postfix
fi
# 安装postfix和postfix-sqlite
mkdir $pluginPath/rpm
wget -O $pluginPath/rpm/postfix3-3.4.9-1.gf.el8.x86_64.rpm $download_Url/install/plugin/mail_sys/rpm/postfix3-3.4.9-1.gf.el8.x86_64.rpm -T 5
wget -O $pluginPath/rpm/postfix3-sqlite-3.4.9-1.gf.el8.x86_64.rpm $download_Url/install/plugin/mail_sys/rpm/postfix3-sqlite-3.4.9-1.gf.el8.x86_64.rpm -T 5
yum install $pluginPath/rpm/postfix3-3.4.9-1.gf.el8.x86_64.rpm -y
yum install $pluginPath/rpm/postfix3-sqlite-3.4.9-1.gf.el8.x86_64.rpm -y
if [[ ! -f "/usr/sbin/postfix" ]]; then
yum install postfix -y
yum install postfix-sqlite -y
fi
# 安装dovecot和dovecot-sieve
yum install dovecot-pigeonhole -y
if [[ ! -f "/usr/sbin/dovecot" ]]; then
yum install dovecot -y
fi
# Install_rspamd_rpm
#安装rspamd
if [ $ping_url != "200" ]; then
Install_rspamd_rpm
else
install_rspamd
fi
yum install cyrus-sasl-plain libsodium libwins -y
# 安装pflogsumm 日志分析工具
yum install postfix-pflogsumm -y
}
Install_ubuntu() {
hostname=$(hostname)
# 安装postfix和postfix-sqlite
debconf-set-selections <<<"postfix postfix/mailname string ${hostname}"
debconf-set-selections <<<"postfix postfix/main_mailer_type string 'Internet Site'"
apt install postfix -y
apt install postfix-sqlite -y
apt install sqlite -y
# 安装dovecot和dovecot-sieve
apt install dovecot-core dovecot-pop3d dovecot-imapd dovecot-lmtpd dovecot-sqlite dovecot-sieve -y
# 安装opendkim
# 安装rspamd
# Install_rspamd_rpm
if [ $ping_url != "200" ]; then
install_rspamd
else
install_rspamd
fi
apt install cyrus-sasl-plain libhyperscan5 -y
# 安装pflogsumm 日志分析工具
apt install pflogsumm -y
}
Install_redis() {
if [ ! -f /www/server/redis/src/redis-cli ]; then
wget -O /tmp/redis.sh $download_Url/install/0/redis.sh -T 5
sed -i "/gen-test-certs/d" /tmp/redis.sh
bash /tmp/redis.sh install 7.2
[ ! -f /www/server/redis/src/redis-cli ] && echo 'Redis installation failed' && return
# 2024/3/15 上午 10:12 如果密码为空,则默认设置redis密码
REDIS_CONF="/www/server/redis/redis.conf"
REDIS_PASS=$(cat ${REDIS_CONF} |grep requirepass|grep -v '#'|awk '{print $2}')
if [ "${REDIS_PASS}" == "" ]; then
REDIS_PASS=$(cat /dev/urandom | head -n 16 | md5sum | head -c 16)
echo "# bt mail redis password"
echo "requirepass ${REDIS_PASS}" >> ${REDIS_CONF}
/etc/init.d/redis restart
fi
fi
}
check_mail_initialized() {
# 定义配置文件和服务
POSTFIX_CONF="/etc/postfix/sqlite_virtual_domains_maps.cf"
# POSTFIX_MAIN_CF="/etc/postfix/main.cf"
POSTFIX_MYDESTINATION=$(postconf mydestination | awk '{print $2}')
DOVECOT_CONF="/etc/dovecot/dovecot.conf"
DOVECOT_SERVICE="dovecot"
# 检查 Postfix 是否已初始化
if [ -f "$POSTFIX_CONF" ]; then
echo "Postfix 配置文件 $POSTFIX_CONF 存在。"
# 检查 Postfix 是否已初始化:检查 mydestination 配置项
if [ -z "$POSTFIX_MYDESTINATION" ]; then
echo "Postfix 尚未初始化,mydestination 配置项未设置。"
return 1
else
echo "Postfix 已初始化,mydestination 配置项已设置为: $POSTFIX_MYDESTINATION"
fi
# 检查 Postfix 服务是否正在运行
if systemctl is-active --quiet postfix; then
echo "Postfix 服务正在运行。"
else
echo "Postfix 服务未运行,请检查 Postfix 配置并启动服务。"
return 1
fi
else
echo "Postfix 尚未安装或初始化。"
return 1
fi
# 检查 Dovecot 是否已初始化
if [ -f "$DOVECOT_CONF" ]; then
echo "Dovecot 配置文件 $DOVECOT_CONF 存在。"
# 检查 Dovecot 是否启用了 IMAP 协议
if grep -q "protocols = imap" "$DOVECOT_CONF"; then
echo "Dovecot 已初始化并启用了 IMAP 协议。"
else
echo "Dovecot 配置中没有启用 IMAP 协议。"
return 1
fi
# 检查 Dovecot 服务是否正在运行
if systemctl is-active --quiet "$DOVECOT_SERVICE"; then
echo "Dovecot 服务正在运行。"
else
echo "Dovecot 服务未运行,请检查 Dovecot 配置并启动服务。"
return 1
fi
else
echo "Dovecot 尚未安装或初始化。"
return 1
fi
# 如果所有检查通过,初始化成功
echo "邮局系统已经初始化并正常运行。"
exit 1
}
Install() {
check_linux
Get_Public
mkdir -p $pluginPath
mkdir -p $pluginStaticPath
check_mail_initialized
if [[ $systemver7 = "7" ]]; then
Install_centos7
elif [[ $systemver8 = "8" ]]; then
Install_centos8
elif [ $systemver = "centos" ]; then
Install_centos7
elif [[ $systemver = "opencloudos" ]]; then
Install_opencloudos
elif [[ $systemver = "alinux" ]]; then
Install_centos7
elif [[ $systemver = "almalinux" ]]; then
Install_almalinux
else
Install_ubuntu
fi
# 安装dovecot和dovecot-sieve
if [ ! -f /etc/dovecot/conf.d/90-sieve.conf ]; then
if [ -f "/usr/bin/apt-get" ]; then
apt install dovecot-sieve -y
else
rm -rf /etc/dovecot_back
cp -a /etc/dovecot /etc/dovecot_back
yum remove dovecot -y
yum install dovecot-pigeonhole -y
if [ ! -f /usr/sbin/dovecot ]; then
yum install dovecot -y
fi
\cp -a /etc/dovecot_back/* /etc/dovecot
chown -R vmail:dovecot /etc/dovecot
chmod -R o-rwx /etc/dovecot
systemctl enable dovecot
systemctl restart dovecot
fi
fi
filesize=$(ls -l /etc/dovecot/dh.pem | awk '{print $5}')
echo $filesize
if [ ! -f "/etc/dovecot/dh.pem" ] || [ $filesize -lt 300 ]; then
openssl dhparam 2048 >/etc/dovecot/dh.pem
fi
if [ ! -d "/www/server/panel/BTPanel/static/ckeditor" ]; then
unzip $pluginPath/ckeditor.zip -d /www/server/panel/BTPanel/static
fi
# 2024/3/15 上午 10:14 安装redis
Install_redis
# 2024/3/15 下午 3:49 运行邮局初始化
/www/server/panel/pyenv/bin/python3.7 $pluginPath/mail_server_init.py setup_mail_sys
# 2024/3/15 下午 10:26 处理因权限问题无法接收邮件
if [ ! -d "/www/vmail" ]; then
mkdir -p /www/vmail
fi
chmod -R 770 /www/vmail
chown -R vmail:mail /www/vmail
echo 'Successify'
}
#卸载
Uninstall() {
if [[ $systemver7 = "7" ]]; then
yum remove postfix -y
yum remove dovecot -y
yum remove opendkim -y
yum remove rspamd -y
yum remove dovecot-pigeonhole -y
elif [ $systemver8 = "8" ] || [ $systemver = "opencloudos" ] || [ $systemver = "alinux" ]; then
yum remove postfix -y
yum remove dovecot -y
yum remove opendkim -y
yum remove rspamd -y
yum remove dovecot-pigeonhole -y
else
apt remove postfix postfix-sqlite -y && rm -rf /etc/postfix
dpkg -P postfix postfix-sqlite
apt remove dovecot-core dovecot-imapd dovecot-lmtpd dovecot-pop3d dovecot-sqlite dovecot-sieve -y
dpkg -P dovecot-core dovecot-imapd dovecot-lmtpd dovecot-pop3d dovecot-sqlite dovecot-sieve
apt remove opendkim opendkim-tools -y
dpkg -P opendkim opendkim-tools
apt remove rspamd -y
dpkg -P rspamd
fi
rm -rf /etc/postfix
rm -rf /etc/dovecot
rm -rf /etc/opendkim
rm -rf /usr/share/rspamd/www/rspamd
rm -rf $pluginPath
echo 'Successify'
}
#检查rspamd服务是否安装,不存在则rpm包安装
check_rspamd() {
if [ ! -f /usr/bin/rspamd ]; then
install_rspamd
fi
}
#check_rspamd
#操作判断
if [ "${1}" == 'install' ]; then
Install
echo '1' >/www/server/panel/data/reload.pl
elif [ "${1}" == 'update' ]; then
Update
elif [ "${1}" == 'uninstall' ]; then
Uninstall
elif [ "${1}" == 'rspamd' ]; then
Get_Public
check_linux
install_rspamd
fi