mirror of https://github.com/XTLS/Xray-install
232 lines
6.3 KiB
Bash
232 lines
6.3 KiB
Bash
#!/usr/bin/env ash
|
|
# shellcheck shell=dash
|
|
|
|
set -euo pipefail
|
|
|
|
check_alpine() {
|
|
if [ -f /etc/alpine-release ]; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
check_if_running_as_root() {
|
|
# If you want to run as another user, please modify $EUID to be owned by this user
|
|
if [ "$(id -u)" -eq 0 ]; then
|
|
return 0
|
|
else
|
|
echo "error: You must run this script as root!"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
identify_architecture() {
|
|
if [ "$(uname)" != 'Linux' ]; then
|
|
echo "error: This operating system is not supported."
|
|
return 1
|
|
fi
|
|
case "$(uname -m)" in
|
|
'i386' | 'i686')
|
|
MACHINE='32'
|
|
;;
|
|
'amd64' | 'x86_64')
|
|
MACHINE='64'
|
|
;;
|
|
'armv5tel')
|
|
MACHINE='arm32-v5'
|
|
;;
|
|
'armv6l')
|
|
MACHINE='arm32-v6'
|
|
grep Features /proc/cpuinfo | grep -qw 'vfp' || MACHINE='arm32-v5'
|
|
;;
|
|
'armv7' | 'armv7l')
|
|
MACHINE='arm32-v7a'
|
|
grep Features /proc/cpuinfo | grep -qw 'vfp' || MACHINE='arm32-v5'
|
|
;;
|
|
'armv8' | 'aarch64')
|
|
MACHINE='arm64-v8a'
|
|
;;
|
|
'mips')
|
|
MACHINE='mips32'
|
|
;;
|
|
'mipsle')
|
|
MACHINE='mips32le'
|
|
;;
|
|
'mips64')
|
|
MACHINE='mips64'
|
|
lscpu | grep -q "Little Endian" && MACHINE='mips64le'
|
|
;;
|
|
'mips64le')
|
|
MACHINE='mips64le'
|
|
;;
|
|
'ppc64')
|
|
MACHINE='ppc64'
|
|
;;
|
|
'ppc64le')
|
|
MACHINE='ppc64le'
|
|
;;
|
|
'riscv64')
|
|
MACHINE='riscv64'
|
|
;;
|
|
's390x')
|
|
MACHINE='s390x'
|
|
;;
|
|
*)
|
|
echo "error: The architecture is not supported."
|
|
return 1
|
|
;;
|
|
esac
|
|
if [ ! -f '/etc/os-release' ]; then
|
|
echo "error: Don't use outdated Linux distributions."
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
install_dependencies() {
|
|
if [ -n "$(command -v curl)" ]; then
|
|
return
|
|
fi
|
|
if [ -n "$(command -v unzip)" ]; then
|
|
return
|
|
fi
|
|
if [ "$(command -v apk)" ]; then
|
|
echo "Installing required dependencies..."
|
|
apk add curl unzip
|
|
else
|
|
echo "error: The script does not support the package manager in this operating system."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
download_xray() {
|
|
echo "Downloading Xray files..."
|
|
if ! curl -f -L -H 'Cache-Control: no-cache' -o "$ZIP_FILE" "$DOWNLOAD_LINK" -#; then
|
|
echo 'error: Download failed! Please check your network or try again.'
|
|
exit 1
|
|
fi
|
|
|
|
if ! curl -f -L -H 'Cache-Control: no-cache' -o "$ZIP_FILE.dgst" "$DOWNLOAD_LINK.dgst" -#; then
|
|
echo 'error: Download failed! Please check your network or try again.'
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
verification_xray() {
|
|
CHECKSUM=$(awk -F '= ' '/256=/ {print $2}' "$ZIP_FILE.dgst")
|
|
LOCALSUM=$(sha256sum "$ZIP_FILE" | awk '{printf $1}')
|
|
if [ "$CHECKSUM" != "$LOCALSUM" ]; then
|
|
echo 'error: SHA256 check failed! Please check your network or try again.'
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
decompression() {
|
|
unzip -q "$ZIP_FILE" -d "$TMP_DIRECTORY"
|
|
}
|
|
|
|
is_it_running() {
|
|
XRAY_RUNNING='0'
|
|
if [ -n "$(pgrep xray)" ]; then
|
|
rc-service xray stop
|
|
XRAY_RUNNING='1'
|
|
fi
|
|
}
|
|
|
|
install_xray() {
|
|
install -m 755 "${TMP_DIRECTORY}xray" "/usr/local/bin/xray"
|
|
install -d /usr/local/share/xray/
|
|
install -m 644 "${TMP_DIRECTORY}geoip.dat" "/usr/local/share/xray/geoip.dat"
|
|
install -m 644 "${TMP_DIRECTORY}geosite.dat" "/usr/local/share/xray/geosite.dat"
|
|
}
|
|
|
|
install_confdir() {
|
|
CONFDIR='0'
|
|
if [ ! -d '/usr/local/etc/xray/' ]; then
|
|
install -d /usr/local/etc/xray/
|
|
for BASE in 00_log 01_api 02_dns 03_routing 04_policy 05_inbounds 06_outbounds 07_transport 08_stats 09_reverse; do
|
|
echo '{}' >"/usr/local/etc/xray/$BASE.json"
|
|
done
|
|
CONFDIR='1'
|
|
fi
|
|
}
|
|
|
|
install_log() {
|
|
LOG='0'
|
|
if [ ! -d '/var/log/xray/' ]; then
|
|
install -d -o nobody -g nobody /var/log/xray/
|
|
install -m 600 -o nobody -g nobody /dev/null /var/log/xray/access.log
|
|
install -m 600 -o nobody -g nobody /dev/null /var/log/xray/error.log
|
|
LOG='1'
|
|
fi
|
|
}
|
|
|
|
install_startup_service_file() {
|
|
OPENRC='0'
|
|
if [ ! -f '/etc/init.d/xray' ]; then
|
|
mkdir "${TMP_DIRECTORY}init.d/"
|
|
if ! curl -f -L -o "${TMP_DIRECTORY}init.d/xray" https://github.com/XTLS/Xray-install/raw/main/alpinelinux/init.d/xray -sS; then
|
|
echo 'error: Failed to start service file download! Please check your network or try again.'
|
|
exit 1
|
|
fi
|
|
install -m 755 "${TMP_DIRECTORY}init.d/xray" /etc/init.d/xray
|
|
OPENRC='1'
|
|
fi
|
|
}
|
|
|
|
information() {
|
|
echo 'installed: /usr/local/bin/xray'
|
|
echo 'installed: /usr/local/share/xray/geoip.dat'
|
|
echo 'installed: /usr/local/share/xray/geosite.dat'
|
|
if [ "$CONFDIR" -eq '1' ]; then
|
|
echo 'installed: /usr/local/etc/xray/00_log.json'
|
|
echo 'installed: /usr/local/etc/xray/01_api.json'
|
|
echo 'installed: /usr/local/etc/xray/02_dns.json'
|
|
echo 'installed: /usr/local/etc/xray/03_routing.json'
|
|
echo 'installed: /usr/local/etc/xray/04_policy.json'
|
|
echo 'installed: /usr/local/etc/xray/05_inbounds.json'
|
|
echo 'installed: /usr/local/etc/xray/06_outbounds.json'
|
|
echo 'installed: /usr/local/etc/xray/07_transport.json'
|
|
echo 'installed: /usr/local/etc/xray/08_stats.json'
|
|
echo 'installed: /usr/local/etc/xray/09_reverse.json'
|
|
fi
|
|
if [ "$LOG" -eq '1' ]; then
|
|
echo 'installed: /var/log/xray/'
|
|
fi
|
|
if [ "$OPENRC" -eq '1' ]; then
|
|
echo 'installed: /etc/init.d/xray'
|
|
fi
|
|
rm -r "$TMP_DIRECTORY"
|
|
echo "removed: $TMP_DIRECTORY"
|
|
echo "You may need to execute a command to remove dependent software: apk del curl unzip"
|
|
if [ "$XRAY_RUNNING" -eq '1' ]; then
|
|
rc-service xray start
|
|
else
|
|
echo 'Please execute the command: rc-update add xray; rc-service xray start'
|
|
fi
|
|
echo "info: Xray is installed."
|
|
}
|
|
|
|
main() {
|
|
check_alpine || return 1
|
|
check_if_running_as_root || return 1
|
|
identify_architecture || return 1
|
|
install_dependencies
|
|
|
|
TMP_DIRECTORY="$(mktemp -d)/"
|
|
ZIP_FILE="${TMP_DIRECTORY}Xray-linux-$MACHINE.zip"
|
|
DOWNLOAD_LINK="https://github.com/XTLS/Xray-core/releases/latest/download/Xray-linux-$MACHINE.zip"
|
|
|
|
download_xray
|
|
verification_xray
|
|
decompression
|
|
is_it_running
|
|
install_xray
|
|
install_confdir
|
|
install_log
|
|
install_startup_service_file || return 1
|
|
information
|
|
}
|
|
|
|
main
|