Files
trojanZ/trojan-master/asset/trojan-install.sh
T
2026-07-26 00:09:57 +08:00

200 lines
5.2 KiB
Bash

#!/bin/bash
# source: https://github.com/trojan-gfw/trojan-quickstart
set -eo pipefail
# trojan: 0, trojan-go: 1
TYPE=0
INSTALL_VERSION=""
while [[ $# > 0 ]];do
KEY="$1"
case $KEY in
-v|--version)
INSTALL_VERSION="$2"
echo -e "prepare install $INSTALL_VERSION version..\n"
shift
;;
-g|--go)
TYPE=1
;;
*)
# unknown option
;;
esac
shift # past argument or value
done
#############################
function prompt() {
while true; do
read -p "$1 [y/N] " yn
case $yn in
[Yy] ) return 0;;
[Nn]|"" ) return 1;;
esac
done
}
if [[ $(id -u) != 0 ]]; then
echo Please run this script as root.
exit 1
fi
ARCH=$(uname -m 2> /dev/null)
if [[ $ARCH != x86_64 && $ARCH != aarch64 ]];then
echo "not support $ARCH machine".
exit 1
fi
if [[ $TYPE == 0 && $ARCH != x86_64 ]];then
echo "trojan not support $ARCH machine"
exit 1
fi
if [[ $TYPE == 0 ]];then
CHECKVERSION="https://api.github.com/repos/trojan-gfw/trojan/releases/latest"
else
CHECKVERSION="https://api.github.com/repos/p4gefau1t/trojan-go/releases"
fi
NAME=trojan
if [[ -z $INSTALL_VERSION ]];then
VERSION=$(curl -H 'Cache-Control: no-cache' -s "$CHECKVERSION" | grep 'tag_name' | cut -d\" -f4 | sed 's/v//g' | head -n 1)
else
if [[ -z `curl -H 'Cache-Control: no-cache' -s "$CHECKVERSION"|grep 'tag_name'|grep $INSTALL_VERSION` ]];then
echo "no $INSTALL_VERSION version file!"
exit 1
fi
VERSION=`echo "$INSTALL_VERSION"|sed 's/v//g'`
fi
if [[ $TYPE == 0 ]];then
TARBALL="$NAME-$VERSION-linux-amd64.tar.xz"
DOWNLOADURL="https://github.com/trojan-gfw/$NAME/releases/download/v$VERSION/$TARBALL"
else
[[ $ARCH == x86_64 ]] && TARBALL="trojan-go-linux-amd64.zip" || TARBALL="trojan-go-linux-armv8.zip"
DOWNLOADURL="https://github.com/p4gefau1t/trojan-go/releases/download/v$VERSION/$TARBALL"
fi
TMPDIR="$(mktemp -d)"
INSTALLPREFIX="/usr/bin/$NAME"
SYSTEMDPREFIX=/etc/systemd/system
BINARYPATH="$INSTALLPREFIX/$NAME"
CONFIGPATH="/usr/local/etc/$NAME/config.json"
SYSTEMDPATH="$SYSTEMDPREFIX/$NAME.service"
echo Creating $NAME install directory
mkdir -p $INSTALLPREFIX /usr/local/etc/$NAME
echo Entering temp directory $TMPDIR...
cd "$TMPDIR"
echo Downloading $NAME $VERSION...
curl -LO --progress-bar "$DOWNLOADURL" || wget -q --show-progress "$DOWNLOADURL"
echo Unpacking $NAME $VERSION...
if [[ $TYPE == 0 ]];then
tar xf "$TARBALL"
cd "$NAME"
else
if [[ -z `command -v unzip` ]];then
if [[ `command -v dnf` ]];then
dnf install unzip -y
elif [[ `command -v yum` ]];then
yum install unzip -y
elif [[ `command -v apt-get` ]];then
apt-get install unzip -y
fi
fi
unzip "$TARBALL"
mv trojan-go trojan
fi
echo Installing $NAME $VERSION to $BINARYPATH...
install -Dm755 "$NAME" "$BINARYPATH"
echo Installing $NAME server config to $CONFIGPATH...
if ! [[ -f "$CONFIGPATH" ]] || prompt "The server config already exists in $CONFIGPATH, overwrite?"; then
cat > "$CONFIGPATH" << EOF
{
"run_type": "server",
"local_addr": "0.0.0.0",
"local_port": 443,
"remote_addr": "127.0.0.1",
"remote_port": 80,
"password": [
"password1",
"password2"
],
"log_level": 1,
"ssl": {
"cert": "/path/to/certificate.crt",
"key": "/path/to/private.key",
"key_password": "",
"cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384",
"cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384",
"prefer_server_cipher": true,
"alpn": [
"http/1.1"
],
"alpn_port_override": {
"h2": 81
},
"reuse_session": true,
"session_ticket": false,
"session_timeout": 600,
"plain_http_response": "",
"curves": "",
"dhparam": ""
},
"tcp": {
"prefer_ipv4": false,
"no_delay": true,
"keep_alive": true,
"reuse_port": false,
"fast_open": false,
"fast_open_qlen": 20
},
"mysql": {
"enabled": false,
"server_addr": "127.0.0.1",
"server_port": 3306,
"database": "trojan",
"username": "trojan",
"password": "",
"key": "",
"cert": "",
"ca": ""
}
}
EOF
else
echo Skipping installing $NAME server config...
fi
if [[ -d "$SYSTEMDPREFIX" ]]; then
echo Installing $NAME systemd service to $SYSTEMDPATH...
[[ $TYPE == 1 ]] && { NAME="trojan-go"; FLAG="-config"; }
cat > "$SYSTEMDPATH" << EOF
[Unit]
Description=$NAME
After=network.target network-online.target nss-lookup.target mysql.service mariadb.service mysqld.service
[Service]
Type=simple
StandardError=journal
ExecStart=$BINARYPATH $FLAG $CONFIGPATH
ExecReload=/bin/kill -HUP \$MAINPID
Restart=on-failure
RestartSec=3s
[Install]
WantedBy=multi-user.target
EOF
echo Reloading systemd daemon...
systemctl daemon-reload
fi
echo Deleting temp directory $TMPDIR...
rm -rf "$TMPDIR"
echo Done!