stop_existing_instance() { if [ -f "/opt/etc/init.d/${OBF_INIT_NAME}" ]; then /opt/etc/init.d/${OBF_INIT_NAME} stop >/dev/null 2>&1 || true fi if [ -f "/etc/init.d/${OBF_SERVICE_NAME}" ]; then /etc/init.d/${OBF_SERVICE_NAME} stop >/dev/null 2>&1 || true fi if command -v systemctl >/dev/null 2>&1 && [ -f "/etc/systemd/system/${OBF_SERVICE_NAME}.service" ]; then systemctl stop "${OBF_SERVICE_NAME}" >/dev/null 2>&1 || true fi } install_obfuscator() { local arch="$1" local binary_name="wg-obfuscator-${arch}" stop_existing_instance if [ ! -f "bin/${binary_name}" ]; then msg "ОШИБКА: бинарник ${binary_name} не найден в архиве" ls -1 bin/ 2>/dev/null || true exit 1 fi local target_path="/opt/bin/${OBF_BINARY_NAME}" [ "$ROUTER_PLATFORM" = "openwrt" ] && target_path="/usr/bin/${OBF_BINARY_NAME}" if [ "$ROUTER_PLATFORM" = "openwrt" ]; then mkdir -p /usr/bin else mkdir -p /opt/bin fi [ -f "$target_path" ] && rm "$target_path" cp "bin/${binary_name}" "$target_path" chmod +x "$target_path" } create_init_script() { mkdir -p /opt/etc/init.d cat > /opt/etc/init.d/${OBF_INIT_NAME} </dev/null 2>&1 || true elif [ -f "/etc/init.d/${OBF_SERVICE_NAME}" ]; then /etc/init.d/${OBF_SERVICE_NAME} start >/dev/null 2>&1 || true /etc/init.d/${OBF_SERVICE_NAME} enable >/dev/null 2>&1 || true fi sleep 2 if command -v pidof >/dev/null 2>&1 && pidof "${OBF_BINARY_NAME}" >/dev/null 2>&1; then return 0 fi if command -v pgrep >/dev/null 2>&1 && pgrep -f "${OBF_BINARY_NAME}" >/dev/null 2>&1; then return 0 fi if ps w 2>/dev/null | grep -v grep | grep -q "${OBF_BINARY_NAME}"; then return 0 fi if ps 2>/dev/null | grep -v grep | grep -q "${OBF_BINARY_NAME}"; then return 0 fi if [ -f "/opt/etc/init.d/${OBF_INIT_NAME}" ]; then /opt/etc/init.d/${OBF_INIT_NAME} status 2>&1 | grep -q "alive" && return 0 fi if [ -f "/etc/init.d/${OBF_SERVICE_NAME}" ]; then /etc/init.d/${OBF_SERVICE_NAME} status >/dev/null 2>&1 && return 0 fi return 1 } create_procd_init_script() { cat > /etc/init.d/${OBF_SERVICE_NAME} < /etc/systemd/system/${OBF_SERVICE_NAME}.service </dev/null 2>&1 systemctl enable "${OBF_SERVICE_NAME}" >/dev/null 2>&1 systemctl start "${OBF_SERVICE_NAME}" >/dev/null 2>&1 local wait_count=0 while [ $wait_count -lt 10 ]; do sleep 1 systemctl is-active --quiet "${OBF_SERVICE_NAME}" && return 0 wait_count=$((wait_count + 1)) done return 1 }