Actualizar lib/steps/singbox.sh

This commit is contained in:
Zenaku 2026-06-02 18:24:02 +00:00
parent eaa28aada1
commit 50bf6503d9

View file

@ -1,96 +1,74 @@
#!/bin/bash #!/bin/bash
# lib/steps/repos.sh — clonar repositorios + generar .env # lib/steps/singbox.sh — instalar/verificar sing-box
step_repos() { step_singbox() {
print_section "Repositories" print_section "sing-box"
log_step "Cloning repositories & configuring .env" 2 $TOTAL_STEPS log_step "Checking sing-box binary" 4 $TOTAL_STEPS
mkdir -p "$HV_BASE" local found=""
chmod 700 "$HV_BASE" for candidate in /usr/bin/sing-box /usr/local/bin/sing-box /bin/sing-box; do
[ -x "$candidate" ] && found="$candidate" && break
_clone_repos
_setup_env
}
_clone_repos() {
for name in essentials cli gui; do
local url="${REPO_URLS[$name]}"
local branch="${REPO_BRANCHES[$name]}"
local dest="${REPO_DIRS[$name]}"
if [ -d "$dest/.git" ]; then
log_warn "Repo ya existe: ${dest}"
if ask_confirm "Eliminar y re-clonar ${name}?"; then
rm -rf "$dest"
else
log_skip "Re-clone omitido — usando ${dest}"
continue
fi
fi
start_spinner "Clonando ${name} (branch: ${branch})..."
if git clone --branch "$branch" "$url" "$dest" &>/dev/null; then
stop_spinner "${name} clonado → ${dest}"
else
stop_spinner
log_error "git clone falló: ${url}"
exit 1
fi
chmod 700 "$dest"
done done
[ -z "$found" ] && found=$(command -v sing-box 2>/dev/null || true)
if [ -n "$found" ]; then
local ver
ver=$("$found" version 2>/dev/null | head -1 || echo "unknown")
log_ok "Encontrado: ${found} (${ver})"
if [ "$found" != "$SINGBOX_BIN" ]; then
sudo ln -sf "$found" "$SINGBOX_BIN"
log_ok "Symlink → ${SINGBOX_BIN}"
fi
else
_install_singbox
fi
# setcap — sing-box crea TUN sin necesitar root completo
if command -v setcap &>/dev/null; then
sudo setcap cap_net_admin,cap_net_raw+ep "$SINGBOX_BIN"
log_ok "setcap cap_net_admin,cap_net_raw+ep → ${SINGBOX_BIN}"
else
log_warn "setcap no disponible — sing-box necesitará sudo para TUN"
fi
log_ok "sing-box listo → ${SINGBOX_BIN}"
} }
_setup_env() { _install_singbox() {
local env_file="$HV_CORE/.env" log_info "sing-box no encontrado — instalando v${SINGBOX_VERSION}..."
local example_file="$HV_CORE/.env.example"
if [ ! -f "$example_file" ]; then local arch
log_error ".env.example no encontrado: ${example_file}" arch=$(uname -m)
case "$arch" in
x86_64) arch="amd64" ;;
aarch64) arch="arm64" ;;
*)
log_error "Arquitectura no soportada: ${arch}"
exit 1
;;
esac
local url="https://github.com/SagerNet/sing-box/releases/download/v${SINGBOX_VERSION}/sing-box-${SINGBOX_VERSION}-linux-${arch}.tar.gz"
local tmp_tar="/tmp/sing-box-$$.tar.gz"
local tmp_dir="/tmp/sing-box-$$"
start_spinner "Descargando sing-box v${SINGBOX_VERSION}..."
if wget -q --timeout=60 "$url" -O "$tmp_tar"; then
stop_spinner "Descarga completa"
else
stop_spinner
rm -f "$tmp_tar"
log_error "Descarga falló: ${url}"
exit 1 exit 1
fi fi
if [ -f "$env_file" ]; then start_spinner "Extrayendo..."
log_warn ".env ya existe — sobreescribiendo" mkdir -p "$tmp_dir"
fi tar -xzf "$tmp_tar" -C "$tmp_dir" --strip-components=1
stop_spinner "Extraído"
echo "" sudo cp "$tmp_dir/sing-box" "$SINGBOX_BIN"
printf " ${DIM}Completá las variables. ENTER = dejar vacío.${RESET}\n" sudo chmod 755 "$SINGBOX_BIN"
print_divider rm -rf "$tmp_tar" "$tmp_dir"
echo "" log_ok "sing-box instalado: $($SINGBOX_BIN version | head -1)"
# APP_ENV
select_option \
"APP_ENV — entorno de la aplicación" \
"local desarrollo / testing" \
"production producción / dominio real"
case "$SELECT_RESULT" in
0) _app_env="local" ;;
1) _app_env="production" ;;
*) _app_env="production" ;;
esac
# SP_API_BASE_URL_PRODUCTION
echo ""
printf " ${BCYAN}┌─${RESET} ${BWHITE}SP_API_BASE_URL_PRODUCTION${RESET} ${DIM}e.g. https://fake.simplifiedprivacy.org/api/v1${RESET}\n"
printf " ${BCYAN}${RESET} "
read -r _api_url < /dev/tty
# Escribir .env
cat > "$env_file" << EOF
APP_ENV=${_app_env}
SP_API_BASE_URL_LOCAL=http://simplifiedprivacy.test/api/v1
SP_API_BASE_URL_PRODUCTION=${_api_url}
# ── Generado por el installer ─────────────────────────────────────────────
HV_CORE_HOME=${HV_CORE}
INSTALL_DIR=${HOME}
CORE_DIR=${HV_CORE}
EOF
chmod 600 "$env_file"
log_ok "APP_ENV=${_app_env}"
[ -n "$_api_url" ] && log_ok "SP_API_BASE_URL_PRODUCTION=${_api_url}" || label_skip "SP_API_BASE_URL_PRODUCTION — vacío"
log_ok "INSTALL_DIR=${HOME}"
log_ok ".env escrito → ${env_file}"
} }