diff --git a/proftpd_settings.cfg b/proftpd_settings.cfg
index b794d34..fa3378c 100644
--- a/proftpd_settings.cfg
+++ b/proftpd_settings.cfg
@@ -1,21 +1,23 @@
- HideFiles (^\..+|\.ssh|\.bash_history|\.bash_logout|\.bashrc|\.profile|srcds_run|srcds_linux|hlds_run|hlds_amd|hlds_i686|\.rc|\.sh|\.7z|\.dll)$
- PathDenyFilter (^\..+|\.ssh|\.bash_history|\.bash_logout|\.bashrc|\.profile|srcds_run|srcds_linux|hlds_run|hlds_amd|hlds_i686|\.rc|\.sh|\.7z|\.dll)$
+ HideFiles (^\..+|\.ssh|\.bash_history|\.bash_logout|\.bashrc|\.profile|srcds_run|srcds_linux|hlds_run|hlds_amd|hlds_i686|\.rc|\.7z|\.dll|\.git|\.svn|\.htaccess|\.htpasswd|\.bak)$
+ PathDenyFilter (^\..+|\.ssh|\.bash_history|\.bash_logout|\.bashrc|\.profile|srcds_run|srcds_linux|hlds_run|hlds_amd|hlds_i686|\.rc|\.7z|\.dll|\.git|\.svn|\.htaccess|\.htpasswd|\.bak)$
HideNoAccess on
- Umask 077 077
+ Umask 027 027
DenyAll
+
- Umask 077 077
-
+ Umask 022 022
+
DenyAll
+
- Umask 077 077
-
+ Umask 022 022
+
DenyAll
-
+
\ No newline at end of file
diff --git a/webinstall.sh b/webinstall.sh
index 31ad31c..c2d2bb0 100755
--- a/webinstall.sh
+++ b/webinstall.sh
@@ -84,34 +84,68 @@ function color {
function gen_passwd {
PWCHARS=$1
[ "$PWCHARS" = "" ] && PWCHARS=16
- tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${PWCHARS} | xargs
+ local password=$(tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${PWCHARS} | xargs)
+ echo "$password"
}
##############################
-# Generate Logs #
+# Advanced Logging Function #
##############################
function gen_logs {
- log_text=$1
- if [ "$log_text" = "" ]; then
- echo "##############################" >> /home/tekbase.log
- echo "# TekBASE installation #" >> /home/tekbase.log
- echo "##############################" >> /home/tekbase.log
- echo "[$(date +"%Y_%m-%H_%M_%S")] - start" >> /home/tekbase.log
+ local input="$1"
+ local log_type="${2:-msg}" # default to "msg"
+ local log_root="/home/tekbase/logs"
+ local timestamp="[$(date +"%Y-%m-%d %H:%M:%S")]"
+ local call_origin="$(caller 1)"
+
+ # Ensure log directory exists
+ mkdir -p "$log_root"
+
+ local log_success_file="$log_root/installed.log"
+ local log_error_file="$log_root/errors.log"
+
+ # Smarter failure keywords for actual errors
+ local failure_keywords="fail|could not|error|denied|unable|unreachable|timed out|invalid|broken|exception"
+
+ if [ "$log_type" = "cmd" ]; then
+ local output
+ output=$(eval "$input" 2>&1)
+ local exit_code=$?
+
+ if [ $exit_code -eq 0 ] && ! echo "$output" | grep -iE "$failure_keywords" >/dev/null; then
+ # Log successful command
+ {
+ echo "$timestamp - ✅ Command succeeded: $input"
+ echo "$timestamp - Output:"
+ echo "$output"
+ echo ""
+ } | tee -a "$log_success_file"
+ else
+ # Log failed command
+ {
+ echo "$timestamp - ❌ Command failed: $input"
+ echo " ↳ Exit Code: $exit_code"
+ echo " ↳ Called from: $call_origin"
+ echo " ↳ Output:"
+ echo "$output"
+ echo ""
+ } | tee -a "$log_error_file"
+ fi
+ elif [ "$log_type" = "msg" ]; then
+ # Log generic message
+ if echo "$input" | grep -iE "$failure_keywords" >/dev/null; then
+ # Log as error if message contains failure keywords
+ echo "$timestamp - ⚠️ $input (from: $call_origin)" | tee -a "$log_error_file"
+ else
+ # Log as regular success message
+ echo "$timestamp - $input" | tee -a "$log_success_file"
+ fi
else
- if [ "$2" != "" ]; then
- pkg_check=$(dpkg-query -W --showformat='${Status}\n' $2|grep "install ok installed")
- if [ "$check" == "install ok installed" ]; then
- log_text="The Package ${2} is installed."
- else
- log_text="The Package ${2} could not be installed."
- fi
- fi
- echo "[$(date +"%Y_%m-%H_%M_%S")] - ${log_text}" >> /home/tekbase.log
+ # Unknown log type - treat as warning
+ echo "$timestamp - ⚠️ Unknown log type '$log_type'. Message: $input (from: $call_origin)" | tee -a "$log_error_file"
fi
}
-
-
##############################
# Loading Spinner #
##############################
@@ -131,8 +165,11 @@ function loading {
# Create Directory #
##############################
function make_dir {
- if [ "$1" != "" -a ! -d $1 ]; then
- mkdir -p $1
+ if [ -n "$1" ] && [ ! -d "$1" ]; then
+ mkdir -p "$1"
+ gen_logs "Created directory: $1" msg
+ else
+ gen_logs "Directory already exists or path was empty: $1" msg
fi
}
@@ -149,12 +186,18 @@ function chk_apache {
checkd=$(find /usr/include -name apache)
if [ "$checka" != "" -o "$checkb" != "" -o "$checkc" != "" -o "$checkd" != "" ]; then
apache_inst=1
+ gen_logs "Apache (or variant) detected on Debian-based system." msg
+ else
+ gen_logs "Apache not found on Debian-based system." msg
fi
else
checka=$(which httpd | grep -i "/httpd" 2>&-)
if [ "$checka" != "" ]; then
apache_inst=1
- fi
+ gen_logs "Apache (httpd) detected on Red Hat-based system." msg
+ else
+ gen_logs "Apache (httpd) not found on Red Hat-based system." msg
+ fi
fi
}
@@ -166,9 +209,12 @@ function chk_netstat {
check=$(which netstat 2>&-)
if [ -n "$check" ]; then
netstat_inst=1
+ gen_logs "Netstat found at $check" msg
+ else
+ gen_logs "Netstat not found on system." msg
fi
}
-
+
##############################
# Check OS #
##############################
@@ -176,50 +222,48 @@ function chk_os {
os_install=""
os_name=""
os_version=""
- check=$(cat /etc/*-release | grep -i 'CentOS')
- if [ -n "$check" ]; then
- os_install=3
- os_name="CentOS"
- os_version=$(cat /etc/*-release | grep -i 'VERSION_ID' | awk -F "\"" '{print $2}')
- fi
-
- check=$(cat /etc/*-release | grep -i 'Debian')
- if [ -n "$check" -a "$os_install" = "" ]; then
- os_install=2
- os_name="Debian"
- os_version=$(cat /etc/*-release | grep -i 'VERSION_ID' | awk -F "\"" '{print $2}')
- fi
-
- check=$(cat /etc/*-release | grep -i 'Fedora')
- if [ -n "$check" -a "$os_install" = "" ]; then
- os_install=3
- os_name="Fedora"
- os_version=$(cat /etc/*-release | grep -i 'VERSION_ID' | awk -F "=" '{print $2}')
- fi
-
- check=$(cat /etc/*-release | grep -i 'Red Hat')
- if [ -n "$check" -a "$os_install" = "" ]; then
- os_install=3
- os_name="Red Hat"
- os_version=$(cat /etc/*-release | grep -i 'VERSION_ID' | awk -F "\"" '{print $2}')
- fi
-
- check=$(cat /etc/*-release | grep -i 'SUSE')
- if [ -n "$check" -a "$os_install" = "" ]; then
- os_install=1
- os_name="SuSE"
- os_version=$(cat /etc/*-release | grep -i 'VERSION_ID' | awk -F "\"" '{print $2}' | awk -F "." '{print $1}')
- fi
-
- check=$(cat /etc/*-release | grep -i 'Ubuntu')
- if [ -n "$check" -a "$os_install" = "" ] || [ -n "$check" -a "$os_name" = "Debian" ]; then
- os_install=2
- os_name="Ubuntu"
- os_version=$(cat /etc/*-release | grep -i 'VERSION_ID' | awk -F "\"" '{print $2}' | awk -F "." '{print $1}')
+
+ if [ -f /etc/os-release ]; then
+ . /etc/os-release
+ os_name="$ID" # e.g., ubuntu, debian, centos
+ os_version="${VERSION_ID%%.*}" # major version only
+
+ case "$os_name" in
+ ubuntu)
+ os_install=2
+ os_name="Ubuntu"
+ ;;
+ debian)
+ os_install=2
+ os_name="Debian"
+ ;;
+ centos)
+ os_install=3
+ os_name="CentOS"
+ ;;
+ rhel|redhat)
+ os_install=3
+ os_name="Red Hat"
+ ;;
+ fedora)
+ os_install=3
+ os_name="Fedora"
+ ;;
+ suse|sles|opensuse*)
+ os_install=1
+ os_name="SuSE"
+ ;;
+ *)
+ os_install=""
+ os_name="Unknown"
+ ;;
+ esac
+ gen_logs "OS detected: $os_name $os_version (install type: $os_install)" msg
+ else
+ gen_logs "Unable to detect OS – /etc/os-release not found." msg
fi
}
-
##############################
# Check MySQL #
##############################
@@ -232,7 +276,10 @@ function chk_mysql {
fi
if [ "$checka" != "" ]; then
mysql_inst=1
- fi
+ gen_logs "MySQL detected on system." msg
+ else
+ gen_logs "MySQL not found on system." msg
+ fi
}
@@ -249,7 +296,10 @@ function chk_php {
fi
if [ "$checka" != "" -a "$checkb" != "" ]; then
php_inst=1
- fi
+ gen_logs "PHP and GD module found on system." msg
+ else
+ gen_logs "PHP or GD module not found." msg
+ fi
}
@@ -273,6 +323,7 @@ function chk_panel {
elif [ -d /usr/local/directadmin ]; then
web_panel="DirectAdmin"
fi
+ gen_logs "Detected web panel: $web_panel" msg
}
@@ -288,7 +339,7 @@ function select_yesno {
echo "(2) Nein - Beenden"
else
echo "(1) Yes - Continue"
- echo "(2) No - Exit"
+ echo "(2) No - Exit"
fi
echo ""
@@ -312,14 +363,17 @@ function select_yesno {
case "$i" in
'1')
clear
+ gen_logs "User selected YES to continue." msg
;;
'2')
clear
+ gen_logs "User selected NO to exit installer." msg
exit 0
;;
*)
yesno=99
clear
+ gen_logs "Invalid input in select_yesno: $i" msg
select_yesno "$1"
;;
esac
@@ -328,7 +382,7 @@ function select_yesno {
##############################
-# Select Lanuage #
+# Select Language #
##############################
function select_lang {
clear
@@ -353,17 +407,21 @@ function select_lang {
case "$i" in
'1')
clear
+ gen_logs "Language selected: German" msg
;;
'2')
clear
+ gen_logs "Language selected: English" msg
;;
'3')
clear
+ gen_logs "User selected to exit during language selection." msg
exit 0
;;
*)
langsel=99
clear
+ gen_logs "Invalid input in select_lang: $i" msg
select_lang
;;
esac
@@ -379,8 +437,7 @@ function select_mode {
if [ "$langsel" = "1" ]; then
echo "Installation Auswahl"
echo ""
- echo "Waehlen Sie 1 oder 2. Dies ist perfekt fuer Anfaenger geeignet,"
- echo "welche nur einen Rootserver nutzen."
+ echo "Waehlen Sie bevorzugte Option"
echo ""
echo "(1) Webserver + TekBASE + Teamspeak 3 + Rootserver Einrichtung"
echo "(2) Webserver + TekBASE + Rootserver Einrichtung"
@@ -396,8 +453,7 @@ function select_mode {
else
echo "Installation selection"
echo ""
- echo "Choose 1 or 2. This is perfect for beginners who use only one"
- echo "dedicated server."
+ echo "Choose preferred option."
echo ""
echo "(1) Webserver + TekBASE + Teamspeak 3 + Dedicated installation"
echo "(2) Webserver + TekBASE + Dedicated installation"
@@ -433,38 +489,49 @@ function select_mode {
case "$i" in
'1')
clear
+ gen_logs "Mode selected: 1 (Full setup: Webserver + TekBASE + TS3 + Rootserver)" msg
;;
'2')
clear
+ gen_logs "Mode selected: 2 (Webserver + TekBASE + Rootserver)" msg
;;
'3')
clear
+ gen_logs "Mode selected: 3 (Webserver + TekBASE)" msg
;;
'4')
clear
+ gen_logs "Mode selected: 4 (Webserver + TS3 + Rootserver)" msg
;;
'5')
clear
+ gen_logs "Mode selected: 5 (Webserver + Rootserver)" msg
;;
'6')
clear
+ gen_logs "Mode selected: 6 (Minimal Webserver setup)" msg
;;
'7')
clear
+ gen_logs "Mode selected: 7 (Semi-automatic Webserver install)" msg
;;
'8')
clear
+ gen_logs "Mode selected: 8 (TS3 + Rootserver)" msg
;;
'9')
clear
+ gen_logs "Mode selected: 9 (Rootserver only)" msg
;;
'0')
clear
+ gen_logs "User exited during mode selection." msg
exit 0
;;
*)
modsel=99
clear
+ gen_logs "Invalid input in select_mode: $i" msg
select_mode
;;
esac
@@ -477,109 +544,55 @@ function select_mode {
##############################
function select_url {
clear
- if [ "$langsel" = "1" ]; then
- echo "Domains Auswahl"
- echo ""
- else
- echo "Domain selection"
- echo ""
+ [[ "$langsel" = "1" ]] && echo "Domains Auswahl" || echo "Domain selection"
+ echo ""
+
+ # Ensure the directory exists
+ cd "$1" || { echo "Directory $1 not found!"; gen_logs "Directory $1 not found in select_url." msg; exit 1; }
+
+ # Use an updated regex to match valid domain names and IPs
+ mapfile -t url_list < <(find . -maxdepth 1 -type d -printf '%f\n' | grep -E '^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$|^([0-9]{1,3}\.){3}[0-9]{1,3}$')
+ url_list=("${url_list[@]:0:9}")
+
+ # Check if no valid domains or IPs are found
+ if [ "${#url_list[@]}" -eq 0 ]; then
+ echo "No valid domains/IPs found."
+ gen_logs "No valid domains or IP directories found in select_url." msg
+ exit 1
fi
- cd $1
- urlcounter=1
- for siteurl in $(find * -maxdepth 0 -type d)
- do
- if [ "$(grep -E '^(([a-zA-Z](-?[a-zA-Z0-9])*)\.)*[a-zA-Z](-?[a-zA-Z0-9])+\.[a-zA-Z]{2,}$' <<< $siteurl)" != "" ]; then
- echo "($urlcounter) $siteurl"
- let urlcounter=$urlcounter+1
- fi
- if [ "$urlcounter" -gt 9 ]; then
- break
- fi
+ # Display the list of valid domains/IPs
+ for i in "${!url_list[@]}"; do
+ echo "($((i+1))) ${url_list[$i]}"
done
-
- echo ""
+
+ echo ""
echo "(0) Exit"
echo ""
- if [ "$langsel" = "1" ]; then
- if [ "$urlsel" = "" ]; then
- echo -n "Bitte geben Sie ihre Auswahl an: "
- else
- color r n "Bitte geben Sie entweder 1, ... oder 0 ein: "
- fi
- else
- if [ "$urlsel" = "" ]; then
- echo -n "Please enter your selection: "
- else
- color r n "Please enter either 1, ... or 0: "
- fi
- fi
-
+ # Prompt the user for selection
+ [[ "$langsel" = "1" ]] && prompt="Bitte geben Sie Ihre Auswahl an: " || prompt="Please enter your selection: "
+ echo -n "$prompt"
read -n 1 urlsel
+ echo ""
- for i in $urlsel; do
- case "$i" in
- '1')
- clear
- ;;
- '2')
- clear
- ;;
- '3')
- clear
- ;;
- '4')
- clear
- ;;
- '5')
- clear
- ;;
- '6')
- clear
- ;;
- '7')
- clear
- ;;
- '8')
- clear
- ;;
- '9')
- clear
- ;;
- '0')
- clear
- exit 0
- ;;
- *)
- urlsel=99
- clear
- select_url
- ;;
- esac
- done
-
- let urlcounter=$urlcounter-1
-
- if [ "$urlsel" -gt "$urlcounter" ]; then
- select_url
+ # Validate the selection and set the site_url
+ if [[ "$urlsel" =~ ^[1-9]$ ]] && (( urlsel <= ${#url_list[@]} )); then
+ site_url="${url_list[$((urlsel-1))]}"
+ gen_logs "User selected site directory: $site_url" msg
+ clear
+ elif [[ "$urlsel" == "0" ]]; then
+ clear
+ gen_logs "User exited during domain/IP selection." msg
+ exit 0
+ else
+ clear
+ gen_logs "Invalid input during select_url: $urlsel" msg
+ echo "Invalid selection."
+ select_url "$1"
fi
-
- urlcounter=1
- for siteurl in $(find * -maxdepth 0 -type d)
- do
- if [ "$(grep -E '^(([a-zA-Z](-?[a-zA-Z0-9])*)\.)*[a-zA-Z](-?[a-zA-Z0-9])+\.[a-zA-Z]{2,}$' <<< $siteurl)" != "" ]; then
- if [ "$urlcounter" = "$urlsel" ]; then
- site_url=$siteurl
- break
- else
- let urlcounter=$urlcounter+1
- fi
- fi
- done
}
-
##############################
# Select SSH Keys #
##############################
@@ -589,7 +602,7 @@ function select_sshkeys {
echo "SSH Key Auswahl"
echo ""
echo "Sollen eigene SSH Keys generiert werden? Dies wird für den"
- echo "ersten beziehungsweise einzigen Server empfohlen."
+ echo "ersten beziehungsweise einzigen Server empfohlen."
echo ""
echo "(1) Ja"
echo "(2) Nein"
@@ -598,7 +611,7 @@ function select_sshkeys {
echo "SSH Key selection"
echo ""
echo "Should own SSH keys be generated? This is recommended for the"
- echo "first or only server."
+ echo "first or only server."
echo ""
echo "(1) Yes"
echo "(2) No"
@@ -607,17 +620,9 @@ function select_sshkeys {
echo ""
if [ "$langsel" = "1" ]; then
- if [ "$sshsel" = "" ]; then
- echo -n "Bitte geben Sie ihre Auswahl an: "
- else
- color r n "Bitte geben Sie entweder 1,2 oder 3 ein: "
- fi
+ [ "$sshsel" = "" ] && echo -n "Bitte geben Sie ihre Auswahl an: " || color r n "Bitte geben Sie entweder 1,2 oder 3 ein: "
else
- if [ "$sshsel" = "" ]; then
- echo -n "Please enter your selection: "
- else
- color r n "Please enter either 1,2 or 3: "
- fi
+ [ "$sshsel" = "" ] && echo -n "Please enter your selection: " || color r n "Please enter either 1,2 or 3: "
fi
read -n 1 sshsel
@@ -626,17 +631,21 @@ function select_sshkeys {
case "$i" in
'1')
clear
+ gen_logs "User selected to generate SSH keys." msg
;;
'2')
clear
+ gen_logs "User selected not to generate SSH keys." msg
;;
'3')
clear
+ gen_logs "User exited during SSH key selection." msg
exit 0
;;
*)
sshsel=99
clear
+ gen_logs "Invalid input during SSH key selection: $i" msg
select_sshkeys
;;
esac
@@ -653,6 +662,7 @@ fi
gen_logs "" ""
+
##############################
# Test OS #
##############################
@@ -667,6 +677,7 @@ if [ ! -n "$os_install" -o ! -n "$os_name" -o ! -n "$os_version" ]; then
else
color r x "Only CentOS, Debian, Fedora, Red Hat, SuSE and Ubuntu are supported."
fi
+ gen_logs "Unsupported OS detected. Exiting. Detected values: $os_name $os_version ($os_install)" msg
exit 0
fi
@@ -677,7 +688,7 @@ if [ ! -n "$yessel" ]; then
else
select_yesno "Your system: $os_name $os_version - $os_typ. Is this correct?"
fi
- gen_logs "System: $os_name $os_version - $os_typ" ""
+ gen_logs "System: $os_name $os_version - $os_typ" msg
fi
@@ -695,37 +706,78 @@ if [ "$(id -u)" != "0" ]; then
else
color r x "You need root privileges."
fi
- gen_logs "You need root privileges. Install script was stopped." ""
+ gen_logs "You need root privileges. Install script was stopped." msg
exit 0
+else
+ gen_logs "Root privileges confirmed." msg
fi
##############################
# Get IP, Hostname #
##############################
-local_ip=$(ip route get 8.8.8.8 | awk '{print $NF; exit}')
-if [ "$local_ip" = "" ]; then
- host_name=$(hostname -fhost_name | awk '{print tolower($0)}')
-else
- host_name=$(getent hosts $local_ip | awk '{print tolower($2)}' | head -n 1)
+
+# Get the local IP address (used if the hostname isn't valid)
+local_ip=$(ip route get 8.8.8.8 2>/dev/null | awk '{print $7; exit}')
+
+# Get the fully qualified hostname (if available)
+host_name=$(hostname -f 2>/dev/null | awk '{print tolower($0)}')
+
+# Fallback if hostname is empty or unreliable
+if [ -z "$host_name" ]; then
+ host_name=$(hostname | awk '{print tolower($0)}')
+fi
+
+# Replace unreliable hostnames with IP (e.g., localhost or ubuntu)
+if [[ -z "$host_name" || "$host_name" =~ ^(localhost|ubuntu|0)$ ]]; then
+ host_name="$local_ip"
fi
-if [ "$host_name" = "" ] || [ "$host_name" = "0" ]; then
- host_name="$local_ip";
+
+# Ensure proper /etc/hosts entry if needed for hostname resolution
+if ! grep -qE "127\.0\.1\.1\s+$host_name" /etc/hosts; then
+ if ! [[ "$host_name" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
+ echo "Fixing /etc/hosts for hostname resolution: $host_name"
+ echo "127.0.1.1 $host_name" >> /etc/hosts
+ gen_logs "Hostname $host_name added to /etc/hosts for resolution." msg
+ else
+ gen_logs "Skipping /etc/hosts entry — host_name is an IP: $host_name" msg
+ fi
fi
-gen_logs "Hostname and IP - $host_name, $local_ip" ""
+# Log the resolved hostname and IP address
+gen_logs "Hostname and IP - $host_name, $local_ip" msg
+
+# Ensure correct site URL if not already set
+if [ -z "$site_url" ]; then
+ site_url="$host_name"
+ gen_logs "No site_url selected, using hostname: $site_url" msg
+fi
+
+# Ensure /etc/hosts maps site_url to local IP if it's not an IP
+if ! [[ "$site_url" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
+ if ! grep -q "$site_url" /etc/hosts; then
+ echo "$local_ip $site_url" >> /etc/hosts
+ gen_logs "Mapped $site_url to $local_ip in /etc/hosts" msg
+ fi
+fi
+
+# Ensure the selected site URL is accessible and valid
+echo "Using site URL: $site_url"
+gen_logs "Selected site URL: $site_url" msg
##############################
# Choose Mode #
##############################
if [ ! -n "$modsel" ]; then
select_mode
+ gen_logs "Installation mode selected: $modsel" msg
fi
chk_netstat
+gen_logs "Netstat check completed (status var: $netstat_inst)" msg
echo "" > /home/tekbase_status.txt
-
+gen_logs "Status file initialized at /home/tekbase_status.txt" msg
##############################
# Install Libs And Progs #
@@ -733,361 +785,424 @@ echo "" > /home/tekbase_status.txt
if [ ! -n "$yessel" ]; then
yesno=""
if [ "$langsel" = "1" ]; then
- select_yesno "Es wird jetzt autoconf, automake, build-essential, curl, expect, gcc, hddtemp,\ndmidecode, lm-sensors, m4, make, net-tools, openjdk, openssl-dev, patch, pwgen,\nscreen, smartmontools, sqlite, sudo, sysstat, unzip und wget installiert."
+ gen_logs "Benutzer wird gefragt, ob Bibliotheken/Programme installiert werden sollen." msg
+ select_yesno "Es wird jetzt autoconf, automake, build-essential, curl, expect, gcc, \ndmidecode, lm-sensors, m4, make, net-tools, openjdk, openssl-dev, patch, pwgen,\nscreen, smartmontools, sqlite, sudo, sysstat, gnupg, unzip und wget installiert."
else
- select_yesno "Autoconf, automake, build-essential, curl, expect gcc, hddtemp, dmidecode,\nlm-sensors, m4, make, net-tools, openjdk, openssl-dev, patch, pwgen, screen,\nsmartmontools, sqlite, sudo, sysstat, unzip and wget is now installed."
+ gen_logs "User is prompted to install required packages and libraries." msg
+ select_yesno "Autoconf, automake, build-essential, curl, expect, gcc, dmidecode,\nlm-sensors, m4, make, net-tools, openjdk, openssl-dev, patch, pwgen, screen,\nsmartmontools, sqlite, sudo, sysstat, gnupg, unzip and wget will now be installed."
fi
fi
case "$os_install" in
- '1')
+ '1') # SuSE
clear
+ gen_logs "Installing packages using Zypper (SuSE detected)." msg
if [ "$modsel" != "7" ]; then
chkyes="--non-interactive install"
- zypper --non-interactive update
- else
+ gen_logs "zypper --non-interactive update" cmd
+ else
chkyes="install"
- zypper update
+ gen_logs "zypper update" cmd
fi
- for i in autoconf automake m4 make screen sudo curl wget sqlite sqlite3 expect gcc libssh2-1-devel libopenssl-devel libmp3lame-devel libxml2-devel libxslt-devel libshout-dev libvorbis-devel hddtemp dmidecode lm-sensors net-tools sysstat smartmontools patch pwgen unzip java-1_8_0-openjdk git; do
- zypper $chkyes $i
- gen_logs "-" "${i}"
+
+ for i in autoconf automake m4 make screen sudo curl wget sqlite sqlite3 expect gcc \
+ libssh2-1-devel libopenssl-devel libmp3lame-devel libxml2-devel libxslt-devel \
+ libshout-devel libvorbis-devel dmidecode lm-sensors net-tools sysstat \
+ smartmontools patch pwgen unzip java-11-openjdk git gnupg; do
+ gen_logs "zypper $chkyes $i" cmd
+ gen_logs "Installed package: ${i}" msg
done
- zypper $chkyes -t pattern devel_basis
+
+ gen_logs "zypper $chkyes -t pattern devel_basis" cmd
;;
- '2')
+
+ '2') # Debian / Ubuntu
clear
+ gen_logs "Installing packages using apt-get (Debian/Ubuntu detected)." msg
if [ "$modsel" != "7" ]; then
chkyes="-y"
- apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y
else
chkyes=""
- apt-get update && apt-get upgrade && apt-get dist-upgrade
- fi
- for i in autoconf automake build-essential m4 make debconf-utils screen sudo curl wget sqlite sqlite3 expect gcc libssh2-1-dev libssl-dev libmp3lame-dev libxml2-dev libshout-dev libvorbis-dev hddtemp dmidecode lm-sensors net-tools sysstat smartmontools patch pwgen unzip git; do
- apt-get install $i $chkyes
- gen_logs "-" "${i}"
- done
- if [ "$os_version" -lt "14" -a "$os_name" = "Ubuntu" ] || [ "$os_version" -lt "8" -a "$os_name" = "Debian" ]; then
- apt-get install openjdk-7-jre ia32-libs $chkyes
- else
- apt-get install openjdk-8-jre libcurl3-gnutls:i386 $chkyes
fi
+
+ gen_logs "apt-get update && apt-get upgrade $chkyes" cmd
+
+ for i in autoconf automake build-essential m4 make debconf-utils screen sudo curl wget \
+ sqlite3 expect gcc libssh2-1-dev libssl-dev libmp3lame-dev libxml2-dev \
+ libshout-dev libvorbis-dev dmidecode lm-sensors net-tools sysstat \
+ smartmontools patch pwgen unzip git gnupg; do
+ gen_logs "apt-get install $i $chkyes" cmd
+ gen_logs "Installed package: ${i}" msg
+ done
+
+ gen_logs "Installing Java (openjdk-17-jre)" msg
+ gen_logs "apt-get install openjdk-17-jre $chkyes" cmd
+
+ gen_logs "Adding i386 architecture (if needed)" msg
+ dpkg --add-architecture i386
+ apt-get update
+
+ gen_logs "Installing 32-bit libcurl for compatibility" msg
+ gen_logs "apt-get install libcurl4-gnutls-dev:i386 $chkyes" cmd
;;
- '3')
+
+ '3') # CentOS / Red Hat / Fedora
clear
+ gen_logs "Installing packages using yum/dnf (RedHat-based OS detected)." msg
+ if command -v dnf >/dev/null 2>&1; then
+ pkgmgr="dnf"
+ else
+ pkgmgr="yum"
+ fi
+
if [ "$modsel" != "7" ]; then
chkyes="-y"
- yum update && yum upgrade -y
else
chkyes=""
- yum update && yum upgrade
fi
- yum -y install epel-release
- yum repolist
- for i in autoconf automake m4 make screen sudo curl wget sqlite expect gcc openssl-devel hddtemp dmidecode lm-sensors net-tools sysstat smartmontools patch pwgen unzip java-1.8.0-openjdk git; do
- yum install $i $chkyes
- gen_logs "-" "${i}"
+
+ gen_logs "$pkgmgr update $chkyes" cmd
+
+ gen_logs "Installing epel-release" msg
+ $pkgmgr install epel-release -y
+
+ gen_logs "Getting repo list" msg
+ $pkgmgr repolist
+
+ for i in autoconf automake m4 make screen sudo curl wget sqlite expect gcc openssl-devel \
+ dmidecode lm-sensors net-tools sysstat smartmontools patch pwgen unzip \
+ java-11-openjdk git gnupg; do
+ gen_logs "$pkgmgr install $i $chkyes" cmd
+ gen_logs "Installed package: ${i}" msg
done
- yum groupinstall 'Development Tools' $chkyes
+
+ gen_logs "$pkgmgr groupinstall 'Development Tools' $chkyes" cmd
;;
esac
-sensors-detect --auto
-service kmod start
-
+# Enable sensors (optional - may prompt user)
+gen_logs "yes | sensors-detect --auto" cmd
##############################
-# Install Apache, Php, MySQL #
+# Install Apache, PHP, MySQL #
##############################
-if [ $modsel -lt 8 ]; then
- chk_apache $os_install
-
- if [ "$apache_inst" = "0" ]; then
- if [ ! -n "$yessel" ]; then
+if [[ "$modsel" -lt 8 ]]; then
+
+ # --- Apache Installation ---
+ chk_apache "$os_install"
+
+ if [[ "$apache_inst" == "0" ]]; then
+ gen_logs "Apache not detected. Proceeding with installation." msg
+ if [[ -z "$yessel" ]]; then
yesno=""
- if [ "$langsel" = "1" ]; then
+ if [[ "$langsel" == "1" ]]; then
select_yesno "Apache Webserver nicht gefunden. Dieser wird jetzt installiert."
else
select_yesno "Apache web server not found. This will now be installed."
fi
fi
- if [ "$os_install" = "1" ]; then
- if [ "$modsel" != "7" ]; then
- zypper --non-interactive install apache2
- else
- zypper install apache2
- fi
- fi
- if [ "$os_install" = "2" ]; then
- if [ "$modsel" != "7" ]; then
+ case "$os_install" in
+ "1") # openSUSE
+ gen_logs "zypper --non-interactive install apache2" cmd || exit 1
+ systemctl enable apache2
+ systemctl restart apache2
+ ;;
+ "2") # Debian/Ubuntu
export DEBIAN_FRONTEND=noninteractive
- apt-get install apache2 -y
- else
- apt-get install apache2
- fi
- fi
- if [ "$os_install" = "3" ]; then
- if [ "$modsel" != "7" ]; then
- yum install httpd -y
- else
- yum install httpd
- fi
- fi
-
- chk_apache $os_install
-
- if [ "$apache_inst" = "0" ]; then
+ gen_logs "apt-get install -y apache2" cmd || exit 1
+ gen_logs "systemctl enable apache2" cmd
+ gen_logs "systemctl restart apache2" cmd
+ ;;
+ "3") # RHEL/CentOS
+ gen_logs "yum install -y httpd" cmd || exit 1
+ systemctl enable httpd
+ systemctl restart httpd
+ ;;
+ esac
+
+ chk_apache "$os_install"
+ if [[ "$apache_inst" == "0" ]]; then
clear
- if [ "$langsel" = "1" ]; then
- color r x "Der Apache Webserver konnte nicht installiert werden."
- color r x "Bitte nehmen Sie die Installation selbst vor."
- else
- color r x "The Apache web server could not be installed."
- color r x "Please install it yourself."
- fi
+ echo "[ERROR] Apache installation failed. Please install manually."
echo "Check apache: error" >> /home/tekbase_status.txt
- gen_logs "*** The Apache web server could not be installed." ""
- exit 0
+ gen_logs "*** Apache could not be installed." msg
+ exit 1
fi
+
echo "Check apache: ok" >> /home/tekbase_status.txt
- gen_logs "*** The Apache web server is installed." ""
+ gen_logs "*** Apache installed successfully." msg
else
- echo "Check apache: ok" >> /home/tekbase_status.txt
+ echo "Check apache: ok" >> /home/tekbase_status.txt
+ gen_logs "Apache already installed." msg
fi
- if [ ! -n "$yessel" ]; then
- yesno=""
- if [ "$langsel" = "1" ]; then
- select_yesno "Es wird jetzt php, php-common, php-cli, php-curl, php-gd, php-geoip, php-json,\nphp-mail, php-mbstring, php-mysql, php-ssh2, php-xml und php-zip\ninstalliert."
+ # --- PHP Installation ---
+ if [[ -z "$yessel" ]]; then
+ if [[ "$langsel" == "1" ]]; then
+ select_yesno "Es wird jetzt PHP 8.4 und notwendige Erweiterungen installiert."
else
- select_yesno "Php, php-common, php-cli, php-curl, php-gd, php-geoip, php-json, php-mail,\nphp-mbstring, php-mysql, php-ssh2, php-xml and php-zip is now\ninstalled."
+ select_yesno "PHP 8.4 and necessary extensions will now be installed."
fi
fi
- if [ "$os_install" = "1" ]; then
- if [ "$os_version" -lt "42" ]; then
- for i in apache2-mod-php5 php5 php5-common php5-cli php5-curl php5-devel php5-gd php5-geoip php5-json php5-mail php5-mbstring php5-mysql php5-ssh2 php5-xml php5-zip; do
- zypper $chkyes $i
- gen_logs "-" "${i}"
- done
- else
- for i in apache2-mod-php7 php7 php7-common php7-cli php7-curl php7-devel php7-gd php7-geoip php7-json php7-mail php7-mbstring php7-mysql php7-ssh2 php7-xml php7-zip; do
- zypper $chkyes $i
- gen_logs "-" "${i}"
- done
- fi
- fi
- if [ "$os_install" = "2" ]; then
- if [ "$os_version" -lt "16" -a "$os_name" = "Ubuntu" ] || [ "$os_version" -lt "9" -a "$os_name" = "Debian" ]; then
- for i in libapache2-mod-php5 php5 php5-common php5-cli php5-curl php5-dev php5-gd php5-geoip php5-json php5-mail php5-mbstring php5-mysql php5-ssh2 php5-xml php5-zip; do
- apt-get install $i $chkyes
- gen_logs "-" "${i}"
- done
- else
- for i in libapache2-mod-php php php-common php-cli php-curl php-dev php-gd php-geoip php-json php-mail php-mbstring php-mysql php-ssh2 php-xml php-zip; do
- apt-get install $i $chkyes
- gen_logs "-" "${i}"
- done
- fi
- fi
- if [ "$os_install" = "3" ]; then
- for i in php php-common php-cli php-devel php-gd php-json php-mbstring php-mysql php-pecl-ssh2 php-xml php-pecl-zip; do
- yum install $i $chkyes
- gen_logs "-" "${i}"
- done
- fi
-
- chk_php $os_install
+ gen_logs "[INFO] Installing PHP 8.4 and necessary modules..." msg
- if [ "$php_inst" = "0" ]; then
+ case "$os_install" in
+ "1") # openSUSE
+ gen_logs "zypper refresh" cmd
+ if zypper search php8.4 &>/dev/null; then
+ packages="apache2-mod-php8.4 php8.4 php8.4-common php8.4-cli php8.4-curl php8.4-devel php8.4-gd php8.4-mbstring php8.4-mysql php8.4-ssh2 php8.4-xml php8.4-zip php8.4-intl"
+ else
+ gen_logs "[WARNING] PHP 8.4 is not available in openSUSE. Using default PHP 8 packages." msg
+ packages="apache2-mod-php8 php8 php8-common php8-cli php8-curl php8-devel php8-gd php8-mbstring php8-mysql php8-ssh2 php8-xml php8-zip php8-intl"
+ fi
+ gen_logs "zypper install -y $packages" cmd || { gen_logs "[ERROR] PHP installation failed!"; exit 1; }
+ ;;
+
+ "2") # Debian/Ubuntu
+ export DEBIAN_FRONTEND=noninteractive
+ gen_logs "apt-get update -y" cmd
+ gen_logs "apt-get install -y software-properties-common" cmd
+ gen_logs "add-apt-repository -y ppa:ondrej/php" cmd
+ gen_logs "apt-get update -y" cmd
+
+ if apt-cache show php8.4 &>/dev/null; then
+ PHPV="8.4"
+ else
+ gen_logs "[WARNING] PHP 8.4 is not available in PPA. Installing PHP 8.3 instead." msg
+ PHPV="8.3"
+ fi
+
+ packages="libapache2-mod-php$PHPV php$PHPV php$PHPV-common php$PHPV-cli php$PHPV-curl php$PHPV-dev php$PHPV-gd php$PHPV-mbstring php$PHPV-mysql php$PHPV-ssh2 php$PHPV-xml php$PHPV-zip php$PHPV-intl"
+
+ gen_logs "apt-get install -y $packages" cmd || { gen_logs "[ERROR] PHP installation failed!"; exit 1; }
+ ;;
+
+ "3") # RHEL/CentOS
+ gen_logs "yum install -y epel-release yum-utils" cmd
+ gen_logs "yum install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm" cmd
+
+ if yum list available | grep -q remi-php84; then
+ gen_logs "yum-config-manager --enable remi-php84" cmd
+ PHPV="8.4"
+ else
+ gen_logs "[WARNING] PHP 8.4 not available in Remi repo. Installing PHP 8.3 instead." msg
+ gen_logs "yum-config-manager --enable remi-php83" cmd
+ PHPV="8.3"
+ fi
+
+ packages="php php-common php-cli php-curl php-devel php-gd php-mbstring php-mysqlnd php-pecl-ssh2 php-xml php-pecl-zip php-intl"
+
+ gen_logs "yum install -y $packages" cmd || { gen_logs "[ERROR] PHP installation failed!"; exit 1; }
+ ;;
+ esac
+
+ chk_php "$os_install"
+ if [[ "$php_inst" == "0" ]]; then
clear
- if [ "$langsel" = "1" ]; then
- color r x "PHP und die Extensions konnten nicht vollstaendig installiert werden."
- color r x "Bitte nehmen Sie die Installation selbst vor."
+ if [[ "$langsel" == "1" ]]; then
+ color r x "PHP und die Erweiterungen konnten nicht vollständig installiert werden."
+ color r x "Bitte nehmen Sie die Installation manuell vor."
else
- color r x "PHP and the extensions could not be installed completely."
- color r x "Please install it yourself."
- fi
+ color r x "PHP and its extensions could not be completely installed."
+ color r x "Please complete the installation manually."
+ fi
echo "Check php: error" >> /home/tekbase_status.txt
- gen_logs "*** PHP could not be installed." ""
- exit 0
+ gen_logs "*** PHP 8.4 installation verification failed." msg
+ exit 1
fi
+
echo "Check php: ok" >> /home/tekbase_status.txt
- gen_logs "*** PHP is installed." ""
+ gen_logs "*** PHP 8.4 successfully installed." msg
+ # --- Install MySQL/MariaDB ---
chk_mysql $os_install
-
+
if [ "$mysql_inst" = "0" ]; then
- if [ ! -n "$yessel" ]; then
+ echo "MySQL/MariaDB not found. Proceeding with installation."
+
+ [ -z "$yessel" ] && {
yesno=""
- if [ "$langsel" = "1" ]; then
- select_yesno "MySQL/MariaDB Server nicht gefunden. Dieser wird jetzt installiert."
- else
- select_yesno "MySQL/MariaDB server not found. This will now be installed."
- fi
- fi
-
- if [ "$os_install" = "1" ]; then
- zypper $chkyes mariadb mariadb-tools
- service mysql restart
- fi
- if [ "$os_install" = "2" ]; then
- if [ "$modsel" != "7" ]; then
+ [ "$langsel" = "1" ] && select_yesno "MySQL/MariaDB Server wird installiert." || select_yesno "MySQL/MariaDB server will be installed."
+ }
+
+ mysqlpwd=$(gen_passwd 12)
+ echo "MySQL root password: $mysqlpwd" > /home/tekbase_mysql.txt
+ echo "Generated MySQL root password stored in /home/tekbase_mysql.txt"
+
+ case "$os_install" in
+ "1") # openSUSE
+ zypper --non-interactive install mariadb mariadb-tools
+ systemctl enable mariadb
+ systemctl start mariadb
+ ;;
+
+ "2") # Debian/Ubuntu
export DEBIAN_FRONTEND=noninteractive
- fi
-
- mysqlpwd=$(gen_passwd 8)
- echo "MySQL root password: $mysqlpwd" > /home/tekbase_mysql.txt
-
- if [ "$os_version" -lt "16" -a "$os_name" = "Ubuntu" ] || [ "$os_version" -lt "9" -a "$os_name" = "Debian" ]; then
- mysqlpwd=$(gen_passwd 8)
- if [ "$modsel" != "7" ]; then
- debconf-set-selections <<< "mysql-server mysql-server/root_password password $mysqlpwd"
- debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $mysqlpwd"
- fi
- apt-get install mysql-server mysql-client mysql-common $chkyes
- else
- if [ "$modsel" != "7" ]; then
- debconf-set-selections <<< "mariadb-server mysql-server/root_password password $mysqlpwd"
- debconf-set-selections <<< "mariadb-server mysql-server/root_password_again password $mysqlpwd"
+ apt-get update
+ debconf-set-selections <<< "mariadb-server mariadb-server/root_password password $mysqlpwd"
+ debconf-set-selections <<< "mariadb-server mariadb-server/root_password_again password $mysqlpwd"
+
+ gen_logs "apt-get install -y mariadb-server mariadb-client" cmd
+ gen_logs "systemctl enable mariadb" cmd
+ gen_logs "systemctl start mariadb" cmd
+
+ sleep 5
+ if mysqladmin ping >/dev/null 2>&1; then
+ echo "🔐 Switching root to password auth and setting password..."
+
+ if mysql -u root -e "SELECT VERSION();" | grep -qi "mariadb"; then
+ # ✅ MariaDB 10.4+ syntax
+ mysql -u root <> /home/tekbase_status.txt
- exit 0
+ exit 1
fi
+
echo "Check mysql: ok" >> /home/tekbase_status.txt
+ echo "✅ MySQL/MariaDB successfully installed."
else
- mysqlpwd=""
- echo "Check mysql: ok" >> /home/tekbase_status.txt
+ echo "Check mysql: ok" >> /home/tekbase_status.txt
+ echo "✅ MySQL/MariaDB already installed."
fi
-fi
+fi
##############################
-# Check Php Version And Path #
+# Check PHP Version And Paths #
##############################
-if [ $modsel -lt 8 ]; then
- service apache2 restart
+if [ "$modsel" -lt 8 ]; then
+ if systemctl list-units --type=service | grep -q apache2; then
+ gen_logs "systemctl restart apache2" cmd
+ gen_logs "Restarted apache2 service." msg
+ elif systemctl list-units --type=service | grep -q httpd; then
+ gen_logs "systemctl restart httpd" cmd
+ gen_logs "Restarted httpd service." msg
+ fi
+
php_ioncube=$(php -m | grep -i "ioncube")
- # php_geoip=$(php -m | grep -i "geoip")
- php_ssh=$(php -m | grep -i "ssh2")
- # php_gd=$(php -m | grep -i "gd")
- php_version=$(php -r "echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;")
+ php_ssh=$(php -m | grep -i "ssh2")
+
+ php_version=$(php -r "echo PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION;")
php_inidir=$(php -r "echo PHP_CONFIG_FILE_PATH;")
php_extdir=$(php -r "echo PHP_EXTENSION_DIR;")
php_exinidir=$(php -r "echo PHP_CONFIG_FILE_SCAN_DIR;")
- php_dir=$(dirname "$php_inidir");
- if [ -f $php_dir/apache2/php.ini ]; then
+ php_dir=$(dirname "$php_inidir")
+
+ php_apachedir=""
+ php_fpmdir=""
+
+ if [ -f "$php_dir/apache2/php.ini" ]; then
php_apachedir="$php_dir/apache2"
fi
- if [ -f $php_dir/fpm/php.ini ]; then
+ if [ -f "$php_dir/fpm/php.ini" ]; then
php_fpmdir="$php_dir/fpm"
fi
-fi
+ if systemctl list-units --type=service | grep -q "php${php_version/./}-fpm"; then
+ gen_logs "systemctl restart php${php_version/./}-fpm" cmd
+ gen_logs "Restarted php${php_version/./}-fpm service." msg
+ elif systemctl list-units --type=service | grep -q php-fpm; then
+ gen_logs "systemctl restart php-fpm" cmd
+ gen_logs "Restarted php-fpm service." msg
+ fi
+
+ gen_logs "Detected PHP $php_version, INI: $php_inidir, EXT: $php_extdir, SCAN: $php_exinidir" msg
+fi
##############################
# Install Pecl SSH2, Ioncube #
##############################
-if [ $modsel -lt 8 ]; then
+if [ "$modsel" -lt 8 ]; then
if [ "$php_ssh" = "" ]; then
- cd $installhome
-
+ cd "$installhome"
+
if [ ! -f libssh2-1.9.0.tar.gz ]; then
wget --no-check-certificate https://www.libssh2.org/download/libssh2-1.9.0.tar.gz
fi
tar -xzf libssh2-1.9.0.tar.gz
cd libssh2-1.9.0
- ./configure --prefix=/usr --with-openssl=/usr && make install
+ export OPENSSL_CONF=/etc/ssl/openssl.cnf
+ ./configure --prefix=/usr --with-openssl --with-libssl-prefix=/usr && make -j$(nproc) && make install
cd ..
+ rm -rf libssh2-1.9.0 libssh2-1.9.0.tar.gz
+ gen_logs "Compiled and installed libssh2." msg
- if [ "$php_version" = "5.6" ] || [ "$php_version" = "7.0" ]; then
- if [ ! -f ssh2-0.13.tgz ]; then
- wget --no-check-certificate https://pecl.php.net/get/ssh2-0.13.tgz
- fi
- tar -xzf ssh2-0.13.tgz
- cd ssh2-0.13
- phpize && ./configure --with-ssh2 && make install
- cd ..
- rm -r ssh2-0.13.0
- rm ssh2-0.13.tgz
+ if [[ "$php_version" == "5.6" || "$php_version" == "7.0" ]]; then
+ ssh2_pkg="ssh2-0.13"
else
- if [ ! -f ssh2-1.1.2.tgz ]; then
- wget --no-check-certificate https://pecl.php.net/get/ssh2-1.1.2.tgz
- fi
- tar -xzf ssh2-1.1.2.tgz
- cd ssh2-1.1.2
- phpize && ./configure --with-ssh2 && make install
- cd ..
- rm -r ssh2-1.1.2
- rm ssh2-1.1.2.tgz
+ ssh2_pkg="ssh2-1.3.1"
fi
- rm -r libssh2-1.9.0
- rm package.xml
-
- cd $php_exinidir
- echo "extension=ssh2.so" > 20-ssh2.ini
- if [ "$os_install" = "1" -o "$os_install" = "2" ]; then
- if [ -d $php_apachedir/conf.d ]; then
- echo "extension=ssh2.so" > $php_apachedir/conf.d/20-ssh2.ini
- fi
- if [ -d $php_fpmdir/conf.d ]; then
- echo "extension=ssh2.so" > $php_apachedir/conf.d/20-ssh2.ini
- fi
+ if [ ! -f "$ssh2_pkg.tgz" ]; then
+ wget --no-check-certificate "https://pecl.php.net/get/$ssh2_pkg.tgz"
fi
-
- php_ssh=$(php -m | grep -i "ssh2")
+
+ tar -xzf "$ssh2_pkg.tgz"
+ cd "$ssh2_pkg"
+ phpize && ./configure --with-ssh2 && make -j$(nproc) && make install
+ cd ..
+ rm -rf "$ssh2_pkg" "$ssh2_pkg.tgz"
+ gen_logs "Compiled and installed SSH2 extension." msg
+
+ echo "extension=ssh2.so" > "$php_exinidir/20-ssh2.ini"
+ if [ "$os_install" = "1" ] || [ "$os_install" = "2" ]; then
+ [ -d "$php_apachedir/conf.d" ] && echo "extension=ssh2.so" > "$php_apachedir/conf.d/20-ssh2.ini"
+ [ -d "$php_fpmdir/conf.d" ] && echo "extension=ssh2.so" > "$php_fpmdir/conf.d/20-ssh2.ini"
+ fi
+
+ php_ssh=$(php -m | grep -i "ssh2")
if [ "$php_ssh" = "" ]; then
clear
- if [ "$langsel" = "1" ]; then
- color r x "Die Pecl SSH2 Extension für PHP konnte nicht installiert werden."
- color r x "Bitte nehmen Sie die Installation selbst vor."
- else
- color r x "The Pecl SSH2 extension for PHP could not be installed."
- color r x "Please install it yourself."
- fi
echo "Check ssh2: error" >> /home/tekbase_status.txt
- exit 0
+ gen_logs "SSH2 PHP extension failed to install." msg
+ exit 1
else
echo "Check ssh2: ok" >> /home/tekbase_status.txt
+ gen_logs "SSH2 PHP extension installed successfully." msg
fi
else
- echo "Check ssh2: ok" >> /home/tekbase_status.txt
- fi
-
- sed -i '/^HostKeyAlgorithms*/d' /etc/sshd/sshd_config
- sed -i '/^PubkeyAcceptedKeyTypes*/d' /etc/sshd/sshd_config
- echo "HostKeyAlgorithms ssh-rsa,ssh-dss" >> /etc/sshd/sshd_config
- echo "PubkeyAcceptedKeyTypes ssh-rsa,ssh-dss" >> /etc/sshd/sshd_config
-
+ echo "Check ssh2: ok" >> /home/tekbase_status.txt
+ gen_logs "SSH2 PHP extension already installed." msg
+ fi
+
+ sed -i '/^HostKeyAlgorithms*/d' /etc/ssh/sshd_config
+ sed -i '/^PubkeyAcceptedKeyTypes*/d' /etc/ssh/sshd_config
+ echo "HostKeyAlgorithms ssh-rsa,ssh-dss" >> /etc/ssh/sshd_config
+ echo "PubkeyAcceptedKeyTypes ssh-rsa,ssh-dss" >> /etc/ssh/sshd_config
+ gen_logs "Updated SSH config to support older key algorithms." msg
+
if [ "$php_ioncube" = "" ]; then
cd /usr/local
-
- if [ -d ioncube ]; then
- rm ioncube
- fi
+ [ -d ioncube ] && rm ioncube
if [ "$os_typ" = "x86_64" ]; then
wget --no-check-certificate https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz
@@ -1096,112 +1211,103 @@ if [ $modsel -lt 8 ]; then
wget --no-check-certificate https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz
tar xvfz ioncube_loaders_lin_x86.tar.gz
fi
+
if [ ! -d ioncube ]; then
cd $installhome
mv ioncube_x86-64.tar.gz /usr/local
mv ioncube_x86.tar.gz /usr/local
cd /usr/local
-
- if [ "$os_typ" = "x86_64" ]; then
- tar -xzf ioncube_x86-64.tar.gz
- rm ioncube_x86-64.tar.gz
- else
- tar -xzf ioncube_x86.tar.gz
- rm ioncube_x86.tar.gz
- fi
+ [ "$os_typ" = "x86_64" ] && tar -xzf ioncube_x86-64.tar.gz || tar -xzf ioncube_x86.tar.gz
+ rm ioncube_x86*.tar.gz
fi
-
+
cd ioncube
cp *.* $php_extdir
cd $php_exinidir
echo "zend_extension=ioncube_loader_lin_$php_version.so" > 00-ioncube.ini
if [ "$os_install" = "1" -o "$os_install" = "2" ]; then
- if [ -d $php_apachedir/conf.d ]; then
- echo "zend_extension=$php_extdir/ioncube_loader_lin_$php_version.so" > $php_apachedir/conf.d/00-ioncube.ini
- fi
- if [ -d $php_fpmdir/conf.d ]; then
- echo "zend_extension=$php_extdir/ioncube_loader_lin_$php_version.so" > $php_fpmdir/conf.d/00-ioncube.ini
- fi
- fi
-
- php_ioncube=$(php -m | grep -i "ioncube")
- if [ "$php_ioncube" = "" ]; then
+ [ -d $php_apachedir/conf.d ] && echo "zend_extension=$php_extdir/ioncube_loader_lin_$php_version.so" > $php_apachedir/conf.d/00-ioncube.ini
+ [ -d $php_fpmdir/conf.d ] && echo "zend_extension=$php_extdir/ioncube_loader_lin_$php_version.so" > $php_fpmdir/conf.d/00-ioncube.ini
+ fi
+
+ php_ioncube=$(php -m | grep -i "ioncube")
+ if [ "$php_ioncube" = "" ]; then
clear
- if [ "$langsel" = "1" ]; then
- color r x "Die Ioncube Extension für PHP konnte nicht installiert werden."
- color r x "Bitte nehmen Sie die Installation selbst vor."
- else
- color r x "The Ioncube extension for PHP could not be installed."
- color r x "Please install it yourself."
- fi
echo "Check ioncube: error" >> /home/tekbase_status.txt
+ gen_logs "Ioncube extension failed to install." msg
exit 0
else
echo "Check ioncube: ok" >> /home/tekbase_status.txt
+ gen_logs "Ioncube extension installed successfully." msg
fi
else
- echo "Check ioncube: ok" >> /home/tekbase_status.txt
+ echo "Check ioncube: ok" >> /home/tekbase_status.txt
+ gen_logs "Ioncube extension already installed." msg
fi
fi
-
##############################
# Configure Php #
##############################
if [ $modsel -lt 8 ]; then
- if [ -f $php_inidir/php.ini ]; then
- sed -i '/allow_url_fopen/c\allow_url_fopen=on' $php_inidir/php.ini
- sed -i '/max_execution_time/c\max_execution_time=360' $php_inidir/php.ini
- sed -i '/max_input_time/c\max_input_time=1000' $php_inidir/php.ini
- sed -i '/memory_limit/c\memory_limit=128M' $php_inidir/php.ini
- sed -i '/post_max_size/c\post_max_size=32M' $php_inidir/php.ini
- sed -i '/upload_max_filesize/c\upload_max_filesize=32M' $php_inidir/php.ini
- echo "date.timezone=\"Europe/Berlin\"" >> $php_inidir/php.ini
- fi
- if [ -f $php_apachedir/php.ini ]; then
- sed -i '/allow_url_fopen/c\allow_url_fopen=on' $php_apachedir/php.ini
- sed -i '/max_execution_time/c\max_execution_time=360' $php_apachedir/php.ini
- sed -i '/max_input_time/c\max_input_time=1000' $php_apachedir/php.ini
- sed -i '/memory_limit/c\memory_limit=128M' $php_apachedir/php.ini
- sed -i '/post_max_size/c\post_max_size=32M' $php_apachedir/php.ini
- sed -i '/upload_max_filesize/c\upload_max_filesize=32M' $php_apachedir/php.ini
- echo "date.timezone=\"Europe/Berlin\"" >> $php_apachedir/php.ini
- fi
- if [ -f $php_fpmdir/php.ini ]; then
- sed -i '/allow_url_fopen/c\allow_url_fopen=on' $php_fpmdir/php.ini
- sed -i '/max_execution_time/c\max_execution_time=360' $php_fpmdir/php.ini
- sed -i '/max_input_time/c\max_input_time=1000' $php_fpmdir/php.ini
- sed -i '/memory_limit/c\memory_limit=128M' $php_fpmdir/php.ini
- sed -i '/post_max_size/c\post_max_size=32M' $php_fpmdir/php.ini
- sed -i '/upload_max_filesize/c\upload_max_filesize=32M' $php_fpmdir/php.ini
- echo "date.timezone=\"Europe/Berlin\"" >> $php_fpmdir/php.ini
- fi
-
- if [ -f /etc/apache2/confixx_vhosts/web0.conf ]; then
- sed -i '/allow_url_fopen/c\php_admin_flag allow_url_fopen on' /etc/apache2/confixx_vhosts/web0.conf
- fi
-
- if [ -f /etc/apache2/confixx_mhost.conf ]; then
- sed -i '/allow_url_fopen/c\php_admin_flag allow_url_fopen on' /etc/apache2/confixx_mhost.conf
- fi
+ for ini in "$php_inidir/php.ini" "$php_apachedir/php.ini" "$php_fpmdir/php.ini"; do
+ if [ -f "$ini" ]; then
+ sed -i '/allow_url_fopen/c\allow_url_fopen=on' "$ini"
+ sed -i '/max_execution_time/c\max_execution_time=360' "$ini"
+ sed -i '/max_input_time/c\max_input_time=1000' "$ini"
+ sed -i '/memory_limit/c\memory_limit=128M' "$ini"
+ sed -i '/post_max_size/c\post_max_size=32M' "$ini"
+ sed -i '/upload_max_filesize/c\upload_max_filesize=32M' "$ini"
+ echo "date.timezone=\"Europe/Berlin\"" >> "$ini"
+ gen_logs "Updated PHP settings in $ini" msg
+ fi
+ done
+
+ [ -f /etc/apache2/confixx_vhosts/web0.conf ] && \
+ sed -i '/allow_url_fopen/c\php_admin_flag allow_url_fopen on' /etc/apache2/confixx_vhosts/web0.conf && \
+ gen_logs "Updated allow_url_fopen in confixx_vhosts/web0.conf" msg
+
+ [ -f /etc/apache2/confixx_mhost.conf ] && \
+ sed -i '/allow_url_fopen/c\php_admin_flag allow_url_fopen on' /etc/apache2/confixx_mhost.conf && \
+ gen_logs "Updated allow_url_fopen in confixx_mhost.conf" msg
fi
##############################
-# Restart Apache And Php #
+# Restart Apache And PHP #
##############################
-if [ $modsel -lt 8 ]; then
+if [ "$modsel" -lt 8 ]; then
if [ "$os_install" != "3" ]; then
- service apache2 restart
- service php5-fpm restart
- service php${php_version}-fpm restart
+ # Restart Apache
+ if command -v systemctl >/dev/null 2>&1; then
+ systemctl restart apache2
+ gen_logs "Apache2 restarted using systemctl" msg
+ else
+ service apache2 restart
+ gen_logs "Apache2 restarted using service" msg
+ fi
+
+ # Restart PHP-FPM (if installed)
+ if systemctl list-units --type=service | grep -q "php${php_version}-fpm"; then
+ systemctl restart php${php_version}-fpm
+ gen_logs "PHP-FPM restarted using systemctl" msg
+ elif service "php${php_version}-fpm" status >/dev/null 2>&1; then
+ service php${php_version}-fpm restart
+ gen_logs "PHP-FPM restarted using service" msg
+ fi
else
- service httpd restart
+ # RHEL/CentOS/Fedora - Apache is httpd
+ if command -v systemctl >/dev/null 2>&1; then
+ systemctl restart httpd
+ gen_logs "httpd restarted using systemctl (RHEL/CentOS)" msg
+ else
+ service httpd restart
+ gen_logs "httpd restarted using service (RHEL/CentOS)" msg
+ fi
fi
fi
-
##############################
# Mail Check #
##############################
@@ -1228,8 +1334,10 @@ if [ $modsel -lt 8 ]; then
clear
if [ "$modsel" != "7" ]; then
zypper --non-interactive install postfix
+ gen_logs "Installed postfix using zypper (non-interactive)" "postfix"
else
- zypper install postfix
+ zypper install postfix
+ gen_logs "Installed postfix using zypper" "postfix"
fi
;;
'2')
@@ -1239,16 +1347,22 @@ if [ $modsel -lt 8 ]; then
debconf-set-selections <<< "postfix postfix/mailname string $host_name"
debconf-set-selections <<< "postfix postfix/main_mailer_type string 'Internet Site'"
apt-get install postfix -y
+ gen_logs "Installed postfix using apt-get -y" "postfix"
else
- apt-get install postfix
+ apt-get install postfix
+ gen_logs "Installed postfix using apt-get" "postfix"
fi
+ gen_logs "systemctl enable postfix" cmd
+ gen_logs "systemctl restart postfix" cmd
;;
'3')
clear
if [ "$modsel" != "7" ]; then
yum install postfix -y
+ gen_logs "Installed postfix using yum -y" "postfix"
else
yum install postfix
+ gen_logs "Installed postfix using yum" "postfix"
fi
;;
esac
@@ -1257,20 +1371,22 @@ if [ $modsel -lt 8 ]; then
fi
fi
-
##############################
# Install Qstat #
##############################
if [ "$os_install" = "2" ]; then
apt-get install qstat
+ gen_logs "Installed qstat from apt" msg
if [ -f /usr/bin/qstat ]; then
chmod 0755 /usr/bin/qstat
cp /usr/bin/qstat /
+ gen_logs "Copied qstat to /" "qstat"
fi
if [ ! -f /usr/bin/qstat -a -f /usr/bin/quakestat ]; then
chmod 0755 /usr/bin/quakestat
cp /usr/bin/quakestat /usr/bin/qstat
cp /usr/bin/qstat /
+ gen_logs "Fallback to quakestat as qstat" msg
fi
fi
@@ -1278,39 +1394,38 @@ if [ ! -f /qstat ]; then
cd $installhome
if [ ! -f qstat.tar.gz ]; then
wget --no-check-certificate https://teklab.s3.amazonaws.com/tekbase_qstat.tar.gz
+ gen_logs "Downloaded qstat package" msg
tar -xzf tekbase_qstat.tar.gz
rm tekbase_qstat.tar.gz
else
tar -xzf qstat.tar.gz
- rm qstat.tar.gz
+ rm qstat.tar.gz
fi
-
+
cd qstat
./configure && make all install
+ gen_logs "Compiled and installed qstat" msg
chmod 0755 qstat
cp qstat /usr/bin
cp qstat /
-
- if [ -d /var/www/empty ]; then
- cp qstat /var/www/empty
- fi
- if [ -d /srv/www/empty ]; then
- cp qstat /srv/www/empty
- fi
- if [ -d /home/www/empty ]; then
- cp qstat /home/www/empty
- fi
+
+ if [ -d /var/www/empty ]; then cp qstat /var/www/empty; fi
+ if [ -d /srv/www/empty ]; then cp qstat /srv/www/empty; fi
+ if [ -d /home/www/empty ]; then cp qstat /home/www/empty; fi
cd $installhome
rm -r qstat
-
+
if [ ! -f /qstat ]; then
echo "Check qstat: error" >> /home/tekbase_status.txt
+ gen_logs "Qstat binary not found after install" msg
else
- echo "Check qstat: ok" >> /home/tekbase_status.txt
+ echo "Check qstat: ok" >> /home/tekbase_status.txt
+ gen_logs "Qstat installed successfully" msg
fi
else
echo "Check qstat: ok" >> /home/tekbase_status.txt
+ gen_logs "Qstat already exists, skipping" msg
fi
@@ -1321,77 +1436,99 @@ if [ "$modsel" = "1" ] || [ "$modsel" = "2" ] || [ "$modsel" = "4" ] || [ "$mods
if [ ! -f skripte.tar ]; then
cd /home
git clone https://github.com/teklab-de/tekbase-scripts-linux.git skripte
- if [ ! -f /skripte/autoupdater ]; then
- cd $installhome
+ gen_logs "Cloned tekbase-scripts-linux.git into /home/skripte" msg
+ if [ ! -f /home/skripte/autoupdater ]; then
+ cd $installhome
wget --no-check-certificate https://teklab.s3.amazonaws.com/tekbase_scripts.tar
tar -xzf tekbase_scripts.tar -C /home
rm tekbase_scripts.tar
+ gen_logs "Downloaded and extracted tekbase_scripts.tar" msg
fi
- cd skripte
- mkdir cache
+ # Ensure we are in /home/skripte
+ cd /home/skripte 2>/dev/null || {
+ echo "⚠️ /home/skripte does not exist"
+ exit 1
+ }
+
+ # Create the 'cache' directory if it doesn't exist
+ mkdir -p cache
chmod 755 *
chmod 777 cache
+ gen_logs "Prepared skripte folder with permissions and cache/" msg
cd $installhome
else
tar -xzf skripte.tar -C /home
- rm skripte.tar
+ rm skripte.tar
+ gen_logs "Extracted skripte.tar to /home" msg
fi
if [ ! -f hlstats.tar ]; then
wget --no-check-certificate https://teklab.s3.amazonaws.com/tekbase_hlstats.tar
tar -xzf tekbase_hlstats.tar -C /home/skripte
rm tekbase_hlstats.tar
+ gen_logs "Downloaded and extracted tekbase_hlstats.tar" msg
else
tar -xzf hlstats.tar -C /home/skripte
rm hlstats.tar
+ gen_logs "Extracted hlstats.tar to /home/skripte" msg
fi
-
+
userpwd=$(gen_passwd 8)
useradd -g users -p $(perl -e 'print crypt("'$userpwd'","Sa")') -s /bin/bash -m user-webi -d /home/user-webi
+ gen_logs "Created user-webi with generated password" msg
cd $installhome
if [ ! -f user-webi.tar ]; then
wget --no-check-certificate https://teklab.s3.amazonaws.com/tekbase_user-webi.tar
tar -xzf tekbase_user-webi.tar -C /home
rm tekbase_user-webi.tar
+ gen_logs "Downloaded and extracted tekbase_user-webi.tar" msg
else
tar -xzf user-webi.tar -C /home
rm user-webi.tar
+ gen_logs "Extracted user-webi.tar to /home" msg
fi
+
if [ ! -f keys.tar ]; then
wget --no-check-certificate https://teklab.s3.amazonaws.com/tekbase_keys.tar
tar -xzf tekbase_keys.tar -C /home/user-webi
rm tekbase_keys.tar
+ gen_logs "Downloaded and extracted tekbase_keys.tar to /home/user-webi" msg
else
tar -xzf keys.tar -C /home/user-webi
rm keys.tar
+ gen_logs "Extracted keys.tar to /home/user-webi" msg
fi
if [ -d /home/skripte ]; then
echo "Check scripts: ok" >> /home/tekbase_status.txt
+ gen_logs "Script installation completed successfully." msg
else
- echo "Check scripts: error" >> /home/tekbase_status.txt
+ echo "Check scripts: error" >> /home/tekbase_status.txt
+ gen_logs "Script installation failed: /home/skripte not found." msg
fi
fi
##############################
-# Configure Sudo #
+# Configure Sudo (Safe Way) #
##############################
-if [ "$modsel" = "1" ] || [ "$modsel" = "2" ] || [ "$modsel" = "4" ] || [ "$modsel" = "5" ] || [ "$modsel" = "8" ] || [ "$modsel" = "9" ]; then
+if [[ "$modsel" =~ ^(1|2|4|5|8|9)$ ]]; then
if [ "$os_install" = "3" ]; then
cp /etc/sudoers /etc/sudoers.tekbase
- rm /etc/sudoers
- echo "root ALL=(ALL) ALL" >> /etc/sudoers
- else
- sed -i '/^user-webi*/d' /etc/sudoers
- fi
-
- echo "user-webi ALL=(ALL) NOPASSWD: /home/skripte/" >> /etc/sudoers
- echo "user-webi ALL=(ALL) NOPASSWD: /usr/bin/useradd" >> /etc/sudoers
- echo "user-webi ALL=(ALL) NOPASSWD: /usr/bin/usermod" >> /etc/sudoers
- echo "user-webi ALL=(ALL) NOPASSWD: /usr/bin/userdel" >> /etc/sudoers
- chmod 0400 /etc/sudoers
+ echo "root ALL=(ALL:ALL) ALL" > /etc/sudoers
+ chmod 0440 /etc/sudoers
+ gen_logs "Reset sudoers for CentOS/RHEL safely." msg
+ fi
+
+ rm -f /etc/sudoers.d/user-webi
+
+ cat < /etc/sudoers.d/user-webi
+user-webi ALL=(ALL) NOPASSWD: /home/skripte/tekbase, /usr/bin/useradd, /usr/bin/usermod, /usr/bin/userdel
+EOF
+
+ chmod 0440 /etc/sudoers.d/user-webi
+ gen_logs "Configured /etc/sudoers.d/user-webi with proper permissions." msg
fi
@@ -1406,8 +1543,10 @@ if [ "$modsel" = "1" ] || [ "$modsel" = "2" ] || [ "$modsel" = "4" ] || [ "$mods
echo "Check sudo: ok" >> /home/tekbase_status.txt
userdel tekbasewi
rm -r /home/tekbasewi
+ gen_logs "Sudo test passed — user-webi can run tekbase as root." msg
else
- echo "Check sudo: error" >> /home/tekbase_status.txt
+ echo "Check sudo: error" >> /home/tekbase_status.txt
+ gen_logs "Sudo test failed — user-webi could not execute tekbase." msg
fi
fi
@@ -1436,6 +1575,12 @@ if [ "$install_ftp" = "1" ]; then
else
zypper install vsftpd
fi
+ if command -v systemctl >/dev/null 2>&1; then
+ systemctl enable vsftpd
+ systemctl restart vsftpd
+ else
+ service vsftpd restart
+ fi
fi
if [ "$os_install" = "2" ]; then
if [ "$modsel" != "7" ]; then
@@ -1445,6 +1590,14 @@ if [ "$install_ftp" = "1" ]; then
else
apt-get install proftpd
fi
+
+ if command -v systemctl >/dev/null 2>&1; then
+ systemctl enable --now proftpd
+ gen_logs "Enabled and started ProFTPD with systemctl" msg
+ else
+ service proftpd restart
+ gen_logs "Restarted ProFTPD with service" msg
+ fi
fi
if [ "$os_install" = "3" ]; then
if [ "$modsel" != "7" ]; then
@@ -1457,485 +1610,548 @@ fi
##############################
-# Configure Ftp #
+# Configure FTP #
##############################
-if [ -f /etc/proftpd.conf -o -f /etc/proftpd/proftpd.conf ]; then
+
+# --- ProFTPD setup ---
+if systemctl list-units --type=service | grep -q proftpd; then
+ # Determine proftpd config path
if [ -f /etc/proftpd.conf ]; then
ftp_file="/etc/proftpd.conf"
- fi
- if [ -f /etc/proftpd/proftpd.conf ]; then
+ elif [ -f /etc/proftpd/proftpd.conf ]; then
ftp_file="/etc/proftpd/proftpd.conf"
+ else
+ # Create default config if missing
+ mkdir -p /etc/proftpd
+ ftp_file="/etc/proftpd/proftpd.conf"
+ cat > "$ftp_file" <> $ftp_file
- echo "" >> $ftp_file
- fi
-
- sed -i '/^UseReverseDNS*/d' $ftp_file
- sed -i '/^IdentLookups*/d' $ftp_file
- sed -i '/^DefaultRoot*/d' $ftp_file
- sed -i '/^AuthGroupFile*/d' $ftp_file
- sed -i '/^AllowOverwrite*/d' $ftp_file
- sed -i '/^AuthUserFile*/d' $ftp_file
- sed -i '/^RequireValidShell*/d' $ftp_file
- sed -i '/^AuthOrder*/d' $ftp_file
-
- echo "AllowOverwrite on" >> $ftp_file
- echo "UseReverseDNS off" >> $ftp_file
- #echo "IdentLookups off" >> $ftp_file
- echo "DefaultRoot ~" >> $ftp_file
- echo "RequireValidShell off" >> $ftp_file
- echo "AuthOrder mod_auth_pam.c mod_auth_unix.c" >> $ftp_file
- #echo "AuthUserFile /etc/proftpd/ftpd.passwd" >> $ftp_file
- #echo "AuthGroupFile /etc/proftpd/ftpd.group" >> $ftp_file
-
- service proftpd restart
- service xinetd restart
- echo "Check proftpd: ok" >> /home/tekbase_status.txt
-else
- if [ ! -f /etc/vsftpd.conf ]; then
+ grep -Fxf proftpd_settings.cfg "$ftp_file" >/dev/null 2>&1 || {
+ cat proftpd_settings.cfg >> "$ftp_file"
+ echo "" >> "$ftp_file"
+ }
+ fi
+
+ # Clean duplicate or conflicting entries
+ sed -i '/^UseReverseDNS*/d' "$ftp_file"
+ sed -i '/^IdentLookups*/d' "$ftp_file"
+ sed -i '/^DefaultRoot*/d' "$ftp_file"
+ sed -i '/^AuthGroupFile*/d' "$ftp_file"
+ sed -i '/^AllowOverwrite*/d' "$ftp_file"
+ sed -i '/^AuthUserFile*/d' "$ftp_file"
+ sed -i '/^RequireValidShell*/d' "$ftp_file"
+ sed -i '/^AuthOrder*/d' "$ftp_file"
+
+ # Apply base TekBASE overrides
+ {
+ echo "AllowOverwrite on"
+ echo "UseReverseDNS off"
+ echo "DefaultRoot ~"
+ echo "RequireValidShell off"
+ echo "AuthOrder mod_auth_pam.c mod_auth_unix.c"
+ } >> "$ftp_file"
+
+ systemctl restart proftpd
+
+ if systemctl is-active --quiet proftpd; then
+ echo "Check proftpd: ok" >> /home/tekbase_status.txt
+ else
echo "Check proftpd: error" >> /home/tekbase_status.txt
fi
+else
+ echo "Check proftpd: not installed" >> /home/tekbase_status.txt
fi
+# --- VSFTPD setup ---
if [ -f /etc/vsftpd.conf ]; then
cp /etc/vsftpd.conf /etc/vsftpd.tekbase
-
- sed -i '/write_enable*/c\write_enable=YES' /etc/vsftpd.conf
- sed -i '/chroot_local_user*/c\chroot_local_user=YES' /etc/vsftpd.conf
- sed -i '/userlist_enable*/c\userlist_enable=NO' /etc/vsftpd.conf
-
- service vsftpd restart
- service xinetd restart
- echo "Check vsftp: ok" >> /home/tekbase_status.txt
+
+ sed -i 's/^write_enable=.*/write_enable=YES/' /etc/vsftpd.conf
+ sed -i 's/^chroot_local_user=.*/chroot_local_user=YES/' /etc/vsftpd.conf
+ sed -i 's/^userlist_enable=.*/userlist_enable=NO/' /etc/vsftpd.conf
+
+ systemctl restart vsftpd
+
+ if systemctl is-active --quiet vsftpd; then
+ echo "Check vsftpd: ok" >> /home/tekbase_status.txt
+ else
+ echo "Check vsftpd: error" >> /home/tekbase_status.txt
+ fi
else
- echo "Check vsftpd: error" >> /home/tekbase_status.txt
+ echo "Check vsftpd: not installed" >> /home/tekbase_status.txt
fi
+##############################
+# Configure TS3 Firewall #
+##############################
+function configure_ts3_firewall {
+ local ts3_ports_udp=(9987)
+ local ts3_ports_tcp=(10011 30033)
+ local firewall_set=0
+
+ gen_logs "Configuring firewall for TeamSpeak 3" msg
+
+ if command -v ufw >/dev/null 2>&1; then
+ firewall_set=1
+ for port in "${ts3_ports_udp[@]}"; do
+ gen_logs "ufw allow $port/udp" cmd
+ done
+ for port in "${ts3_ports_tcp[@]}"; do
+ gen_logs "ufw allow $port/tcp" cmd
+ done
+ gen_logs "Opened TS3 ports using ufw" msg
+
+ elif command -v firewall-cmd >/dev/null 2>&1; then
+ firewall_set=1
+ for port in "${ts3_ports_udp[@]}"; do
+ gen_logs "firewall-cmd --permanent --add-port=$port/udp" cmd
+ done
+ for port in "${ts3_ports_tcp[@]}"; do
+ gen_logs "firewall-cmd --permanent --add-port=$port/tcp" cmd
+ done
+ gen_logs "firewall-cmd --reload" cmd
+ gen_logs "Opened TS3 ports using firewalld" msg
+
+ elif command -v iptables >/dev/null 2>&1; then
+ firewall_set=1
+ for port in "${ts3_ports_udp[@]}"; do
+ if ! iptables -C INPUT -p udp --dport "$port" -j ACCEPT 2>/dev/null; then
+ gen_logs "iptables -A INPUT -p udp --dport $port -j ACCEPT" cmd
+ fi
+ done
+ for port in "${ts3_ports_tcp[@]}"; do
+ iptables -C INPUT -p tcp --dport "$port" -j ACCEPT 2>/dev/null || gen_logs "iptables -A INPUT -p tcp --dport $port -j ACCEPT" cmd
+ done
+ gen_logs "Opened TS3 ports using iptables" msg
+ fi
+
+ if [ "$firewall_set" -eq 0 ]; then
+ gen_logs "No firewall found. Attempting to install iptables..." msg
+ case "$os_install" in
+ 1) gen_logs "zypper --non-interactive install iptables" cmd ;;
+ 2) gen_logs "apt-get install -y iptables" cmd ;;
+ 3) gen_logs "yum install -y iptables" cmd ;;
+ esac
+ if command -v iptables >/dev/null 2>&1; then
+ gen_logs "iptables installed successfully" msg
+ configure_ts3_firewall
+ else
+ gen_logs "Failed to install iptables firewall" msg
+ fi
+ fi
+}
##############################
# Install Teamspeak 3 #
##############################
if [ "$modsel" = "1" ] || [ "$modsel" = "4" ] || [ "$modsel" = "8" ]; then
- cd $installhome
+ cd "$installhome"
adminpwd=$(gen_passwd 8)
-
- ps -u user-webi | grep ts3server | awk '{print $1}' | while read pid; do
- kill $pid
- done
-
- if [ -f /home/user-webi/teamspeak3/ts3server_startscript.sh ]; then
- cd /home/user-webi
- if [ -f /home/user-webi/teamspeak3_backup/ts3server_startscript.sh ]; then
- rm -r teamspeak3_backup
- fi
- mv teamspeak3 teamspeak3_backup
- cd $installhome
+
+ pkill -u user-webi ts3server 2>/dev/null || true
+
+ if [ -d /home/user-webi/teamspeak3 ]; then
+ mv /home/user-webi/teamspeak3 /home/user-webi/teamspeak3_backup
+ gen_logs "Backed up old TeamSpeak install" msg
fi
-
- if [ "$os_typ" = "x86_64" ]; then
- ts_arch="amd64"
+
+ ts_arch=$( [ "$os_typ" = "x86_64" ] && echo "amd64" || echo "x86" )
+ fixed_ts_version="3.13.7"
+ ts_file="teamspeak3-server_linux_${ts_arch}-${fixed_ts_version}.tar.bz2"
+ ts_url="https://files.teamspeak-services.com/releases/server/${fixed_ts_version}/${ts_file}"
+
+ if command -v curl >/dev/null; then
+ gen_logs "curl -O $ts_url" cmd
+ elif command -v wget >/dev/null; then
+ gen_logs "wget $ts_url" cmd
else
- ts_arch="x86"
+ gen_logs "curl or wget not found — cannot download TeamSpeak" msg
+ exit 1
fi
-
- for i in $(curl -s "http://dl.4players.de/ts/releases/?C=M;O=D" | grep -Po '(?<=href=")[0-9]+(\.[0-9]+){2,3}(?=/")' | sort -Vr); do
- ts_url="http://dl.4players.de/ts/releases/$i/teamspeak3-server_linux_$ts_arch-$i.tar.bz2"
- check=$(curl -I $ts_url 2>&1 | grep "HTTP/" | awk '{print $2}')
- if [ "$check" = "200" ]; then
- break
- else
- $ts_url
- fi
- done
- if [ "$check" = "200" -a "$ts_url" != "" ]; then
- curl $ts_url -o teamspeak3-server.tar.bz2
- tar -xjf teamspeak3-server.tar.bz2
- rm teamspeak3-server.tar.bz2
- if [ "$os_typ" = "x86_64" ]; then
- mv teamspeak3-server_linux_amd64 /home/user-webi/teamspeak3
- else
- mv teamspeak3-server_linux_x86 /home/user-webi/teamspeak3
- fi
- fi
-
- if [ -f /home/user-webi/teamspeak3/ts3server_startscript.sh ]; then
- if [ "$os_typ" = "x86_64" ]; then
- tar -xzf teamspeak3-server_linux-x86-64.tar.gz
- mv teamspeak3-server_linux-amd64 /home/user-webi/teamspeak3
- else
- tar -xzf teamspeak3-server_linux-x86.tar.gz
- mv teamspeak3-server_linux-x86 /home/user-webi/teamspeak3
- fi
- fi
-
+ gen_logs "tar -xjf $ts_file" cmd
+ rm -f "$ts_file"
+ mv "teamspeak3-server_linux_${ts_arch}" /home/user-webi/teamspeak3
chown -R user-webi:users /home/user-webi/teamspeak3
+
cd /home/user-webi/teamspeak3
su user-webi -c "touch .ts3server_license_accepted"
- su user-webi -c "./ts3server_startscript.sh start serveradmin_password=$adminpwd create_default_virtualserver=0 createinifile=1 inifile=ts3server.ini > tsout.txt"
- clear
- if [ "$langsel" = "1" ]; then
- echo "Teamspeak wird jetzt konfiguriert."
- else
- echo "Teamspeak will now be configured."
- fi
- loading 25
+
+ # Remove stale pid and lock files that may block startup
+ rm -f /home/user-webi/teamspeak3/ts3server.pid
+ rm -f /dev/shm/7* 2>/dev/null || true
+
+ su user-webi -c "./ts3server_startscript.sh start serveradmin_password=$adminpwd createinifile=1 inifile=ts3server.ini > tsout.txt 2>&1"
+ sleep 20
su user-webi -c "./ts3server_startscript.sh stop"
- grep -i "token=" tsout.txt | awk '{print $1}' > /home/tekbase_ts3.txt
+ sleep 5
+ pkill -u user-webi ts3server 2>/dev/null || true
+
+ token=$(awk -F= '/token=/{print $2}' tsout.txt | tr -d '[:space:]')
+ if [ -n "$token" ]; then
+ echo "Token: $token" > /home/tekbase_ts3.txt
+ gen_logs "TeamSpeak token extracted and saved" msg
+ else
+ echo "No token generated." > /home/tekbase_ts3.txt
+ gen_logs "Failed to extract TeamSpeak token" msg
+ fi
+
+ cat > ts3server.ini <> query_ip_whitelist.txt
- echo "$local_ip" >> query_ip_whitelist.txt
- echo "machine_id=" >> ts3server.ini
- echo "default_voice_port=9987" >> ts3server.ini
- echo "voice_ip=0.0.0.0" >> ts3server.ini
- echo "licensepath=" >> ts3server.ini
- echo "filetransfer_port=30033" >> ts3server.ini
- echo "filetransfer_ip=0.0.0.0" >> ts3server.ini
- echo "query_port=10011" >> ts3server.ini
- echo "query_ip=0.0.0.0" >> ts3server.ini
- echo "query_ip_whitelist=query_ip_whitelist.txt" >> ts3server.ini
- echo "query_ip_blacklist=query_ip_blacklist.txt" >> ts3server.ini
- echo "dbplugin=ts3db_sqlite3" >> ts3server.ini
- echo "dbpluginparameter=" >> ts3server.ini
- echo "dbsqlpath=sql/" >> ts3server.ini
- echo "dbsqlcreatepath=create_sqlite/" >> ts3server.ini
- echo "dbconnections=10" >> ts3server.ini
- echo "logpath=logs" >> ts3server.ini
- echo "logquerycommands=0" >> ts3server.ini
- echo "dbclientkeepdays=30" >> ts3server.ini
- echo "logappend=0" >> ts3server.ini
- echo "query_skipbruteforcecheck=0" >> ts3server.ini
- echo "create_default_virtualserver=0" >> ts3server.ini
+ echo -e "127.0.0.1\n$local_ip" > query_ip_whitelist.txt
+
+ configure_ts3_firewall
+
su user-webi -c "./ts3server_startscript.sh start inifile=ts3server.ini"
+ sleep 10
+
+ if pgrep -u user-webi ts3server >/dev/null; then
+ gen_logs "TeamSpeak started successfully" msg
+ echo "Check teamspeak: ok" >> /home/tekbase_status.txt
+ else
+ gen_logs "TeamSpeak failed to start" msg
+ echo "Check teamspeak: error" >> /home/tekbase_status.txt
+ fi
echo "Admin Login: serveradmin" >> /home/tekbase_ts3.txt
echo "Admin Password: $adminpwd" >> /home/tekbase_ts3.txt
fi
-
##############################
# Install Linux Daemon #
##############################
-if [ "$modsel" = "1" ] || [ "$modsel" = "2" ] || [ "$modsel" = "4" ] || [ "$modsel" = "5" ] || [ "$modsel" = "8" ] || [ "$modsel" = "9" ]; then
+if [[ "$modsel" =~ ^(1|2|4|5|8|9)$ ]]; then
cd /home/skripte
daemonpwd=$(gen_passwd 8)
daemonport=1500
- sed -i '/password*/c\password = '$daemonpwd'' tekbase.cfg
- sed -i '/listen_port*/c\listen_port = '$daemonport'' tekbase.cfg
- portcheck=1
- while [ "$portcheck" != "" ]; do
- daemonport=$((daemonport+1))
-
+ sed -i '/^password[[:space:]]*=/c\password = '"$daemonpwd"'' tekbase.cfg
+ sed -i '/^listen_port[[:space:]]*=/c\listen_port = '"$daemonport"'' tekbase.cfg
+ gen_logs "Set initial daemon password and port (1500)" msg
+
+ while true; do
+ daemonport=$((daemonport + 1))
if [ "$netstat_inst" = "1" ]; then
- portcheck=$(netstat -tlpn | grep ":$daemonport ")
+ portcheck=$(netstat -tlpn 2>/dev/null | grep -w ":$daemonport")
else
- portcheck=$(ss -tlpn | grep ":$daemonport ")
+ portcheck=$(ss -tlpn 2>/dev/null | grep -w ":$daemonport")
fi
- if [ "$portcheck" = "" ]; then
- sed -i '/listen_port*/c\listen_port = '$daemonport'' tekbase.cfg
+ if [ -z "$portcheck" ]; then
+ sed -i '/^listen_port[[:space:]]*=/c\listen_port = '"$daemonport"'' tekbase.cfg
+ gen_logs "Free port $daemonport selected for daemon" msg
+ break
fi
done
+
echo "Daemon Port: $daemonport" > /home/tekbase_daemon.txt
echo "Daemon Password: $daemonpwd" >> /home/tekbase_daemon.txt
+ gen_logs "Daemon credentials saved" msg
fi
-
##############################
# Configure WWW #
##############################
-if [ $modsel -lt 8 ]; then
+if [ "$modsel" -lt 8 ]; then
wwwok=0
- site_url=$host_name
-
- if [ -d /home/www/web0/html ]; then
- wwwpath="/var/www/web0/html"
- wwwok=1
- fi
-
- if [ "$wwwok" = "0" ]; then
- if [ -d /var/www/vhosts/$site_url/httpdocs ]; then
- wwwpath="/var/www/vhosts/$site_url/httpdocs"
- wwwok=1
- fi
- fi
- if [ "$wwwok" = "0" ]; then
- if [ -d /var/www/vhosts/default/htdocs ]; then
- wwwpath="/var/www/vhosts/default/htdocs"
+ possible_paths=(
+ "/home/www/web0/html:/var/www/web0/html"
+ "/var/www/vhosts/$host_name/httpdocs"
+ "/var/www/vhosts/default/htdocs"
+ "/var/www/virtual/default"
+ "/srv/www/vhosts/$host_name/httpdocs"
+ "/srv/www/vhosts/default/htdocs"
+ "/srv/www/virtual/default"
+ "/var/www/htdocs"
+ "/srv/www/web0/html"
+ "/srv/www/htdocs"
+ "/srv/www"
+ "/var/www/html"
+ "/var/www"
+ )
+
+ for path_entry in "${possible_paths[@]}"; do
+ base_path="${path_entry%%:*}"
+ real_path="${path_entry##*:}"
+
+ if [ -d "$base_path" ]; then
+ wwwpath="${real_path:-$base_path}"
wwwok=1
+ gen_logs "Web path found and selected: $wwwpath" msg
+ break
fi
- fi
-
+ done
+
+ # ⬇️ Extra fallback logic (from older version)
if [ "$wwwok" = "0" ]; then
- if [ -d /var/www/virtual/default ]; then
- wwwpath="/var/www/virtual/default"
- wwwok=1
+ site_url="$host_name"
+
+ [ -d /home/www/web0/html ] && wwwpath="/var/www/web0/html" && wwwok=1
+ [ "$wwwok" = "0" ] && [ -d /var/www/vhosts/$site_url/httpdocs ] && wwwpath="/var/www/vhosts/$site_url/httpdocs" && wwwok=1
+ [ "$wwwok" = "0" ] && [ -d /var/www/vhosts/default/htdocs ] && wwwpath="/var/www/vhosts/default/htdocs" && wwwok=1
+ [ "$wwwok" = "0" ] && [ -d /var/www/virtual/default ] && wwwpath="/var/www/virtual/default" && wwwok=1
+ [ "$wwwok" = "0" ] && [ -d /var/www/web0/html ] && wwwpath="/var/www/web0/html" && wwwok=1
+ [ "$wwwok" = "0" ] && [ -d /srv/www/vhosts/$site_url/httpdocs ] && wwwpath="/srv/www/vhosts/$site_url/httpdocs" && wwwok=1
+ [ "$wwwok" = "0" ] && [ -d /srv/www/vhosts/default/htdocs ] && wwwpath="/srv/www/vhosts/default/htdocs" && wwwok=1
+ [ "$wwwok" = "0" ] && [ -d /srv/www/virtual/default ] && wwwpath="/srv/www/virtual/default" && wwwok=1
+ [ "$wwwok" = "0" ] && [ -d /var/www/htdocs ] && wwwpath="/var/www/htdocs" && wwwok=1
+ [ "$wwwok" = "0" ] && [ -d /srv/www/web0/html ] && wwwpath="/srv/www/web0/html" && wwwok=1
+ [ "$wwwok" = "0" ] && [ -d /srv/www/htdocs ] && wwwpath="/srv/www/htdocs" && wwwok=1
+ if [ "$wwwok" = "0" ] && [ -d /srv/www ]; then
+ wwwpath="/srv/www"
+ wwwok=1
+ [ -n "$local_ip" ] && site_url="$local_ip"
fi
- fi
-
- if [ "$wwwok" = "0" ]; then
- if [ -d /var/www/web0/html ]; then
- wwwpath="/var/www/web0/html"
+ if [ "$wwwok" = "0" ] && [ -d /var/www/html ]; then
+ wwwpath="/var/www/html"
wwwok=1
+ [ -n "$local_ip" ] && site_url="$local_ip"
fi
- fi
-
- if [ "$wwwok" = "0" ]; then
- if [ -d /srv/www/vhosts/$site_url/httpdocs ]; then
- wwwpath="/srv/www/vhosts/$site_url/httpdocs"
- wwwok=1
+ if [ "$wwwok" = "0" ] && [ -d /var/www ]; then
+ wwwpath="/var/www"
+ wwwok=1
+ [ -n "$local_ip" ] && site_url="$local_ip"
fi
- fi
-
- if [ "$wwwok" = "0" ]; then
- if [ -d /srv/www/vhosts/default/htdocs ]; then
- wwwpath="/srv/www/vhosts/default/htdocs"
- wwwok=1
+ if [ "$wwwok" = "0" ]; then
+ if [ "$os_install" = "1" ]; then
+ mkdir -p /srv/www
+ wwwpath="/srv/www"
+ else
+ mkdir -p /var/www
+ wwwpath="/var/www"
+ fi
+ [ -n "$local_ip" ] && site_url="$local_ip"
fi
+ gen_logs "Fallback logic selected path: $wwwpath" msg
fi
- if [ "$wwwok" = "0" ]; then
- if [ -d /srv/www/virtual/default ]; then
- wwwpath="/srv/www/virtual/default"
- wwwok=1
- fi
- fi
+ chk_panel
- if [ "$wwwok" = "0" ]; then
- if [ -d /var/www/htdocs ]; then
- wwwpath="/var/www/htdocs"
- wwwok=1
- fi
- fi
-
- if [ "$wwwok" = "0" ]; then
- if [ -d /srv/www/web0/html ]; then
- wwwpath="/srv/www/web0/html"
- wwwok=1
- fi
- fi
-
- if [ "$wwwok" = "0" ]; then
- if [ -d /srv/www/htdocs ]; then
- wwwpath="/srv/www/htdocs"
- wwwok=1
- fi
- fi
-
- if [ "$wwwok" = "0" ]; then
- if [ -d /srv/www ]; then
- wwwpath="/srv/www"
- wwwok=1
- if [ "$local_ip" != "" ]; then
- site_url=$local_ip
- fi
+ # Plesk handling
+ if [ "$web_panel" = "Plesk" ] && [ -d /var/www/vhosts ]; then
+ select_url "/var/www/vhosts"
+ wwwpath="/var/www/vhosts/$site_url/httpdocs"
+ gen_logs "Plesk panel detected, selected path: $wwwpath" msg
+ else
+ # Use IP as fallback site_url
+ if [ -z "$site_url" ]; then
+ site_url="$local_ip"
+ gen_logs "Using local_ip as site_url: $site_url" msg
fi
- fi
- if [ "$wwwok" = "0" ]; then
- if [ -d /var/www/html ]; then
- wwwpath="/var/www/html"
- wwwok=1
- if [ "$local_ip" != "" ]; then
- site_url=$local_ip
- fi
+ # Apache VHost auto-creation
+ if [[ "$web_panel" = "0" ]]; then
+ vhost_file="/etc/apache2/sites-available/$site_url.conf"
+ if [ ! -f "$vhost_file" ]; then
+ mkdir -p "$wwwpath"
+ cat < "$vhost_file"
+
+ ServerName $site_url
+ DocumentRoot "$wwwpath"
+
+ Options Indexes FollowSymLinks
+ AllowOverride All
+ Require all granted
+
+ ErrorLog \${APACHE_LOG_DIR}/$site_url-error.log
+ CustomLog \${APACHE_LOG_DIR}/$site_url-access.log combined
+
+EOF
+ a2ensite "$site_url.conf"
+ systemctl reload apache2
+ gen_logs "Created Apache vhost for $site_url and reloaded Apache" msg
+ fi
fi
fi
- if [ "$wwwok" = "0" ]; then
- if [ -d /var/www ]; then
- wwwpath="/var/www"
- wwwok=1
- if [ "$local_ip" != "" ]; then
- site_url=$local_ip
- fi
- fi
- fi
-
- if [ "$wwwok" = "0" ]; then
- if [ "$os_install" = "1" ]; then
- mkdir /srv/www
- wwwpath="/srv/www"
- else
- mkdir /var/www
- wwwpath="/var/www"
- fi
- if [ "$local_ip" != "" ]; then
- site_url=$local_ip
- fi
- fi
-
- chk_panel
- if [ "$web_panel" = "Plesk" -a -d /var/www/vhosts ]; then
- select_url "/var/www/vhosts"
- wwwpath="/var/www/vhosts/$site_url/httpdocs"
- fi
+ echo "Selected site URL: $site_url"
+ echo "Web root path: $wwwpath"
fi
-
##############################
# Plesk #
##############################
-if [ $modsel -lt 8 ]; then
- if [ "$web_panel" = "Plesk" -a -d /var/www/vhosts ]; then
- if [ "$os_install" = "2" ]; then
- for i in libgeoip-dev geoip-bin geoip-database libssh2-1-dev; do
- apt-get install $i $chkyes
- done
- fi
-
- cd /opt/plesk/php
- for phpd in $(find * -maxdepth 0 -type d)
- do
- if [ "$(grep -E '^([0-9].[0-9])$' <<< $phpd)" != "" ]; then
- phpv=${phpd//.}
- if [ "$phpv" = "56" ]; then
- if [ -d /opt/plesk/php/${phpd}/bin ]; then
- for i in plesk-php${phpv}-dev plesk-php${phpv}-gd plesk-php${phpv}-mbstring plesk-php${phpv}-mysql plesk-php${phpv}-xml; do
- apt-get install $i $chkyes
- done
- /opt/plesk/php/${phpd}/bin/pecl install https://pecl.php.net/get/ssh2-0.13.tgz
- if [ -f /opt/plesk/php/${phpd}/lib/php/modules/ssh2.so ]; then
- echo "extension=ssh2.so" > /opt/plesk/php/${phpd}/etc/php.d/ssh2.ini
- fi
- /opt/plesk/php/${phpd}/bin/pecl install http://pecl.php.net/get/geoip-1.1.1.tgz
- if [ -f /opt/plesk/php/${phpd}/lib/php/modules/geoip.so ]; then
- echo "extension=geoip.so" > /opt/plesk/php/${phpd}/etc/php.d/geoip.ini
- fi
- /etc/init.d/plesk-php${phpv}-fpm restart
- fi
-
- else
- if [ -d /opt/plesk/php/${phpd}/bin ]; then
- for i in plesk-php${phpv}-dev plesk-php${phpv}-gd plesk-php${phpv}-mbstring plesk-php${phpv}-mysql plesk-php${phpv}-xml; do
- apt-get install $i $chkyes
- done
- /opt/plesk/php/${phpd}/bin/pecl install https://pecl.php.net/get/ssh2-1.1.2.tgz
- if [ -f /opt/plesk/php/${phpd}/lib/php/modules/ssh2.so ]; then
- echo "extension=ssh2.so" > /opt/plesk/php/${phpd}/etc/php.d/ssh2.ini
- fi
- /opt/plesk/php/${phpd}/bin/pecl install http://pecl.php.net/get/geoip-1.1.1.tgz
- if [ -f /opt/plesk/php/${phpd}/lib/php/modules/geoip.so ]; then
- echo "extension=geoip.so" > /opt/plesk/php/${phpd}/etc/php.d/geoip.ini
- fi
- /etc/init.d/plesk-php${phpv}-fpm restart
- fi
+if [ "$modsel" -lt 8 ] && [ "$web_panel" = "Plesk" ] && [ -d /var/www/vhosts ]; then
+ if [ "$os_install" = "2" ]; then
+ apt-get install -y libgeoip-dev geoip-bin geoip-database libssh2-1-dev
+ gen_logs "Installed Plesk dependencies (geoip, ssh2 libs)" msg
+ fi
+
+ cd /opt/plesk/php
+ for phpd in */; do
+ phpd=${phpd%/}
+ if [[ "$phpd" =~ ^[0-9]+\.[0-9]+$ ]]; then
+ phpv=${phpd//.}
+ phpbin="/opt/plesk/php/${phpd}/bin"
+ phplib="/opt/plesk/php/${phpd}/lib/php/modules"
+ phpcfg="/opt/plesk/php/${phpd}/etc/php.d"
+
+ if [ -d "$phpbin" ]; then
+ for pkg in dev gd mbstring mysql xml; do
+ apt-get install -y "plesk-php${phpv}-$pkg"
+ gen_logs "Installed plesk-php${phpv}-$pkg" msg
+ done
+
+ "$phpbin/pecl" install -f ssh2-1.4.1
+ [ -f "$phplib/ssh2.so" ] && echo "extension=ssh2.so" > "$phpcfg/ssh2.ini"
+
+ if [[ "$phpd" == 5.* || "$phpd" == 7.* ]]; then
+ "$phpbin/pecl" install -f geoip-1.1.1
+ [ -f "$phplib/geoip.so" ] && echo "extension=geoip.so" > "$phpcfg/geoip.ini"
fi
+
+ systemctl restart plesk-php${phpv}-fpm
+ gen_logs "Restarted plesk-php${phpv}-fpm" msg
fi
- done
- fi
+ fi
+ done
fi
-
##############################
# Install TekBASE #
##############################
-if [ $modsel -lt 8 ]; then
- cd $installhome
+if [ "$modsel" -lt 8 ]; then
+ cd "$installhome"
- if [ "$php_version" = "5.6" ] || [ "$php_version" = "7.0" ]; then
+ if [[ "$php_version" == "5.6" || "$php_version" == "7.0" ]]; then
wget --no-check-certificate https://teklab.s3.amazonaws.com/tekbase_php56.zip
+ gen_logs "Downloaded TekBASE for PHP $php_version" msg
else
- wget --no-check-certificate https://teklab.s3.amazonaws.com/tekbase.zip
+ wget --no-check-certificate https://teklab.s3.amazonaws.com/tekbase.zip
+ gen_logs "Downloaded latest TekBASE" msg
fi
- unzip tekbase*.zip
- rm tekbase*.zip
- mv tekbase $wwwpath
+ unzip tekbase*.zip && rm tekbase*.zip
+ mkdir -p "$wwwpath/tekbase"
+ mv tekbase/* "$wwwpath/tekbase"
+ gen_logs "Moved TekBASE into $wwwpath/tekbase" msg
tekpwd=$(gen_passwd 8)
- tekdb=$(gen_passwd 4)
-
+ tekdb=$(gen_passwd 4)
+
if [ "$os_install" = "2" ]; then
- mysqlpwd=$(grep -i password /etc/mysql/debian.cnf | awk 'NR == 1 {print $3}')
- mysqlusr=$(grep -i user /etc/mysql/debian.cnf | awk 'NR == 1 {print $3}')
+ # Use generated root password
+ if [ -f /home/tekbase_mysql.txt ]; then
+ mysqlpwd=$(awk -F': ' '/MySQL root password/ {print $2}' /home/tekbase_mysql.txt)
+ mysqlusr="root"
+ elif [ -s /etc/mysql/debian.cnf ]; then
+ mysqlpwd=$(awk '/password/ {print $3; exit}' /etc/mysql/debian.cnf)
+ mysqlusr=$(awk '/user/ {print $3; exit}' /etc/mysql/debian.cnf)
+ else
+ mysqlusr="root"
+ echo -e "\n⚠️ Could not read MySQL credentials. Please enter root password:"
+ read -r mysqlpwd
+ fi
else
- clear
mysqlusr="root"
- if [ "$mysqlpwd" = "" ]; then
- if [ "$langsel" = "1" ]; then
- echo "Bitte geben Sie das MySQL Root Passwort an, dies wurde Ihnen von"
- echo "Ihrem Serveranbieter bereits genannt (Root Passwort vielleicht)."
- echo ""
- echo -n "Passwort: "
- else
- echo "Please input the MySQL Root password. You get this from from"
- echo "your server provider (in example Root password)."
- echo ""
- echo -n "Password: "
- fi
- read mysqlpwd
+ if [ -z "$mysqlpwd" ]; then
+ echo -e "Please input the MySQL Root password:\n"
+ read -r mysqlpwd
fi
fi
- Q1="SET sql_mode = '';"
- Q2="CREATE DATABASE IF NOT EXISTS tekbase_$tekdb;"
- Q3="GRANT ALL PRIVILEGES ON tekbase_$tekdb.* TO 'tekbase_$tekdb'@'localhost' IDENTIFIED BY '$tekpwd' WITH GRANT OPTION;"
- Q4="FLUSH PRIVILEGES;"
- SQL="${Q1}${Q2}${Q3}${Q4}"
-
- mysql --user=$mysqlusr --password=$mysqlpwd -e "$SQL"
- mysql --user=tekbase_$tekdb --password=$tekpwd tekbase_$tekdb < $wwwpath/tekbase/install/database.sql
-
- rm -r $wwwpath/tekbase/install
-
- echo " $wwwpath/tekbase/config.php
- echo "\$dbhost = \"localhost\";" >> $wwwpath/tekbase/config.php
- echo "\$dbuname = \"tekbase_$tekdb\";" >> $wwwpath/tekbase/config.php
- echo "\$dbpass = \"$tekpwd\";" >> $wwwpath/tekbase/config.php
- echo "\$dbname = \"tekbase_$tekdb\";" >> $wwwpath/tekbase/config.php
- echo "\$prefix = \"teklab\";" >> $wwwpath/tekbase/config.php
- echo "\$dbtype = \"mysqli\";" >> $wwwpath/tekbase/config.php
- echo "\$sitekey = \"$tekpwd\";" >> $wwwpath/tekbase/config.php
- echo "\$gfx_chk = \"1\";" >> $wwwpath/tekbase/config.php
- echo "\$ipv6 = \"1\";" >> $wwwpath/tekbase/config.php
- echo "\$shopcodes = \"00000\";" >> $wwwpath/tekbase/config.php
- echo "\$max_logins = \"7\";" >> $wwwpath/tekbase/config.php
- echo "\$awidgetone = \"Members,group,members_all.php, ,3\";" >> $wwwpath/tekbase/config.php
- echo "\$awidgetwo = \"TekLab News,news,teklab_rss_all.php, ,2\";" >> $wwwpath/tekbase/config.php
- echo "\$awidgetthree = \"Admins,administrator,admins_all.php, ,1\";" >> $wwwpath/tekbase/config.php
- echo "?>" >> $wwwpath/tekbase/config.php
-
- chmod 0777 $wwwpath/tekbase/cache
- chmod 0777 $wwwpath/tekbase/pdf
- chmod 0777 $wwwpath/tekbase/resources
- chmod 0777 $wwwpath/tekbase/tmp
-
- useradd -g users -p $(perl -e 'print crypt("'$tekpwd'","Sa")') -s /bin/bash -m tekbaseftp -d $wwwpath/tekbase
- chown -R tekbaseftp:users $wwwpath/tekbase
-
- echo "DB Login: tekbase_$tekdb" > /home/tekbase_db.txt
- echo "DB Password: $tekpwd" >> /home/tekbase_db.txt
- echo "FTP Login: tekbaseftp" > /home/tekbase_ftp.txt
- echo "FTP Password: $tekpwd" >> /home/tekbase_ftp.txt
+ # Create DB and user
+ mysql --user="$mysqlusr" --password="$mysqlpwd" <> /home/tekbase_status.txt
+ fi
+
+ cat < "$wwwpath/tekbase/config.php"
+
+EOF
+
+ if [ -d "$wwwpath/tekbase" ]; then
+ chmod 0777 "$wwwpath/tekbase"/{cache,pdf,resources,tmp}
+ gen_logs "Permissions set on tekbase writable directories." msg
+ else
+ gen_logs "Directory $wwwpath/tekbase not found – cannot chmod." msg
+ fi
+ useradd -g users -p "$(perl -e 'print crypt("'$tekpwd'", "Sa")')" -s /bin/bash -m tekbaseftp -d "$wwwpath/tekbase"
+ chown -R tekbaseftp:users "$wwwpath/tekbase"
+ gen_logs "TekBASE config file created and permissions set" msg
+
+ echo -e "DB Login: tekbase_$tekdb\nDB Password: $tekpwd" > /home/tekbase_db.txt
+ echo -e "FTP Login: tekbaseftp\nFTP Password: $tekpwd" > /home/tekbase_ftp.txt
sleep 5
- wget -q -O - http://$site_url/tekbase/admin.php
+ if command -v systemctl >/dev/null 2>&1; then
+ gen_logs "systemctl reload apache2" cmd
+ else
+ gen_logs "service apache2 reload" cmd
+ fi
+ wget -q -O - "http://$site_url/tekbase/admin.php"
+ gen_logs "Triggered admin.php setup via HTTP" msg
else
- cd $installhome
- rm -r tekbase
+ rm -rf "$installhome/tekbase"
fi
-wget -q --post-data "op=insert&$site_url" -O - http://licenses1.tekbase.de/wiauthorized.php
+wget -q --post-data "op=insert&$site_url" -O - http://licenses1.tekbase.de/wiauthorized.php
+gen_logs "License inserted for $site_url" msg
##############################
# DB Inserts #
@@ -1953,6 +2169,7 @@ if [ "$local_ip" != "" ]; then
INSERT INTO teklab_rootserver (id, sshdaemon, daemonpasswd, path, sshuser, sshport, name, serverip, loadindex, apps, games, streams, voices, vserver, web, cpucores, active) VALUES (NULL, "0", "$daemonpwd", "/home/skripte", "user-webi", "$ssh_port", "$local_ip", "$local_ip", "500", "1", "1", "1", "1", "1", "1", "$cpu_threads", "1");
INSERT INTO teklab_teamspeak (id, serverip, queryport, admin, passwd, path, typ, rserverid) VALUES (NULL, "$local_ip", "10011", "serveradmin", "$adminpwd", "teamspeak3", "Teamspeak3", "1");
EOF
+ gen_logs "Inserted rootserver and Teamspeak info into TekBASE DB" msg
fi
@@ -1966,23 +2183,26 @@ if [ "$modsel" != "3" ] || [ "$modsel" != "6" ]; then
fi
if [ "$sshsel" = "1" ]; then
if [ ! -d "/home/user-webi/.ssh" ]; then
- mkdir "/home/user-webi/.ssh"
+ mkdir "/home/user-webi/.ssh"
else
rm -r "/home/user-webi/.ssh"
- mkdir "/home/user-webi/.ssh"
+ mkdir "/home/user-webi/.ssh"
+ fi
+
+ ssh-keygen -t rsa -b 4096 -N '' -f /home/user-webi/.ssh/id_rsa
+ cp /home/user-webi/.ssh/id_rsa.pub /home/user-webi/.ssh/authorized_keys
+ chown -R user-webi:users .ssh
+ chmod 0700 .ssh
+
+ gen_logs "Generated SSH keys for user-webi" msg
+
+ if [ $modsel -lt 8 ]; then
+ mv /home/user-webi/.ssh/id_rsa.* $wwwpath/tekbase/tmp
+ gen_logs "Moved private/public SSH keys to TekBASE tmp dir" msg
fi
-
- ssh-keygen -t rsa -b 4096 -N '' -f /home/user-webi/.ssh/id_rsa
- cp /home/user-webi/.ssh/id_rsa.pub /home/user-webi/.ssh/authorized_keys
- chown -R user-webi:users .ssh
- chmod 0700 .ssh
- if [ $modsel -lt 8 ]; then
- mv /home/user-webi/.ssh/id_rsa.* $wwwpath/tekbase/tmp
- fi
fi
fi
-
##############################
# TekBASE 8.x compatibility #
##############################
@@ -1991,7 +2211,7 @@ for FILE in $(find *.sh)
do
cp $FILE ${FILE%.sh}
done
-
+gen_logs "Converted .sh scripts to TekBASE 8.x compatible format" msg
##############################
# Finish #
@@ -2000,6 +2220,8 @@ cd $installhome
cd /usr/local
rm ioncube_x86-64.tar.gz
rm ioncube_x86.tar.gz
+gen_logs "Cleaned up ioncube archives" msg
+
clear
if [ $modsel -lt 8 ]; then
if [ "$langsel" = "1" ]; then
@@ -2026,6 +2248,7 @@ if [ $modsel -lt 8 ]; then
echo "Rental/Buy versions get a FREE installation support."
fi
echo ""
+ gen_logs "TekBASE installation complete – Admin: http://$site_url/tekbase/admin.php" msg
fi
if [ "$modsel" = "1" ] || [ "$modsel" = "4" ] || [ "$modsel" = "8" ]; then
@@ -2037,6 +2260,7 @@ if [ "$modsel" = "1" ] || [ "$modsel" = "4" ] || [ "$modsel" = "8" ]; then
echo "Serveradmin password in /home/tekbase_ts3.txt"
fi
echo ""
+ gen_logs "Teamspeak 3 base server installed" msg
fi
if [ "$modsel" = "1" ] || [ "$modsel" = "2" ] || [ "$modsel" = "4" ] || [ "$modsel" = "5" ] || [ "$modsel" = "8" ] || [ "$modsel" = "9" ]; then
@@ -2049,6 +2273,14 @@ if [ "$modsel" = "1" ] || [ "$modsel" = "2" ] || [ "$modsel" = "4" ] || [ "$mods
echo "su user-webi"
echo "cd /home/skripte"
echo "screen -A -m -d -S tekbasedaemon ./server"
+ echo ""
+ echo "📄 Übersicht der generierten Dateien:"
+ [ -f /home/tekbase_mysql.txt ] && echo " ✔️ /home/tekbase_mysql.txt → MySQL Root-Passwort"
+ [ -f /home/tekbase_db.txt ] && echo " ✔️ /home/tekbase_db.txt → TekBASE Datenbank-Zugang"
+ [ -f /home/tekbase_ftp.txt ] && echo " ✔️ /home/tekbase_ftp.txt → FTP Zugangsdaten"
+ [ -f /home/tekbase_daemon.txt ] && echo " ✔️ /home/tekbase_daemon.txt → Linux Daemon Zugangsdaten"
+ [ -f /home/tekbase_ts3.txt ] && echo " ✔️ /home/tekbase_ts3.txt → Teamspeak Token & Admin"
+ [ -f /home/tekbase_status.txt ] && echo " ✔️ /home/tekbase_status.txt → Status aller Komponenten"
else
echo "The root server has been completely set up. The linux daemon"
echo "credentials are in the file /home/tekbase_daemon.txt."
@@ -2057,8 +2289,17 @@ if [ "$modsel" = "1" ] || [ "$modsel" = "2" ] || [ "$modsel" = "4" ] || [ "$mods
echo "su user-webi"
echo "cd /home/skripte"
echo "screen -A -m -d -S tekbasedaemon ./server"
+ echo ""
+ echo "📄 Summary of generated files:"
+ [ -f /home/tekbase_mysql.txt ] && echo " ✔️ /home/tekbase_mysql.txt → MySQL root password"
+ [ -f /home/tekbase_db.txt ] && echo " ✔️ /home/tekbase_db.txt → TekBASE DB login"
+ [ -f /home/tekbase_ftp.txt ] && echo " ✔️ /home/tekbase_ftp.txt → FTP login credentials"
+ [ -f /home/tekbase_daemon.txt ] && echo " ✔️ /home/tekbase_daemon.txt → Linux Daemon credentials"
+ [ -f /home/tekbase_ts3.txt ] && echo " ✔️ /home/tekbase_ts3.txt → TeamSpeak token & admin"
+ [ -f /home/tekbase_status.txt ] && echo " ✔️ /home/tekbase_status.txt → Component installation status"
fi
echo ""
+ gen_logs "Linux daemon setup complete — startup instructions shown" msg
fi
if [ "$os_install" = "2" ]; then