From d2cf773cd3b3f64ef1377d57c9caf233b66c9078 Mon Sep 17 00:00:00 2001 From: mihaiitdata Date: Fri, 13 Feb 2026 00:11:21 +0200 Subject: [PATCH] =?UTF-8?q?Adaug=C4=83=20scripturi=20de=20instalare=20?= =?UTF-8?q?=C8=99i=20configurare=20automat=C4=83=20=C3=AEn=20limba=20rom?= =?UTF-8?q?=C3=A2n=C4=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- INSTALL_AUTO.md | 364 +++++++++++++++++++++++++++++ admin.sh | 314 +++++++++++++++++++++++++ configure-interactive.sh | 435 +++++++++++++++++++++++++++++++++++ install.sh | 481 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 1594 insertions(+) create mode 100644 INSTALL_AUTO.md create mode 100755 admin.sh create mode 100755 configure-interactive.sh create mode 100755 install.sh diff --git a/INSTALL_AUTO.md b/INSTALL_AUTO.md new file mode 100644 index 0000000..bfa5b2a --- /dev/null +++ b/INSTALL_AUTO.md @@ -0,0 +1,364 @@ +# Instalare Automată Nefarious IRCd 🚀 + +Această pagină descrie cum să instalezi și configurezi automat Nefarious IRCd folosind scripturile furnizate. + +## 📋 Cerințe + +Înainte de a rula scripturile de instalare, asigură-te că ai următoarele pachete instalate: + +### Debian/Ubuntu +```bash +sudo apt-get update +sudo apt-get install -y build-essential autoconf automake libtool libssl-dev perl +``` + +### RHEL/CentOS/Fedora +```bash +sudo yum install -y gcc make autoconf automake libtool openssl-devel perl +``` + +### macOS +```bash +xcode-select --install +brew install autoconf automake libtool openssl +``` + +## 🚀 Instalare Rapidă + +### Opțiunea 1: Instalare Automată Standard + +Cea mai simplă metodă - lase script-ul să facă totul: + +```bash +# Clonează repository-ul +git clone https://gitlab.back.ro/itdata/underchat-ircd.git +cd underchat-ircd + +# Execută instalarea automată +./install.sh +``` + +Script-ul va: +1. ✓ Verifica dependențele +2. ✓ Ruleaza `./configure` cu setări optime +3. ✓ Compilează codul sursă +4. ✓ Instalează binare și biblioteci +5. ✓ Cere informații de bază și generează `ircd.conf` +6. ✓ Creează structura de directoare necesară + +### Opțiunea 2: Instalare cu Configurare Interactivă + +Pentru control complet asupra setărilor: + +```bash +./install.sh # Instalare standard +./configure-interactive.sh # Configurare avansată +``` + +Script-ul interactiv te va ghida prin: +- Setări generale (nume, descriere, numeric) +- Informații administrator +- Configurare porturi +- Clase de conexiuni +- Setări operatori +- Caracteristici avansate + +## ⚙️ Opțiuni de Instalare + +### Instalare Customizată + +```bash +# Instalare cu prefix personalizat +./install.sh --prefix /opt/ircd + +# Instalare cu maxim conexiuni diferit +./install.sh --maxcon 8192 + +# Instalare cu debug activat +./install.sh --debug + +# Dezactivare SSL/TLS +./install.sh --no-ssl + +# Combinație de opțiuni +./install.sh --prefix /opt/ircd --maxcon 16384 --debug +``` + +### Toate Opțiunile Disponibile + +``` +Usage: ./install.sh [OPTIONS] + +OPTIONS: + -h, --help Afișează mesajul de ajutor + -p, --prefix PATH Calea de instalare (implicit: $HOME/ircd) + -m, --maxcon NUM Numărul maxim de conexiuni (implicit: 4096) + -d, --debug Activează modul de debug + -s, --no-ssl Dezactivează suportul SSL/TLS + -c, --config FILE Fișier de configurare inițial +``` + +## 📁 Structura Directoarelor Post-Instalare + +După instalare, vei avea: + +``` +~/ircd/ (prefix implicit) +├── bin/ +│ ├── ircd # Executable principal +│ ├── umkpasswd # Generator de parole +│ └── ... +├── lib/ +│ ├── libircd.a # Biblioteci compilate +│ └── ... +├── etc/ +│ ├── ircd.conf # Fișier configurare principal +│ ├── ircd.motd # Message of the Day +│ └── ircd.opermotd # Operator MOTD +├── log/ +│ └── ircd.log # Fișier de log +└── var/ + └── ... +``` + +## 🔧 Pornirea Serverului + +### Pornire Standard + +```bash +# Folosind fișierul de configurare implicit +~/ircd/bin/ircd + +# Sau specificând fișierul de configurare +~/ircd/bin/ircd -f ~/ircd/etc/ircd.conf +``` + +### Opțiuni de Pornire + +```bash +# Pornire în background +nohup ~/ircd/bin/ircd & + +# Pornire cu debugging +~/ircd/bin/ircd -d + +# Verificare sintaxă configurare +~/ircd/bin/ircd -c + +# Afișare versiune +~/ircd/bin/ircd -v +``` + +## 🔐 Setare Parola Operator + +Pentru a folosi comenzi de operator, ai nevoie de o parola hash: + +```bash +# Generează parola +~/ircd/bin/umkpasswd + +# Output exemplu: +# Introdu parola: **** +# Repeta parola: **** +# Hash: $2a$04$NTy1i.X/8pXekNBNbMRlOu1JAjIiMfPGIe1sZf0Xqq.2jzqPMfN/G + +# Copiază hash-ul în ~/ircd/etc/ircd.conf +nano ~/ircd/etc/ircd.conf +# Cauta secțiunea Operator { } și înlocuiește password = "..." +``` + +## 📝 Editare Configurare + +Fișierul de configurare este generat automat, dar poți să-l editezi: + +```bash +nano ~/ircd/etc/ircd.conf +``` + +### Secțiuni Importante + +**General** - Setări server +``` +General { + name = "irc.example.com"; + description = "My IRC Server"; + numeric = 1; +}; +``` + +**Operator** - Definire operatori +``` +Operator { + nick = "root"; + password = "$2a$04$..."; # Hash bcrypt + privileges = "+all"; + host = "127.0.0.1"; +}; +``` + +**Port** - Configurare porturi +``` +Port { + port = 6667; + mask = 0.0.0.0; +}; +``` + +**Class** - Clase de conexiuni +``` +Class { + name = "clients"; + pingfreq = 120; + maxlinks = 10; + sendq = 40000; +}; +``` + +## 🌐 Conectare la Server + +După pornire, poți să te conectezi cu un client IRC: + +``` +Server: localhost +Port: 6667 (sau 6697 pentru SSL) +Nick: nickname +``` + +## 🔍 Verificare Status + +### Log-uri + +```bash +# Afișare log-uri live +tail -f ~/ircd/log/ircd.log + +# Ultimi 50 de rânduri +tail -50 ~/ircd/log/ircd.log + +# Căutare erori +grep ERROR ~/ircd/log/ircd.log +``` + +### Procese Active + +```bash +# Verifică dacă ircd rulează +ps aux | grep ircd + +# Procese pe port +netstat -tlnp | grep 6667 +``` + +## 🐛 Rezolvare Probleme + +### "Permission denied" la ./configure + +```bash +# Verifică permisiunile +ls -la configure + +# Dacă nu are +x, corecteaza: +chmod +x configure +chmod +x install-sh config.guess config.sub +``` + +### "Compilation failed" + +```bash +# Verifica logul de compilare +make 2>&1 | tail -50 + +# Curață și încearcă din nou +make clean +./configure --enable-debug +make +``` + +### "Port already in use" + +```bash +# Verifică ce folosește portul +lsof -i :6667 + +# Schimbă portul în configurare +nano ~/ircd/etc/ircd.conf +# Cauta Port { port = 6667; } +``` + +### Errori SSL/TLS + +Dacă ai probleme cu SSL: + +```bash +# Reinstalează fără SSL +./install.sh --no-ssl + +# Sau instalează openssl-dev +sudo apt-get install libssl-dev +``` + +## 📚 Documentație Suplimentară + +- **CLAUDE.md** - Documentație tehnică pentru dezvoltatori +- **doc/example.conf** - Exemplu de configurare detaliat +- **doc/readme.features** - Descriere caracteristici +- **doc/p10.txt** - Protocol P10 (server-to-server) + +## 🤝 Networking + +Pentru a conecta mai multe servere: + +```bash +# Server A: editează ~/ircd/etc/ircd.conf și adaugă: +Connect { + name = "server-b.example.com"; + host = "192.168.1.100"; + port = 6666; + password = "link_password"; + class = "servers"; +}; + +# Server B: configurare similar + +# Restart ambele servere +~/ircd/bin/ircd -r +``` + +## 📖 Comenzi Administrator + +După conectare ca operator: + +``` +/OPER root parola_ta +/STATS c # Statistici conexiuni +/STATS u # Uptime +/ADMIN # Informații admin +/MOTD # Afișează MOTD +/LUSERS # Lista utilizatori +/WALLOPS "Mesaj" # Mesaj la operatori +/KILL nick razlog # Deconectare forcată +``` + +## 🎯 Sfaturi de Securitate + +1. **Schimbă parola operatorului** imediat după instalare +2. **Securizează configurarea**: `chmod 600 ~/ircd/etc/ircd.conf` +3. **Backupează configurarea**: `cp ~/ircd/etc/ircd.conf ~/ircd/etc/ircd.conf.bak` +4. **Monitorizează log-urile**: `tail -f ~/ircd/log/ircd.log` +5. **Activează SSL/TLS** pentru conexiuni externe +6. **Restricționează accesul** cu firewall rules + +## 📞 Support + +Pentru ajutor suplimentar: + +- Verifică documentația din directorul `doc/` +- Citește README original +- Consulta CLAUDE.md pentru detalii tehnice + +--- + +**Data creării**: 13 februarie 2026 +**Versiune**: 1.0 +**Limbă**: Română 🇷🇴 + diff --git a/admin.sh b/admin.sh new file mode 100755 index 0000000..25e6236 --- /dev/null +++ b/admin.sh @@ -0,0 +1,314 @@ +#!/bin/bash +# +# Script helper pentru administrare Nefarious 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 Nefarious 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 + diff --git a/configure-interactive.sh b/configure-interactive.sh new file mode 100755 index 0000000..bad5360 --- /dev/null +++ b/configure-interactive.sh @@ -0,0 +1,435 @@ +#!/bin/bash +# +# Script de configurare interactivă avansată pentru Nefarious IRCd +# Limba: Română +# + +set -e + +# Culori +ROSU='\033[0;31m' +VERDE='\033[0;32m' +GALBEN='\033[1;33m' +ALBASTRU='\033[0;34m' +MOV='\033[0;35m' +CYAN='\033[0;36m' +NC='\033[0m' + +# Variabile +PREFIX="${PREFIX:-$HOME/ircd}" +CONFIG_FILE="${1:-$PREFIX/etc/ircd.conf}" + +# Funcții auxiliare +log_title() { + echo "" + echo -e "${MOVE}╔════════════════════════════════════════╗${NC}" + echo -e "${MOVE}║ $1${NC}" + echo -e "${MOVE}╚════════════════════════════════════════╝${NC}" +} + +log_section() { + echo "" + echo -e "${CYAN}>>> $1${NC}" +} + +log_ok() { + echo -e "${VERDE}✓ $1${NC}" +} + +log_err() { + echo -e "${ROSU}✗ $1${NC}" +} + +log_info() { + echo -e "${ALBASTRU}ℹ $1${NC}" +} + +# Validare input +validate_hostname() { + if [[ $1 =~ ^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$ ]]; then + return 0 + else + return 1 + fi +} + +validate_numeric() { + if [[ $1 =~ ^[0-9]+$ ]] && [ "$1" -ge 0 ] && [ "$1" -le 4095 ]; then + return 0 + else + return 1 + fi +} + +validate_port() { + if [[ $1 =~ ^[0-9]+$ ]] && [ "$1" -ge 1024 ] && [ "$1" -le 65535 ]; then + return 0 + else + return 1 + fi +} + +validate_email() { + if [[ $1 =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then + return 0 + else + return 1 + fi +} + +# Meniu interactiv +read_input() { + local prompt="$1" + local default="$2" + local input + + if [ -n "$default" ]; then + echo -n -e "${GALBEN}${prompt}${NC} [${default}]: " + else + echo -n -e "${GALBEN}${prompt}${NC}: " + fi + + read -r input + + if [ -z "$input" ]; then + echo "$default" + else + echo "$input" + fi +} + +# Etapa 1: Configurare generală +configure_general() { + log_title "CONFIGURARE GENERALĂ" + + log_section "Setări de bază ale serverului" + + # Nume server + while true; do + SERVER_NAME=$(read_input "Nume server (FQDN)" "localhost.localdomain") + if validate_hostname "$SERVER_NAME"; then + log_ok "Nume server valid: $SERVER_NAME" + break + else + log_err "Nume server invalid! Folosește format FQDN (ex: irc.example.com)" + fi + done + + # Descriere + SERVER_DESC=$(read_input "Descriere server" "Nefarious IRCd Server") + log_ok "Descriere: $SERVER_DESC" + + # Numeric + while true; do + NUMERIC=$(read_input "Numeric server (0-4095)" "1") + if validate_numeric "$NUMERIC"; then + log_ok "Numeric valid: $NUMERIC" + break + else + log_err "Numeric invalid! Folosește un număr între 0-4095" + fi + done +} + +# Etapa 2: Informații administrator +configure_admin() { + log_title "INFORMAȚII ADMINISTRATOR" + + ADMIN_LOCATION=$(read_input "Locație" "Romania") + log_ok "Locație: $ADMIN_LOCATION" + + while true; do + ADMIN_EMAIL=$(read_input "Email administrator" "admin@underchat.ro") + if validate_email "$ADMIN_EMAIL"; then + log_ok "Email: $ADMIN_EMAIL" + break + else + log_err "Email invalid! Utilizează format corect (ex: admin@example.com)" + fi + done + + ADMIN_INFO=$(read_input "Informații contact suplimentare" "Contact: admin") + log_ok "Info contact: $ADMIN_INFO" +} + +# Etapa 3: Porturi +configure_ports() { + log_title "CONFIGURARE PORTURI" + + log_section "Porturi pentru clienți" + + while true; do + PORT1=$(read_input "Port standard (1024-65535)" "6667") + if validate_port "$PORT1"; then + log_ok "Port standard: $PORT1" + break + else + log_err "Port invalid!" + fi + done + + while true; do + PORT2=$(read_input "Port SSL/TLS (1024-65535)" "6697") + if validate_port "$PORT2"; then + [ "$PORT2" != "$PORT1" ] && log_ok "Port SSL: $PORT2" || log_err "Portul SSL trebuie să fie diferit de portul standard" + [ "$PORT2" != "$PORT1" ] && break + else + log_err "Port invalid!" + fi + done + + log_section "Porturi pentru servere" + + while true; do + SERVER_PORT=$(read_input "Port server-to-server" "6666") + if validate_port "$SERVER_PORT"; then + log_ok "Port server: $SERVER_PORT" + break + else + log_err "Port invalid!" + fi + done +} + +# Etapa 4: Clase de conexiuni +configure_classes() { + log_title "CONFIGURARE CLASE DE CONEXIUNI" + + log_section "Setări pentru clienți" + + MAXLINKS=$(read_input "Maxim linkuri per client" "10") + SENDQ=$(read_input "Dimensiune sendq (bytes)" "40000") + PINGFREQ=$(read_input "Frecvență ping (secunde)" "120") + + log_ok "Configurare clase complete" +} + +# Etapa 5: Operatori +configure_operators() { + log_title "CONFIGURARE OPERATORI" + + log_section "Prim operator" + + OPER_NICK=$(read_input "Nick operator" "root") + log_ok "Nick: $OPER_NICK" + + log_info "Pentru a genera parola, rulează:" + echo -e "${CYAN} $PREFIX/bin/umkpasswd${NC}" + + OPER_PASS=$(read_input "Hash bcrypt parola operator" "") + + if [ -z "$OPER_PASS" ]; then + log_err "Parola necesară! Generează cu umkpasswd" + OPER_PASS='$2a$04$NTy1i.X/8pXekNBNbMRlOu1JAjIiMfPGIe1sZf0Xqq.2jzqPMfN/G' + log_info "Se folosește parola implicită pentru testing" + fi + + OPER_HOST=$(read_input "Host permis pentru operator" "127.0.0.1") + log_ok "Host: $OPER_HOST" +} + +# Etapa 6: Setări avansate +configure_advanced() { + log_title "SETĂRI AVANSATE" + + log_section "Caracteristici" + + read -p "Activezi autentificarea? (y/n) [y]: " -n 1 AUTH_ENABLED + AUTH_ENABLED=${AUTH_ENABLED:-y} + echo "" + [ "$AUTH_ENABLED" = "y" ] && log_ok "Autentificare: Activată" || log_ok "Autentificare: Dezactivată" + + read -p "Activezi channelurile persistente? (y/n) [n]: " -n 1 PERSIST_CHANS + PERSIST_CHANS=${PERSIST_CHANS:-n} + echo "" + [ "$PERSIST_CHANS" = "y" ] && log_ok "Canale persistente: Activate" || log_ok "Canale persistente: Dezactivate" + + read -p "Activezi SWHOIS? (y/n) [y]: " -n 1 SWHOIS_ENABLED + SWHOIS_ENABLED=${SWHOIS_ENABLED:-y} + echo "" + [ "$SWHOIS_ENABLED" = "y" ] && log_ok "SWHOIS: Activat" || log_ok "SWHOIS: Dezactivat" + + IDLETIME=$(read_input "Timp maxim inactivitate (0=ilimitat)" "0") + log_ok "Timp inactivitate: ${IDLETIME}s" +} + +# Generare fișier de configurare +generate_config_file() { + log_title "GENERARE FIȘIER CONFIGURARE" + + mkdir -p "$(dirname "$CONFIG_FILE")" + + # Conversie booleene + AUTH_FEATURE=$([ "$AUTH_ENABLED" = "y" ] && echo "yes" || echo "no") + PERSIST_FEATURE=$([ "$PERSIST_CHANS" = "y" ] && echo "yes" || echo "no") + SWHOIS_FEATURE=$([ "$SWHOIS_ENABLED" = "y" ] && echo "yes" || echo "no") + + cat > "$CONFIG_FILE" << EOFCONFIG +# ============================================================================ +# Fișier de configurare Nefarious IRCd +# Generat automat la: $(date) +# Script: configure.sh +# ============================================================================ + +# ============================================================================ +# SECȚIUNE: GENERAL +# ============================================================================ +General { + name = "$SERVER_NAME"; + description = "$SERVER_DESC"; + numeric = $NUMERIC; + logfile = "$PREFIX/log/ircd.log"; + motd = "$PREFIX/etc/ircd.motd"; + opermotd = "$PREFIX/etc/ircd.opermotd"; +}; + +# ============================================================================ +# SECȚIUNE: ADMIN +# ============================================================================ +Admin { + location = "$ADMIN_LOCATION"; + contact = "$ADMIN_EMAIL"; + contact = "$ADMIN_INFO"; +}; + +# ============================================================================ +# SECȚIUNE: PORTURI +# ============================================================================ +# Port standard pentru clienți +Port { + port = $PORT1; + mask = 0.0.0.0; +}; + +# Port SSL/TLS +Port { + port = $PORT2; + mask = 0.0.0.0; + tls = yes; +}; + +# Port server-to-server +Port { + port = $SERVER_PORT; + mask = 0.0.0.0; +}; + +# ============================================================================ +# SECȚIUNE: CLASE +# ============================================================================ +Class { + name = "clients"; + pingfreq = $PINGFREQ; + connectfreq = 60; + maxlinks = $MAXLINKS; + sendq = $SENDQ; +}; + +Class { + name = "servers"; + pingfreq = 60; + connectfreq = 300; + maxlinks = 10; + sendq = 1000000; +}; + +# ============================================================================ +# SECȚIUNE: CLIENT +# ============================================================================ +Client { + class = "clients"; + maxlinks = $MAXLINKS; +}; + +# ============================================================================ +# SECȚIUNE: OPERATOR +# ============================================================================ +Operator { + nick = "$OPER_NICK"; + password = "$OPER_PASS"; + privileges = "+all"; + host = "$OPER_HOST"; +}; + +# ============================================================================ +# SECȚIUNE: CARACTERISTICI (Features) +# ============================================================================ +Feature { + AUTH = "$AUTH_FEATURE"; + PERSIST_CHANS = "$PERSIST_FEATURE"; + IDLETIME = $IDLETIME; + SWHOIS = "$SWHOIS_FEATURE"; + LOG_FACILITY = "LOG_USER"; +}; + +EOFCONFIG + + log_ok "Fișier de configurare generat: $CONFIG_FILE" +} + +# Rezumat final +show_summary() { + log_title "REZUMAT CONFIGURARE" + + echo -e "${CYAN}Setări general:${NC}" + echo " • Nume: $SERVER_NAME" + echo " • Descriere: $SERVER_DESC" + echo " • Numeric: $NUMERIC" + echo "" + + echo -e "${CYAN}Administrator:${NC}" + echo " • Locație: $ADMIN_LOCATION" + echo " • Email: $ADMIN_EMAIL" + echo "" + + echo -e "${CYAN}Porturi:${NC}" + echo " • Standard: $PORT1" + echo " • SSL/TLS: $PORT2" + echo " • Server: $SERVER_PORT" + echo "" + + echo -e "${CYAN}Operator:${NC}" + echo " • Nick: $OPER_NICK" + echo " • Host: $OPER_HOST" + echo "" + + echo -e "${VERDE}Configurare salvată în: $CONFIG_FILE${NC}" + echo "" +} + +# Funcție principală +main() { + clear + + echo -e "${MOVE}" + echo "╔════════════════════════════════════════╗" + echo "║ Configurator Nefarious IRCd ║" + echo "║ Limba: Română ║" + echo "║ Versiune: 1.0 ║" + echo "╚════════════════════════════════════════╝" + echo -e "${NC}" + + # Executare pași + configure_general + configure_admin + configure_ports + configure_classes + configure_operators + configure_advanced + + # Generare și rezumat + generate_config_file + show_summary + + echo -e "${VERDE}✓ Configurare completă!${NC}" + echo "" + echo -e "${GALBEN}Pași următori:${NC}" + echo " 1. Verifică configurarea: cat $CONFIG_FILE" + echo " 2. Editează după necesitate: nano $CONFIG_FILE" + echo " 3. Pornește serverul: $PREFIX/bin/ircd -f $CONFIG_FILE" + echo "" +} + +# Apelează funcția principală +main + diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..5a4251f --- /dev/null +++ b/install.sh @@ -0,0 +1,481 @@ +#!/bin/bash +# +# Script de instalare automată pentru Nefarious IRCd +# Limba: Română +# Data: 2026 +# + +# Culori pentru output +ROSU='\033[0;31m' +VERDE='\033[0;32m' +GALBEN='\033[1;33m' +ALBASTRU='\033[0;34m' +NC='\033[0m' # Fără culoare + +# Setări implicite +PREFIX="${HOME}/ircd" +MAXCON=4096 +ENABLE_DEBUG=0 +ENABLE_SSL=1 + +# Funcția de afișare a ajutorului +show_help() { + cat << EOF +${ALBASTRU}Script de instalare automată pentru Nefarious IRCd${NC} + +Utilizare: ./install.sh [OPȚIUNI] + +${GALBEN}OPȚIUNI:${NC} + -h, --help Afișează acest mesaj de ajutor + -p, --prefix PATH Calea de instalare (implicit: \$HOME/ircd) + -m, --maxcon NUM Numărul maxim de conexiuni (implicit: 4096) + -d, --debug Activează modul de debug + -s, --no-ssl Dezactivează suportul SSL/TLS + -c, --config FILE Fișier de configurare inițial + +${GALBEN}EXEMPLE:${NC} + ./install.sh + ./install.sh --prefix /opt/ircd --maxcon 8192 + ./install.sh --debug --config myconfig.conf + +EOF +} + +# Funcția de log +log_info() { + echo -e "${VERDE}[INFO]${NC} $1" +} + +log_warn() { + echo -e "${GALBEN}[AVERTIZARE]${NC} $1" +} + +log_error() { + echo -e "${ROSU}[EROARE]${NC} $1" +} + +log_success() { + echo -e "${VERDE}[SUCCES]${NC} $1" +} + +# Funcția de verificare a dependențelor +check_dependencies() { + log_info "Verificare dependențe..." + + local missing_deps=0 + + # Verifică compilatorul C + if ! command -v gcc &> /dev/null && ! command -v cc &> /dev/null; then + log_error "GCC/CC nu este instalat!" + missing_deps=1 + else + log_success "Compilator C găsit" + fi + + # Verifică make + if ! command -v make &> /dev/null; then + log_error "Make nu este instalat!" + missing_deps=1 + else + log_success "Make găsit" + fi + + # Verifică autoconf + if ! command -v autoconf &> /dev/null; then + log_warn "Autoconf nu este instalat (optional)" + else + log_success "Autoconf găsit" + fi + + # Verifică bibliotecile SSL + if command -v pkg-config &> /dev/null; then + if ! pkg-config --exists openssl; then + log_warn "OpenSSL dev nu este instalat (optional)" + else + log_success "OpenSSL găsit" + fi + fi + + if [ $missing_deps -eq 1 ]; then + log_error "Lipsesc dependențe! Instalează-le și încearcă din nou." + return 1 + fi + + return 0 +} + +# Funcția de configurare +configure_ircd() { + log_info "Configurare Nefarious IRCd..." + + local config_args="--prefix=$PREFIX" + config_args="$config_args --with-maxcon=$MAXCON" + + if [ $ENABLE_DEBUG -eq 1 ]; then + config_args="$config_args --enable-debug" + fi + + if [ $ENABLE_SSL -eq 0 ]; then + config_args="$config_args --disable-ssl" + fi + + log_info "Parametri configure: $config_args" + + if [ ! -f "./configure" ]; then + log_error "Fișierul configure nu găsit!" + return 1 + fi + + ./configure $config_args + if [ $? -ne 0 ]; then + log_error "Configurare eșuată!" + return 1 + fi + + log_success "Configurare finalizată cu succes" + return 0 +} + +# Funcția de compilare +compile_ircd() { + log_info "Compilare Nefarious IRCd..." + + make clean > /dev/null 2>&1 + make + + if [ $? -ne 0 ]; then + log_error "Compilare eșuată!" + return 1 + fi + + log_success "Compilare finalizată cu succes" + return 0 +} + +# Funcția de instalare +install_ircd() { + log_info "Instalare Nefarious IRCd..." + + make install + if [ $? -ne 0 ]; then + log_error "Instalare eșuată!" + return 1 + fi + + log_success "Instalare finalizată cu succes" + return 0 +} + +# Funcția de generare a fișierului de configurare +generate_config() { + local config_file="$1" + local server_name="${2:-localhost.localdomain}" + local server_desc="${3:-Nefarious IRCd Server}" + local server_numeric="${4:-1}" + local admin_location="${5:-Romania}" + local admin_contact="${6:-admin@underchat.ro}" + + log_info "Generare fișier de configurare: $config_file" + + mkdir -p "$(dirname "$config_file")" + + cat > "$config_file" << 'EOFCONFIG' +# Fișier de configurare pentru Nefarious IRCd +# Generat automat în data: 2026 +# Limba: Română + +# ============================================================================ +# BLOC GENERAL - Setările principale ale serverului +# ============================================================================ +General { + # Numele serverului (trebuie să fie unic în rețea) + name = "EOFCONFIG_NAME"; + + # Descrierea serverului + description = "EOFCONFIG_DESC"; + + # Numeric-ul serverului (0-4095, trebuie unic în rețea) + numeric = EOFCONFIG_NUMERIC; + + # Calea către fișierul de log + logfile = "EOFCONFIG_PREFIX/log/ircd.log"; + + # Calea către motd (Message of the Day) + motd = "EOFCONFIG_PREFIX/etc/ircd.motd"; + + # Calea către opmotd (Message for operators) + opermotd = "EOFCONFIG_PREFIX/etc/ircd.opermotd"; +}; + +# ============================================================================ +# BLOC ADMIN - Informații administrator +# ============================================================================ +Admin { + # Locație + location = "EOFCONFIG_ADMIN_LOC"; + + # Contact + contact = "EOFCONFIG_ADMIN_CONTACT"; +}; + +# ============================================================================ +# BLOC PORT - Porturile de ascultare +# ============================================================================ +Port { + # Port pentru clienți normali (implicit 6667) + port = 6667; + mask = 0.0.0.0; +}; + +# Port pentru SSL +Port { + port = 6697; + mask = 0.0.0.0; + tls = yes; +}; + +# ============================================================================ +# BLOC ULINED - Servere de rețea (pentru testing local) +# ============================================================================ +Uline { + # Nume server + server = "services.underchat.ro"; +}; + +# ============================================================================ +# BLOC CLASS - Clase de conexiuni +# ============================================================================ +Class { + name = "clients"; + pingfreq = 120; + connectfreq = 60; + maxlinks = 100; + sendq = 40000; +}; + +Class { + name = "servers"; + pingfreq = 60; + connectfreq = 300; + maxlinks = 10; + sendq = 1000000; +}; + +# ============================================================================ +# BLOC CLIENT - Restricții pentru clienți +# ============================================================================ +Client { + class = "clients"; + maxlinks = 10; +}; + +# ============================================================================ +# BLOC CONNECT - Configurare conectări la alte servere +# ============================================================================ +# Exemplu: Connect la un alt server +# Connect { +# name = "other.server.com"; +# host = "192.168.1.100"; +# port = 6667; +# maxlinks = 1; +# class = "servers"; +# password = "linker_password"; +# }; + +# ============================================================================ +# BLOC OPERATOR - Configurare operatori +# ============================================================================ +Operator { + # Nickname-ul operatorului + nick = "root"; + + # Password-ul operatorului (hash bcrypt) + # Generează cu: ./ircd/umkpasswd + password = "$2a$04$NTy1i.X/8pXekNBNbMRlOu1JAjIiMfPGIe1sZf0Xqq.2jzqPMfN/G"; + + # Permisiuni operator (vezi doc/opercmds.html) + privileges = "+all"; + + # Host-uri permise pentru operator + host = "127.0.0.1"; + host = "localhost"; +}; + +# ============================================================================ +# BLOC FEATURE - Caracteristici dinamice +# ============================================================================ +Feature { + # Activează autenticarea + AUTH = "yes"; + + # Activează channelurile persistente + PERSIST_CHANS = "no"; + + # Timp maxim de inactivitate (secunde) + IDLETIME = 0; + + # Activează SWHOIs + SWHOIS = "yes"; +}; + +EOFCONFIG + + # Înlocuiește placeholder-ele + sed -i "s|EOFCONFIG_NAME|$server_name|g" "$config_file" + sed -i "s|EOFCONFIG_DESC|$server_desc|g" "$config_file" + sed -i "s|EOFCONFIG_NUMERIC|$server_numeric|g" "$config_file" + sed -i "s|EOFCONFIG_PREFIX|$PREFIX|g" "$config_file" + sed -i "s|EOFCONFIG_ADMIN_LOC|$admin_location|g" "$config_file" + sed -i "s|EOFCONFIG_ADMIN_CONTACT|$admin_contact|g" "$config_file" + + log_success "Fișier de configurare generat: $config_file" + return 0 +} + +# Funcția principală +main() { + # Parsare argumente + while [[ $# -gt 0 ]]; do + case $1 in + -h|--help) + show_help + exit 0 + ;; + -p|--prefix) + PREFIX="$2" + shift 2 + ;; + -m|--maxcon) + MAXCON="$2" + shift 2 + ;; + -d|--debug) + ENABLE_DEBUG=1 + shift + ;; + -s|--no-ssl) + ENABLE_SSL=0 + shift + ;; + -c|--config) + CONFIG_FILE="$2" + shift 2 + ;; + *) + log_error "Opțiune necunoscută: $1" + show_help + exit 1 + ;; + esac + done + + echo -e "${ALBASTRU}" + echo "=========================================" + echo " Instalare Nefarious IRCd" + echo "=========================================" + echo -e "${NC}" + + # Verificare dependențe + check_dependencies + if [ $? -ne 0 ]; then + exit 1 + fi + + # Configurare + configure_ircd + if [ $? -ne 0 ]; then + exit 1 + fi + + # Compilare + compile_ircd + if [ $? -ne 0 ]; then + exit 1 + fi + + # Instalare + install_ircd + if [ $? -ne 0 ]; then + exit 1 + fi + + # Generare fișier de configurare + local conf_file="${PREFIX}/etc/ircd.conf" + + if [ -z "$CONFIG_FILE" ]; then + # Citire interactivă de parametri + echo "" + echo -e "${GALBEN}Completare setări server:${NC}" + read -p " Nume server [localhost.localdomain]: " server_name + server_name=${server_name:-localhost.localdomain} + + read -p " Descriere server [Nefarious IRCd Server]: " server_desc + server_desc=${server_desc:-Nefarious IRCd Server} + + read -p " Numeric server [1]: " server_numeric + server_numeric=${server_numeric:-1} + + read -p " Locație admin [Romania]: " admin_location + admin_location=${admin_location:-Romania} + + read -p " Contact admin [admin@underchat.ro]: " admin_contact + admin_contact=${admin_contact:-admin@underchat.ro} + else + server_name=$(grep 'name = "' "$CONFIG_FILE" 2>/dev/null | head -1 | cut -d'"' -f2) + server_name=${server_name:-localhost.localdomain} + fi + + generate_config "$conf_file" "$server_name" "$server_desc" "$server_numeric" "$admin_location" "$admin_contact" + if [ $? -ne 0 ]; then + exit 1 + fi + + # Creare directoare + log_info "Creare structură de directoare..." + mkdir -p "$PREFIX/log" + mkdir -p "$PREFIX/etc" + mkdir -p "$PREFIX/var" + + # Creare fișiere MOTD + if [ ! -f "$PREFIX/etc/ircd.motd" ]; then + cat > "$PREFIX/etc/ircd.motd" << 'EOFMOTD' + ╔═══════════════════════════════════════╗ + ║ Bine venit pe Nefarious IRCd! ║ + ║ Versiune: Underchat Edition ║ + ║ Data: 2026 ║ + ╚═══════════════════════════════════════╝ + + Aceasta este o rețea IRC privată. + Respectă regulile serverului! + +EOFMOTD + log_success "Fișier MOTD creat: $PREFIX/etc/ircd.motd" + fi + + # Rezumat instalare + echo "" + echo -e "${VERDE}" + echo "=========================================" + echo " ✓ Instalare completă!" + echo "=========================================" + echo -e "${NC}" + echo "" + echo -e "${GALBEN}Informații de instalare:${NC}" + echo " Calea de instalare: $PREFIX" + echo " Fișier configurare: $conf_file" + echo " Fișier log: $PREFIX/log/ircd.log" + echo " Maxim conexiuni: $MAXCON" + echo " Debug: $([ $ENABLE_DEBUG -eq 1 ] && echo 'Activat' || echo 'Dezactivat')" + echo " SSL/TLS: $([ $ENABLE_SSL -eq 1 ] && echo 'Activat' || echo 'Dezactivat')" + echo "" + echo -e "${GALBEN}Pași următori:${NC}" + echo " 1. Editează configurarea: nano $conf_file" + echo " 2. Generează parola operator: $PREFIX/bin/umkpasswd" + echo " 3. Pornește serverul: $PREFIX/bin/ircd -f $conf_file" + echo " 4. Conectează-te: irc://localhost:6667" + echo "" +} + +# Apelează funcția principală +main "$@" +