Compare commits

...

2 Commits

Author SHA1 Message Date
mihaiitdata f8501ad5b9 Actualizare UnderChat IRCd 2026-02-13 17:29:37 +02:00
mihaiitdata 785f816455 Refactorizare completă fix-and-install-madrid.sh v1.1.0 - Soluții robuste
- Gestionare inteligentă repository (nu mai șterge instalări existente)
- Păstrare și restaurare modificări locale cu git stash
- Oprire grațioasă procese (SIGTERM apoi SIGKILL)
- Verificare completă dependențe (gcc, make, git)
- Funcție sigură pentru modificări configurație cu backup automat
- Suport complet ARM64 cu detectare automată
- Timeout și verificări pentru test configurație
- Logging detaliat în fișiere separate
- Dialog interactiv îmbunătățit cu verificări
- Toate mesajele și comentariile în limba română
- Backup automat configurații cu timestamp
Script robust, profesional și sigur - fără fix-uri temporare!
2026-02-13 16:51:53 +02:00
5 changed files with 689 additions and 183 deletions

View File

@ -409,50 +409,33 @@ Class {
**Eroarea exactă**: `Config parse error in file ircd.conf on line 126: syntax error`
**Soluție**: Reinstalează cu versiunea corectată:
```bash
# DIAGNOSTIC RAPID - script specializat pentru placeholder-uri
./fix-eofconfig-ports.sh ~/ircd
# Șterge instalarea veche
rm -rf ~/ircu2
# 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
# Reinstalează cu versiunea v1.0.4 care include toate remedierile
git clone https://gitlab.back.ro/underchat/ircu2.git
cd ircu2
./install.sh
```
**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;
};
```
**Ce include versiunea v1.0.4**:
- ✅ Template-ul generat corect cu toate porturile
- ✅ Placeholder-urile EOFCONFIG înlocuite automat
- ✅ snomask corectat la "+s" (fără erori de sintaxă)
- ✅ IP-ul corect aplicat pe toate porturile
- ✅ Toate remedierile integrate DIRECT în install.sh
**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ă
# După reinstalare, testează sintaxa:
~/ircd/bin/ircd -c -f ~/ircd/lib/ircd.conf
# Ar trebui să afișeze: "Configuration file ircd.conf checked okay."
# Verifică că nu mai sunt placeholder-uri:
grep -i EOFCONFIG ~/ircd/etc/ircd.conf
grep -i EOFCONFIG ~/ircd/lib/ircd.conf
# Nu ar trebui să găsească nimic
```

View File

@ -0,0 +1,189 @@
# Instalare UnderChat IRCd - Madrid Server
## Versiune: v1.0.6-madrid
## Data: 2026-02-13
---
## 🚀 INSTALARE RAPIDĂ (3 COMENZI):
```bash
# 1. Șterge instalarea veche (dacă există)
rm -rf ~/ircu2 ~/ircd
# 2. Clonează repository-ul
git clone https://gitlab.back.ro/underchat/ircu2.git && cd ircu2
# 3. Rulează scriptul pre-configurat Madrid
./install-madrid.sh
```
**GATA! Instalarea este completă!**
---
## ✅ CONFIGURAȚIE PRE-SETATĂ:
| Setare | Valoare |
|--------|---------|
| **Rețea** | UnderChat.org |
| **Server** | Madrid.ES.EU.UnderChat.org |
| **IP IRC** | 10.0.0.125 |
| **Port Client** | 6667 |
| **Port Server** | 4400 |
| **Username OPER** | Raducu |
| **Parola OPER** | muiesteaua |
| **Locație** | Madrid, Spain |
---
## 🎮 PORNIRE SERVER:
```bash
# Pornește serverul
~/ircd/bin/ircd
# Verifică că rulează
ps aux | grep ircd
# Verifică log-urile
tail -f ~/ircd/log/ircd.log
```
---
## 🔧 COMENZI UTILE:
### Test sintaxă configurație:
```bash
~/ircd/bin/ircd -c -f ~/ircd/lib/ircd.conf
```
### Editare configurație:
```bash
nano ~/ircd/lib/ircd.conf
```
### Restart server:
```bash
# Oprește
killall ircd
# Pornește
~/ircd/bin/ircd
```
---
## 👤 LOGARE CA OPERATOR:
După ce te conectezi la server cu client IRC:
```
/connect Madrid.ES.EU.UnderChat.org 6667
/oper Raducu muiesteaua
```
---
## 📊 VERIFICĂRI:
### Verifică că server-ul ascultă pe portul corect:
```bash
netstat -tlnp | grep 6667
# Ar trebui să vezi: 10.0.0.125:6667
```
### Verifică configurația:
```bash
grep -E "(name =|vhost =|CPATH)" ~/ircd/lib/ircd.conf
```
### Verifică că NU sunt erori:
```bash
~/ircd/bin/ircd -c -f ~/ircd/lib/ircd.conf
# Ar trebui să afișeze: "Configuration file ircd.conf checked okay."
```
---
## ✨ CE INCLUDE VERSIUNEA v1.0.6-madrid:
**Configurație completă pre-setată** - nu mai trebuie să introduci nimic manual
**snomask = "+s"** - format CORECT, fără erori de sintaxă
**CPATH absolut** - `/home/ircd/ircd/lib/ircd.conf` hardcodat
**IP corect** - 10.0.0.125 pe toate porturile
**Host hiding** - format hexadecimal activat
**WHOIS notificări** - pentru operatori activate
**Test sintaxă automat** - verificare înainte de finalizare
**ZERO placeholder-uri** - toate valorile reale, nu EOFCONFIG_*
---
## 🐛 DACĂ APARE VREO PROBLEMĂ:
### Eroare: "Failed to read configuration file"
```bash
# Verifică permisiuni:
ls -la ~/ircd/lib/ircd.conf
chmod 600 ~/ircd/lib/ircd.conf
```
### Eroare: "Config parse error on line X"
```bash
# Verifică linia exactă:
sed -n 'Xp' ~/ircd/lib/ircd.conf # înlocuiește X cu numărul liniei
# Reinstalează:
rm -rf ~/ircu2 ~/ircd
git clone https://gitlab.back.ro/underchat/ircu2.git && cd ircu2
./install-madrid.sh
```
### Server nu pornește:
```bash
# Verifică ce procese rulează:
ps aux | grep ircd
# Verifică ce porturu sunt în uz:
netstat -tlnp | grep -E "(6667|4400)"
# Verifică log-urile:
tail -50 ~/ircd/log/ircd.log
```
---
## 📞 SUPORT:
Dacă întâmpini probleme, rulează:
```bash
# Diagnostic complet:
echo "=== CONFIG ==="
~/ircd/bin/ircd -c -f ~/ircd/lib/ircd.conf
echo ""
echo "=== PROCESE ==="
ps aux | grep ircd
echo ""
echo "=== PORTURI ==="
netstat -tlnp | grep -E "(6667|4400)"
echo ""
echo "=== LOG ==="
tail -20 ~/ircd/log/ircd.log
```
Trimite output-ul pentru diagnostic!
---
## 🎉 SUCCESS!
Dacă ai ajuns aici și server-ul rulează, **FELICITĂRI!**
Conectează-te cu client IRC la:
- **Server**: Madrid.ES.EU.UnderChat.org (sau 10.0.0.125)
- **Port**: 6667
- **Operator**: /oper Raducu muiesteaua
**Distracție plăcută pe UnderChat Network!** 🚀

View File

@ -23,110 +23,215 @@ clear
echo -e "${ALBASTRU}"
cat << "EOF"
╔════════════════════════════════════════════════════╗
║ UnderChat IRCd - Madrid Server
Fix & Install Script v1.0.6-madrid-final ║
Rezolvă TOATE problemele automat!
║ UnderChat IRCd - Serverul Madrid
Script de Instalare v1.1.0-madrid-stabil ║
Gestionare inteligentă a instalării
╚════════════════════════════════════════════════════╝
EOF
echo -e "${NC}"
echo ""
# ===================================================================
# PARTEA 1: DIAGNOSTIC ȘI CURĂȚARE
# PARTEA 1: DIAGNOSTIC ȘI PREGĂTIRE
# ===================================================================
log_info "PARTEA 1/3: Diagnostic și curățare..."
log_info "PARTEA 1/3: Diagnostic și pregătire sistem..."
echo ""
# Oprește procese vechi
log_info "Oprire procese IRCd vechi..."
pkill -9 ircd 2>/dev/null || true
sleep 1
log_success "Procese IRCd oprite"
# Oprește procese IRCd active
log_info "Oprire procese IRCd active..."
if pgrep -x ircd > /dev/null; then
log_warn "Găsit proces IRCd activ, oprire..."
pkill -15 ircd 2>/dev/null || true
sleep 2
# Dacă încă rulează, forțează oprirea
if pgrep -x ircd > /dev/null; then
log_warn "Forțare oprire proces..."
pkill -9 ircd 2>/dev/null || true
sleep 1
fi
log_success "Procese IRCd oprite"
else
log_info "Niciun proces IRCd activ"
fi
# Șterge instalări vechi
log_info "Ștergere instalări vechi..."
rm -rf ~/ircu2 ~/ircd
log_success "Instalări vechi șterse"
# Verifică dependențe necesare
log_info "Verificare dependențe de compilare..."
DEPENDENTE_LIPSA=()
# Verifică dependențe
log_info "Verificare dependențe..."
if ! command -v gcc &> /dev/null; then
log_error "GCC nu este instalat! Instalează cu: sudo apt-get install build-essential"
DEPENDENTE_LIPSA+=("gcc")
fi
if ! command -v make &> /dev/null; then
DEPENDENTE_LIPSA+=("make")
fi
if ! command -v git &> /dev/null; then
DEPENDENTE_LIPSA+=("git")
fi
if [ ${#DEPENDENTE_LIPSA[@]} -gt 0 ]; then
log_error "Dependențe lipsă: ${DEPENDENTE_LIPSA[*]}"
log_error "Instalează cu: sudo apt-get install build-essential git"
exit 1
fi
log_success "Dependențe OK"
log_success "Toate dependențele sunt instalate"
echo ""
log_success "✓ PARTEA 1 COMPLETĂ: Sistem curățat și pregătit"
log_success "✓ PARTEA 1 COMPLETĂ: Sistem pregătit pentru instalare"
echo ""
# ===================================================================
# PARTEA 2: CLONARE ȘI COMPILARE
# PARTEA 2: OBȚINERE SURSĂ ȘI COMPILARE
# ===================================================================
log_info "PARTEA 2/3: Clonare și compilare..."
log_info "PARTEA 2/3: Obținere cod sursă și compilare..."
echo ""
# Clonează repository
log_info "Clonare repository UnderChat IRCd..."
cd ~
if ! git clone https://gitlab.back.ro/underchat/ircu2.git; then
log_error "Eșec la clonarea repository-ului!"
exit 1
fi
cd ~/ircu2
log_success "Repository clonat"
# Determină directorul de lucru
DIR_SURSA="$HOME/ircu2"
# Fix pentru aarch64 (ARM64)
log_info "Verificare arhitectură..."
if [ "$(uname -m)" = "aarch64" ]; then
log_warn "Detectat aarch64 - actualizare config.guess..."
# Verifică dacă repository-ul există deja
if [ -d "$DIR_SURSA/.git" ]; then
log_info "Repository existent găsit în $DIR_SURSA"
cd "$DIR_SURSA"
# Descarcă config.guess actualizat
if command -v wget &>/dev/null; then
wget -q -O config.guess 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD'
wget -q -O config.sub 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD'
chmod +x config.guess config.sub
log_success "config.guess actualizat pentru aarch64"
# Verifică dacă sunt modificări locale
if ! git diff-index --quiet HEAD -- 2>/dev/null; then
log_warn "Există modificări locale nesalvate"
log_info "Păstrarea modificărilor locale și actualizare..."
git stash push -m "Salvare automată înainte de actualizare - $(date '+%Y-%m-%d %H:%M:%S')" || true
fi
# Actualizează repository-ul
log_info "Actualizare repository din GitLab..."
if git pull origin master 2>/dev/null || git pull origin main 2>/dev/null; then
log_success "Repository actualizat"
# Restaurează modificările locale dacă au fost salvate
if git stash list | grep -q "Salvare automată"; then
log_info "Restaurare modificări locale..."
git stash pop || log_warn "Nu s-au putut restaura toate modificările"
fi
else
log_warn "wget nu este disponibil - folosesc --build flag"
log_warn "Nu s-a putut actualiza repository-ul, continuăm cu versiunea existentă"
fi
else
log_info "Clonare repository UnderChat IRCd..."
cd ~
if [ -d "$DIR_SURSA" ]; then
log_warn "Director $DIR_SURSA există dar nu e repository git, ștergere..."
rm -rf "$DIR_SURSA"
fi
if ! git clone https://gitlab.back.ro/underchat/ircu2.git; then
log_error "Eșec la clonarea repository-ului!"
log_error "Verifică conexiunea la internet și accesul la GitLab"
exit 1
fi
cd "$DIR_SURSA"
log_success "Repository clonat cu succes"
fi
# Gestionare arhitectură sistem
log_info "Detectare arhitectură sistem: $(uname -m)"
ARHITECTURA=$(uname -m)
if [ "$ARHITECTURA" = "aarch64" ] || [ "$ARHITECTURA" = "arm64" ]; then
log_warn "Arhitectură ARM64 detectată - actualizare fișiere config necesară"
# Verifică dacă config.guess poate recunoaște arhitectura
if ! ./config.guess &>/dev/null; then
log_info "Descărcare fișiere config actualizate pentru ARM64..."
if command -v wget &>/dev/null; then
wget -q -O config.guess.new 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD' && \
wget -q -O config.sub.new 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD'
if [ -f config.guess.new ] && [ -s config.guess.new ]; then
mv config.guess.new config.guess
mv config.sub.new config.sub
chmod +x config.guess config.sub
log_success "Fișiere config actualizate pentru ARM64"
fi
elif command -v curl &>/dev/null; then
curl -sL -o config.guess.new 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD' && \
curl -sL -o config.sub.new 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD'
if [ -f config.guess.new ] && [ -s config.guess.new ]; then
mv config.guess.new config.guess
mv config.sub.new config.sub
chmod +x config.guess config.sub
log_success "Fișiere config actualizate pentru ARM64"
fi
else
log_warn "wget/curl indisponibile - folosesc flag --build explicit"
fi
fi
fi
# Configurare
log_info "Configurare pentru compilare..."
CONFIGURE_FLAGS="--prefix=$HOME/ircd --with-maxcon=4096"
# Pregătire pentru compilare
log_info "Configurare parametri compilare..."
PREFIX="$HOME/ircd"
CONFIGURE_FLAGS="--prefix=$PREFIX --with-maxcon=4096"
# Adaugă --build pentru aarch64
if [ "$(uname -m)" = "aarch64" ]; then
# Adaugă parametri specifici pentru ARM64
if [ "$ARHITECTURA" = "aarch64" ] || [ "$ARHITECTURA" = "arm64" ]; then
CONFIGURE_FLAGS="$CONFIGURE_FLAGS --build=aarch64-unknown-linux-gnu"
log_info "Folosesc: ./configure $CONFIGURE_FLAGS"
log_info "Parametri ARM64: $CONFIGURE_FLAGS"
fi
if ! ./configure $CONFIGURE_FLAGS; then
# Rulează configure
log_info "Configurare pentru compilare (./configure)..."
if ! ./configure $CONFIGURE_FLAGS 2>&1 | tee configure.log; then
log_error "Eșec la configurare!"
log_error "Ultimele linii din log:"
tail -n 20 configure.log
exit 1
fi
log_success "Configurare completă"
# Compilare
log_info "Compilare (poate dura câteva minute)..."
# Curățare compilări anterioare
log_info "Curățare fișiere compilate anterior..."
make clean &>/dev/null || true
if ! make -j$(nproc); then
# Compilare
log_info "Compilare cod sursă (make)..."
log_info "Acest pas poate dura câteva minute..."
NUMAR_PROCESOARE=$(nproc 2>/dev/null || echo "2")
if ! make -j"$NUMAR_PROCESOARE" 2>&1 | tee make.log; then
log_error "Eșec la compilare!"
log_error "Ultimele linii din log:"
tail -n 30 make.log
exit 1
fi
log_success "Compilare completă"
# Instalare binare
log_info "Instalare binare..."
if ! make install; then
log_info "Instalare binare în $PREFIX..."
if ! make install 2>&1 | tee install.log; then
log_error "Eșec la instalare!"
log_error "Verifică permisiunile pentru $PREFIX"
exit 1
fi
log_success "Binare instalate"
# Verifică că binarul a fost instalat corect
if [ ! -f "$PREFIX/bin/ircd" ]; then
log_error "Binarul ircd nu a fost găsit în $PREFIX/bin/ircd!"
exit 1
fi
if [ ! -x "$PREFIX/bin/ircd" ]; then
log_error "Binarul ircd nu are permisiuni de execuție!"
chmod +x "$PREFIX/bin/ircd"
log_success "Permisiuni de execuție setate"
fi
echo ""
log_success "✓ PARTEA 2 COMPLETĂ: Compilare și instalare reușită"
echo ""
@ -142,8 +247,10 @@ PREFIX="$HOME/ircd"
NETWORK_NAME="UnderChat.org"
SERVER_NAME="Madrid.ES.EU.UnderChat.org"
VHOST_IPV4="10.0.0.125"
OPERATOR_NAME="Raducu"
OPERATOR_PASS="muiesteaua"
# Creare directoare
# Creare structură directoare
log_info "Creare structură directoare..."
mkdir -p "$PREFIX/lib"
mkdir -p "$PREFIX/etc"
@ -151,91 +258,196 @@ mkdir -p "$PREFIX/log"
mkdir -p "$PREFIX/var"
log_success "Directoare create"
# Generare configurație Madrid - FOLOSIND example.conf ca bază
log_info "Generare configurație Madrid din example.conf..."
# Găsește fișierul example.conf
EXAMPLE_CONF=""
if [ -f "$DIR_SURSA/doc/example.conf" ]; then
EXAMPLE_CONF="$DIR_SURSA/doc/example.conf"
elif [ -f "$HOME/ircu2/doc/example.conf" ]; then
EXAMPLE_CONF="$HOME/ircu2/doc/example.conf"
elif [ -f "doc/example.conf" ]; then
EXAMPLE_CONF="doc/example.conf"
fi
# Copiază example.conf ca bază
if [ -f "doc/example.conf" ]; then
cp doc/example.conf "$PREFIX/lib/ircd.conf"
log_success "Folosesc example.conf ca bază"
else
log_error "example.conf nu găsit!"
if [ -z "$EXAMPLE_CONF" ] || [ ! -f "$EXAMPLE_CONF" ]; then
log_error "Nu s-a găsit fișierul example.conf!"
log_error "Căutat în: $DIR_SURSA/doc/example.conf"
exit 1
fi
# Modifică valorile pentru Madrid
log_info "Personalizare pentru Madrid..."
log_info "Folosesc șablon: $EXAMPLE_CONF"
# Înlocuiește valorile cu cele pentru Madrid
sed -i 's/name = "[^"]*";/name = "Madrid.ES.EU.UnderChat.org";/' "$PREFIX/lib/ircd.conf"
sed -i 's/vhost = "[^"]*";/vhost = "10.0.0.125";/g' "$PREFIX/lib/ircd.conf"
sed -i 's/description = "[^"]*";/description = "The UnderChat.org Network - Madrid Node";/' "$PREFIX/lib/ircd.conf"
sed -i 's/"NETWORK" = "[^"]*"/"NETWORK" = "UnderChat.org"/g' "$PREFIX/lib/ircd.conf"
sed -i 's/"DOMAINNAME" = "[^"]*"/"DOMAINNAME" = "UnderChat.org"/g' "$PREFIX/lib/ircd.conf"
# Verifică dacă configurația există deja
FISIER_CONFIG="$PREFIX/lib/ircd.conf"
if [ -f "$FISIER_CONFIG" ]; then
log_warn "Configurație existentă găsită în $FISIER_CONFIG"
BACKUP_CONFIG="$FISIER_CONFIG.backup-$(date +%Y%m%d-%H%M%S)"
cp "$FISIER_CONFIG" "$BACKUP_CONFIG"
log_info "Backup creat: $BACKUP_CONFIG"
fi
# Înlocuiește căile
sed -i "s|/path/to|$PREFIX|g" "$PREFIX/lib/ircd.conf"
sed -i "s|\"MPATH\" = \"[^\"]*\"|\"MPATH\" = \"$PREFIX/lib/ircd.motd\"|g" "$PREFIX/lib/ircd.conf"
sed -i "s|\"CPATH\" = \"[^\"]*\"|\"CPATH\" = \"$PREFIX/lib/ircd.conf\"|g" "$PREFIX/lib/ircd.conf"
sed -i "s|\"PPATH\" = \"[^\"]*\"|\"PPATH\" = \"$PREFIX/var/ircd.pid\"|g" "$PREFIX/lib/ircd.conf"
sed -i "s|\"LOG\" = \"SYSTEM\" \"FILE\" \"[^\"]*\"|\"LOG\" = \"SYSTEM\" \"FILE\" \"$PREFIX/log/ircd.log\"|g" "$PREFIX/lib/ircd.conf"
# Copiază example.conf ca punct de plecare
log_info "Generare configurație Madrid..."
cp "$EXAMPLE_CONF" "$FISIER_CONFIG"
# Adaugă operator Raducu
sed -i '/^Operator {/,/^};/c\
Operator {\
name = "Raducu";\
password = "$PLAIN$muiesteaua";\
host = "*@*";\
class = "Opers";\
admin = yes;\
hide_oper = no;\
hide_channels = no;\
snomask = "+s";\
privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN";\
};' "$PREFIX/lib/ircd.conf"
# Funcție pentru înlocuire sigură în configurație
inlocuieste_in_config() {
local PATTERN="$1"
local REPLACE="$2"
local DESCRIERE="$3"
if sed -i.tmp "$PATTERN" "$FISIER_CONFIG" 2>/dev/null; then
rm -f "$FISIER_CONFIG.tmp"
log_info "$DESCRIERE"
return 0
else
log_warn " ⚠ Nu s-a putut actualiza: $DESCRIERE"
rm -f "$FISIER_CONFIG.tmp"
return 1
fi
}
log_info "Personalizare configurație pentru Madrid..."
# Actualizare nume server
inlocuieste_in_config \
's/^[[:space:]]*name[[:space:]]*=[[:space:]]*"[^"]*";/ name = "'"$SERVER_NAME"'";/' \
"Nume server: $SERVER_NAME"
# Actualizare vhost
inlocuieste_in_config \
's/^[[:space:]]*vhost[[:space:]]*=[[:space:]]*"[^"]*";/ vhost = "'"$VHOST_IPV4"'";/g' \
"VHost IPv4: $VHOST_IPV4"
# Actualizare descriere
inlocuieste_in_config \
's/^[[:space:]]*description[[:space:]]*=[[:space:]]*"[^"]*";/ description = "The UnderChat.org Network - Madrid Node";/' \
"Descriere server"
# Actualizare feature NETWORK
inlocuieste_in_config \
's/"NETWORK"[[:space:]]*=[[:space:]]*"[^"]*"/"NETWORK" = "'"$NETWORK_NAME"'"/' \
"Feature NETWORK"
# Actualizare feature DOMAINNAME
inlocuieste_in_config \
's/"DOMAINNAME"[[:space:]]*=[[:space:]]*"[^"]*"/"DOMAINNAME" = "'"$NETWORK_NAME"'"/' \
"Feature DOMAINNAME"
# Actualizare căi fișiere
inlocuieste_in_config \
's|/path/to|'"$PREFIX"'|g' \
"Căi generale"
inlocuieste_in_config \
's|"MPATH"[[:space:]]*=[[:space:]]*"[^"]*"|"MPATH" = "'"$PREFIX"'/lib/ircd.motd"|' \
"Cale MOTD"
inlocuieste_in_config \
's|"CPATH"[[:space:]]*=[[:space:]]*"[^"]*"|"CPATH" = "'"$PREFIX"'/lib/ircd.conf"|' \
"Cale configurație"
inlocuieste_in_config \
's|"PPATH"[[:space:]]*=[[:space:]]*"[^"]*"|"PPATH" = "'"$PREFIX"'/var/ircd.pid"|' \
"Cale PID"
# Actualizare cale log - mai complexă
if grep -q '"LOG"' "$FISIER_CONFIG"; then
inlocuieste_in_config \
's|"LOG"[[:space:]]*=[[:space:]]*"SYSTEM"[[:space:]]*"FILE"[[:space:]]*"[^"]*"|"LOG" = "SYSTEM" "FILE" "'"$PREFIX"'/log/ircd.log"|' \
"Cale fișier log"
fi
# Configurare operator Raducu
log_info "Configurare operator: $OPERATOR_NAME"
# Găsește prima secțiune Operator și înlocuiește-o
if grep -q "^Operator[[:space:]]*{" "$FISIER_CONFIG"; then
# Folosește perl pentru înlocuire multi-linie dacă e disponibil
if command -v perl &>/dev/null; then
perl -i.bak -0pe 's/Operator\s*\{[^}]*\}/Operator {\n name = "'"$OPERATOR_NAME"'";\n password = "\$PLAIN\$'"$OPERATOR_PASS"'";\n host = "*@*";\n class = "Opers";\n admin = yes;\n hide_oper = no;\n hide_channels = no;\n snomask = "+s";\n privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN";\n};/s' "$FISIER_CONFIG" 2>/dev/null && rm -f "$FISIER_CONFIG.bak"
log_info " ✓ Operator configurat"
else
log_warn " ⚠ Perl nu e disponibil, configurare manuală necesară pentru operator"
fi
else
# Adaugă secțiunea Operator dacă nu există
cat >> "$FISIER_CONFIG" <<OPERATOR_BLOCK
# Operator Madrid - $OPERATOR_NAME
Operator {
name = "$OPERATOR_NAME";
password = "\$PLAIN\$$OPERATOR_PASS";
host = "*@*";
class = "Opers";
admin = yes;
hide_oper = no;
hide_channels = no;
snomask = "+s";
privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN";
};
OPERATOR_BLOCK
log_info " ✓ Secțiune Operator adăugată"
fi
log_success "Configurație Madrid personalizată"
# MOTD
# Generare MOTD
log_info "Generare MOTD..."
cat > "$PREFIX/lib/ircd.motd" <<'ENDMOTD'
cat > "$PREFIX/lib/ircd.motd" <<'MOTD_FINAL'
╔═══════════════════════════════════════╗
║ Bine venit pe UnderChat IRCd! ║
║ Madrid.ES.EU.UnderChat.org ║
║ ║
║ Versiune: v1.0.6-madrid-final ║
║ Versiune: v1.1.0-madrid-stabil
║ ║
║ Pentru suport: #support ║
║ Website: https://underchat.org ║
╚═══════════════════════════════════════╝
🌟 UnderChat Network - Madrid Node
• Host hiding pentru protecția utilizatorilor
• Anti-spam și anti-flood protection
• Canale cu diverse moduri și opțiuni
🌟 UnderChat Network - Nod Madrid
Protecție identitate utilizatori (host hiding)
Protecție anti-spam și anti-flood
• Canale cu moduri și opțiuni diverse
Distracție plăcută pe UnderChat! 🎉
ENDMOTD
MOTD_FINAL
log_success "MOTD creat"
log_success "MOTD generat"
# Setare permisiuni
log_info "Setare permisiuni..."
chmod 600 "$PREFIX/lib/ircd.conf"
log_info "Setare permisiuni fișiere..."
chmod 600 "$FISIER_CONFIG"
chmod 644 "$PREFIX/lib/ircd.motd"
# Copiere fișiere în directorul etc (backup)
cp "$PREFIX/lib/ircd.motd" "$PREFIX/etc/ircd.motd" 2>/dev/null || true
cp "$PREFIX/lib/ircd.conf" "$PREFIX/etc/ircd.conf" 2>/dev/null || true
cp "$FISIER_CONFIG" "$PREFIX/etc/ircd.conf" 2>/dev/null || true
log_success "Permisiuni setate"
# Test sintaxă
log_info "Test sintaxă configurație..."
if "$PREFIX/bin/ircd" -c -f "$PREFIX/lib/ircd.conf"; then
# Verificare sintaxă configurație
log_info "Verificare sintaxă configurație..."
if [ ! -f "$PREFIX/bin/ircd" ]; then
log_error "Binarul ircd nu există în $PREFIX/bin/ircd!"
exit 1
fi
# Test sintaxă cu timeout pentru a evita blocarea
log_info "Rulare test configurație..."
if timeout 10 "$PREFIX/bin/ircd" -c -f "$FISIER_CONFIG" 2>&1 | tee "$PREFIX/log/config-test.log"; then
log_success "✓ Sintaxa configurației este CORECTĂ!"
else
log_error "✗ EROARE în configurație!"
echo ""
echo "Rulează pentru diagnostic:"
echo " $PREFIX/bin/ircd -c -f $PREFIX/lib/ircd.conf"
exit 1
REZULTAT_TEST=$?
if [ $REZULTAT_TEST -eq 124 ]; then
log_warn "⚠ Testul configurației a depășit timeout-ul (posibil OK)"
else
log_error "✗ EROARE în configurație!"
echo ""
echo "Detalii eroare în: $PREFIX/log/config-test.log"
echo ""
echo "Rulează manual pentru diagnostic:"
echo " $PREFIX/bin/ircd -c -f $FISIER_CONFIG"
exit 1
fi
fi
echo ""
@ -267,68 +479,110 @@ echo -e "${ALBASTRU}═══ PORNIRE SERVER ═══${NC}"
echo " Pornește acum:"
echo -e " ${VERDE}$PREFIX/bin/ircd -f $PREFIX/lib/ircd.conf${NC}"
echo ""
echo " SAU pornire în background:"
echo " SAU pornire în fundal (background):"
echo -e " ${VERDE}nohup $PREFIX/bin/ircd -f $PREFIX/lib/ircd.conf &${NC}"
echo ""
echo -e "${ALBASTRU}═══ VERIFICARE ═══${NC}"
echo " Verifică că rulează:"
echo " Verifică că serverul rulează:"
echo -e " ${VERDE}ps aux | grep ircd${NC}"
echo ""
echo " Verifică porturi:"
echo " Verifică porturile deschise:"
echo -e " ${VERDE}netstat -tlnp | grep -E '(6667|4400)'${NC}"
echo ""
echo " Verifică log:"
echo " Verifică fișierul de log:"
echo -e " ${VERDE}tail -f $PREFIX/log/ircd.log${NC}"
echo ""
echo -e "${ALBASTRU}═══ CONECTARE ═══${NC}"
echo " Client IRC:"
echo " Cu client IRC:"
echo " Server: Madrid.ES.EU.UnderChat.org (sau 10.0.0.125)"
echo " Port: 6667"
echo ""
echo " Logare operator:"
echo " Autentificare ca operator:"
echo " /oper Raducu muiesteaua"
echo ""
echo -e "${VERDE}🎉 Distracție plăcută pe UnderChat Network! 🎉${NC}"
echo ""
# Întreabă dacă să pornească automat
# Întreabă dacă să pornească serverul automat
echo ""
read -p "Dorești să pornesc serverul ACUM? [Y/n]: " start_now
start_now=${start_now:-Y}
read -p "Dorești să pornesc serverul ACUM? [D/n] (Da/nu): " pornire_acum
pornire_acum=${pornire_acum:-D}
if [[ "$start_now" =~ ^[Yy]$ ]]; then
if [[ "$pornire_acum" =~ ^[DdYy]$ ]]; then
echo ""
log_info "Pornire server IRCd cu config Madrid..."
log_info "Pornire server IRCd cu configurația Madrid..."
# Pornește cu -f pentru a specifica calea completă a config-ului
# Verifică dacă există deja un proces
if pgrep -x ircd > /dev/null; then
log_warn "Un proces IRCd rulează deja!"
ps aux | grep "[i]rcd"
echo ""
read -p "Dorești să-l opresc și să pornesc unul nou? [D/n]: " opreste_si_porneste
opreste_si_porneste=${opreste_si_porneste:-D}
if [[ "$opreste_si_porneste" =~ ^[DdYy]$ ]]; then
log_info "Oprire proces existent..."
pkill -15 ircd 2>/dev/null || true
sleep 2
if pgrep -x ircd > /dev/null; then
pkill -9 ircd 2>/dev/null || true
sleep 1
fi
log_success "Proces oprit"
else
log_info "Păstrare proces existent, ieșire din script"
exit 0
fi
fi
# Pornește serverul cu calea completă spre configurație
log_info "Lansare proces ircd..."
if "$PREFIX/bin/ircd" -f "$PREFIX/lib/ircd.conf"; then
sleep 2
sleep 3
# Verifică dacă procesul rulează
if pgrep -x ircd > /dev/null; then
log_success "✓✓✓ SERVER PORNIT CU SUCCES! ✓✓✓"
echo ""
echo "Proces IRCd activ:"
ps aux | grep "[i]rcd"
echo ""
log_success "Conectează-te la: Madrid.ES.EU.UnderChat.org:6667"
log_success "Poți conecta la: Madrid.ES.EU.UnderChat.org:6667"
echo ""
# Verifică log-ul pentru eventuale avertismente
if [ -f "$PREFIX/log/ircd.log" ]; then
echo "Ultimele linii din log:"
tail -n 10 "$PREFIX/log/ircd.log"
fi
else
log_error "Server-ul nu rulează! Verifică log-urile:"
log_error "Serverul nu rulează după pornire!"
echo ""
log_error "Verifică log-urile pentru erori:"
echo " tail -f $PREFIX/log/ircd.log"
echo ""
log_info "Sau rulează manual cu:"
echo " $PREFIX/bin/ircd -f $PREFIX/lib/ircd.conf"
fi
else
log_error "Eșec la pornirea serverului!"
echo ""
echo "Verifică erori cu:"
echo " $PREFIX/bin/ircd -f $PREFIX/lib/ircd.conf"
log_error "Verifică configurația și încearcă manual:"
echo " $PREFIX/bin/ircd -c -f $PREFIX/lib/ircd.conf # Test configurație"
echo " $PREFIX/bin/ircd -f $PREFIX/lib/ircd.conf # Pornire server"
fi
else
echo ""
log_info "OK! Pornește manual când ești gata:"
log_info "OK! Pornește serverul manual când ești pregătit:"
echo " $PREFIX/bin/ircd -f $PREFIX/lib/ircd.conf"
echo ""
log_info "Sau în fundal:"
echo " nohup $PREFIX/bin/ircd -f $PREFIX/lib/ircd.conf > $PREFIX/log/startup.log 2>&1 &"
fi
echo ""
log_success "Script finalizat!"
log_success "Script finalizat cu succes!"
echo ""

View File

@ -527,7 +527,7 @@ generate_config() {
mkdir -p "$(dirname "$config_file")"
cat > "$config_file" << 'EOFCONFIG'
cat > "$config_file" << EOFCONFIG
# Fișier de configurare pentru UnderChat IRCd
# Generat automat în data: 2026
# Limba: Română
@ -559,11 +559,11 @@ EOFCONFIG_VHOST6_LINE
# ============================================================================
Admin {
# Locații (maxim 2)
Location = "EOFCONFIG_NETWORK World";
Location = "EOFCONFIG_ADMIN_LOC";
Location = "The EOFCONFIG_NETWORK World";
Location = "Location: EOFCONFIG_ADMIN_LOC";
# Contacti
Contact = "EOFCONFIG_ADMIN_CONTACT";
Contact = "IRC Admins <EOFCONFIG_ADMIN_CONTACT>";
};
# ============================================================================
@ -579,13 +579,23 @@ Class {
sendq = 9000000;
};
# Clasă pentru servere principale (LeafServer)
Class {
name = "LeafServer";
pingfreq = 1 minutes 30 seconds;
connectfreq = 5 minutes;
maxlinks = 0;
sendq = 9000000;
};
# Clasă pentru clienți obișnuiți
Class {
name = "Local";
pingfreq = 1 minutes 30 seconds;
sendq = 160000;
maxlinks = 100;
usermode = "+iw";
usermode = "+i";
};
# Clasă pentru clienți normali (implicit)
@ -611,10 +621,19 @@ Class {
show_invis = yes;
see_chan = yes;
list_chan = yes;
usermode = "+Wx";
usermode = "+W";
remove = yes;
};
# Clasă pentru IRCcloud
Class {
name = "irccloud";
pingfreq = 1 minutes 30 seconds;
sendq = 160000;
maxlinks = 100;
usermode = "+i";
};
# ============================================================================
# SECȚIUNE: CLIENT - Restricții pentru conexiuni
# ============================================================================
@ -624,15 +643,29 @@ Client {
host = "*@*";
ip = "*@*";
class = "Other";
maxlinks = 3;
};
#Configurare implicita pentru AUTOJOIN + mesaj
Client {
host = "*@*";
ip = "*@*";
class = "Other";
autojoinchannel = "#CService";
autojoinnotice = "*** Notice -- You are now being autojoined into #CService and #zT channels. Have fun!";
maxlinks = 6;
};
# ============================================================================
# SECȚIUNE: JUPED NICKS - Nick-uri rezervate
# ============================================================================
Jupe {
# Litere și caractere speciale
nick = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
nick = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,{,|,},~,-,_,`";
nick = "EuWorld,UWorld,UWorld2,Defender";
nick = "login,underchat,protocol,pass,newpass,org";
nick = "LPT1,LPT2,COM1,COM2,COM3,COM4,AUX,AUTH";
# Servicii de rețea
nick = "StatServ,NoteServ";
@ -647,7 +680,7 @@ Jupe {
# Port pentru server-to-server
Port {
vhost = "EOFCONFIG_VHOST4" EOFCONFIG_SERVER_PORT;
EOFCONFIG_VHOST6_PORT_4400
EOFCONFIG_VHOST6_PORT_4400
server = yes;
hidden = yes;
};
@ -657,6 +690,7 @@ EOFCONFIG_CLIENT_PORTS
# Porturi SSL/TLS pentru clienți
EOFCONFIG_SSL_PORTS
# ============================================================================
# SECȚIUNE: OPERATORI
# ============================================================================
@ -679,8 +713,8 @@ Operator {
admin = yes;
hide_oper = no;
hide_channels = no;
snomask = "+HACK,THROTTLE,OLDSNO,NETWORK,OPERKILL,GLINE";
privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN";
# snomask = "+s";
# privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN";
};
# ============================================================================
@ -693,9 +727,21 @@ EOFCONFIG_HUB_CONNECT
# SECȚIUNE: UWORLD - Servere de servicii
# ============================================================================
# UWorld {
# name = "services.EOFCONFIG_NETWORK";
# };
UWorld {
name = "services.EOFCONFIG_NETWORK";
name = "channels.EOFCONFIG_NETWORK";
name = "defender.EOFCONFIG_NETWORK";
name = "stats.EOFCONFIG_NETWORK";
name = "snoop.EOFCONFIG_NETWORK";
name = "proxyscaner.EOFCONFIG_NETWORK";
name = "proxy.EOFCONFIG_NETWORK";
};
# MOTD Server targetat pentru
#motd {
# host = "*.net";
# file = "net_com.motd";
#};
# ============================================================================
# SECȚIUNE: FEATURE - Caracteristici și setări
@ -707,7 +753,7 @@ features {
"DOMAINNAME" = "EOFCONFIG_NETWORK";
# Logging
"LOG" = "SYSTEM" "FILE" "EOFCONFIG_PREFIX/log/ircd.log";
"LOG" = "SYSTEM" "FILE" "$PREFIX/log/ircd.log";
"LOG" = "SYSTEM" "LEVEL" "CRIT";
# Server settings
@ -722,7 +768,7 @@ features {
"BUFFERPOOL" = "27000000";
"DEFAULTMAXSENDQLENGTH" = "40000";
# Host hiding - configurație replicată de pe ns2.node-ase.ovh (funcțional)
# Host hiding
"HOST_HIDING" = "TRUE";
"HOST_HIDING_STYLE" = "3";
"HIDDEN_HOST" = "users.EOFCONFIG_NETWORK";
@ -746,10 +792,10 @@ features {
"CONNECTFREQUENCY" = "600";
# Welcome messages - toate în lib/ ca directorul principal
"MPATH" = "EOFCONFIG_PREFIX/lib/ircd.motd";
"RPATH" = "EOFCONFIG_PREFIX/lib/remote.motd";
"PPATH" = "EOFCONFIG_PREFIX/var/ircd.pid";
"CPATH" = "EOFCONFIG_PREFIX/lib/ircd.conf";
"MPATH" = "$PREFIX/lib/ircd.motd";
"RPATH" = "$PREFIX/lib/remote.motd";
"PPATH" = "$PREFIX/var/ircd.pid";
"CPATH" = "$PREFIX/lib/ircd.conf";
# Stats visibility
"HIS_STATS_u" = "FALSE";

View File

@ -0,0 +1,34 @@
#!/bin/bash
# Quick Install Script pentru Madrid Server
# Rulează pe serverul Madrid: bash <(curl -s https://gitlab.back.ro/underchat/ircu2/-/raw/main/quick-install-madrid.sh)
echo "╔═══════════════════════════════════════════════╗"
echo "║ UnderChat IRCd - Madrid Quick Install ║"
echo "╚═══════════════════════════════════════════════╝"
echo ""
# Cleanup
echo "[1/4] Cleanup instalări vechi..."
rm -rf ~/ircu2 ~/ircd
# Clone
echo "[2/4] Clonare repository..."
cd ~ && git clone https://gitlab.back.ro/underchat/ircu2.git
cd ~/ircu2
# Install
echo "[3/4] Instalare Madrid server..."
chmod +x install-madrid.sh
./install-madrid.sh
# Done
echo ""
echo "[4/4] ✓ Instalare completă!"
echo ""
echo "Pentru a porni serverul:"
echo " ~/ircd/bin/ircd"
echo ""
echo "Pentru verificare:"
echo " ps aux | grep ircd"
echo ""