| #!/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 |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| 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 |
| |
| if [[ $cpu_arch = "x86_64" && $postfixver != "3.4.7" ]]; then |
| yum remove postfix -y |
| rm -rf /etc/postfix |
| fi |
| |
|
|
| 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 |
| |
| yum install dovecot-pigeonhole -y |
| if [[ ! -f "/usr/sbin/dovecot" ]]; then |
| yum install dovecot -y |
| fi |
| |
| 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 |
| |
| if [[ $cpu_arch = "x86_64" && $postfixver != "3.4.7" ]]; then |
| yum remove postfix -y |
| rm -rf /etc/postfix |
| fi |
| |
|
|
| 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 |
| |
| yum install dovecot-pigeonhole -y |
| if [[ ! -f "/usr/sbin/dovecot" ]]; then |
| yum install dovecot -y |
| fi |
| |
| 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 |
| |
| if [[ $cpu_arch = "x86_64" && $postfixver != "3.4.7" ]]; then |
| yum remove postfix -y |
| rm -rf /etc/postfix |
| fi |
| |
| 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 |
| |
| yum install dovecot-pigeonhole -y |
| if [[ ! -f "/usr/sbin/dovecot" ]]; then |
| yum install dovecot -y |
| fi |
| |
| if [ $ping_url != "200" ]; then |
| install_rspamd |
| else |
| install_rspamd |
| fi |
| yum install cyrus-sasl-plain -y |
| |
| 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 |
| 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 |
| 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 |
| } |
|
|
| |
| ping_url=$(curl -I -m 10 -o /dev/null -s -w %{http_code}"\n" https://rspamd.com) |
|
|
| Install_centos8() { |
| yum install epel-release -y |
| |
| if [[ $cpu_arch = "x86_64" && $postfixver != "3.4.9" ]]; then |
| yum remove postfix -y |
| rm -rf /etc/postfix |
| fi |
| |
| 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 |
| |
| yum install dovecot-pigeonhole -y |
| if [[ ! -f "/usr/sbin/dovecot" ]]; then |
| yum install dovecot -y |
| fi |
| |
| |
| if [ $ping_url != "200" ]; then |
| Install_rspamd_rpm |
| else |
| install_rspamd |
| fi |
| yum install cyrus-sasl-plain libsodium libwins -y |
| |
| yum install postfix-pflogsumm -y |
| } |
|
|
| Install_ubuntu() { |
| hostname=$(hostname) |
| |
| 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 |
| |
| apt install dovecot-core dovecot-pop3d dovecot-imapd dovecot-lmtpd dovecot-sqlite dovecot-sieve -y |
| |
| |
| |
| if [ $ping_url != "200" ]; then |
| install_rspamd |
| else |
| install_rspamd |
| fi |
| apt install cyrus-sasl-plain libhyperscan5 -y |
| |
| 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 |
|
|
| |
| 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_MYDESTINATION=$(postconf mydestination | awk '{print $2}') |
| DOVECOT_CONF="/etc/dovecot/dovecot.conf" |
| DOVECOT_SERVICE="dovecot" |
|
|
| |
| if [ -f "$POSTFIX_CONF" ]; then |
| echo "Postfix 配置文件 $POSTFIX_CONF 存在。" |
|
|
| |
| if [ -z "$POSTFIX_MYDESTINATION" ]; then |
| echo "Postfix 尚未初始化,mydestination 配置项未设置。" |
| return 1 |
| else |
| echo "Postfix 已初始化,mydestination 配置项已设置为: $POSTFIX_MYDESTINATION" |
| fi |
|
|
| |
| if systemctl is-active --quiet postfix; then |
| echo "Postfix 服务正在运行。" |
| else |
| echo "Postfix 服务未运行,请检查 Postfix 配置并启动服务。" |
| return 1 |
| fi |
| else |
| echo "Postfix 尚未安装或初始化。" |
| return 1 |
| fi |
|
|
| |
| if [ -f "$DOVECOT_CONF" ]; then |
| echo "Dovecot 配置文件 $DOVECOT_CONF 存在。" |
|
|
| |
| if grep -q "protocols = imap" "$DOVECOT_CONF"; then |
| echo "Dovecot 已初始化并启用了 IMAP 协议。" |
| else |
| echo "Dovecot 配置中没有启用 IMAP 协议。" |
| return 1 |
| fi |
|
|
| |
| 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 |
|
|
| |
| 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 |
|
|
| |
| Install_redis |
|
|
| |
| /www/server/panel/pyenv/bin/python3.7 $pluginPath/mail_server_init.py setup_mail_sys |
|
|
| |
| 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' |
| } |
|
|
| |
| check_rspamd() { |
| if [ ! -f /usr/bin/rspamd ]; then |
| install_rspamd |
| fi |
| } |
|
|
| |
| |
| 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 |
|
|