#!/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 ""