mirror of https://github.com/telemt/telemt.git
improve install script
This commit is contained in:
parent
1bd249b0a9
commit
a0cf4b4713
139
install.sh
139
install.sh
|
|
@ -1,73 +1,94 @@
|
||||||
sudo bash -c '
|
#!/bin/sh
|
||||||
set -e
|
set -eu
|
||||||
|
|
||||||
# --- Проверка на существующую установку ---
|
REPO="${REPO:-telemt/telemt}"
|
||||||
if systemctl list-unit-files | grep -q telemt.service; then
|
BIN_NAME="${BIN_NAME:-telemt}"
|
||||||
# --- РЕЖИМ ОБНОВЛЕНИЯ ---
|
VERSION="${1:-${VERSION:-latest}}"
|
||||||
echo "--- Обнаружена существующая установка Telemt. Запускаю обновление... ---"
|
INSTALL_DIR="${INSTALL_DIR:-/usr/local/bin}"
|
||||||
|
|
||||||
echo "[*] Остановка службы telemt..."
|
say() {
|
||||||
systemctl stop telemt || true # Игнорируем ошибку, если служба уже остановлена
|
printf '%s\n' "$*"
|
||||||
|
}
|
||||||
|
|
||||||
echo "[1/2] Скачивание последней версии Telemt..."
|
die() {
|
||||||
wget -qO- "https://github.com/telemt/telemt/releases/latest/download/telemt-$(uname -m)-linux-$(ldd --version 2>&1 | grep -iq musl && echo musl || echo gnu).tar.gz" | tar -xz
|
printf 'Error: %s\n' "$*" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
echo "[1/2] Замена исполняемого файла в /usr/local/bin..."
|
need_cmd() {
|
||||||
mv telemt /usr/local/bin/telemt
|
command -v "$1" >/dev/null 2>&1 || die "required command not found: $1"
|
||||||
chmod +x /usr/local/bin/telemt
|
}
|
||||||
|
|
||||||
echo "[2/2] Запуск службы..."
|
detect_arch() {
|
||||||
systemctl start telemt
|
arch="$(uname -m)"
|
||||||
|
case "$arch" in
|
||||||
|
x86_64|amd64) printf 'x86_64\n' ;;
|
||||||
|
aarch64|arm64) printf 'aarch64\n' ;;
|
||||||
|
*) die "unsupported architecture: $arch" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
echo "--- Обновление Telemt успешно завершено! ---"
|
detect_libc() {
|
||||||
echo
|
if command -v ldd >/dev/null 2>&1 && ldd --version 2>&1 | grep -iq musl; then
|
||||||
echo "Для проверки статуса службы выполните:"
|
printf 'musl\n'
|
||||||
echo " systemctl status telemt"
|
else
|
||||||
|
printf 'gnu\n'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
else
|
fetch_to_stdout() {
|
||||||
# --- РЕЖИМ НОВОЙ УСТАНОВКИ ---
|
url="$1"
|
||||||
echo "--- Начало автоматической установки Telemt ---"
|
if command -v curl >/dev/null 2>&1; then
|
||||||
|
curl -fsSL "$url"
|
||||||
|
elif command -v wget >/dev/null 2>&1; then
|
||||||
|
wget -qO- "$url"
|
||||||
|
else
|
||||||
|
die "neither curl nor wget is installed"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# Шаг 1: Скачивание и установка бинарного файла
|
install_binary() {
|
||||||
echo "[1/5] Скачивание последней версии Telemt..."
|
src="$1"
|
||||||
wget -qO- "https://github.com/telemt/telemt/releases/latest/download/telemt-$(uname -m)-linux-$(ldd --version 2>&1 | grep -iq musl && echo musl || echo gnu).tar.gz" | tar -xz
|
dst="$2"
|
||||||
|
|
||||||
echo "[1/5] Перемещение исполняемого файла в /usr/local/bin и установка прав..."
|
if [ -w "$INSTALL_DIR" ] || { [ ! -e "$INSTALL_DIR" ] && [ -w "$(dirname "$INSTALL_DIR")" ]; }; then
|
||||||
mv telemt /usr/local/bin/telemt
|
mkdir -p "$INSTALL_DIR"
|
||||||
chmod +x /usr/local/bin/telemt
|
install -m 0755 "$src" "$dst"
|
||||||
|
elif command -v sudo >/dev/null 2>&1; then
|
||||||
|
sudo mkdir -p "$INSTALL_DIR"
|
||||||
|
sudo install -m 0755 "$src" "$dst"
|
||||||
|
else
|
||||||
|
die "cannot write to $INSTALL_DIR and sudo is not available"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# Шаг 2: Генерация секрета
|
need_cmd uname
|
||||||
echo "[2/5] Генерация секретного ключа..."
|
need_cmd tar
|
||||||
SECRET=$(openssl rand -hex 16)
|
need_cmd mktemp
|
||||||
|
need_cmd grep
|
||||||
|
need_cmd install
|
||||||
|
|
||||||
# Шаг 3: Создание файла конфигурации
|
ARCH="$(detect_arch)"
|
||||||
echo "[3/5] Создание файла конфигурации /etc/telemt.toml..."
|
LIBC="$(detect_libc)"
|
||||||
printf "# === General Settings ===\n[general]\n[general.modes]\nclassic = false\nsecure = false\ntls = true\n\n# === Anti-Censorship & Masking ===\n[censorship]\n# !!! ВАЖНО: Замените на ваш домен или домен, который вы хотите использовать для маскировки !!!\ntls_domain = \"petrovich.ru\"\n\n[access.users]\nhello = \"%s\"\n" "$SECRET" > /etc/telemt.toml
|
|
||||||
|
|
||||||
# Шаг 4: Создание службы Systemd
|
case "$VERSION" in
|
||||||
echo "[4/5] Создание службы systemd..."
|
latest)
|
||||||
printf "[Unit]\nDescription=Telemt Proxy\nAfter=network.target\n\n[Service]\nType=simple\nExecStart=/usr/local/bin/telemt /etc/telemt.toml\nRestart=on-failure\nRestartSec=5\nLimitNOFILE=65536\n\n[Install]\nWantedBy=multi-user.target\n" > /etc/systemd/system/telemt.service
|
URL="https://github.com/$REPO/releases/latest/download/${BIN_NAME}-${ARCH}-linux-${LIBC}.tar.gz"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
URL="https://github.com/$REPO/releases/download/${VERSION}/${BIN_NAME}-${ARCH}-linux-${LIBC}.tar.gz"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
# Шаг 5: Запуск службы
|
TMPDIR="$(mktemp -d)"
|
||||||
echo "[5/5] Перезагрузка systemd, запуск и включение службы telemt..."
|
trap 'rm -rf "$TMPDIR"' EXIT INT TERM
|
||||||
systemctl daemon-reload
|
|
||||||
systemctl start telemt
|
|
||||||
systemctl enable telemt
|
|
||||||
|
|
||||||
echo "--- Установка и запуск Telemt успешно завершены! ---"
|
say "Installing $BIN_NAME ($VERSION) for $ARCH-linux-$LIBC..."
|
||||||
echo
|
fetch_to_stdout "$URL" | tar -xzf - -C "$TMPDIR"
|
||||||
echo "ВАЖНАЯ ИНФОРМАЦИЯ:"
|
|
||||||
echo "==================="
|
[ -f "$TMPDIR/$BIN_NAME" ] || die "archive did not contain $BIN_NAME"
|
||||||
echo "1. Вам НЕОБХОДИМО отредактировать файл /etc/telemt.toml и заменить '\''petrovich.ru'\'' на другой домен"
|
|
||||||
echo " с помощью команды:"
|
install_binary "$TMPDIR/$BIN_NAME" "$INSTALL_DIR/$BIN_NAME"
|
||||||
echo " nano /etc/telemt.toml"
|
|
||||||
echo " После редактирования файла перезапустите службу командой:"
|
say "Installed: $INSTALL_DIR/$BIN_NAME"
|
||||||
echo " sudo systemctl restart telemt"
|
"$INSTALL_DIR/$BIN_NAME" --version 2>/dev/null || true
|
||||||
echo
|
|
||||||
echo "2. Для проверки статуса службы выполните команду:"
|
|
||||||
echo " systemctl status telemt"
|
|
||||||
echo
|
|
||||||
echo "3. Для получения ссылок на подключение выполните команду:"
|
|
||||||
echo " journalctl -u telemt -n -g '\''links'\'' --no-pager -o cat | tac"
|
|
||||||
fi
|
|
||||||
'
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue