From 1db4fe1f012d94e2819bea838e47905dc7e4d3fb Mon Sep 17 00:00:00 2001 From: evgeny Date: Wed, 2 Sep 2026 21:29:48 +0300 Subject: [PATCH] =?UTF-8?q?build=5Flinux=5Ffull.sh:=20=D0=B0=D0=B2=D1=82?= =?UTF-8?q?=D0=BE=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B5=D0=B9=20=D0=B8=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=BD=D0=B0=D1=8F=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build_linux_full.sh | 93 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 91 insertions(+), 2 deletions(-) diff --git a/build_linux_full.sh b/build_linux_full.sh index 539173f8..70356129 100755 --- a/build_linux_full.sh +++ b/build_linux_full.sh @@ -1,7 +1,79 @@ #!/bin/sh -mkdir -p m4 set -e +# --- определение пакетного менеджера --- +detect_pm() { + if command -v apt-get >/dev/null 2>&1; then + PM=apt; PM_UPDATE="apt-get update"; PM_INSTALL="apt-get install -y" + P_AUTOCONF=autoconf; P_AUTOMAKE=automake; P_BUILD=build-essential; P_SSL=libssl-dev + elif command -v dnf >/dev/null 2>&1; then + PM=dnf; PM_UPDATE="true"; PM_INSTALL="dnf install -y" + P_AUTOCONF=autoconf; P_AUTOMAKE=automake; P_BUILD="gcc make"; P_SSL=openssl-devel + elif command -v yum >/dev/null 2>&1; then + PM=yum; PM_UPDATE="true"; PM_INSTALL="yum install -y" + P_AUTOCONF=autoconf; P_AUTOMAKE=automake; P_BUILD="gcc make"; P_SSL=openssl-devel + elif command -v pacman >/dev/null 2>&1; then + PM=pacman; PM_UPDATE="pacman -Sy --noconfirm"; PM_INSTALL="pacman -S --noconfirm" + P_AUTOCONF=autoconf; P_AUTOMAKE=automake; P_BUILD=base-devel; P_SSL=openssl + elif command -v apk >/dev/null 2>&1; then + PM=apk; PM_UPDATE="apk update"; PM_INSTALL="apk add" + P_AUTOCONF=autoconf; P_AUTOMAKE=automake; P_BUILD=build-base; P_SSL=openssl-dev + else + PM=none + fi +} + +# --- чего не хватает (логические маркеры) --- +detect_missing() { + missing="" + command -v autoreconf >/dev/null 2>&1 || missing="$missing autoconf" + command -v automake >/dev/null 2>&1 || missing="$missing automake" + if ! command -v gcc >/dev/null 2>&1 || ! command -v make >/dev/null 2>&1; then + missing="$missing buildtools" + fi + [ -f /usr/include/openssl/sha.h ] || missing="$missing openssl" +} + +# --- перевести маркеры в пакеты выбранного PM --- +pkg_names() { + pkgs="" + case "$missing" in *autoconf*) pkgs="$pkgs $P_AUTOCONF";; esac + case "$missing" in *automake*) pkgs="$pkgs $P_AUTOMAKE";; esac + case "$missing" in *buildtools*) pkgs="$pkgs $P_BUILD";; esac + case "$missing" in *openssl*) pkgs="$pkgs $P_SSL";; esac +} + +# --- установка, если что-то отсутствует --- +detect_pm +detect_missing +if [ -n "$missing" ]; then + if [ "$PM" = "none" ]; then + echo "Ошибка: не найден пакетный менеджер. Установите вручную:$missing" + exit 1 + fi + if [ "$(id -u)" -eq 0 ]; then + SUDO="" + elif command -v sudo >/dev/null 2>&1; then + SUDO="sudo" + else + echo "Ошибка: нужны права root (sudo не найден). Установите вручную:$missing" + exit 1 + fi + pkg_names + echo "Установка недостающих пакетов ($PM):$pkgs" + $SUDO $PM_UPDATE && $SUDO $PM_INSTALL $pkgs || { + echo "Ошибка: не удалось установить пакеты:$pkgs" + exit 1 + } + detect_missing + if [ -n "$missing" ]; then + echo "Ошибка: после установки всё ещё не хватает:$missing" + exit 1 + fi +fi + +mkdir -p m4 + echo "=== Полная пересборка uTun ===" # 1. Очистка @@ -9,19 +81,36 @@ echo "[1/4] Очистка..." make distclean 2>/dev/null || true rm -f config.h config.status config.log rm -f configure.log autoreconf.log build.log +rm -f src/utun # 2. Автогенерация (autoreconf) echo "[2/4] Автогенерация (autoreconf -fi)..." autoreconf -fi 2>&1 | tee autoreconf.log +if [ ! -f configure ]; then + echo "Ошибка: autoreconf не создал configure. См. autoreconf.log" + exit 1 +fi + # 3. Конфигурация echo "[3/4] Конфигурация..." ./configure --prefix=/usr/local 2>&1 | tee configure.log +if [ ! -f Makefile ]; then + echo "Ошибка: configure не создал Makefile. См. configure.log" + echo "Возможно не установлен libssl-dev (OpenSSL)." + exit 1 +fi + # 4. Сборка echo "[4/4] Сборка..." make -j$(nproc) 2>&1 | tee build.log +if [ ! -f src/utun ]; then + echo "Ошибка: сборка не создала src/utun. См. build.log" + exit 1 +fi + echo "" echo "=== Готово ===" -echo "Бинарный файл: src/utun" +echo "Бинарный файл: src/utun (скопирован в ./utun)"