ircu2/fix-config.sh

228 lines
6.6 KiB
Bash

#!/bin/bash
#
# Script de remediere probleme configurare UnderChat IRCd
# Limba: Română
#
# Culori
ROSU='\033[0;31m'
VERDE='\033[0;32m'
GALBEN='\033[1;33m'
ALBASTRU='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${ALBASTRU}[INFO]${NC} $1"; }
log_success() { echo -e "${VERDE}[SUCCES]${NC} $1"; }
log_warn() { echo -e "${GALBEN}[AVERTIZARE]${NC} $1"; }
log_error() { echo -e "${ROSU}[EROARE]${NC} $1"; }
echo -e "${ALBASTRU}"
echo "════════════════════════════════════════"
echo " Remediere Probleme Configurare IRCd"
echo "════════════════════════════════════════"
echo -e "${NC}"
# Detectează directorul PREFIX
if [ -n "$1" ]; then
PREFIX="$1"
elif [ -d "$HOME/ircd" ]; then
PREFIX="$HOME/ircd"
elif [ -d "/home/ircd/ircd" ]; then
PREFIX="/home/ircd/ircd"
else
log_error "Nu pot detecta directorul IRCd!"
echo "Utilizare: $0 [PREFIX_PATH]"
echo "Exemplu: $0 /home/ircd/ircd"
exit 1
fi
log_info "Folosesc PREFIX: $PREFIX"
# Pas 1: Verifică și corectează structura directoarelor
log_info "Pas 1: Verificare structură directoare..."
if [ ! -d "$PREFIX/etc" ]; then
log_warn "Directorul $PREFIX/etc nu există, îl creez..."
mkdir -p "$PREFIX/etc"
fi
if [ ! -d "$PREFIX/lib" ]; then
log_warn "Directorul $PREFIX/lib nu există, îl creez..."
mkdir -p "$PREFIX/lib"
fi
# Verifică dacă config-ul e în lib în loc de etc
CONFIG_ETC="$PREFIX/etc/ircd.conf"
CONFIG_LIB="$PREFIX/lib/ircd.conf"
if [ -f "$CONFIG_LIB" ] && [ ! -f "$CONFIG_ETC" ]; then
log_warn "Configurația este în lib/ în loc de etc/, o mut..."
mv "$CONFIG_LIB" "$CONFIG_ETC"
log_success "Mutat $CONFIG_LIB -> $CONFIG_ETC"
elif [ -f "$CONFIG_LIB" ] && [ -f "$CONFIG_ETC" ]; then
log_warn "Configurația există în ambele locuri, verific care e mai nouă..."
if [ "$CONFIG_LIB" -nt "$CONFIG_ETC" ]; then
log_info "Versiunea din lib/ e mai nouă, o copiez în etc/"
cp "$CONFIG_LIB" "$CONFIG_ETC.backup.$(date +%s)"
mv "$CONFIG_LIB" "$CONFIG_ETC"
else
log_info "Versiunea din etc/ e mai nouă, șterg duplicatul din lib/"
rm "$CONFIG_LIB"
fi
fi
if [ ! -f "$CONFIG_ETC" ]; then
log_error "Fișierul de configurare nu există: $CONFIG_ETC"
log_info "Generez o configurație minimă..."
cat > "$CONFIG_ETC" << 'EOF'
General {
name = "localhost.localdomain";
description = "UnderChat IRCd Server";
numeric = 1;
vhost = "127.0.0.1";
};
Admin {
Location = "UnderChat Network";
Location = "Romania";
Contact = "admin@underchat.ro";
};
Class {
name = "Other";
pingfreq = 1 minutes 30 seconds;
sendq = 160000;
maxlinks = 100;
usermode = "+ix";
};
Client {
host = "*@*";
ip = "*@*";
class = "Other";
maxlinks = 6;
};
Port {
port = 6667;
vhost = "127.0.0.1";
hidden = yes;
};
Operator {
name = "AdminRoot";
password = "$PLAIN$password";
host = "*@*";
class = "Other";
};
features {
"NETWORK" = "underchat.org";
"HOST_HIDING" = "TRUE";
"HIDDEN_HOST" = "users.underchat.org";
};
EOF
log_success "Configurație minimă generată: $CONFIG_ETC"
fi
# Pas 2: Identifică eroarea pe linia 126
log_info "Pas 2: Verificare syntaxă configurație..."
if command -v "$PREFIX/bin/ircd" >/dev/null 2>&1; then
log_info "Test syntaxă cu ircd -k..."
# Salvează output-ul pentru analiză
SYNTAX_CHECK=$("$PREFIX/bin/ircd" -k -f "$CONFIG_ETC" 2>&1)
SYNTAX_EXIT=$?
if [ $SYNTAX_EXIT -eq 0 ]; then
log_success "Sintaxa configurației este corectă!"
else
log_error "Erori de sintaxă detectate:"
echo "$SYNTAX_CHECK"
# Încearcă să identifice linia problematică
if echo "$SYNTAX_CHECK" | grep -q "line [0-9]*"; then
ERROR_LINE=$(echo "$SYNTAX_CHECK" | grep -o "line [0-9]*" | grep -o "[0-9]*")
log_warn "Eroare pe linia $ERROR_LINE, verific..."
# Arată contextul erorii
log_info "Context linia $ERROR_LINE:"
sed -n "$((ERROR_LINE-2)),$((ERROR_LINE+2))p" "$CONFIG_ETC" | nl -ba -v$((ERROR_LINE-2))
fi
fi
else
log_warn "Binarul ircd nu găsit, sar peste testul sintaxă"
fi
# Pas 3: Verifică și corectează probleme comune
log_info "Pas 3: Corectare probleme comune configurație..."
# Backup configurația
cp "$CONFIG_ETC" "$CONFIG_ETC.backup.$(date +%s)"
log_success "Backup creat: $CONFIG_ETC.backup.$(date +%s)"
# Corectări comune:
log_info "Aplicare corectări comune..."
# 1. Șterge linii goale multiple
sed -i '/^$/N;/^\n$/d' "$CONFIG_ETC"
# 2. Corectează spațiile în jurul =
sed -i 's/[[:space:]]*=[[:space:]]*/ = /g' "$CONFIG_ETC"
# 3. Verifică ghilimelele
if grep -n '[^"]"[^"]' "$CONFIG_ETC" >/dev/null; then
log_warn "Posibile probleme cu ghilimele găsite"
grep -n '[^"]"[^"]' "$CONFIG_ETC"
fi
# 4. Verifică acoladele
OPEN_BRACES=$(grep -o '{' "$CONFIG_ETC" | wc -l)
CLOSE_BRACES=$(grep -o '}' "$CONFIG_ETC" | wc -l)
if [ "$OPEN_BRACES" -ne "$CLOSE_BRACES" ]; then
log_error "Acolade necorect balansate: $OPEN_BRACES deschise, $CLOSE_BRACES închise"
else
log_success "Acolade corect balansate: $OPEN_BRACES perechi"
fi
# Pas 4: Setează permisiuni
log_info "Pas 4: Setare permisiuni..."
chmod 600 "$CONFIG_ETC"
chown $(whoami):$(whoami) "$CONFIG_ETC" 2>/dev/null || true
log_success "Permisiuni setate: 600 pe $CONFIG_ETC"
# Pas 5: Test final
log_info "Pas 5: Test final configurație..."
if [ -x "$PREFIX/bin/ircd" ]; then
FINAL_TEST=$("$PREFIX/bin/ircd" -k -f "$CONFIG_ETC" 2>&1)
FINAL_EXIT=$?
if [ $FINAL_EXIT -eq 0 ]; then
echo -e "${VERDE}"
echo "════════════════════════════════════════"
echo " ✓ CONFIGURAȚIA A FOST REPARATĂ!"
echo "════════════════════════════════════════"
echo -e "${NC}"
log_success "Configurația este acum validă"
log_info "Poți porni serverul cu: $PREFIX/bin/ircd -f $CONFIG_ETC"
else
log_error "Configurația încă are erori:"
echo "$FINAL_TEST"
echo ""
log_warn "Încearcă să regenerezi configurația cu ./install.sh"
fi
else
log_warn "Nu pot testa configurația (ircd nu găsit)"
log_info "Verifică manual cu: $PREFIX/bin/ircd -k -f $CONFIG_ETC"
fi
echo ""
log_info "Locația configurației corecte: $CONFIG_ETC"
log_info "Pentru editare: nano $CONFIG_ETC"