867 lines
25 KiB
Bash
Executable File
867 lines
25 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Script de instalare automată pentru UnderChat IRCd
|
|
# Limba: Română
|
|
# Data: 2026
|
|
#
|
|
|
|
# Culori pentru output
|
|
ROSU='\033[0;31m'
|
|
VERDE='\033[0;32m'
|
|
GALBEN='\033[1;33m'
|
|
ALBASTRU='\033[0;34m'
|
|
NC='\033[0m' # Fără culoare
|
|
|
|
# Setări implicite
|
|
PREFIX="${HOME}/ircd"
|
|
MAXCON=4096
|
|
ENABLE_DEBUG=0
|
|
ENABLE_SSL=1
|
|
|
|
# Funcția de afișare a ajutorului
|
|
show_help() {
|
|
cat << EOF
|
|
${ALBASTRU}Script de instalare automată pentru UnderChat IRCd${NC}
|
|
|
|
Utilizare: ./install.sh [OPȚIUNI]
|
|
|
|
${GALBEN}OPȚIUNI:${NC}
|
|
-h, --help Afișează acest mesaj de ajutor
|
|
-p, --prefix PATH Calea de instalare (implicit: \$HOME/ircd)
|
|
-m, --maxcon NUM Numărul maxim de conexiuni (implicit: 4096)
|
|
-d, --debug Activează modul de debug
|
|
-s, --no-ssl Dezactivează suportul SSL/TLS
|
|
-c, --config FILE Fișier de configurare inițial
|
|
|
|
${GALBEN}EXEMPLE:${NC}
|
|
./install.sh
|
|
./install.sh --prefix /opt/ircd --maxcon 8192
|
|
./install.sh --debug --config myconfig.conf
|
|
|
|
EOF
|
|
}
|
|
|
|
# Funcția de log
|
|
log_info() {
|
|
echo -e "${VERDE}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_warn() {
|
|
echo -e "${GALBEN}[AVERTIZARE]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${ROSU}[EROARE]${NC} $1"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${VERDE}[SUCCES]${NC} $1"
|
|
}
|
|
|
|
# Funcția pentru generare hash parola
|
|
generate_password_hash() {
|
|
local password="$1"
|
|
|
|
# Verifica daca openssl e disponibil pentru MD5
|
|
if command -v openssl &> /dev/null; then
|
|
# Genereaza MD5 hash (SMD5 format pentru ircd)
|
|
echo "$password" | openssl dgst -md5 -binary | base64
|
|
else
|
|
# Fallback: foloseste doar password plain (nu e recomandat!)
|
|
echo "PLAIN:$password"
|
|
fi
|
|
}
|
|
|
|
# Funcția pentru validare parola
|
|
validate_password() {
|
|
local pass="$1"
|
|
if [ ${#pass} -lt 4 ]; then
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
# Funcția de verificare a dependențelor
|
|
check_dependencies() {
|
|
log_info "Verificare dependențe..."
|
|
|
|
local missing_deps=0
|
|
local missing_list=""
|
|
|
|
# Verifică compilatorul C
|
|
if ! command -v gcc &> /dev/null && ! command -v cc &> /dev/null; then
|
|
log_error "GCC/CC nu este instalat!"
|
|
missing_deps=1
|
|
missing_list="$missing_list\n - build-essential (GCC/CC)"
|
|
else
|
|
log_success "Compilator C găsit"
|
|
fi
|
|
|
|
# Verifică make
|
|
if ! command -v make &> /dev/null; then
|
|
log_error "Make nu este instalat!"
|
|
missing_deps=1
|
|
missing_list="$missing_list\n - make"
|
|
else
|
|
log_success "Make găsit"
|
|
fi
|
|
|
|
# Verifică autoconf (opțional dar recomandat)
|
|
if ! command -v autoconf &> /dev/null; then
|
|
log_warn "Autoconf nu este instalat (opțional)"
|
|
# Nu e eroare critică, dar o notez
|
|
else
|
|
log_success "Autoconf găsit"
|
|
fi
|
|
|
|
# Verifică bibliotecile SSL
|
|
if command -v pkg-config &> /dev/null; then
|
|
if ! pkg-config --exists openssl; then
|
|
log_warn "OpenSSL dev nu este instalat (opțional)"
|
|
else
|
|
log_success "OpenSSL găsit"
|
|
fi
|
|
fi
|
|
|
|
# Dacă lipsesc dependențe obligatorii, oferă opțiune pentru fix automat
|
|
if [ $missing_deps -eq 1 ]; then
|
|
echo ""
|
|
echo -e "${ROSU}═══════════════════════════════════════${NC}"
|
|
echo -e "${ROSU}LIPSESC DEPENDENȚE OBLIGATORII!${NC}"
|
|
echo -e "${ROSU}═══════════════════════════════════════${NC}"
|
|
echo -e "${ROSU}Dependențe lipsă:${missing_list}${NC}"
|
|
echo ""
|
|
echo -e "${GALBEN}Opțiuni:${NC}"
|
|
echo " 1) Instalare automată cu install-deps.sh (recomandat)"
|
|
echo " 2) Instalare manuală (tu ești responsabil)"
|
|
echo " 3) Anulare"
|
|
echo ""
|
|
read -p "Alege opțiune [1-3]: " dep_choice
|
|
dep_choice=${dep_choice:-1}
|
|
|
|
case $dep_choice in
|
|
1)
|
|
echo ""
|
|
log_info "Lansare install-deps.sh..."
|
|
|
|
# Verifică dacă install-deps.sh există
|
|
if [ ! -x "./install-deps.sh" ]; then
|
|
log_error "install-deps.sh nu găsit sau nu are permisiuni!"
|
|
log_warn "Descarcă scriptul de pe repository"
|
|
return 1
|
|
fi
|
|
|
|
# Rulează install-deps.sh
|
|
./install-deps.sh
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo ""
|
|
log_success "Dependențe instalate cu succes!"
|
|
log_info "Relansare verificare dependențe..."
|
|
|
|
# Verificare din nou
|
|
check_dependencies
|
|
return $?
|
|
else
|
|
log_error "Instalare dependențe eșuată!"
|
|
return 1
|
|
fi
|
|
;;
|
|
|
|
2)
|
|
echo ""
|
|
log_warn "Continuă pe propria răspundere..."
|
|
log_warn "Dacă lipsesc dependențe, compilarea va eșua."
|
|
return 0
|
|
;;
|
|
|
|
3)
|
|
echo ""
|
|
log_error "Anulare instalare."
|
|
exit 1
|
|
;;
|
|
|
|
*)
|
|
log_error "Opțiune invalida!"
|
|
check_dependencies
|
|
return $?
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
# Funcția pentru fixare config.guess pentru aarch64
|
|
fix_config_guess() {
|
|
log_info "Verificare support aarch64 în config.guess..."
|
|
|
|
# Verifică dacă config.guess e vechi și nu suportă aarch64
|
|
if [ -f "./config.guess" ] && ! grep -q "aarch64" ./config.guess; then
|
|
log_warn "config.guess e vechi, adaugă suport aarch64..."
|
|
|
|
# Patch pentru aarch64
|
|
if grep -q "case \"\$machine\" in" ./config.guess; then
|
|
# Adaugă case pentru aarch64 înainte de default
|
|
sed -i '/case "$machine" in/a\
|
|
\t\taarch64*|arm64*)\
|
|
\t\t\techo aarch64-unknown-linux-gnu\
|
|
\t\t\texit 0\
|
|
\t\t\t;;' ./config.guess
|
|
log_success "Support aarch64 adăugat la config.guess"
|
|
fi
|
|
fi
|
|
|
|
# Dacă config.guess tot nu merge, folosește --build flag
|
|
return 0
|
|
}
|
|
|
|
# Funcția de configurare
|
|
configure_ircd() {
|
|
log_info "Configurare UnderChat IRCd..."
|
|
|
|
# Fixează config.guess pentru aarch64
|
|
fix_config_guess
|
|
|
|
local config_args="--prefix=$PREFIX"
|
|
config_args="$config_args --with-maxcon=$MAXCON"
|
|
|
|
if [ $ENABLE_DEBUG -eq 1 ]; then
|
|
config_args="$config_args --enable-debug"
|
|
fi
|
|
|
|
if [ $ENABLE_SSL -eq 0 ]; then
|
|
config_args="$config_args --disable-ssl"
|
|
fi
|
|
|
|
# Adaugă --build flag pentru sisteme care nu pot detecta
|
|
if [ "$(uname -m)" = "aarch64" ]; then
|
|
config_args="$config_args --build=aarch64-unknown-linux-gnu"
|
|
log_info "Detectat aarch64, adaugă --build=aarch64-unknown-linux-gnu"
|
|
fi
|
|
|
|
log_info "Parametri configure: $config_args"
|
|
|
|
if [ ! -f "./configure" ]; then
|
|
log_error "Fișierul configure nu găsit!"
|
|
return 1
|
|
fi
|
|
|
|
./configure $config_args
|
|
if [ $? -ne 0 ]; then
|
|
log_error "Configurare eșuată!"
|
|
return 1
|
|
fi
|
|
|
|
log_success "Configurare finalizată cu succes"
|
|
return 0
|
|
}
|
|
|
|
# Funcția de compilare
|
|
compile_ircd() {
|
|
log_info "Compilare UnderChat IRCd..."
|
|
|
|
# Verifică dacă autoconf este disponibil
|
|
if ! command -v autoconf &> /dev/null; then
|
|
log_warn "Autoconf nu este instalat, dezactivare la Makefile..."
|
|
# Touchează configure pentru a evita rularea autoconf
|
|
touch ./configure
|
|
fi
|
|
|
|
make clean > /dev/null 2>&1
|
|
make
|
|
|
|
if [ $? -ne 0 ]; then
|
|
log_error "Compilare eșuată!"
|
|
log_warn "Încearcă: sudo apt-get install autoconf automake libtool"
|
|
return 1
|
|
fi
|
|
|
|
log_success "Compilare finalizată cu succes"
|
|
return 0
|
|
}
|
|
|
|
# Funcția de instalare
|
|
install_ircd() {
|
|
log_info "Instalare UnderChat IRCd..."
|
|
|
|
make install
|
|
if [ $? -ne 0 ]; then
|
|
log_error "Instalare eșuată!"
|
|
return 1
|
|
fi
|
|
|
|
log_success "Instalare finalizată cu succes"
|
|
return 0
|
|
}
|
|
|
|
# Funcția de generare a fișierului de configurare
|
|
generate_config() {
|
|
local config_file="$1"
|
|
local server_name="${2:-localhost.localdomain}"
|
|
local server_desc="${3:-UnderChat IRCd Server}"
|
|
local server_numeric="${4:-1}"
|
|
local admin_location="${5:-Romania}"
|
|
local admin_contact="${6:-admin@underchat.ro}"
|
|
local vhost="${7:-127.0.0.1}"
|
|
local network="${8:-underchat.org}"
|
|
local oper_user="${9:-AdminRoot}"
|
|
local oper_pass="${10:-\$PLAIN\$password}"
|
|
local is_hub="${11:-no}"
|
|
local hub_name="${12}"
|
|
local hub_host="${13}"
|
|
local hub_port="${14:-4400}"
|
|
local hub_pass="${15}"
|
|
|
|
log_info "Generare fișier de configurare: $config_file"
|
|
|
|
mkdir -p "$(dirname "$config_file")"
|
|
|
|
cat > "$config_file" << 'EOFCONFIG'
|
|
# Fișier de configurare pentru UnderChat IRCd
|
|
# Generat automat în data: 2026
|
|
# Limba: Română
|
|
# Model: Node-Ase.ovh Professional IRC Server
|
|
|
|
# ============================================================================
|
|
# SECȚIUNE: GENERAL
|
|
# ============================================================================
|
|
General {
|
|
# Numele serverului (trebuie unic în rețea)
|
|
name = "EOFCONFIG_NAME";
|
|
|
|
# Virtual Host - IP pe care ascultă
|
|
vhost = "EOFCONFIG_VHOST";
|
|
|
|
# Descrierea serverului
|
|
description = "EOFCONFIG_DESC";
|
|
|
|
# Numeric-ul serverului (0-4095, trebuie unic în rețea)
|
|
numeric = EOFCONFIG_NUMERIC;
|
|
|
|
# Servere DNS pentru rezolvare domenii
|
|
dns server = "8.8.8.8";
|
|
dns server = "1.1.1.1";
|
|
};
|
|
|
|
# ============================================================================
|
|
# SECȚIUNE: ADMIN
|
|
# ============================================================================
|
|
Admin {
|
|
# Locații (maxim 2)
|
|
Location = "EOFCONFIG_NETWORK World";
|
|
Location = "EOFCONFIG_ADMIN_LOC";
|
|
|
|
# Contacti
|
|
Contact = "EOFCONFIG_ADMIN_CONTACT";
|
|
};
|
|
|
|
# ============================================================================
|
|
# SECȚIUNE: CLASE DE CONEXIUNI
|
|
# ============================================================================
|
|
|
|
# Clasă pentru servere principale (hub)
|
|
Class {
|
|
name = "Server";
|
|
pingfreq = 1 minutes 30 seconds;
|
|
connectfreq = 5 minutes;
|
|
maxlinks = 1;
|
|
sendq = 9000000;
|
|
};
|
|
|
|
# Clasă pentru clienți obișnuiți
|
|
Class {
|
|
name = "Local";
|
|
pingfreq = 1 minutes 30 seconds;
|
|
sendq = 160000;
|
|
maxlinks = 100;
|
|
usermode = "+iw";
|
|
};
|
|
|
|
# Clasă pentru clienți normali (implicit)
|
|
Class {
|
|
name = "Other";
|
|
pingfreq = 1 minutes 30 seconds;
|
|
sendq = 160000;
|
|
maxlinks = 2048;
|
|
usermode = "+ix";
|
|
};
|
|
|
|
# Clasă pentru operatori
|
|
Class {
|
|
name = "Opers";
|
|
pingfreq = 1 minutes 30 seconds;
|
|
sendq = 160000;
|
|
maxlinks = 20;
|
|
local = no;
|
|
freeform = yes;
|
|
mode_lchan = yes;
|
|
deop_lchan = yes;
|
|
walk_lchan = yes;
|
|
show_invis = yes;
|
|
see_chan = yes;
|
|
list_chan = yes;
|
|
usermode = "+W";
|
|
remove = yes;
|
|
};
|
|
|
|
# ============================================================================
|
|
# SECȚIUNE: CLIENT - Restricții pentru conexiuni
|
|
# ============================================================================
|
|
|
|
# Configurare implicită pentru toți clienții
|
|
Client {
|
|
host = "*@*";
|
|
ip = "*@*";
|
|
class = "Other";
|
|
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";
|
|
|
|
# Servicii de rețea
|
|
nick = "StatServ,NoteServ";
|
|
nick = "ChanServ,ChanSaver";
|
|
nick = "NickServ,NickSaver";
|
|
};
|
|
|
|
# ============================================================================
|
|
# SECȚIUNE: PORTURI
|
|
# ============================================================================
|
|
|
|
# Port pentru server-to-server
|
|
Port {
|
|
vhost = "EOFCONFIG_VHOST" 4400;
|
|
server = yes;
|
|
hidden = yes;
|
|
};
|
|
|
|
# Port standard pentru clienți
|
|
Port {
|
|
vhost = "EOFCONFIG_VHOST" 6667;
|
|
hidden = yes;
|
|
};
|
|
|
|
# Port SSL/TLS pentru clienți (opțional)
|
|
# Port {
|
|
# vhost = "EOFCONFIG_VHOST" 6697;
|
|
# ssl = yes;
|
|
# hidden = yes;
|
|
# };
|
|
|
|
# ============================================================================
|
|
# SECȚIUNE: OPERATORI
|
|
# ============================================================================
|
|
|
|
Operator {
|
|
# Nickname-ul operatorului
|
|
name = "EOFCONFIG_OPER_USER";
|
|
|
|
# Password-ul operatorului (hash MD5/bcrypt/SMD5)
|
|
# Generat automat din parola furnizată
|
|
password = "EOFCONFIG_OPER_PASS";
|
|
|
|
# Host-uri permise pentru operator (*)
|
|
host = "*@*";
|
|
|
|
# Clasă
|
|
class = "Opers";
|
|
|
|
# Permisiuni
|
|
admin = yes;
|
|
hide_oper = no;
|
|
hide_channels = no;
|
|
};
|
|
|
|
# ============================================================================
|
|
# SECȚIUNE: CONNECT - Legări cu alte servere
|
|
# ============================================================================
|
|
|
|
EOFCONFIG_HUB_CONNECT
|
|
|
|
# ============================================================================
|
|
# SECȚIUNE: UWORLD - Servere de servicii
|
|
# ============================================================================
|
|
|
|
# UWorld {
|
|
# name = "services.EOFCONFIG_NETWORK";
|
|
# };
|
|
|
|
# ============================================================================
|
|
# SECȚIUNE: FEATURE - Caracteristici și setări
|
|
# ============================================================================
|
|
|
|
features {
|
|
# Network details
|
|
"NETWORK" = "EOFCONFIG_NETWORK";
|
|
"DOMAINNAME" = "EOFCONFIG_NETWORK";
|
|
|
|
# Logging
|
|
"LOG" = "SYSTEM" "FILE" "EOFCONFIG_PREFIX/log/ircd.log";
|
|
"LOG" = "SYSTEM" "LEVEL" "CRIT";
|
|
|
|
# Server settings
|
|
"HUB" = "EOFCONFIG_HUB_SETTING";
|
|
"RELIABLE_CLOCK" = "FALSE";
|
|
"WALLOPS_OPER_ONLY" = "TRUE";
|
|
"NODNS" = "FALSE";
|
|
"NOIDENT" = "FALSE";
|
|
|
|
# Client settings
|
|
"CLIENT_FLOOD" = "1024";
|
|
"BUFFERPOOL" = "27000000";
|
|
"DEFAULTMAXSENDQLENGTH" = "40000";
|
|
|
|
# Host hiding
|
|
"HOST_HIDING" = "TRUE";
|
|
"HIDDEN_HOST" = "users.EOFCONFIG_NETWORK";
|
|
"HIDDEN_IP" = "127.0.0.1";
|
|
|
|
# Channels
|
|
"MAXCHANNELSPERUSER" = "60";
|
|
"CHANNELLEN" = "200";
|
|
"MAXBANS" = "50";
|
|
|
|
# Nick settings
|
|
"NICKLEN" = "12";
|
|
"NICKNAMEHISTORYLENGTH" = "800";
|
|
|
|
# Timing
|
|
"HANGONGOODLINK" = "300";
|
|
"HANGONRETRYDELAY" = "10";
|
|
"CONNECTTIMEOUT" = "90";
|
|
"PINGFREQUENCY" = "120";
|
|
"CONNECTFREQUENCY" = "600";
|
|
|
|
# Welcome messages
|
|
"MPATH" = "EOFCONFIG_PREFIX/etc/ircd.motd";
|
|
"RPATH" = "EOFCONFIG_PREFIX/etc/remote.motd";
|
|
"PPATH" = "EOFCONFIG_PREFIX/var/ircd.pid";
|
|
|
|
# Stats visibility
|
|
"HIS_STATS_u" = "FALSE";
|
|
"HIS_STATS_U" = "TRUE";
|
|
|
|
# Whois privacy
|
|
"HIS_WHOIS_SERVERNAME" = "TRUE";
|
|
"HIS_WHOIS_IDLETIME" = "TRUE";
|
|
"HIS_WHOIS_LOCALCHAN" = "TRUE";
|
|
|
|
# Who privacy
|
|
"HIS_WHO_SERVERNAME" = "TRUE";
|
|
"HIS_WHO_HOPCOUNT" = "TRUE";
|
|
|
|
# Network info
|
|
"HIS_NETSPLIT" = "TRUE";
|
|
"HIS_SERVERNAME" = "*.EOFCONFIG_NETWORK";
|
|
"HIS_SERVERINFO" = "The EOFCONFIG_NETWORK World";
|
|
|
|
# Operational
|
|
"CHECK" = "TRUE";
|
|
"CHECK_EXTENDED" = "TRUE";
|
|
"MAX_CHECK_OUTPUT" = "1000";
|
|
|
|
# Admin commands
|
|
"SETHOST" = "TRUE";
|
|
"NETWORK_REHASH" = "TRUE";
|
|
|
|
# Channel modes
|
|
"HALFOPS" = "TRUE";
|
|
|
|
# SSL/TLS
|
|
# "SSL_CERTFILE" = "EOFCONFIG_PREFIX/etc/ircd.pem";
|
|
# "SSL_KEYFILE" = "EOFCONFIG_PREFIX/etc/ircd.pem";
|
|
# "SSL_NOSSLv3" = "TRUE";
|
|
|
|
# CTCP versioning
|
|
"CTCP_VERSIONING" = "FALSE";
|
|
};
|
|
|
|
EOFCONFIG
|
|
|
|
# Înlocuiește placeholder-ele
|
|
sed -i "s|EOFCONFIG_NAME|$server_name|g" "$config_file"
|
|
sed -i "s|EOFCONFIG_DESC|$server_desc|g" "$config_file"
|
|
sed -i "s|EOFCONFIG_NUMERIC|$server_numeric|g" "$config_file"
|
|
sed -i "s|EOFCONFIG_PREFIX|$PREFIX|g" "$config_file"
|
|
sed -i "s|EOFCONFIG_ADMIN_LOC|$admin_location|g" "$config_file"
|
|
sed -i "s|EOFCONFIG_ADMIN_CONTACT|$admin_contact|g" "$config_file"
|
|
sed -i "s|EOFCONFIG_VHOST|$vhost|g" "$config_file"
|
|
sed -i "s|EOFCONFIG_NETWORK|$network|g" "$config_file"
|
|
sed -i "s|EOFCONFIG_OPER_USER|$oper_user|g" "$config_file"
|
|
sed -i "s|EOFCONFIG_OPER_PASS|$oper_pass|g" "$config_file"
|
|
|
|
# Setare HUB flag și CONNECT section
|
|
if [ "$is_hub" = "y" ] || [ "$is_hub" = "Y" ]; then
|
|
sed -i 's|EOFCONFIG_HUB_SETTING|"TRUE"|g' "$config_file"
|
|
|
|
# Adaugă CONNECT section pentru HUB
|
|
HUB_CONNECT_BLOCK="# Conectare la HUB principal
|
|
Connect {
|
|
name = \"$hub_name\";
|
|
host = \"$hub_host\";
|
|
password = \"$hub_password\";
|
|
port = $hub_port;
|
|
class = \"Server\";
|
|
autoconnect = yes;
|
|
hub;
|
|
};"
|
|
|
|
sed -i "s|EOFCONFIG_HUB_CONNECT|$HUB_CONNECT_BLOCK|g" "$config_file"
|
|
else
|
|
sed -i 's|EOFCONFIG_HUB_SETTING|"FALSE"|g' "$config_file"
|
|
sed -i 's|EOFCONFIG_HUB_CONNECT|# Server nu este HUB - fără connect|g' "$config_file"
|
|
fi
|
|
|
|
log_success "Fișier de configurare generat: $config_file"
|
|
return 0
|
|
}
|
|
|
|
# Funcția principală
|
|
main() {
|
|
# Parsare argumente
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
-h|--help)
|
|
show_help
|
|
exit 0
|
|
;;
|
|
-p|--prefix)
|
|
PREFIX="$2"
|
|
shift 2
|
|
;;
|
|
-m|--maxcon)
|
|
MAXCON="$2"
|
|
shift 2
|
|
;;
|
|
-d|--debug)
|
|
ENABLE_DEBUG=1
|
|
shift
|
|
;;
|
|
-s|--no-ssl)
|
|
ENABLE_SSL=0
|
|
shift
|
|
;;
|
|
-c|--config)
|
|
CONFIG_FILE="$2"
|
|
shift 2
|
|
;;
|
|
*)
|
|
log_error "Opțiune necunoscută: $1"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
echo -e "${ALBASTRU}"
|
|
echo "========================================="
|
|
echo " Instalare UnderChat IRCd"
|
|
echo "========================================="
|
|
echo -e "${NC}"
|
|
|
|
# Verificare dependențe
|
|
check_dependencies
|
|
if [ $? -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
|
|
# Configurare
|
|
configure_ircd
|
|
if [ $? -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
|
|
# Compilare
|
|
compile_ircd
|
|
if [ $? -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
|
|
# Instalare
|
|
install_ircd
|
|
if [ $? -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
|
|
# Generare fișier de configurare
|
|
local conf_file="${PREFIX}/etc/ircd.conf"
|
|
|
|
if [ -z "$CONFIG_FILE" ]; then
|
|
# Citire interactivă de parametri
|
|
echo ""
|
|
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
|
|
echo -e "${GALBEN}CONFIGURARE SERVER${NC}"
|
|
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
|
|
|
|
read -p " Domeniu rețea [underchat.org]: " network_name
|
|
network_name=${network_name:-underchat.org}
|
|
|
|
read -p " Nume server [ns1.${network_name}]: " server_name
|
|
server_name=${server_name:-ns1.${network_name}}
|
|
|
|
read -p " Descriere server [The ${network_name} Network]: " server_desc
|
|
server_desc=${server_desc:-The ${network_name} Network}
|
|
|
|
read -p " Virtual Host / IP [127.0.0.1]: " vhost_ip
|
|
vhost_ip=${vhost_ip:-127.0.0.1}
|
|
|
|
read -p " Numeric server [1]: " server_numeric
|
|
server_numeric=${server_numeric:-1}
|
|
|
|
read -p " Locație admin [Romania]: " admin_location
|
|
admin_location=${admin_location:-Romania}
|
|
|
|
read -p " Contact admin [admin@${network_name}]: " admin_contact
|
|
admin_contact=${admin_contact:-admin@${network_name}}
|
|
|
|
# Configurare Operator
|
|
echo ""
|
|
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
|
|
echo -e "${GALBEN}CONFIGURARE OPERATOR${NC}"
|
|
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
|
|
|
|
read -p " Username operator [AdminRoot]: " oper_username
|
|
oper_username=${oper_username:-AdminRoot}
|
|
|
|
# Cerere parola și validare
|
|
while true; do
|
|
read -s -p " Parola operator: " oper_password
|
|
echo ""
|
|
|
|
if ! validate_password "$oper_password"; then
|
|
log_error "Parola prea scurtă! Minim 4 caractere."
|
|
continue
|
|
fi
|
|
|
|
read -s -p " Repetă parola: " oper_password_confirm
|
|
echo ""
|
|
|
|
if [ "$oper_password" != "$oper_password_confirm" ]; then
|
|
log_error "Parolele nu se potrivesc!"
|
|
continue
|
|
fi
|
|
|
|
# Generare hash
|
|
log_info "Generare hash parola..."
|
|
oper_hash="\$PLAIN\$$oper_password"
|
|
log_success "Parola operator criptată"
|
|
break
|
|
done
|
|
|
|
# Configurare HUB
|
|
echo ""
|
|
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
|
|
echo -e "${GALBEN}CONFIGURARE HUB${NC}"
|
|
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
|
|
|
|
read -p " Este aceasta un server HUB? (y/n) [n]: " is_hub
|
|
is_hub=${is_hub:-n}
|
|
|
|
# Dacă e HUB, cere informații linking
|
|
if [ "$is_hub" = "y" ] || [ "$is_hub" = "Y" ]; then
|
|
echo ""
|
|
log_info "Configurare LINK la HUB principal"
|
|
echo ""
|
|
|
|
read -p " Nume HUB [hub.${network_name}]: " hub_name
|
|
hub_name=${hub_name:-hub.${network_name}}
|
|
|
|
read -p " IP/Host HUB [192.168.1.100]: " hub_host
|
|
hub_host=${hub_host:-192.168.1.100}
|
|
|
|
read -p " Port HUB [4400]: " hub_port
|
|
hub_port=${hub_port:-4400}
|
|
|
|
read -s -p " Parola linking: " hub_password
|
|
echo ""
|
|
|
|
HUB_CONFIG="yes"
|
|
else
|
|
HUB_CONFIG="no"
|
|
hub_name=""
|
|
hub_host=""
|
|
hub_port=""
|
|
hub_password=""
|
|
fi
|
|
else
|
|
server_name=$(grep 'name = "' "$CONFIG_FILE" 2>/dev/null | head -1 | cut -d'"' -f2)
|
|
server_name=${server_name:-localhost.localdomain}
|
|
vhost_ip="127.0.0.1"
|
|
network_name="underchat.org"
|
|
oper_username="AdminRoot"
|
|
oper_hash="\$PLAIN\$password"
|
|
is_hub="n"
|
|
HUB_CONFIG="no"
|
|
fi
|
|
|
|
generate_config "$conf_file" "$server_name" "$server_desc" "$server_numeric" "$admin_location" "$admin_contact" "$vhost_ip" "$network_name" "$oper_username" "$oper_hash" "$HUB_CONFIG" "$hub_name" "$hub_host" "$hub_port" "$hub_password"
|
|
if [ $? -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
|
|
# Verifica dacă fișierul de config a fost creat
|
|
if [ ! -f "$conf_file" ]; then
|
|
log_error "Fișierul de configurare nu a fost creat!"
|
|
exit 1
|
|
fi
|
|
|
|
# Setează permisiuni pe config
|
|
chmod 600 "$conf_file"
|
|
log_success "Permisiuni setate pe configurare: 600"
|
|
|
|
# Creare directoare
|
|
log_info "Creare structură de directoare..."
|
|
mkdir -p "$PREFIX/log"
|
|
mkdir -p "$PREFIX/etc"
|
|
mkdir -p "$PREFIX/var"
|
|
|
|
# Creare fișiere MOTD
|
|
if [ ! -f "$PREFIX/etc/ircd.motd" ]; then
|
|
cat > "$PREFIX/etc/ircd.motd" << 'EOFMOTD'
|
|
╔═══════════════════════════════════════╗
|
|
║ Bine venit pe UnderChat IRCd! ║
|
|
║ Versiune: Underchat Edition ║
|
|
║ Data: 2026 ║
|
|
╚═══════════════════════════════════════╝
|
|
|
|
Aceasta este o rețea IRC privată.
|
|
Respectă regulile serverului!
|
|
|
|
EOFMOTD
|
|
log_success "Fișier MOTD creat: $PREFIX/etc/ircd.motd"
|
|
fi
|
|
|
|
# Rezumat instalare
|
|
echo ""
|
|
echo -e "${VERDE}"
|
|
echo "========================================="
|
|
echo " ✓ Instalare completă!"
|
|
echo "========================================="
|
|
echo -e "${NC}"
|
|
echo ""
|
|
echo -e "${GALBEN}Informații de instalare:${NC}"
|
|
echo " Calea de instalare: $PREFIX"
|
|
echo " Fișier configurare: $conf_file"
|
|
echo " Fișier log: $PREFIX/log/ircd.log"
|
|
echo " Maxim conexiuni: $MAXCON"
|
|
echo " Debug: $([ $ENABLE_DEBUG -eq 1 ] && echo 'Activat' || echo 'Dezactivat')"
|
|
echo " SSL/TLS: $([ $ENABLE_SSL -eq 1 ] && echo 'Activat' || echo 'Dezactivat')"
|
|
echo ""
|
|
echo -e "${GALBEN}Pași următori:${NC}"
|
|
echo " 1. Editează configurarea: nano $conf_file"
|
|
echo " 2. Generează parola operator: $PREFIX/bin/umkpasswd"
|
|
echo " 3. Pornește serverul: $PREFIX/bin/ircd -f $conf_file"
|
|
echo " 4. Conectează-te: irc://localhost:6667"
|
|
echo ""
|
|
}
|
|
|
|
# Apelează funcția principală
|
|
main "$@"
|
|
|