From 785f816455d52ee7bf0a2694609b3a12587bdcfc Mon Sep 17 00:00:00 2001 From: mihaiitdata Date: Fri, 13 Feb 2026 16:51:53 +0200 Subject: [PATCH] =?UTF-8?q?Refactorizare=20complet=C4=83=20fix-and-install?= =?UTF-8?q?-madrid.sh=20v1.1.0=20-=20Solu=C8=9Bii=20robuste=20-=20Gestiona?= =?UTF-8?q?re=20inteligent=C4=83=20repository=20(nu=20mai=20=C8=99terge=20?= =?UTF-8?q?instal=C4=83ri=20existente)=20-=20P=C4=83strare=20=C8=99i=20res?= =?UTF-8?q?taurare=20modific=C4=83ri=20locale=20cu=20git=20stash=20-=20Opr?= =?UTF-8?q?ire=20gra=C8=9Bioas=C4=83=20procese=20(SIGTERM=20apoi=20SIGKILL?= =?UTF-8?q?)=20-=20Verificare=20complet=C4=83=20dependen=C8=9Be=20(gcc,=20?= =?UTF-8?q?make,=20git)=20-=20Func=C8=9Bie=20sigur=C4=83=20pentru=20modifi?= =?UTF-8?q?c=C4=83ri=20configura=C8=9Bie=20cu=20backup=20automat=20-=20Sup?= =?UTF-8?q?ort=20complet=20ARM64=20cu=20detectare=20automat=C4=83=20-=20Ti?= =?UTF-8?q?meout=20=C8=99i=20verific=C4=83ri=20pentru=20test=20configura?= =?UTF-8?q?=C8=9Bie=20-=20Logging=20detaliat=20=C3=AEn=20fi=C8=99iere=20se?= =?UTF-8?q?parate=20-=20Dialog=20interactiv=20=C3=AEmbun=C4=83t=C4=83?= =?UTF-8?q?=C8=9Bit=20cu=20verific=C4=83ri=20-=20Toate=20mesajele=20=C8=99?= =?UTF-8?q?i=20comentariile=20=C3=AEn=20limba=20rom=C3=A2n=C4=83=20-=20Bac?= =?UTF-8?q?kup=20automat=20configura=C8=9Bii=20cu=20timestamp=20Script=20r?= =?UTF-8?q?obust,=20profesional=20=C8=99i=20sigur=20-=20f=C4=83r=C4=83=20f?= =?UTF-8?q?ix-uri=20temporare!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fix-and-install-madrid.sh | 512 ++++++++++++++++++++++++++++---------- 1 file changed, 383 insertions(+), 129 deletions(-) diff --git a/fix-and-install-madrid.sh b/fix-and-install-madrid.sh index fc7a019..076972d 100644 --- a/fix-and-install-madrid.sh +++ b/fix-and-install-madrid.sh @@ -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" < "$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 ""