improve install script

This commit is contained in:
Mirotin Artem 2026-03-07 19:07:30 +03:00
parent 1bd249b0a9
commit a0cf4b4713
No known key found for this signature in database
1 changed files with 80 additions and 59 deletions

View File

@ -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
'