ircu2/admin.sh

315 lines
7.5 KiB
Bash
Executable File

#!/bin/bash
#
# Script helper pentru administrare 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"
UMKPASSWD_BIN="$PREFIX/bin/umkpasswd"
CONFIG_FILE="${PREFIX}/etc/ircd.conf"
LOG_FILE="${PREFIX}/log/ircd.log"
# Meniu principal
show_menu() {
clear
echo -e "${ALBASTRU}"
echo "╔════════════════════════════════════════╗"
echo "║ Administrator UnderChat IRCd ║"
echo "║ Versiune: 1.0 ║"
echo "╚════════════════════════════════════════╝"
echo -e "${NC}"
echo ""
echo -e "${GALBEN}Opțiuni disponibile:${NC}"
echo " 1) Pornire server"
echo " 2) Oprire server"
echo " 3) Restart server"
echo " 4) Verifica status"
echo " 5) Editare configurare"
echo " 6) Vizionare log-uri"
echo " 7) Generare parola operator"
echo " 8) Test sintaxă configurare"
echo " 9) Iesire"
echo ""
echo -n -e "${GALBEN}Alege opțiune [1-9]:${NC} "
}
# Pornire server
start_server() {
echo -e "${VERDE}[+] Pornire server...${NC}"
if ! [ -x "$IRCD_BIN" ]; then
echo -e "${ROSU}[-] Executabil ircd nu găsit la: $IRCD_BIN${NC}"
return 1
fi
# Verifica dacă e deja pornit
if pgrep -f "$IRCD_BIN" > /dev/null; then
echo -e "${ROSU}[-] Server deja pornit!${NC}"
return 1
fi
# Porneste server în background
nohup "$IRCD_BIN" -f "$CONFIG_FILE" > "$LOG_FILE" 2>&1 &
sleep 2
if pgrep -f "$IRCD_BIN" > /dev/null; then
echo -e "${VERDE}[+] Server pornit cu succes (PID: $(pgrep -f "$IRCD_BIN"))${NC}"
return 0
else
echo -e "${ROSU}[-] Eșec la pornirea serverului!${NC}"
tail -10 "$LOG_FILE"
return 1
fi
}
# Oprire server
stop_server() {
echo -e "${VERDE}[+] Oprire server...${NC}"
local pid=$(pgrep -f "$IRCD_BIN")
if [ -z "$pid" ]; then
echo -e "${ROSU}[-] Server nu este pornit!${NC}"
return 1
fi
kill "$pid"
sleep 2
if ! pgrep -f "$IRCD_BIN" > /dev/null; then
echo -e "${VERDE}[+] Server oprit cu succes${NC}"
return 0
else
echo -e "${GALBEN}[*] Forțare oprire...${NC}"
kill -9 "$pid"
sleep 1
echo -e "${VERDE}[+] Server oprit forțat${NC}"
return 0
fi
}
# Restart server
restart_server() {
echo -e "${VERDE}[+] Restart server...${NC}"
stop_server
sleep 2
start_server
}
# Status server
check_status() {
echo -e "${VERDE}[+] Status server:${NC}"
echo ""
local pid=$(pgrep -f "$IRCD_BIN")
if [ -z "$pid" ]; then
echo -e "${ROSU}Status: OPRIT${NC}"
return 1
fi
echo -e "${VERDE}Status: PORNIT${NC}"
echo "PID: $pid"
# Informații proces
echo ""
echo -e "${GALBEN}Detalii proces:${NC}"
ps aux | grep "$pid" | grep -v grep | awk '{print " CPU: " $3 "% | RAM: " $6 " KB | Timp: " $11}'
# Porturi ascultare
echo ""
echo -e "${GALBEN}Porturi ascultate:${NC}"
netstat -tlnp 2>/dev/null | grep "$pid" | awk '{print " Port " $4 " (" $1 ")"}'
# Log ultimele linii
echo ""
echo -e "${GALBEN}Ultimele intrări în log:${NC}"
tail -5 "$LOG_FILE" | sed 's/^/ /'
return 0
}
# Editare configurare
edit_config() {
echo -e "${VERDE}[+] Editare configurare...${NC}"
if [ ! -f "$CONFIG_FILE" ]; then
echo -e "${ROSU}[-] Fișier configurare nu găsit: $CONFIG_FILE${NC}"
return 1
fi
# Backup înainte de editare
cp "$CONFIG_FILE" "${CONFIG_FILE}.bak.$(date +%s)"
echo -e "${GALBEN}[*] Backup creat: ${CONFIG_FILE}.bak${NC}"
# Deschide editor
${EDITOR:-nano} "$CONFIG_FILE"
# Test sintaxă
echo ""
echo -e "${GALBEN}[*] Testare sintaxă...${NC}"
if "$IRCD_BIN" -c -f "$CONFIG_FILE" 2>&1 | head -20; then
echo -e "${VERDE}[+] Sintaxă OK${NC}"
else
echo -e "${ROSU}[-] Erori în configurare!${NC}"
echo -e "${GALBEN}[*] Poți restaura backup-ul:${NC}"
echo " cp ${CONFIG_FILE}.bak.* $CONFIG_FILE"
fi
return 0
}
# Vizionare log-uri
view_logs() {
echo -e "${VERDE}[+] Opțiuni log-uri:${NC}"
echo " 1) Ultimele 20 de rânduri"
echo " 2) Urmărire live (Ctrl+C pentru ieșire)"
echo " 3) Căutare text"
echo " 4) Înapoi"
echo ""
echo -n -e "${GALBEN}Alege [1-4]:${NC} "
read choice
case $choice in
1)
echo ""
echo -e "${ALBASTRU}Ultimele 20 de rânduri:${NC}"
tail -20 "$LOG_FILE"
;;
2)
echo ""
echo -e "${ALBASTRU}Urmărire live (apasa Ctrl+C pentru ieșire):${NC}"
tail -f "$LOG_FILE"
;;
3)
echo ""
read -p -e "${GALBEN}Cuvânt cheie de căutare:${NC} " search_term
echo ""
echo -e "${ALBASTRU}Rezultate:${NC}"
grep -i "$search_term" "$LOG_FILE" | tail -20
;;
4)
return 0
;;
*)
echo -e "${ROSU}Opțiune necunoscută!${NC}"
;;
esac
echo ""
echo -n "Apasa Enter pentru a continua..."
read
}
# Generare parola
generate_password() {
echo -e "${VERDE}[+] Generator parola operator${NC}"
echo ""
if [ ! -x "$UMKPASSWD_BIN" ]; then
echo -e "${ROSU}[-] Utilitar umkpasswd nu găsit!${NC}"
echo -e "${GALBEN}[*] Asigură-te că ai rulat install.sh${NC}"
return 1
fi
echo -e "${GALBEN}Utilizează utilarul umkpasswd:${NC}"
"$UMKPASSWD_BIN"
echo ""
echo -e "${GALBEN}[*] Copiază hash-ul și actualizează config:${NC}"
echo " nano $CONFIG_FILE"
echo " # Cauta secțiunea Operator și înlocuiește password"
return 0
}
# Test configurare
test_config() {
echo -e "${VERDE}[+] Test sintaxă configurare...${NC}"
echo ""
if [ ! -f "$CONFIG_FILE" ]; then
echo -e "${ROSU}[-] Fișier configurare nu găsit: $CONFIG_FILE${NC}"
return 1
fi
if [ ! -x "$IRCD_BIN" ]; then
echo -e "${ROSU}[-] Executabil ircd nu găsit!${NC}"
return 1
fi
echo -e "${GALBEN}Testare fișier: $CONFIG_FILE${NC}"
echo ""
if "$IRCD_BIN" -c -f "$CONFIG_FILE" 2>&1; then
echo ""
echo -e "${VERDE}[+] Configurare validă!${NC}"
return 0
else
echo ""
echo -e "${ROSU}[-] Erori în configurare detectate!${NC}"
return 1
fi
}
# Funcție principală
main() {
while true; do
show_menu
read choice
case $choice in
1)
start_server
;;
2)
stop_server
;;
3)
restart_server
;;
4)
check_status
;;
5)
edit_config
;;
6)
view_logs
;;
7)
generate_password
;;
8)
test_config
;;
9)
echo -e "${VERDE}La revedere!${NC}"
exit 0
;;
*)
echo -e "${ROSU}Opțiune necunoscută!${NC}"
;;
esac
echo ""
echo -n "Apasa Enter pentru a continua..."
read
done
}
# Lansare
main