Fix 'Text file busy' error when opening menu from curl install

Write management script to temp file then atomic mv to avoid overwriting
a running script. Adds error handling for failed writes.
This commit is contained in:
SamNet-dev
2026-01-31 12:40:14 -06:00
parent eedb61a22f
commit fcca48bd31

View File

@@ -834,8 +834,9 @@ EOF
#═══════════════════════════════════════════════════════════════════════ #═══════════════════════════════════════════════════════════════════════
create_management_script() { create_management_script() {
# Generate the management script. # Generate the management script (write to temp file first to avoid "Text file busy")
cat > "$INSTALL_DIR/conduit" << 'MANAGEMENT' local tmp_script="$INSTALL_DIR/conduit.tmp.$$"
cat > "$tmp_script" << 'MANAGEMENT'
#!/bin/bash #!/bin/bash
# #
# Psiphon Conduit Manager # Psiphon Conduit Manager
@@ -6380,9 +6381,14 @@ esac
MANAGEMENT MANAGEMENT
# Patch the INSTALL_DIR in the generated script # Patch the INSTALL_DIR in the generated script
sed -i "s#REPLACE_ME_INSTALL_DIR#$INSTALL_DIR#g" "$INSTALL_DIR/conduit" sed -i "s#REPLACE_ME_INSTALL_DIR#$INSTALL_DIR#g" "$tmp_script"
chmod +x "$INSTALL_DIR/conduit" chmod +x "$tmp_script"
if ! mv -f "$tmp_script" "$INSTALL_DIR/conduit"; then
rm -f "$tmp_script"
log_error "Failed to update management script"
return 1
fi
# Force create symlink # Force create symlink
rm -f /usr/local/bin/conduit 2>/dev/null || true rm -f /usr/local/bin/conduit 2>/dev/null || true
ln -s "$INSTALL_DIR/conduit" /usr/local/bin/conduit ln -s "$INSTALL_DIR/conduit" /usr/local/bin/conduit