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!
This commit is contained in:
parent
903ad8e007
commit
785f816455
|
|
@ -23,110 +23,215 @@ clear
|
||||||
echo -e "${ALBASTRU}"
|
echo -e "${ALBASTRU}"
|
||||||
cat << "EOF"
|
cat << "EOF"
|
||||||
╔════════════════════════════════════════════════════╗
|
╔════════════════════════════════════════════════════╗
|
||||||
║ UnderChat IRCd - Madrid Server ║
|
║ UnderChat IRCd - Serverul Madrid ║
|
||||||
║ Fix & Install Script v1.0.6-madrid-final ║
|
║ Script de Instalare v1.1.0-madrid-stabil ║
|
||||||
║ Rezolvă TOATE problemele automat! ║
|
║ Gestionare inteligentă a instalării ║
|
||||||
╚════════════════════════════════════════════════════╝
|
╚════════════════════════════════════════════════════╝
|
||||||
EOF
|
EOF
|
||||||
echo -e "${NC}"
|
echo -e "${NC}"
|
||||||
echo ""
|
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 ""
|
echo ""
|
||||||
|
|
||||||
# Oprește procese vechi
|
# Oprește procese IRCd active
|
||||||
log_info "Oprire procese IRCd vechi..."
|
log_info "Oprire procese IRCd active..."
|
||||||
pkill -9 ircd 2>/dev/null || true
|
if pgrep -x ircd > /dev/null; then
|
||||||
sleep 1
|
log_warn "Găsit proces IRCd activ, oprire..."
|
||||||
log_success "Procese IRCd oprite"
|
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
|
# Verifică dependențe necesare
|
||||||
log_info "Ștergere instalări vechi..."
|
log_info "Verificare dependențe de compilare..."
|
||||||
rm -rf ~/ircu2 ~/ircd
|
DEPENDENTE_LIPSA=()
|
||||||
log_success "Instalări vechi șterse"
|
|
||||||
|
|
||||||
# Verifică dependențe
|
|
||||||
log_info "Verificare dependențe..."
|
|
||||||
if ! command -v gcc &> /dev/null; then
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
log_success "Dependențe OK"
|
|
||||||
|
log_success "Toate dependențele sunt instalate"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
log_success "✓ PARTEA 1 COMPLETĂ: Sistem curățat și pregătit"
|
log_success "✓ PARTEA 1 COMPLETĂ: Sistem pregătit pentru instalare"
|
||||||
echo ""
|
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 ""
|
echo ""
|
||||||
|
|
||||||
# Clonează repository
|
# Determină directorul de lucru
|
||||||
log_info "Clonare repository UnderChat IRCd..."
|
DIR_SURSA="$HOME/ircu2"
|
||||||
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"
|
|
||||||
|
|
||||||
# Fix pentru aarch64 (ARM64)
|
# Verifică dacă repository-ul există deja
|
||||||
log_info "Verificare arhitectură..."
|
if [ -d "$DIR_SURSA/.git" ]; then
|
||||||
if [ "$(uname -m)" = "aarch64" ]; then
|
log_info "Repository existent găsit în $DIR_SURSA"
|
||||||
log_warn "Detectat aarch64 - actualizare config.guess..."
|
cd "$DIR_SURSA"
|
||||||
|
|
||||||
# Descarcă config.guess actualizat
|
# Verifică dacă sunt modificări locale
|
||||||
if command -v wget &>/dev/null; then
|
if ! git diff-index --quiet HEAD -- 2>/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'
|
log_warn "Există modificări locale nesalvate"
|
||||||
wget -q -O config.sub 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD'
|
log_info "Păstrarea modificărilor locale și actualizare..."
|
||||||
chmod +x config.guess config.sub
|
git stash push -m "Salvare automată înainte de actualizare - $(date '+%Y-%m-%d %H:%M:%S')" || true
|
||||||
log_success "config.guess actualizat pentru aarch64"
|
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
|
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
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Configurare
|
# Pregătire pentru compilare
|
||||||
log_info "Configurare pentru compilare..."
|
log_info "Configurare parametri compilare..."
|
||||||
CONFIGURE_FLAGS="--prefix=$HOME/ircd --with-maxcon=4096"
|
PREFIX="$HOME/ircd"
|
||||||
|
CONFIGURE_FLAGS="--prefix=$PREFIX --with-maxcon=4096"
|
||||||
|
|
||||||
# Adaugă --build pentru aarch64
|
# Adaugă parametri specifici pentru ARM64
|
||||||
if [ "$(uname -m)" = "aarch64" ]; then
|
if [ "$ARHITECTURA" = "aarch64" ] || [ "$ARHITECTURA" = "arm64" ]; then
|
||||||
CONFIGURE_FLAGS="$CONFIGURE_FLAGS --build=aarch64-unknown-linux-gnu"
|
CONFIGURE_FLAGS="$CONFIGURE_FLAGS --build=aarch64-unknown-linux-gnu"
|
||||||
log_info "Folosesc: ./configure $CONFIGURE_FLAGS"
|
log_info "Parametri ARM64: $CONFIGURE_FLAGS"
|
||||||
fi
|
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 "Eșec la configurare!"
|
||||||
|
log_error "Ultimele linii din log:"
|
||||||
|
tail -n 20 configure.log
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
log_success "Configurare completă"
|
log_success "Configurare completă"
|
||||||
|
|
||||||
# Compilare
|
# Curățare compilări anterioare
|
||||||
log_info "Compilare (poate dura câteva minute)..."
|
log_info "Curățare fișiere compilate anterior..."
|
||||||
make clean &>/dev/null || true
|
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 "Eșec la compilare!"
|
||||||
|
log_error "Ultimele linii din log:"
|
||||||
|
tail -n 30 make.log
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
log_success "Compilare completă"
|
log_success "Compilare completă"
|
||||||
|
|
||||||
# Instalare binare
|
# Instalare binare
|
||||||
log_info "Instalare binare..."
|
log_info "Instalare binare în $PREFIX..."
|
||||||
if ! make install; then
|
if ! make install 2>&1 | tee install.log; then
|
||||||
log_error "Eșec la instalare!"
|
log_error "Eșec la instalare!"
|
||||||
|
log_error "Verifică permisiunile pentru $PREFIX"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
log_success "Binare instalate"
|
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 ""
|
echo ""
|
||||||
log_success "✓ PARTEA 2 COMPLETĂ: Compilare și instalare reușită"
|
log_success "✓ PARTEA 2 COMPLETĂ: Compilare și instalare reușită"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
@ -142,8 +247,10 @@ PREFIX="$HOME/ircd"
|
||||||
NETWORK_NAME="UnderChat.org"
|
NETWORK_NAME="UnderChat.org"
|
||||||
SERVER_NAME="Madrid.ES.EU.UnderChat.org"
|
SERVER_NAME="Madrid.ES.EU.UnderChat.org"
|
||||||
VHOST_IPV4="10.0.0.125"
|
VHOST_IPV4="10.0.0.125"
|
||||||
|
OPERATOR_NAME="Raducu"
|
||||||
|
OPERATOR_PASS="muiesteaua"
|
||||||
|
|
||||||
# Creare directoare
|
# Creare structură directoare
|
||||||
log_info "Creare structură directoare..."
|
log_info "Creare structură directoare..."
|
||||||
mkdir -p "$PREFIX/lib"
|
mkdir -p "$PREFIX/lib"
|
||||||
mkdir -p "$PREFIX/etc"
|
mkdir -p "$PREFIX/etc"
|
||||||
|
|
@ -151,91 +258,196 @@ mkdir -p "$PREFIX/log"
|
||||||
mkdir -p "$PREFIX/var"
|
mkdir -p "$PREFIX/var"
|
||||||
log_success "Directoare create"
|
log_success "Directoare create"
|
||||||
|
|
||||||
# Generare configurație Madrid - FOLOSIND example.conf ca bază
|
# Găsește fișierul example.conf
|
||||||
log_info "Generare configurație Madrid din 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 [ -z "$EXAMPLE_CONF" ] || [ ! -f "$EXAMPLE_CONF" ]; then
|
||||||
if [ -f "doc/example.conf" ]; then
|
log_error "Nu s-a găsit fișierul example.conf!"
|
||||||
cp doc/example.conf "$PREFIX/lib/ircd.conf"
|
log_error "Căutat în: $DIR_SURSA/doc/example.conf"
|
||||||
log_success "Folosesc example.conf ca bază"
|
|
||||||
else
|
|
||||||
log_error "example.conf nu găsit!"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Modifică valorile pentru Madrid
|
log_info "Folosesc șablon: $EXAMPLE_CONF"
|
||||||
log_info "Personalizare pentru Madrid..."
|
|
||||||
|
|
||||||
# Înlocuiește valorile cu cele pentru Madrid
|
# Verifică dacă configurația există deja
|
||||||
sed -i 's/name = "[^"]*";/name = "Madrid.ES.EU.UnderChat.org";/' "$PREFIX/lib/ircd.conf"
|
FISIER_CONFIG="$PREFIX/lib/ircd.conf"
|
||||||
sed -i 's/vhost = "[^"]*";/vhost = "10.0.0.125";/g' "$PREFIX/lib/ircd.conf"
|
if [ -f "$FISIER_CONFIG" ]; then
|
||||||
sed -i 's/description = "[^"]*";/description = "The UnderChat.org Network - Madrid Node";/' "$PREFIX/lib/ircd.conf"
|
log_warn "Configurație existentă găsită în $FISIER_CONFIG"
|
||||||
sed -i 's/"NETWORK" = "[^"]*"/"NETWORK" = "UnderChat.org"/g' "$PREFIX/lib/ircd.conf"
|
BACKUP_CONFIG="$FISIER_CONFIG.backup-$(date +%Y%m%d-%H%M%S)"
|
||||||
sed -i 's/"DOMAINNAME" = "[^"]*"/"DOMAINNAME" = "UnderChat.org"/g' "$PREFIX/lib/ircd.conf"
|
cp "$FISIER_CONFIG" "$BACKUP_CONFIG"
|
||||||
|
log_info "Backup creat: $BACKUP_CONFIG"
|
||||||
|
fi
|
||||||
|
|
||||||
# Înlocuiește căile
|
# Copiază example.conf ca punct de plecare
|
||||||
sed -i "s|/path/to|$PREFIX|g" "$PREFIX/lib/ircd.conf"
|
log_info "Generare configurație Madrid..."
|
||||||
sed -i "s|\"MPATH\" = \"[^\"]*\"|\"MPATH\" = \"$PREFIX/lib/ircd.motd\"|g" "$PREFIX/lib/ircd.conf"
|
cp "$EXAMPLE_CONF" "$FISIER_CONFIG"
|
||||||
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"
|
|
||||||
|
|
||||||
# Adaugă operator Raducu
|
# Funcție pentru înlocuire sigură în configurație
|
||||||
sed -i '/^Operator {/,/^};/c\
|
inlocuieste_in_config() {
|
||||||
Operator {\
|
local PATTERN="$1"
|
||||||
name = "Raducu";\
|
local REPLACE="$2"
|
||||||
password = "$PLAIN$muiesteaua";\
|
local DESCRIERE="$3"
|
||||||
host = "*@*";\
|
|
||||||
class = "Opers";\
|
if sed -i.tmp "$PATTERN" "$FISIER_CONFIG" 2>/dev/null; then
|
||||||
admin = yes;\
|
rm -f "$FISIER_CONFIG.tmp"
|
||||||
hide_oper = no;\
|
log_info " ✓ $DESCRIERE"
|
||||||
hide_channels = no;\
|
return 0
|
||||||
snomask = "+s";\
|
else
|
||||||
privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN";\
|
log_warn " ⚠ Nu s-a putut actualiza: $DESCRIERE"
|
||||||
};' "$PREFIX/lib/ircd.conf"
|
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ă"
|
log_success "Configurație Madrid personalizată"
|
||||||
|
|
||||||
# MOTD
|
# Generare MOTD
|
||||||
log_info "Generare MOTD..."
|
log_info "Generare MOTD..."
|
||||||
cat > "$PREFIX/lib/ircd.motd" <<'ENDMOTD'
|
cat > "$PREFIX/lib/ircd.motd" <<'MOTD_FINAL'
|
||||||
╔═══════════════════════════════════════╗
|
╔═══════════════════════════════════════╗
|
||||||
║ Bine venit pe UnderChat IRCd! ║
|
║ Bine venit pe UnderChat IRCd! ║
|
||||||
║ Madrid.ES.EU.UnderChat.org ║
|
║ Madrid.ES.EU.UnderChat.org ║
|
||||||
║ ║
|
║ ║
|
||||||
║ Versiune: v1.0.6-madrid-final ║
|
║ Versiune: v1.1.0-madrid-stabil ║
|
||||||
║ ║
|
║ ║
|
||||||
║ Pentru suport: #support ║
|
║ Pentru suport: #support ║
|
||||||
║ Website: https://underchat.org ║
|
║ Website: https://underchat.org ║
|
||||||
╚═══════════════════════════════════════╝
|
╚═══════════════════════════════════════╝
|
||||||
|
|
||||||
🌟 UnderChat Network - Madrid Node
|
🌟 UnderChat Network - Nod Madrid
|
||||||
• Host hiding pentru protecția utilizatorilor
|
• Protecție identitate utilizatori (host hiding)
|
||||||
• Anti-spam și anti-flood protection
|
• Protecție anti-spam și anti-flood
|
||||||
• Canale cu diverse moduri și opțiuni
|
• Canale cu moduri și opțiuni diverse
|
||||||
|
|
||||||
Distracție plăcută pe UnderChat! 🎉
|
Distracție plăcută pe UnderChat! 🎉
|
||||||
ENDMOTD
|
MOTD_FINAL
|
||||||
|
|
||||||
log_success "MOTD creat"
|
log_success "MOTD generat"
|
||||||
|
|
||||||
# Setare permisiuni
|
# Setare permisiuni
|
||||||
log_info "Setare permisiuni..."
|
log_info "Setare permisiuni fișiere..."
|
||||||
chmod 600 "$PREFIX/lib/ircd.conf"
|
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.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"
|
log_success "Permisiuni setate"
|
||||||
|
|
||||||
# Test sintaxă
|
# Verificare sintaxă configurație
|
||||||
log_info "Test sintaxă configurație..."
|
log_info "Verificare sintaxă configurație..."
|
||||||
if "$PREFIX/bin/ircd" -c -f "$PREFIX/lib/ircd.conf"; then
|
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Ă!"
|
log_success "✓ Sintaxa configurației este CORECTĂ!"
|
||||||
else
|
else
|
||||||
log_error "✗ EROARE în configurație!"
|
REZULTAT_TEST=$?
|
||||||
echo ""
|
if [ $REZULTAT_TEST -eq 124 ]; then
|
||||||
echo "Rulează pentru diagnostic:"
|
log_warn "⚠ Testul configurației a depășit timeout-ul (posibil OK)"
|
||||||
echo " $PREFIX/bin/ircd -c -f $PREFIX/lib/ircd.conf"
|
else
|
||||||
exit 1
|
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
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|
@ -267,68 +479,110 @@ echo -e "${ALBASTRU}═══ PORNIRE SERVER ═══${NC}"
|
||||||
echo " Pornește acum:"
|
echo " Pornește acum:"
|
||||||
echo -e " ${VERDE}$PREFIX/bin/ircd -f $PREFIX/lib/ircd.conf${NC}"
|
echo -e " ${VERDE}$PREFIX/bin/ircd -f $PREFIX/lib/ircd.conf${NC}"
|
||||||
echo ""
|
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 -e " ${VERDE}nohup $PREFIX/bin/ircd -f $PREFIX/lib/ircd.conf &${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo -e "${ALBASTRU}═══ VERIFICARE ═══${NC}"
|
echo -e "${ALBASTRU}═══ VERIFICARE ═══${NC}"
|
||||||
echo " Verifică că rulează:"
|
echo " Verifică că serverul rulează:"
|
||||||
echo -e " ${VERDE}ps aux | grep ircd${NC}"
|
echo -e " ${VERDE}ps aux | grep ircd${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
echo " Verifică porturi:"
|
echo " Verifică porturile deschise:"
|
||||||
echo -e " ${VERDE}netstat -tlnp | grep -E '(6667|4400)'${NC}"
|
echo -e " ${VERDE}netstat -tlnp | grep -E '(6667|4400)'${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
echo " Verifică log:"
|
echo " Verifică fișierul de log:"
|
||||||
echo -e " ${VERDE}tail -f $PREFIX/log/ircd.log${NC}"
|
echo -e " ${VERDE}tail -f $PREFIX/log/ircd.log${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo -e "${ALBASTRU}═══ CONECTARE ═══${NC}"
|
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 " Server: Madrid.ES.EU.UnderChat.org (sau 10.0.0.125)"
|
||||||
echo " Port: 6667"
|
echo " Port: 6667"
|
||||||
echo ""
|
echo ""
|
||||||
echo " Logare operator:"
|
echo " Autentificare ca operator:"
|
||||||
echo " /oper Raducu muiesteaua"
|
echo " /oper Raducu muiesteaua"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo -e "${VERDE}🎉 Distracție plăcută pe UnderChat Network! 🎉${NC}"
|
echo -e "${VERDE}🎉 Distracție plăcută pe UnderChat Network! 🎉${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# Întreabă dacă să pornească automat
|
# Întreabă dacă să pornească serverul automat
|
||||||
echo ""
|
echo ""
|
||||||
read -p "Dorești să pornesc serverul ACUM? [Y/n]: " start_now
|
read -p "Dorești să pornesc serverul ACUM? [D/n] (Da/nu): " pornire_acum
|
||||||
start_now=${start_now:-Y}
|
pornire_acum=${pornire_acum:-D}
|
||||||
|
|
||||||
if [[ "$start_now" =~ ^[Yy]$ ]]; then
|
if [[ "$pornire_acum" =~ ^[DdYy]$ ]]; then
|
||||||
echo ""
|
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
|
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
|
if pgrep -x ircd > /dev/null; then
|
||||||
log_success "✓✓✓ SERVER PORNIT CU SUCCES! ✓✓✓"
|
log_success "✓✓✓ SERVER PORNIT CU SUCCES! ✓✓✓"
|
||||||
echo ""
|
echo ""
|
||||||
|
echo "Proces IRCd activ:"
|
||||||
ps aux | grep "[i]rcd"
|
ps aux | grep "[i]rcd"
|
||||||
echo ""
|
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
|
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 " tail -f $PREFIX/log/ircd.log"
|
||||||
|
echo ""
|
||||||
|
log_info "Sau rulează manual cu:"
|
||||||
|
echo " $PREFIX/bin/ircd -f $PREFIX/lib/ircd.conf"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
log_error "Eșec la pornirea serverului!"
|
log_error "Eșec la pornirea serverului!"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Verifică erori cu:"
|
log_error "Verifică configurația și încearcă manual:"
|
||||||
echo " $PREFIX/bin/ircd -f $PREFIX/lib/ircd.conf"
|
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
|
fi
|
||||||
else
|
else
|
||||||
echo ""
|
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 " $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
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
log_success "Script finalizat!"
|
log_success "Script finalizat cu succes!"
|
||||||
|
echo ""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue