#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:/opt/homebrew/bin
export PATH
export LANG=en_US.UTF-8
export DEBIAN_FRONTEND=noninteractive

function version_gt() { test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; }
function version_le() { test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" == "$1"; }
function version_lt() { test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" != "$1"; }
function version_ge() { test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" == "$1"; }


if grep -Eq "Ubuntu" /etc/*-release; then
    sudo ln -sf /bin/bash /bin/sh
    #sudo dpkg-reconfigure dash
fi

# synchronize server
# systemctl status chronyd -l
apt install chrony -y
apt install ntpdate -y

apt update -y
apt autoremove -y

apt install -y wget curl unzip
apt install -y lsof
apt install -y rar unrar
apt install -y xz-utils
apt install -y python3-pip
apt install -y python3-venv
apt install -y python3-dev
apt install -y expect
apt install -y pv
apt install -y bc
apt install -y cron
apt install -y net-tools
apt install -y libncurses5
apt install -y libncurses5-dev
apt install -y software-properties-common
apt install -y bzip2
apt install -y p7zip-full

apt install -y libnuma1
apt install -y libaio1
apt install -y libaio-dev
apt install -y libmecab2
apt install -y numactl
apt install -y libaio1t64
apt install -y libmm-dev

apt install -y dnsutils
apt install -y numactl
apt install -y xxd

# https://www.php.net/manual/zh/mysql-xdevapi.installation.php
apt install -y libprotobuf-dev
apt install -y protobuf-compiler
apt install -y libboost-dev
apt install -y liblz4-tool
apt install -y zstd
apt install -y sshpass
apt install -y libzstd-dev
apt install -y libbrotli

P_VER=`python3 -V | awk '{print $2}'`
if version_ge "$P_VER" "3.11.0" ;then
    echo -e "\e[1;31mapt install python3.12-venv\e[0m"
    apt install -y python3.12-venv
fi

# choose lang cmd
# dpkg-reconfigure --frontend=noninteractive locales
# dpkg-reconfigure locales
if [ ! -f /usr/sbin/locale-gen ];then
	apt install -y locales
	sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen
	locale-gen en_US.UTF-8
	locale-gen zh_CN.UTF-8
	localedef -v -c -i en_US -f UTF-8 en_US.UTF-8 > /dev/null 2>&1
	update-locale LANG=en_US.UTF-8
else
	locale-gen en_US.UTF-8
	locale-gen zh_CN.UTF-8
	localedef -v -c -i en_US -f UTF-8 en_US.UTF-8 > /dev/null 2>&1
fi

SSH_PORT=`netstat -ntpl|grep sshd|grep -v grep | sed -n "1,1p" | awk '{print $4}' | awk -F : '{print $2}'`
if [ "$SSH_PORT" == "" ];then
	SSH_PORT_LINE=`cat /etc/ssh/sshd_config | grep "Port \d*" | tail -1`
	SSH_PORT=${SSH_PORT_LINE/"Port "/""}
fi
echo "SSH PORT:${SSH_PORT}"

if [ -f /usr/sbin/ufw ];then
	# look
	# ufw status
	echo 'y' | ufw enable

	if [ "$SSH_PORT" != "" ];then
		ufw allow $SSH_PORT/tcp
	else
		ufw allow 22/tcp
	fi

	ufw allow 80/tcp
	ufw allow 443/tcp
	ufw allow 443/udp
	# ufw allow 888/tcp
fi

if [ ! -f /usr/sbin/ufw ];then
	apt install -y firewalld
	systemctl enable firewalld
	

	if [ "$SSH_PORT" != "" ];then
		firewall-cmd --permanent --zone=public --add-port=${SSH_PORT}/tcp
	else
		firewall-cmd --permanent --zone=public --add-port=22/tcp
	fi

	firewall-cmd --permanent --zone=public --add-port=80/tcp
	firewall-cmd --permanent --zone=public --add-port=443/tcp
	firewall-cmd --permanent --zone=public --add-port=443/udp
	# firewall-cmd --permanent --zone=public --add-port=888/tcp

	systemctl start firewalld

	# fix:debian10 firewalld faq
	# https://kawsing.gitbook.io/opensystem/andoid-shou-ji/untitled/fang-huo-qiang#debian-10-firewalld-0.6.3-error-commandfailed-usrsbinip6tablesrestorewn-failed-ip6tablesrestore-v1.8
	sed -i 's#IndividualCalls=no#IndividualCalls=yes#g' /etc/firewalld/firewalld.conf

	firewall-cmd --reload
	
	# #安装时不开启
	# systemctl stop firewalld
fi

apt install -y devscripts
apt install -y python3-dev
apt install -y autoconf
apt install -y gcc
apt install -y lrzsz

apt install -y libffi-dev
apt install -y cmake automake make

apt install -y webp scons
apt install -y libwebp-dev
apt install -y lzma lzma-dev
apt install -y libunwind-dev

apt install -y libpcre3 libpcre3-dev 
apt install -y openssl
apt install -y libssl-dev
apt install -y libargon2-dev

apt install -y libmemcached-dev
apt install -y libsasl2-dev
apt install -y imagemagick
apt install -y libmagickcore-dev
apt install -y libmagickwand-dev

apt install -y libxml2 libxml2-dev libbz2-dev libmcrypt-dev libpspell-dev librecode-dev
apt install -y libgmp-dev libgmp3-dev libreadline-dev libxpm-dev
apt install -y libpq-dev
apt install -y dia

apt install -y pkg-config
apt install -y zlib1g-dev

apt install -y libjpeg-dev libpng-dev
apt install -y libfreetype6
apt install -y libjpeg62-turbo-dev
apt install -y libfreetype6-dev
apt install -y libevent-dev libldap2-dev

apt install -y libzip-dev
apt install -y libicu-dev
apt install -y libyaml-dev 

# mqtt
apt install -y xsltproc

apt install -y build-essential

apt install -y libcurl4-openssl-dev
apt install -y libcurl4-nss-dev
apt install -y curl libcurl4-gnutls-dev
#https://blog.csdn.net/qq_36228377/article/details/123154344
# ln -s  /usr/include/x86_64-linux-gnu/curl  /usr/include/curl
if [ ! -d /usr/include/curl ];then
	SYS_ARCH=`arch`
	if [ -f /usr/include/x86_64-linux-gnu/curl ];then
		ln -s /usr/include/x86_64-linux-gnu/curl /usr/include/curl
	else
		# ln -s /usr/include/aarch64-linux-gnu/curl /usr/include/curl
		ln -s /usr/include/${SYS_ARCH}-linux-gnu/curl /usr/include/curl
	fi 
fi


apt install -y graphviz bison re2c flex
apt install -y libsqlite3-dev
apt install -y libonig-dev

apt install -y perl g++ libtool    
apt install -y libxslt1-dev

apt install -y libmariadb-dev
#apt install -y libmysqlclient-dev   
apt install -y libmariadb-dev-compat
#apt install -y libmariadbclient-dev


# mysql8.0 在ubuntu22需要的库
apt install -y patchelf

VERSION_ID=`cat /etc/*-release | grep VERSION_ID | awk -F = '{print $2}' | awk -F "\"" '{print $2}'`
if [ "${VERSION_ID}" == "22.04" ];then
	apt install -y python3-cffi
    pip3 install -U --force-reinstall --no-binary :all: gevent
fi

# find /usr/lib -name "*libaio*" 2>/dev/null
if [ ! -f /usr/lib/libaio.so.1 ];then
	if [ -f /usr/lib/x86_64-linux-gnu/libaio.so.1t64 ];then
		ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/libaio.so.1
	fi
fi

cd /www/server/mdserver-web/scripts && bash lib.sh
chmod 755 /www/server/mdserver-web/data


if [ "${VERSION_ID}" == "22.04" ];then
	apt install -y python3-cffi
    pip3 install -U --force-reinstall --no-binary :all: gevent
fi

