296 lines
9.5 KiB
Bash
296 lines
9.5 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";
|
|
"DOMAINNAME" = "underchat.org";
|
|
"HOST_HIDING" = "TRUE";
|
|
"HOST_HIDING_STYLE" = "3";
|
|
"HIDDEN_HOST" = "users.underchat.org";
|
|
"HIDDEN_IP" = "127.0.0.1";
|
|
"HIDDEN_HOSTTYPE" = "3";
|
|
"CPATH" = "$PREFIX/etc/ircd.conf";
|
|
"MPATH" = "$PREFIX/etc/ircd.motd";
|
|
"RPATH" = "$PREFIX/etc/remote.motd";
|
|
"PPATH" = "$PREFIX/var/ircd.pid";
|
|
};
|
|
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. Corectează placeholder-urile neînlocuite
|
|
log_info "Corectez placeholder-urile EOFCONFIG..."
|
|
sed -i "s|EOFCONFIG_PREFIX|$PREFIX|g" "$CONFIG_ETC"
|
|
sed -i "s|EOFCONFIG_NETWORK|underchat.org|g" "$CONFIG_ETC"
|
|
sed -i "s|\\.EOFCONFIG_NETWORK|.underchat.org|g" "$CONFIG_ETC"
|
|
sed -i "s|\\*\\.EOFCONFIG_NETWORK|*.underchat.org|g" "$CONFIG_ETC"
|
|
|
|
# 4. Verifică și corectează setările de host hiding
|
|
log_info "Verificare și corectare host hiding..."
|
|
|
|
# Verifică dacă HOST_HIDING_STYLE există
|
|
if ! grep -q '"HOST_HIDING_STYLE"' "$CONFIG_ETC"; then
|
|
log_warn "HOST_HIDING_STYLE lipsește, îl adaug..."
|
|
# Adaugă după HOST_HIDING = TRUE
|
|
sed -i '/"HOST_HIDING" = "TRUE"/a\ "HOST_HIDING_STYLE" = "3";' "$CONFIG_ETC"
|
|
else
|
|
# Actualizează la versiunea 3 pentru format hexadecimal
|
|
sed -i 's/"HOST_HIDING_STYLE" = "[^"]*"/"HOST_HIDING_STYLE" = "3"/' "$CONFIG_ETC"
|
|
log_warn "HOST_HIDING_STYLE actualizat la 3 (format hexadecimal)"
|
|
fi
|
|
|
|
# Verifică dacă HIDDEN_IP există
|
|
if ! grep -q '"HIDDEN_IP"' "$CONFIG_ETC"; then
|
|
log_warn "HIDDEN_IP lipsește, îl adaug..."
|
|
# Adaugă după HIDDEN_HOST
|
|
sed -i '/"HIDDEN_HOST" = /a\ "HIDDEN_IP" = "127.0.0.1";' "$CONFIG_ETC"
|
|
fi
|
|
|
|
# Verifică dacă HIDDEN_HOSTTYPE există (necesar pentru format hexadecimal)
|
|
if ! grep -q '"HIDDEN_HOSTTYPE"' "$CONFIG_ETC"; then
|
|
log_warn "HIDDEN_HOSTTYPE lipsește, îl adaug pentru format hexadecimal..."
|
|
# Adaugă după HIDDEN_IP
|
|
sed -i '/"HIDDEN_IP" = "127.0.0.1"/a\ "HIDDEN_HOSTTYPE" = "3";' "$CONFIG_ETC"
|
|
fi
|
|
|
|
# Verifică dacă CPATH există în features
|
|
if ! grep -q '"CPATH"' "$CONFIG_ETC"; then
|
|
log_warn "CPATH lipsește din features, îl adaug..."
|
|
# Adaugă în secțiunea features
|
|
sed -i '/features {/a\ "CPATH" = "'$PREFIX'/etc/ircd.conf";' "$CONFIG_ETC"
|
|
fi
|
|
|
|
# Verifică și adaugă setări pentru notificări WHOIS la operatori
|
|
if ! grep -q '"SPY_WHOIS"' "$CONFIG_ETC"; then
|
|
log_warn "Setări WHOIS pentru operatori lipsesc, le adaug..."
|
|
sed -i '/WHOIS_NOTICE.*TRUE/a\ "SPY_WHOIS" = "TRUE";\n "SNOMASK_OPERDEFAULT" = "1024";\n "SNOMASK_DEFAULT" = "1024";' "$CONFIG_ETC"
|
|
fi
|
|
|
|
# Verifică dacă operatorii au privilegiile WHOIS_NOTICE
|
|
if ! grep -q 'PRIV_WHOIS_NOTICE' "$CONFIG_ETC"; then
|
|
log_warn "Privilegii WHOIS pentru operatori lipsesc, le adaug..."
|
|
sed -i '/admin = yes/a\ snomask = "+HACK,THROTTLE,OLDSNO,NETWORK,OPERKILL,GLINE";\n privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN";' "$CONFIG_ETC"
|
|
fi
|
|
|
|
# 5. Verifică și corectează modul utilizatorilor în clasa Other
|
|
if grep -q 'usermode = "+i"' "$CONFIG_ETC"; then
|
|
log_warn "Corectez usermode pentru clasa Other: +i -> +ix"
|
|
sed -i 's/usermode = "+i"/usermode = "+ix"/' "$CONFIG_ETC"
|
|
fi
|
|
|
|
# 6. Verifică ghilimelele
|
|
if grep -n '[^"]"[^"]' "$CONFIG_ETC" >/dev/null; then
|
|
log_warn "Posibile probleme cu ghilimele găsite"
|
|
grep -n '[^"]"[^"]' "$CONFIG_ETC"
|
|
fi
|
|
|
|
# 7. 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"
|