fix(core): nfqws segfault, trap cleanup, strategy name extraction
- install_nfqws.sh: strip LTO and --gc-sections flags from Makefile before build to prevent segfault on some systems; verify binary runs before install - lib/functions.sh: check_nfqws() now also tests --help to catch segfaulting or missing-dependency binaries - run_strategy.sh: replace broken single-quoted trap string with proper cleanup_tmp function so temp file is actually removed - service.sh: extract strategy name by stripping general_ prefix from wrapper filename so ExecStart points to correct config Fixes: nfqws segfault on build, service start failure, temp file leak.
This commit is contained in:
@@ -101,6 +101,8 @@ fi
|
|||||||
cd "$BUILD_DIR/zapret"
|
cd "$BUILD_DIR/zapret"
|
||||||
|
|
||||||
echo "[*] Building nfqws..."
|
echo "[*] Building nfqws..."
|
||||||
|
# Fix: disable LTO and aggressive section-gc that can cause segfaults on some systems
|
||||||
|
sed -i 's/-flto=auto//g; s/-Wl,--gc-sections//g; s/-ffunction-sections//g; s/-fdata-sections//g' nfq/Makefile 2>/dev/null || true
|
||||||
if ! make -C nfq; then
|
if ! make -C nfq; then
|
||||||
echo "[!] Build failed!"
|
echo "[!] Build failed!"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -111,6 +113,21 @@ if [ ! -f "$BUILD_DIR/zapret/nfq/nfqws" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Verify the binary actually runs (catch segfaults early)
|
||||||
|
if ! "$BUILD_DIR/zapret/nfq/nfqws" --help >/dev/null 2>&1; then
|
||||||
|
echo "[!] nfqws segfaults with current flags. Rebuilding without strip..."
|
||||||
|
sed -i 's/-s //g; s/ -s//g' nfq/Makefile 2>/dev/null || true
|
||||||
|
make -C nfq clean && make -C nfq
|
||||||
|
if [ ! -f "$BUILD_DIR/zapret/nfq/nfqws" ]; then
|
||||||
|
echo "[!] nfqws binary not found after rebuild"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! "$BUILD_DIR/zapret/nfq/nfqws" --help >/dev/null 2>&1; then
|
||||||
|
echo "[!] nfqws still segfaults. Aborting."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
mkdir -p "$BIN_DIR"
|
mkdir -p "$BIN_DIR"
|
||||||
cp "$BUILD_DIR/zapret/nfq/nfqws" "$BIN_DIR/"
|
cp "$BUILD_DIR/zapret/nfq/nfqws" "$BIN_DIR/"
|
||||||
chmod +x "$BIN_DIR/nfqws"
|
chmod +x "$BIN_DIR/nfqws"
|
||||||
|
|||||||
@@ -122,6 +122,16 @@ check_nfqws() {
|
|||||||
echo ""
|
echo ""
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
# Verify the binary actually runs (catches segfaults/missing deps)
|
||||||
|
if ! "$BIN_DIR/nfqws" --help >/dev/null 2>&1; then
|
||||||
|
echo ""
|
||||||
|
print_red "ERROR: nfqws binary exists but does not run (segfault? missing deps?)"
|
||||||
|
echo ""
|
||||||
|
echo "Try rebuilding:"
|
||||||
|
echo " ./install_nfqws.sh"
|
||||||
|
echo ""
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -80,7 +80,8 @@ parse_conf_args() {
|
|||||||
# Build args in main shell using temp file
|
# Build args in main shell using temp file
|
||||||
cd "$SCRIPT_DIR"
|
cd "$SCRIPT_DIR"
|
||||||
TMP_ARGS="$(mktemp /tmp/zapret_args.XXXXXX)"
|
TMP_ARGS="$(mktemp /tmp/zapret_args.XXXXXX)"
|
||||||
trap "rm -f '\$TMP_ARGS'" EXIT
|
cleanup_tmp() { rm -f "$TMP_ARGS" 2>/dev/null || true; }
|
||||||
|
trap cleanup_tmp EXIT
|
||||||
|
|
||||||
parse_conf_args "$CONF_FILE" > "$TMP_ARGS"
|
parse_conf_args "$CONF_FILE" > "$TMP_ARGS"
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -149,7 +149,8 @@ service_install() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
local strategy_name
|
local strategy_name
|
||||||
strategy_name=$(basename "$selected" .sh)
|
strategy_name=$(basename "$selected" .sh | sed 's/^general_//')
|
||||||
|
[[ -z "$strategy_name" ]] && strategy_name="general"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "[*] Installing strategy: $strategy_name"
|
echo "[*] Installing strategy: $strategy_name"
|
||||||
|
|||||||
Reference in New Issue
Block a user