228 lines
7.3 KiB
Bash
228 lines
7.3 KiB
Bash
#!/bin/bash
|
||
#
|
||
# Script de diagnosticare pentru probleme UnderChat IRCd
|
||
# Limba: Română
|
||
#
|
||
|
||
# Culori
|
||
VERDE='\033[0;32m'
|
||
GALBEN='\033[1;33m'
|
||
ALBASTRU='\033[0;34m'
|
||
ROSU='\033[0;31m'
|
||
NC='\033[0m'
|
||
|
||
PREFIX="${PREFIX:-$HOME/ircd}"
|
||
IRCD_BIN="$PREFIX/bin/ircd"
|
||
CONFIG_FILE="${PREFIX}/etc/ircd.conf"
|
||
LOG_FILE="${PREFIX}/log/ircd.log"
|
||
|
||
echo -e "${ALBASTRU}"
|
||
echo "╔════════════════════════════════════════╗"
|
||
echo "║ Diagnosticare UnderChat IRCd ║"
|
||
echo "║ Versiune: v1.0.2 ║"
|
||
echo "╚════════════════════════════════════════╝"
|
||
echo -e "${NC}"
|
||
echo ""
|
||
|
||
# 1. Verificare fișier configurare
|
||
echo -e "${GALBEN}[1/8] Verificare fișier configurare...${NC}"
|
||
echo ""
|
||
|
||
if [ ! -e "$CONFIG_FILE" ]; then
|
||
echo -e "${ROSU} ✗ Fișier NU EXISTĂ: $CONFIG_FILE${NC}"
|
||
echo -e "${GALBEN} → Soluție: Rulează ./install.sh sau creează manual${NC}"
|
||
exit 1
|
||
else
|
||
echo -e "${VERDE} ✓ Fișier există${NC}"
|
||
fi
|
||
|
||
if [ ! -f "$CONFIG_FILE" ]; then
|
||
echo -e "${ROSU} ✗ Calea nu este un fișier obișnuit${NC}"
|
||
ls -ld "$CONFIG_FILE"
|
||
exit 1
|
||
else
|
||
echo -e "${VERDE} ✓ Este fișier obișnuit${NC}"
|
||
fi
|
||
|
||
if [ ! -r "$CONFIG_FILE" ]; then
|
||
echo -e "${ROSU} ✗ Fișier NU POATE FI CITIT${NC}"
|
||
echo -e "${GALBEN} → Permisiuni curente:${NC}"
|
||
ls -la "$CONFIG_FILE"
|
||
echo -e "${GALBEN} → Soluție: chmod 600 $CONFIG_FILE${NC}"
|
||
exit 1
|
||
else
|
||
echo -e "${VERDE} ✓ Poate fi citit${NC}"
|
||
fi
|
||
|
||
if [ ! -s "$CONFIG_FILE" ]; then
|
||
echo -e "${ROSU} ✗ Fișier este GOL (0 bytes)${NC}"
|
||
echo -e "${GALBEN} → Soluție: Regenerează config${NC}"
|
||
exit 1
|
||
else
|
||
local size=$(stat -f%z "$CONFIG_FILE" 2>/dev/null || stat -c%s "$CONFIG_FILE" 2>/dev/null)
|
||
echo -e "${VERDE} ✓ Mărime: $size bytes${NC}"
|
||
fi
|
||
|
||
# 2. Verificare permisiuni detaliate
|
||
echo ""
|
||
echo -e "${GALBEN}[2/8] Verificare permisiuni detaliate...${NC}"
|
||
echo ""
|
||
|
||
ls -la "$CONFIG_FILE"
|
||
|
||
local owner=$(stat -f%Su "$CONFIG_FILE" 2>/dev/null || stat -c%U "$CONFIG_FILE" 2>/dev/null)
|
||
local current_user=$(whoami)
|
||
|
||
echo ""
|
||
if [ "$owner" != "$current_user" ]; then
|
||
echo -e "${GALBEN} ⚠ Proprietar fișier: $owner (tu ești: $current_user)${NC}"
|
||
echo -e "${GALBEN} → Acest lucru poate cauza probleme de permisiuni${NC}"
|
||
else
|
||
echo -e "${VERDE} ✓ Proprietar fișier: $owner (corect)${NC}"
|
||
fi
|
||
|
||
# 3. Verificare conținut fișier
|
||
echo ""
|
||
echo -e "${GALBEN}[3/8] Verificare conținut fișier...${NC}"
|
||
echo ""
|
||
|
||
local lines=$(wc -l < "$CONFIG_FILE")
|
||
echo -e " Linii total: $lines"
|
||
|
||
local general_blocks=$(grep -c "^General {" "$CONFIG_FILE" 2>/dev/null || echo 0)
|
||
echo -e " Blocuri General: $general_blocks"
|
||
|
||
if [ "$general_blocks" -eq 0 ]; then
|
||
echo -e "${ROSU} ✗ LIPSEȘTE blocul General { }!${NC}"
|
||
echo -e "${GALBEN} → Config invalid, trebuie să aibă cel puțin un bloc General${NC}"
|
||
fi
|
||
|
||
local port_blocks=$(grep -c "^Port {" "$CONFIG_FILE" 2>/dev/null || echo 0)
|
||
echo -e " Blocuri Port: $port_blocks"
|
||
|
||
if [ "$port_blocks" -eq 0 ]; then
|
||
echo -e "${ROSU} ✗ LIPSEȘTE blocul Port { }!${NC}"
|
||
echo -e "${GALBEN} → Serverul nu va avea porturi de ascultare${NC}"
|
||
fi
|
||
|
||
# 4. Verificare sintaxă acolade
|
||
echo ""
|
||
echo -e "${GALBEN}[4/8] Verificare sintaxă acolade...${NC}"
|
||
echo ""
|
||
|
||
local open_braces=$(grep -o "{" "$CONFIG_FILE" | wc -l)
|
||
local close_braces=$(grep -o "}" "$CONFIG_FILE" | wc -l)
|
||
|
||
echo -e " Acolade deschise { : $open_braces"
|
||
echo -e " Acolade închise } : $close_braces"
|
||
|
||
if [ "$open_braces" -ne "$close_braces" ]; then
|
||
echo -e "${ROSU} ✗ ACOLADE NEPOTRIVITE!${NC}"
|
||
echo -e "${GALBEN} → Diferență: $(($open_braces - $close_braces))${NC}"
|
||
else
|
||
echo -e "${VERDE} ✓ Acolade potrivite${NC}"
|
||
fi
|
||
|
||
# 5. Verificare executabil ircd
|
||
echo ""
|
||
echo -e "${GALBEN}[5/8] Verificare executabil ircd...${NC}"
|
||
echo ""
|
||
|
||
if [ ! -f "$IRCD_BIN" ]; then
|
||
echo -e "${ROSU} ✗ Executabil NU EXISTĂ: $IRCD_BIN${NC}"
|
||
echo -e "${GALBEN} → Soluție: Rulează ./install.sh pentru compilare${NC}"
|
||
exit 1
|
||
else
|
||
echo -e "${VERDE} ✓ Executabil există${NC}"
|
||
fi
|
||
|
||
if [ ! -x "$IRCD_BIN" ]; then
|
||
echo -e "${ROSU} ✗ Executabil NU ARE permisiuni de execuție${NC}"
|
||
echo -e "${GALBEN} → Soluție: chmod +x $IRCD_BIN${NC}"
|
||
exit 1
|
||
else
|
||
echo -e "${VERDE} ✓ Permisiuni execuție OK${NC}"
|
||
fi
|
||
|
||
# 6. Test sintaxă configurare cu ircd
|
||
echo ""
|
||
echo -e "${GALBEN}[6/8] Test sintaxă cu ircd -c...${NC}"
|
||
echo ""
|
||
|
||
if "$IRCD_BIN" -c -f "$CONFIG_FILE" > /tmp/ircd_config_test.log 2>&1; then
|
||
echo -e "${VERDE} ✓ Config VALID - Sintaxă OK${NC}"
|
||
cat /tmp/ircd_config_test.log
|
||
else
|
||
echo -e "${ROSU} ✗ Config INVALID - Erori detectate:${NC}"
|
||
echo -e "${GALBEN}────────────────────────────────────────${NC}"
|
||
cat /tmp/ircd_config_test.log
|
||
echo -e "${GALBEN}────────────────────────────────────────${NC}"
|
||
rm -f /tmp/ircd_config_test.log
|
||
exit 1
|
||
fi
|
||
|
||
rm -f /tmp/ircd_config_test.log
|
||
|
||
# 7. Verificare directoare necesare
|
||
echo ""
|
||
echo -e "${GALBEN}[7/8] Verificare directoare necesare...${NC}"
|
||
echo ""
|
||
|
||
for dir in "$PREFIX/bin" "$PREFIX/etc" "$PREFIX/log"; do
|
||
if [ ! -d "$dir" ]; then
|
||
echo -e "${ROSU} ✗ Director lipsă: $dir${NC}"
|
||
echo -e "${GALBEN} → Creare: mkdir -p $dir${NC}"
|
||
mkdir -p "$dir"
|
||
else
|
||
echo -e "${VERDE} ✓ $dir${NC}"
|
||
fi
|
||
done
|
||
|
||
# 8. Verificare proces pornit
|
||
echo ""
|
||
echo -e "${GALBEN}[8/8] Verificare proces IRCd...${NC}"
|
||
echo ""
|
||
|
||
if pgrep -f "$IRCD_BIN" > /dev/null; then
|
||
local pid=$(pgrep -f "$IRCD_BIN")
|
||
echo -e "${VERDE} ✓ Proces PORNIT${NC}"
|
||
echo -e " PID: $pid"
|
||
ps aux | grep "$pid" | grep -v grep
|
||
else
|
||
echo -e "${GALBEN} ℹ Niciun proces activ${NC}"
|
||
echo -e " (Aceasta este normal dacă nu ai pornit serverul)${NC}"
|
||
fi
|
||
|
||
# Sumar final
|
||
echo ""
|
||
echo -e "${ALBASTRU}╔════════════════════════════════════════╗${NC}"
|
||
echo -e "${ALBASTRU}║ SUMAR DIAGNOSTICARE ║${NC}"
|
||
echo -e "${ALBASTRU}╚════════════════════════════════════════╝${NC}"
|
||
echo ""
|
||
|
||
if [ "$general_blocks" -gt 0 ] && [ "$port_blocks" -gt 0 ] && [ "$open_braces" -eq "$close_braces" ]; then
|
||
echo -e "${VERDE}✓ Toate verificările au trecut cu succes!${NC}"
|
||
echo -e "${VERDE}✓ Configurarea pare să fie validă.${NC}"
|
||
echo ""
|
||
echo -e "${GALBEN}Poți porni serverul cu:${NC}"
|
||
echo -e " $IRCD_BIN -f $CONFIG_FILE"
|
||
echo ""
|
||
echo -e "${GALBEN}SAU folosind meniul admin:${NC}"
|
||
echo -e " ./admin.sh → opțiunea 1 (Pornire server)"
|
||
echo ""
|
||
else
|
||
echo -e "${ROSU}✗ Au fost detectate probleme!${NC}"
|
||
echo ""
|
||
echo -e "${GALBEN}Pași recomandați:${NC}"
|
||
echo -e " 1. Verifică manual config: nano $CONFIG_FILE"
|
||
echo -e " 2. Compară cu exemplu: cat doc/example.conf"
|
||
echo -e " 3. SAU regenerează config: ./admin.sh → opțiunea 5"
|
||
echo ""
|
||
fi
|
||
|
||
echo -e "${GALBEN}Pentru mai multe detalii:${NC}"
|
||
echo -e " - Verifică log: tail -f $LOG_FILE"
|
||
echo -e " - Rulează admin: ./admin.sh"
|
||
echo ""
|
||
|