Adaugă scripturi de instalare și configurare automată în limba română

This commit is contained in:
mihaiitdata 2026-02-13 00:11:21 +02:00
parent cd77d66dcc
commit d2cf773cd3
4 changed files with 1594 additions and 0 deletions

364
INSTALL_AUTO.md Normal file
View File

@ -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ă 🇷🇴

314
admin.sh Executable file
View File

@ -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

435
configure-interactive.sh Executable file
View File

@ -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

481
install.sh Executable file
View File

@ -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 "$@"