Adaugă scripturi de instalare și configurare automată în limba română
This commit is contained in:
parent
cd77d66dcc
commit
d2cf773cd3
|
|
@ -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ă 🇷🇴
|
||||||
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
@ -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 "$@"
|
||||||
|
|
||||||
Loading…
Reference in New Issue