SirRezi / Rezi_FiveM_Install

Install FiveM TxAdmin quickly and easily.
4 stars 2 forks source link

Weitere deutliche Verbesserung und Erweiterung des Skripts :) #1

Open silez opened 1 year ago

silez commented 1 year ago

Hey moin SirRezi,

erst mal möchte ich mich bedanken für diese wundervolle Idee! Ich selbst installiere regelmäßig als Hilfestellung für andere Leute FiveM-Server auf Linux Maschinen. Bisher bin ich selbst nicht auf die Idee gekommen ein Bash-Script dafür zu entwickeln - bis ich eben auf dein Repo gestoßen bin.

Ich habe mir einmal erlaubt, dein v2 Script noch "ein wenig" zu verbessern :D

Hoffentlich ist das in Ordnung für dich und vllt. möchtest du das ja übernehmen bzw. einbinden - oder es gibt dir einfach einen Anreiz auf weitere Ideen. Alle erweiterten Eingabeaufforderungen (oder Abfragen) sind mit einem Standartwert versehen, dass heißt, man kann wenn man möchte eigene Angaben machen wie Beispielsweise Ordnernamen oder Downloadlinks verändern, damit man nicht in den Code muss falls man sich nicht wirklich damit auskennt.

Folgende Dinge habe ich erweitert:

Hier nun der veränderte Code des Bash-Scripts:

#!/bin/bash

# Farbdefinitionen
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Sprachauswahl
echo "Please select your language:"
echo "1. English"
echo "2. Deutsch"
read -p "Enter your choice (1 or 2): " lang_choice

# Funktion zur Übersetzung
translate() {
    case "$lang_choice" in
        1)
            case "$1" in
                "welcome_msg")
                    echo "====================================================="
                    echo "============ FiveM with TxAdmin Installer ============"
                    echo "====================================================="
                    echo "This script was created by SirRezi and modified by XenoKeks."
                    echo
                    ;;
                "abort_msg")
                    echo -e "${GREEN}Installation aborted.${NC}"
                    ;;
                "update_packages")
                    echo -e "${YELLOW}Updating package list...${NC}"
                    ;;
                "upgrade_system")
                    echo -e "${YELLOW}Performing system upgrade...${NC}"
                    ;;
                "install_packages")
                    echo -e "${YELLOW}Installing required packages...${NC}"
                    ;;
                "create_fivem_dir")
                    echo -e "${YELLOW}Creating FiveM server directory...${NC}"
                    ;;
                "download_fivem_server")
                    echo -e "${YELLOW}Downloading FiveM server...${NC}"
                    ;;
                "extract_fivem_server")
                    echo -e "${YELLOW}Extracting FiveM server...${NC}"
                    ;;
                "create_server_data_dir")
                    echo -e "${YELLOW}Creating FiveM server data directory and configuring...${NC}"
                    ;;
                "set_permissions")
                    echo -e "${YELLOW}Setting permissions...${NC}"
                    ;;
                "start_server")
                    echo -e "${YELLOW}Starting FiveM server...${NC}"
                    ;;
                "server_start_hint")
                    echo "The server has been started with your input. Please note down the initial code from txAdmin and visit the displayed URL in your browser to create your main account. Then you can exit the server by pressing CTRL+X and start it again with 'screen' to keep it running even when you close or exit the console."
                    echo
                    ;;
                "installation_complete")
                    echo "====================================================="
                    echo "============ Installation is complete ==============="
                    echo "====================================================="
                    echo
                    ;;
                *)
                    echo "$1"
                    ;;
            esac
            ;;
        2)
            case "$1" in
                "welcome_msg")
                    echo "====================================================="
                    echo "============ FiveM mit TxAdmin Installer ============"
                    echo "====================================================="
                    echo "Dieses Skript wurde von SirRezi erstellt und modifiziert von XenoKeks."
                    echo
                    ;;
                "abort_msg")
                    echo -e "${GREEN}Installation abgebrochen.${NC}"
                    ;;
                "update_packages")
                    echo -e "${YELLOW}Aktualisiere Paketliste...${NC}"
                    ;;
                "upgrade_system")
                    echo -e "${YELLOW}Führe Systemaktualisierung durch...${NC}"
                    ;;
                "install_packages")
                    echo -e "${YELLOW}Installiere erforderliche Pakete...${NC}"
                    ;;
                "create_fivem_dir")
                    echo -e "${YELLOW}Erstelle FiveM-Server-Verzeichnis...${NC}"
                    ;;
                "download_fivem_server")
                    echo -e "${YELLOW}Lade FiveM-Server herunter...${NC}"
                    ;;
                "extract_fivem_server")
                    echo -e "${YELLOW}Entpacke FiveM-Server...${NC}"
                    ;;
                "create_server_data_dir")
                    echo -e "${YELLOW}Erstelle FiveM-Server-Daten-Verzeichnis und konfiguriere...${NC}"
                    ;;
                "set_permissions")
                    echo -e "${YELLOW}Setze Berechtigungen...${NC}"
                    ;;
                "start_server")
                    echo -e "${YELLOW}Starte FiveM-Server...${NC}"
                    ;;
                "server_start_hint")
                    echo "Der Server wurde mit deiner gewünschten Eingabe gestartet. Bitte notiere dir den Initialcode von txAdmin und rufe die angezeigte URL in deinem Browser auf. Erstelle damit deinen Hauptaccount. Dann kannst du mit STRG+X den Server beenden und mit Screen wieder starten, damit dieser weiterläuft, wenn du die Konsole schließt bzw. beendest."
                    echo
                    ;;
                "installation_complete")
                    echo "====================================================="
                    echo "============ Installation ist fertig ================"
                    echo "====================================================="
                    echo
                    ;;
                *)
                    echo "$1"
                    ;;
            esac
            ;;
        *)
            echo "Invalid choice. Please try again."
            ;;
    esac
}

# Funktion zur Eingabeaufforderung mit Standardwert
prompt_with_default() {
    local prompt="$1"
    local default="$2"
    local value

    read -p "$prompt [$default]: " value
    echo "${value:-$default}"
}

# Funktion zur Bestätigung mit Standardwert
confirm_with_default() {
    local prompt="$1"
    local default="$2"
    local value

    read -p "$prompt (y/n) [$default]: " value
    case "${value:-$default}" in
        [Yy])
            echo "yes"
            ;;
        [Nn])
            echo "no"
            ;;
        *)
            echo "no"
            ;;
    esac
}

# Funktion zum Herunterladen von Dateien
download_file() {
    local url="$1"
    local destination="$2"

    wget -O "$destination" "$url"
}

# Funktion zum Ausführen von Befehlen mit Fortschrittsanzeige
run_command_with_progress() {
    local command="$1"
    local description="$2"

    echo -e "${YELLOW}$description...${NC}"
    eval "$command"
}

# Funktion zum Starten des FiveM-Servers
start_server() {
    local server_dir="$1"

    cd "$server_dir"
    run_command_with_progress "bash run.sh +exec server.cfg" "Starting FiveM server"
}

# Begrüßungsnachricht
translate "welcome_msg"

# Meldung über das System von SirRezi und Abfrage zur Installation
choice=$(confirm_with_default "Do you want to start the installation of FiveM with TxAdmin?" "yes")

if [[ "$choice" != "yes" ]]; then
    translate "abort_msg"
    exit 0
fi

# Pakete aktualisieren
translate "update_packages"
run_command_with_progress "apt update" "Updating package list"
run_command_with_progress "apt upgrade -y" "Performing system upgrade"

# Benötigte Pakete installieren
translate "install_packages"
run_command_with_progress "apt-get install -y xz-utils git screen" "Installing required packages"

# FiveM-Server-Verzeichnis erstellen
translate "create_fivem_dir"
server_dir=$(prompt_with_default "Enter the folder name for the FiveM server" "server")
mkdir -p "/home/FiveM/$server_dir"
cd "/home/FiveM/$server_dir"

# FiveM-Server herunterladen und entpacken
translate "download_fivem_server"
server_url=$(prompt_with_default "Enter the download URL for the FiveM server" "https://runtime.fivem.net/artifacts/fivem/build_proot_linux/master/6537-f2c6ed5f64cc5a71ca0d9505f9b72bb015d370d6/fx.tar.xz")
download_file "$server_url" "fx.tar.xz"
translate "extract_fivem_server"
run_command_with_progress "tar xf fx.tar.xz" "Extracting FiveM server"
run_command_with_progress "rm fx.tar.xz" "Cleaning up"

# FiveM-Server-Daten-Verzeichnis erstellen und konfigurieren
translate "create_server_data_dir"
server_data_dir=$(prompt_with_default "Enter the installation directory for the server data" "/home/FiveM/server-data")
clone_url=$(prompt_with_default "Enter the Git clone URL for the server data" "https://github.com/citizenfx/cfx-server-data.git")
mkdir -p "$server_data_dir"
cd "$server_data_dir"
run_command_with_progress "git clone $clone_url $server_data_dir" "Cloning server data repository"

# Berechtigungen setzen
translate "set_permissions"
run_command_with_progress "chmod +x run.sh" "Setting permissions"

# FiveM-Server starten
choice=$(confirm_with_default "Do you want to start the FiveM server?" "yes")
if [[ "$choice" == "yes" ]]; then
    translate "server_start_hint"
    start_server "/home/FiveM/$server_dir"
fi

# Erfolgsmeldung anzeigen
translate "installation_complete"

exit 0

Die Folgende zweite Idee wäre sogar mit dem Initialstart des txAdmin bei dem gewartet wird bis der Code und die URL angezeigt werden und man dann aufgefordert wird sich Code und URL zu kopieren. Dann kann man "Enter" drücken und der Server wird beendet und mit einem Screen-Command neu gestartet. Danach wird Code und URL ausgegeben. Ich denke aber, dass dies nicht ganz so einfach umzusetzen ist, geschweige denn, dass es so funktioniert wie ich mir vorstelle, denn wie soll das Script denn den Initialcode und die URL auslesen? :D Naja, es wäre vllt eine Idee darüber nachzudenken, hier mal meine Idee:

#!/bin/bash

# Farbdefinitionen
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Sprachauswahl
echo "Please select your language:"
echo "1. English"
echo "2. Deutsch"
read -p "Enter your choice (1 or 2): " lang_choice

# Funktion zur Übersetzung
translate() {
    case "$lang_choice" in
        1)
            case "$1" in
                "welcome_msg")
                    echo "====================================================="
                    echo "============ FiveM with TxAdmin Installer ============"
                    echo "====================================================="
                    echo "This script was created by SirRezi."
                    echo
                    ;;
                "abort_msg")
                    echo -e "${GREEN}Installation aborted.${NC}"
                    ;;
                "update_packages")
                    echo -e "${YELLOW}Updating package list...${NC}"
                    ;;
                "upgrade_system")
                    echo -e "${YELLOW}Performing system upgrade...${NC}"
                    ;;
                "install_packages")
                    echo -e "${YELLOW}Installing required packages...${NC}"
                    ;;
                "create_fivem_dir")
                    echo -e "${YELLOW}Creating FiveM server directory...${NC}"
                    ;;
                "download_fivem_server")
                    echo -e "${YELLOW}Downloading FiveM server...${NC}"
                    ;;
                "extract_fivem_server")
                    echo -e "${YELLOW}Extracting FiveM server...${NC}"
                    ;;
                "create_server_data_dir")
                    echo -e "${YELLOW}Creating FiveM server data directory and configuring...${NC}"
                    ;;
                "set_permissions")
                    echo -e "${YELLOW}Setting permissions...${NC}"
                    ;;
                "start_server")
                    echo -e "${YELLOW}Starting FiveM server...${NC}"
                    ;;
                "server_start_hint")
                    echo "The server has been started with your input. Please note down the initial code from txAdmin and visit the displayed URL in your browser to create your main account. Then you can exit the server by pressing CTRL+X and start it again with 'screen' to keep it running even when you close or exit the console."
                    echo
                    ;;
                "initial_code_url")
                    echo "Initial Code: $1"
                    echo "txAdmin URL: $2"
                    echo
                    ;;
                "installation_complete")
                    echo "====================================================="
                    echo "============ Installation is complete ==============="
                    echo "====================================================="
                    echo
                    ;;
                *)
                    echo "$1"
                    ;;
            esac
            ;;
        2)
            case "$1" in
                "welcome_msg")
                    echo "====================================================="
                    echo "============ FiveM mit TxAdmin Installer ============"
                    echo "====================================================="
                    echo "Dieses Skript wurde von SirRezi erstellt."
                    echo
                    ;;
                "abort_msg")
                    echo -e "${GREEN}Installation abgebrochen.${NC}"
                    ;;
                "update_packages")
                    echo -e "${YELLOW}Aktualisiere Paketliste...${NC}"
                    ;;
                "upgrade_system")
                    echo -e "${YELLOW}Führe Systemaktualisierung durch...${NC}"
                    ;;
                "install_packages")
                    echo -e "${YELLOW}Installiere erforderliche Pakete...${NC}"
                    ;;
                "create_fivem_dir")
                    echo -e "${YELLOW}Erstelle FiveM-Server-Verzeichnis...${NC}"
                    ;;
                "download_fivem_server")
                    echo -e "${YELLOW}Lade FiveM-Server herunter...${NC}"
                    ;;
                "extract_fivem_server")
                    echo -e "${YELLOW}Entpacke FiveM-Server...${NC}"
                    ;;
                "create_server_data_dir")
                    echo -e "${YELLOW}Erstelle FiveM-Server-Daten-Verzeichnis und konfiguriere...${NC}"
                    ;;
                "set_permissions")
                    echo -e "${YELLOW}Setze Berechtigungen...${NC}"
                    ;;
                "start_server")
                    echo -e "${YELLOW}Starte FiveM-Server...${NC}"
                    ;;
                "server_start_hint")
                    echo "Der Server wurde mit deiner gewünschten Eingabe gestartet. Bitte notiere dir den Initialcode von txAdmin und rufe die angezeigte URL in deinem Browser auf. Erstelle damit deinen Hauptaccount. Dann kannst du mit STRG+X den Server beenden und mit Screen wieder starten, damit dieser weiterläuft, wenn du die Konsole schließt bzw. beendest."
                    echo
                    ;;
                "initial_code_url")
                    echo "Initialcode: $1"
                    echo "txAdmin URL: $2"
                    echo
                    ;;
                "installation_complete")
                    echo "====================================================="
                    echo "============ Installation ist fertig ================"
                    echo "====================================================="
                    echo
                    ;;
                *)
                    echo "$1"
                    ;;
            esac
            ;;
        *)
            echo "Invalid choice. Please try again."
            ;;
    esac
}

# Funktion zur Eingabeaufforderung mit Standardwert
prompt_with_default() {
    local prompt="$1"
    local default="$2"
    local value

    read -p "$prompt [$default]: " value
    echo "${value:-$default}"
}

# Funktion zur Bestätigung mit Standardwert
confirm_with_default() {
    local prompt="$1"
    local default="$2"
    local value

    read -p "$prompt (y/n) [$default]: " value
    case "${value:-$default}" in
        [Yy])
            echo "yes"
            ;;
        [Nn])
            echo "no"
            ;;
        *)
            echo "no"
            ;;
    esac
}

# Funktion zum Herunterladen von Dateien
download_file() {
    local url="$1"
    local destination="$2"

    wget -O "$destination" "$url"
}

# Funktion zum Ausführen von Befehlen mit Fortschrittsanzeige
run_command_with_progress() {
    local command="$1"
    local description="$2"

    echo -e "${YELLOW}$description...${NC}"
    eval "$command"
}

# Funktion zum Starten des FiveM-Servers
start_server() {
    local server_dir="$1"

    cd "$server_dir"
    run_command_with_progress "bash run.sh +exec server.cfg" "Starting FiveM server"
}

# Funktion zum Ausgeben des Initialcodes und der URL
output_initial_code_url() {
    local initial_code="$1"
    local txadmin_url="$2"

    translate "initial_code_url" "$initial_code" "$txadmin_url"
}

# Begrüßungsnachricht
translate "welcome_msg"

# Meldung über das System von SirRezi und Abfrage zur Installation
choice=$(confirm_with_default "Do you want to start the installation of FiveM with TxAdmin?" "yes")

if [[ "$choice" != "yes" ]]; then
    translate "abort_msg"
    exit 0
fi

# Pakete aktualisieren
translate "update_packages"
run_command_with_progress "apt update" "Updating package list"
run_command_with_progress "apt upgrade -y" "Performing system upgrade"

# Benötigte Pakete installieren
translate "install_packages"
run_command_with_progress "apt-get install -y xz-utils git screen" "Installing required packages"

# FiveM-Server-Verzeichnis erstellen
translate "create_fivem_dir"
server_dir=$(prompt_with_default "Enter the folder name for the FiveM server" "server")
mkdir -p "/home/FiveM/$server_dir"
cd "/home/FiveM/$server_dir"

# FiveM-Server herunterladen und entpacken
translate "download_fivem_server"
server_url=$(prompt_with_default "Enter the download URL for the FiveM server" "https://runtime.fivem.net/artifacts/fivem/build_proot_linux/master/6537-f2c6ed5f64cc5a71ca0d9505f9b72bb015d370d6/fx.tar.xz")
download_file "$server_url" "fx.tar.xz"
translate "extract_fivem_server"
run_command_with_progress "tar xf fx.tar.xz" "Extracting FiveM server"
run_command_with_progress "rm fx.tar.xz" "Cleaning up"

# FiveM-Server-Daten-Verzeichnis erstellen und konfigurieren
translate "create_server_data_dir"
server_data_dir=$(prompt_with_default "Enter the installation directory for the server data" "/home/FiveM/server-data")
clone_url=$(prompt_with_default "Enter the Git clone URL for the server data" "https://github.com/citizenfx/cfx-server-data.git")
mkdir -p "$server_data_dir"
cd "$server_data_dir"
run_command_with_progress "git clone $clone_url $server_data_dir" "Cloning server data repository"

# Berechtigungen setzen
translate "set_permissions"
run_command_with_progress "chmod +x run.sh" "Setting permissions"

# FiveM-Server starten und Initialcode und URL kopieren
choice=$(confirm_with_default "Do you want to start the FiveM server?" "yes")
if [[ "$choice" == "yes" ]]; then
    translate "server_start_hint"
    start_server "/home/FiveM/$server_dir"
    sleep 10 # Warten, bis der txAdmin Initialcode und die URL angezeigt werden

    # Server beenden
    echo "Please copy the txAdmin Initialcode and URL, then press Enter to continue..."
    read

    # Server mit Screen neu starten und Initialcode und URL ausgeben
    echo "Starting the server with 'screen'..."
    screen -dmS fivem-server bash -c "cd /home/FiveM/$server_dir && bash run.sh +exec server.cfg"
    sleep 10 # Warten, bis der Server gestartet wurde
    output_initial_code_url "1234" "http://localhost:40120"
fi

# Erfolgsmeldung anzeigen
translate "installation_complete"

exit 0

Nun aber viel Spaß damit. Solltest du Fragen haben oder Anregungen würde ich mich freuen wenn du einfach etwas kommentierst :) Angenehmen Abend noch. LG XenoKeks

SirRezi commented 1 year ago

Hey, Danke für deine Verbesserung, aus meine Perspektive wollte ich es bei mir Simpel halten, damit Jeder der nicht so viel Ahnung hat, alles nochmal im Code Nachlesen kann. Dies war auch meine erster Bash-Script und ich bin dabei meine Erfahrung weiterhin auszubauen. Ich bedanke mich trotzdem herzlich bei dir!

LG SirRezi

silez commented 1 year ago

Huhu, ja alles gut, muss ja nicht verwendet werden :D Ich habe es für mich mal geforked und eine eigene Version erstellt. Habe natürlich deine Credits drin gelassen. Ehre wem Ehre gebührt :)

LG

SirRezi commented 1 year ago

Danke <3

SirRezi commented 8 months ago

Hey @silez, Hättest du lust auf eine V3?

silez commented 8 months ago

Hey Mahlzeit und noch frohes neues Jahr gewünscht. Klar, um was soll es dabei gehen?

SirRezi commented 8 months ago

Hey @silez, Danke für die schnelle Antwort ich hätte mir gedacht ich baue in der V3 ein Autoupdater rein, dass die links permanent upgedatet wird. Plus es noch benutzerfreundlicher zu gestalten und ein MySQL Installer hinzuzufügen.

silez commented 8 months ago

Guten Morgen @SirRezi, ja gerne kein Problem. Sowas hört sich als Idee gar nicht mal so schlecht an. Den MySQL-Server mit installieren zu lassen sollte nicht das Problem sein. Selbst eine benutzerdefinierte Datenbank mit extra User und Passwort sollte gut machbar sein. Das "Hardening" der Datenbank wird ja mit einem extra Command aufgerufen aber auch das können wir einfügen. Als Auto-Updater können wir gucken, ob wir einfach die letzte "recommended Version" als URL grabben. Dann sollten wir immer auf dem neuesten Stand sein. Bei noch benutzerfreundlicher als Batch/Bash-Script wüsste ich glaube ich nicht genau wie. Denn aktuell wird ja sowieso schon alles abgefragt und mit Fortschrittsbalken angezeigt respektive visualisiert. Es sei denn, du hättest noch Ideen die eingebaut werden sollen?

SirRezi commented 8 months ago

Hey @silez , Ich habe schon ein autoupdater eingefügt schau am besten mal nach muss es aber nochmal updaten.