ircu2/INSTALL_AUTO.md

555 lines
12 KiB
Markdown

# Instalare Automată UnderChat IRCd 🚀
Această pagină descrie cum să instalezi și configurezi automat UnderChat 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/underchat/ircu2.git
cd ircu2
# 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
# Setare versiune la build
./install.sh --version 1.0.3
# Combinatie de optiuni
./install.sh --prefix /opt/ircd --maxcon 16384 --debug
```
### Toate Opțiunile Disponibile
```
Usage: ./install.sh [OPTIONS]
OPTIONS:
-h, --help Afiseaza mesajul de ajutor
-p, --prefix PATH Calea de instalare (implicit: $HOME/ircd)
-m, --maxcon NUM Numarul maxim de conexiuni (implicit: 4096)
-d, --debug Activeaza modul de debug
-s, --no-ssl Dezactiveaza suportul SSL/TLS
-c, --config FILE Fisier de configurare initial
-V, --version VER Seteaza versiunea in PATCHLEVEL (ex: 1.0.3)
```
## 📁 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
### "Check on CPATH (ircd.conf) failed: No such file or directory"
Aceasta este problema nr. 1 din lista ta. Server-ul nu găsește configurația:
```bash
# Verifică locația config-ului
ls -la ~/ircd/etc/ircd.conf
# Dacă nu există, rulează remediere automată
./fix-config.sh
# Sau din admin.sh
./admin.sh
# → Opțiunea 9) Remediere probleme configurare
```
**Cauza**: Configurația e în `lib/` în loc de `etc/` sau CPATH e setat greșit.
### "Config parse error on line X: syntax error"
Problema nr. 2 - erori de sintaxă în configurație:
```bash
# Test sintaxă detaliat
./admin.sh
# → Opțiunea 8) Test sintaxă configurare
# Remediere automată
./fix-config.sh ~/ircd
# Verificare manuală cu context
nano +126 ~/ircd/etc/ircd.conf # înlocuiește 126 cu linia ta
```
**Cauze comune**:
- Ghilimele neînchise: `"text neinchis`
- Acolade nepotrivite: `{ fără }`
- Virgulă lipsă: `setting = "value" missing;`
### Host hiding nu funcționează (problema nr. 2)
**Simptome**: IP-ul real apare în WHOIS în loc să fie ascuns cu format hexadecimal
**Exemplu problemă**: `~Raducu@188.24.5.202` în loc de `~Raducu@4C5DA6.3305AC.147F4A.B19664.IP`
```bash
# DIAGNOSTIC RAPID - rulează scriptul specializat
./fix-host-hiding.sh ~/ircd
# SAU verifică manual în ircd.conf:
features {
"HOST_HIDING" = "TRUE";
"HOST_HIDING_STYLE" = "3"; # CRITIC - folosește 3 pentru format hexadecimal
"HIDDEN_HOST" = "users.underchat.org";
"HIDDEN_IP" = "127.0.0.1"; # CRITIC - IP-ul de înlocuire
"HIDDEN_HOSTTYPE" = "3"; # CRITIC - tipul host-ului ascuns
};
# Verifică clasa utilizatorilor:
Class {
name = "Other";
usermode = "+ix"; # TREBUIE să fie +ix, nu doar +i
};
# Restart server după modificări
./admin.sh → opțiunea 3) Restart
```
**Cauze principale**:
1. **HOST_HIDING_STYLE = "1" în loc de "3"** - stilul 3 generează format hexadecimal
2. **HIDDEN_HOSTTYPE lipsă** - necesar pentru formatarea corectă
3. **Usermode +i în loc de +ix** - modul +x nu se aplică automat
4. **Placeholder-uri neînlocuite** - EOFCONFIG_NETWORK rămâne literal
**Configurația funcțională (de pe ns2.node-ase.ovh)**:
- HOST_HIDING_STYLE = "3" → Format: `4C5DA6.3305AC.147F4A.B19664.IP`
- HIDDEN_HOSTTYPE = "3" → Suportă generarea hexadecimală
- Ascundere automată la conectare cu +ix
**Verificare finală**:
```bash
# După restart, conectează-te și testează:
/mode nickname +x
/whois nickname
# Ar trebui să vezi:
# nickname is ~user@4C5DA6.3305AC.147F4A.B19664.IP * Hosted by me
# în loc de IP-ul real
```
### Operatorii nu primesc +W (problema nr. 3)
**Simptome**: Nu primești notificări când cineva îți dă WHOIS ca operator/administrator
```bash
# DIAGNOSTIC RAPID - script specializat pentru notificări WHOIS
./fix-whois-notifications.sh ~/ircd
# SAU verifică manual în ircd.conf:
# 1. Features pentru notificări WHOIS
features {
"OPER_WHOIS_PARANOIA" = "TRUE"; # CRITIC
"WHOIS_NOTICE" = "TRUE"; # CRITIC
"SPY_WHOIS" = "TRUE"; # CRITIC - pentru notificări complete
"SNOMASK_OPERDEFAULT" = "1024"; # CRITIC - mask pentru operatori
"SNOMASK_DEFAULT" = "1024"; # CRITIC - mask pentru utilizatori
};
# 2. Configurația operatorului
Operator {
name = "root";
password = "$hash$";
host = "*@*";
class = "Opers";
admin = yes;
snomask = "+HACK,THROTTLE,OLDSNO,NETWORK,OPERKILL,GLINE"; # CRITIC
privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN"; # CRITIC
};
# 3. Clasa Opers
Class {
name = "Opers";
usermode = "+Wx"; # CRITIC - trebuie +Wx, nu doar +W
# ...alte setări...
};
# Restart server după modificări
./admin.sh → opțiunea 3) Restart
```
**Cauze principale**:
1. **SPY_WHOIS lipsă** - fără asta nu primești notificările
2. **PRIV_WHOIS_NOTICE lipsă** - privilegiul pentru notificări
3. **SNOMASK_OPERDEFAULT lipsă** - mask-ul pentru operatori
4. **Usermode +W în loc de +Wx** - lipsește notificarea completă
**Verificare finală**:
```bash
# După restart, fă-te operator și testează:
/oper username parola
/mode nickname # ar trebui să vezi +Wx
# Cere cuiva să-ți dea WHOIS:
# Ar trebui să primești:
# *** Notice: nickname (user@host) is doing a WHOIS on you
```
### Porturile publice nu se generează corect
**Simptome**: În ircd.conf pe linia 126 apare `EOFCONFIG_CLIENT_PORTS` în loc de blocurile Port
**Eroarea exactă**: `Config parse error in file ircd.conf on line 126: syntax error`
```bash
# DIAGNOSTIC RAPID - script specializat pentru placeholder-uri
./fix-eofconfig-ports.sh ~/ircd
# SAU din scriptul general
./fix-config.sh ~/ircd
# SAU verifică manual linia problemă:
grep -n "EOFCONFIG_CLIENT_PORTS" ~/ircd/etc/ircd.conf
grep -n "EOFCONFIG_CLIENT_PORTS" ~/ircd/lib/ircd.conf
```
**Cauza**: Placeholder-ul `EOFCONFIG_CLIENT_PORTS` nu a fost înlocuit cu blocurile Port reale
**Soluția automată aplicată:**
```bash
# EOFCONFIG_CLIENT_PORTS devine:
Port {
vhost = "127.0.0.1" 6660;
hidden = yes;
};
Port {
vhost = "127.0.0.1" 6661;
hidden = yes;
};
# ... până la 6669, 7000
# EOFCONFIG_SSL_PORTS devine:
Port {
vhost = "127.0.0.1" 6697;
ssl = yes;
hidden = yes;
};
```
**Verificare finală**:
```bash
# După aplicarea reparației:
~/ircd/bin/ircd -c -f ~/ircd/etc/ircd.conf
# Ar trebui să nu mai dea erori de sintaxă
# Verifică că nu mai sunt placeholder-uri:
grep -i EOFCONFIG ~/ircd/etc/ircd.conf
# Nu ar trebui să găsească nimic
```
### "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ța ș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
```
### Script de Remediere Automată
Pentru remedierea rapidă a problemelor comune:
```bash
# Descarcă și rulează scriptul de remediere
./fix-config.sh ~/ircd
# Sau din meniul admin
./admin.sh
# → Opțiunea 9) Remediere probleme configurare
```
Scriptul remediază:
- ✅ Configurația în directorul greșit (lib vs etc)
- ✅ Permisiuni incorecte pe fișiere
- ✅ Acolade și ghilimele nepotrivite
- ✅ CPATH și DPATH setate greșit
- ✅ Host hiding incomplet
- ✅ Moduri operatori (+W, +x)
- ✅ Configurație minimă dacă lipsește
## 🛠️ Troubleshooting Avansat
### Debug Mode pentru Dezvoltatori
```bash
# Compilare cu debugging
./install.sh --debug
# Pornire cu verbose output
~/ircd/bin/ircd -d -f ~/ircd/etc/ircd.conf
# Urmărire log-uri în timp real
tail -f ~/ircd/log/ircd.log
```
### Verificare Configurație Completă
```bash
# Validare sintaxă
~/ircd/bin/ircd -c -f ~/ircd/etc/ircd.conf
# Check cu output detaliat
~/ircd/bin/ircd -k -f ~/ircd/etc/ircd.conf 2>&1 | head -20
# Backup și regenerare
cp ~/ircd/etc/ircd.conf ~/ircd/etc/ircd.conf.backup
./install.sh --config ~/ircd/etc/ircd.conf.backup
```