commit f174d8145dd9b63701612c1f57168100bfc9ee25 Author: chokob0 <39225619+chokob0@users.noreply.github.com> Date: Fri Oct 10 23:29:42 2025 +0200 Add files via upload diff --git a/emuambeserver.sh b/emuambeserver.sh new file mode 100644 index 0000000..0e9ec18 --- /dev/null +++ b/emuambeserver.sh @@ -0,0 +1,256 @@ +#!/bin/bash + +# Este script instala el emulador md380tools en Ubuntu Server 22.04+ (aarch64) +# y proporciona un menu interactivo para su configuracion y control. + +# --- Variables y configuracion --- + +REQUIRED_PKGS=( + "gcc" + "make" + "git" + "gcc-arm-linux-gnueabihf" + "qemu-user" + "qemu-user-static" + "binfmt-support" + "wget" + "tar" +) + +# Dependencias para compilar Python 2 +PYTHON2_DEPS=( + "build-essential" + "libssl-dev" + "zlib1g-dev" + "libncurses5-dev" + "libncursesw5-dev" + "libreadline-dev" + "libsqlite3-dev" + "libgdbm-dev" + "libbz2-dev" + "liblzma-dev" + "tk-dev" + "uuid-dev" +) + +EMU_DIR="/opt/md380-emu" +SERVICE_FILE="/lib/systemd/system/emu-ambe.service" +PYTHON2_VERSION="2.7.18" +PYTHON2_INSTALL_DIR="/opt/python2" + +# Valores por defecto del servicio +DEFAULT_PORT=2460 +DEFAULT_CONNECTIONS=5 + +# --- Funciones --- + +function log_info() { + echo -e "\e[32m[INFO]\e[0m $1" +} + +function log_error() { + echo -e "\e[31m[ERROR]\e[0m $1" +} + +function check_pkg_installed() { + dpkg -l "$1" &> /dev/null + return $? +} + +function install_dependencies() { + log_info "Verificando e instalando dependencias del sistema..." + for pkg in "${REQUIRED_PKGS[@]}"; do + if ! check_pkg_installed "$pkg"; then + log_info "Instalando $pkg..." + sudo apt update + sudo apt install -y "$pkg" || { + log_error "Falló la instalacion de $pkg. Abortando." + exit 1 + } + fi + done +} + +function install_python2() { + log_info "Verificando e instalando Python 2.7.18 desde el codigo fuente..." + if ! command -v python2 &> /dev/null; then + log_info "Python2 no esta disponible. Procediendo con la instalacion..." + + log_info "Instalando dependencias de compilacion de Python..." + for pkg in "${PYTHON2_DEPS[@]}"; do + if ! check_pkg_installed "$pkg"; then + sudo apt install -y "$pkg" || { + log_error "Falló la instalacion de las dependencias de Python 2. Abortando." + exit 1 + } + fi + done + + cd /tmp || exit 1 + sudo wget "https://www.python.org/ftp/python/$PYTHON2_VERSION/Python-$PYTHON2_VERSION.tgz" || { + log_error "Falló la descarga de Python 2. Abortando." + exit 1 + } + sudo tar xzf "Python-$PYTHON2_VERSION.tgz" || { + log_error "Falló la descompresion del archivo de Python 2. Abortando." + exit 1 + } + cd "Python-$PYTHON2_VERSION" || exit 1 + sudo ./configure --prefix="$PYTHON2_INSTALL_DIR" || { + log_error "Falló la configuracion de Python 2. Abortando." + exit 1 + } + sudo make -j"$(nproc)" || { + log_error "Falló la compilacion de Python 2. Abortando." + exit 1 + } + sudo make install || { + log_error "Falló la instalacion de Python 2. Abortando." + exit 1 + } + + sudo ln -s "$PYTHON2_INSTALL_DIR/bin/python2.7" /usr/local/bin/python2 + log_info "Python 2.7.18 instalado y disponible como 'python2'." + else + log_info "Python 2 ya esta instalado." + fi +} + +function compile_and_setup() { + log_info "Configurando el directorio del emulador..." + if [ -d "$EMU_DIR" ]; then + log_info "Directorio $EMU_DIR ya existe. Deteniendo el servicio y limpiando..." + (systemctl is-active emu-ambe.service --quiet || systemctl is-enabled emu-ambe.service --quiet) && sudo systemctl stop emu-ambe.service + sudo rm -r "$EMU_DIR" + fi + + log_info "Clonando el repositorio de md380tools..." + sudo git clone https://gitlab.com/hp3icc/md380tools.git "$EMU_DIR" || { + log_error "Falló la clonacion del repositorio. Verifica la conexion a Internet." + return 1 + } + + log_info "Compilando el emulador..." + cd "$EMU_DIR/emulator" || { + log_error "No se pudo cambiar al directorio del emulador." + return 1 + } + + make || { + log_error "Falló la compilacion del emulador. Revisa el log de errores." + return 1 + } + log_info "Compilacion exitosa." + + create_systemd_service $DEFAULT_PORT $DEFAULT_CONNECTIONS + log_info "La instalacion ha finalizado." + return 0 +} + +function create_systemd_service() { + PORT=$1 + CONNECTIONS=$2 + cat > "$SERVICE_FILE" <<- EOF +[Unit] +Description=Emulator AMBE3000 +After=network.target + +[Service] +Type=simple +Restart=always +RestartSec=3 +StandardOutput=null +WorkingDirectory=/opt/md380-emu/emulator +ExecStart=/usr/bin/qemu-arm /opt/md380-emu/emulator/md380-emu -d -e -s $PORT -m $CONNECTIONS + +[Install] +WantedBy=multi-user.target +EOF + + sudo systemctl daemon-reload +} + +function show_main_menu() { + while true; do + clear + log_info "--- Menu de gestion del emulador AMBE3000 ---" + echo "" + echo "1) Iniciar el servicio" + echo "2) Detener el servicio" + echo "3) Ver el estado del servicio" + echo "4) Configurar puerto y numero de conexiones" + echo "5) Habilitar/Deshabilitar el inicio automatico" + echo "6) Salir" + echo "" + read -p "Elige una opcion: " option + + case $option in + 1) + sudo systemctl start emu-ambe.service + log_info "Comando de inicio del servicio enviado." + read -p "Presiona Enter para continuar..." + ;; + 2) + sudo systemctl stop emu-ambe.service + log_info "Comando de parada del servicio enviado." + read -p "Presiona Enter para continuar..." + ;; + 3) + log_info "Mostrando el estado del servicio..." + sudo systemctl status emu-ambe.service --no-pager + read -p "Presiona Enter para continuar..." + ;; + 4) + log_info "Configurando puerto y conexiones." + read -p "Introduce el nuevo puerto (ej. 2460): " new_port + read -p "Introduce el maximo de conexiones (ej. 5): " new_connections + if [[ $new_port =~ ^[0-9]+$ ]] && [[ $new_connections =~ ^[0-9]+$ ]]; then + create_systemd_service $new_port $new_connections + log_info "Configuracion actualizada. Reiniciando el servicio..." + sudo systemctl restart emu-ambe.service + else + log_error "Valores invalidos. Por favor, introduce solo numeros." + fi + read -p "Presiona Enter para continuar..." + ;; + 5) + log_info "Habilitando/Deshabilitando inicio automatico." + read -p "Deseas que el servicio se inicie automaticamente al arrancar el servidor? (s/n): " auto_start + if [[ "$auto_start" =~ ^[sS]$ ]]; then + sudo systemctl enable emu-ambe.service + log_info "Inicio automatico habilitado." + else + sudo systemctl disable emu-ambe.service + log_info "Inicio automatico deshabilitado." + fi + read -p "Presiona Enter para continuar..." + ;; + 6) + log_info "Saliendo del menu." + break + ;; + *) + log_error "Opcion invalida. Por favor, elige una opcion valida." + read -p "Presiona Enter para continuar..." + ;; + esac + done +} + +# --- Flujo principal del script --- + +install_dependencies +install_python2 + +# Verificamos si el emulador ya esta compilado +if [ ! -f "$EMU_DIR/emulator/md380-emu" ]; then + compile_and_setup + if [ $? -ne 0 ]; then + log_error "La instalacion falló. Revisa los errores." + exit 1 + fi +else + log_info "El emulador ya está instalado. Iniciando el menu de gestion..." +fi + +show_main_menu