alberto-moyano   Ayer, 05:05
#1
Este posteo es para compartir un modelo de trabajo instalando aplicaciones hechas con Gambas.

Estoy dando un curso de edición ramificada basada en lenguaje de marcas con LaTeX en la UBA y los alumnos (39) tienen que instalar diferentes aplicaciones, esto incluye mi desarrollo en gambas, se instalaron sin problemas todas menos mi desarrollo, lo que fue un fiasco, se supone que al instalarse las aplicaciones, el instalador «lee» todos los componentes necesarios y los instala, pero por algún motivo solo instala algunos (el runtime y algunos más), desconozco que hace para decidir que instala y que no, la cuestión es que encontré una salida, que no es común, pero funciona 100% efectiva.

Hice un script (se corre con sudo su) en bash que lee que distro esta corriendo e instala todos los componentes que están listados, luego se puede instalar la app de gambas con 0 error, les comparto el script

Código:
#!/bin/bash

# Lista de componentes que necesita el programa
COMPONENTES=(
    gambas3-runtime
    gambas3-gb-db
    gambas3-gb-db-sqlite3
    gambas3-gb-dbus
    gambas3-gb-desktop
    gambas3-gb-form
    gambas3-gb-form-dialog
    gambas3-gb-form-terminal
    gambas3-gb-image
    gambas3-gb-inotify
    gambas3-gb-net
   gambas3-gb-net-curl
   gambas3-gb-qt5
   gambas3-gb-qt5-ext
   gambas3-gb-qt5-webview
   gambas3-gb-settings
   gambas3-gb-term
   gambas3-gb-util
   gambas3-gb-util-web
)

echo "Detectando distribución..."

# Detectar distribución
if [ -f /etc/os-release ]; then
    . /etc/os-release
    DISTRO=$ID
else
    echo "No se pudo detectar la distribución. Instalación cancelada."
    exit 1
fi

# Función para instalar componentes si no están instalados
instalar_si_faltan() {
    local comando_check=$1
    local comando_instalar=$2

    for comp in "${COMPONENTES[@]}"; do
        if ! eval "$comando_check $comp" &>/dev/null; then
            echo "Instalando $comp..."
            eval "$comando_instalar $comp"
        else
            echo "$comp ya está instalado. Omitiendo."
        fi
    done
}

# Instalar según distribución
case "$DISTRO" in
    ubuntu|debian|linuxmint)
        echo "Distribución Debian/Ubuntu/Mint detectada."
        apt update
        instalar_si_faltan "dpkg -s" "sudo apt install -y"
        ;;

    opensuse*|suse)
        echo "Distribución openSUSE detectada."
        instalar_si_faltan "rpm -q" "sudo zypper install -y"
        ;;

    fedora)
        echo "Distribución Fedora detectada."
        instalar_si_faltan "rpm -q" "sudo dnf install -y"
        ;;

    arch|manjaro)
        echo "Distribución Arch/Manjaro detectada."
        instalar_si_faltan "pacman -Q" "sudo pacman -S --noconfirm"
        ;;

    *)
        echo "Distribución $DISTRO no soportada automáticamente."
        echo "Por favor instala manualmente los siguientes componentes:"
        printf '%s\n' "${COMPONENTES[@]}"
        exit 1
        ;;
esac

echo "Todos los componentes de Gambas han sido verificados e instalados según necesidad."
Última modificación: Ayer, 05:08 por alberto-moyano.
Shordi   Ayer, 11:35
#2
Cita:pero por algún motivo solo instala algunos (el runtime y algunos más), desconozco que hace para decidir que instala y que no
Se supone que instala sólo los necesarios para que el programa funcione, es decir los que tienes enlazados en las propiedades del proyecto->componentes. Por tanto ¿esos pocos que instala son suficientes para correr tu programa o el programa no funciona por falta de algún componente?
Si no son suficientes, malo. Pero si lo son, no hay problema, es como debe ser.

Te sugiero otra estrategia:
al crear el paquete instalador de tu programa, añade los otros programas que tu entorno necesita y los alumnos sólo tienen que instalar el tuyo. Los otros se añadirán como dependencia y se instalarán solos.
Esta es la pantalla a la hora de crear el paquete de uno de mis programas que necesita el openvpn y demás para funcionar.
[Imagen: RurXSy5l.png]

Saludos
Última modificación: Ayer, 11:37 por Shordi.

No podemos regresar
alberto-moyano   Ayer, 13:16
#3
Hola Shordi,

el tema es justamente que no instala todos los componentes necesarios del programa, por ende falla al querer usarlo, de ahí que expresara que no entiendo por qué instala algunos y no todos los necesarios del programa Huh .

Muy buena tu sugerencia, tomo nota.
Shordi   Ayer, 20:38
#4
Cita: el tema es justamente que no instala todos los componentes necesarios del programa, por ende falla al querer usarlo, de ahí que expresara que no entiendo por qué instala algunos y no todos los necesarios del programa
Pues entonces huele a problemas de dependencias y entornos gráficos. Si lo compilas con el componente gb.gui o gb.gui.qt, se supone que no hay problemas... pero entonces la distribución se complica mucho porque genera un .deb (o la paquetería que uses) por cada una de las versiones (qt5,qt6,gtk3, etc) y un metapaquete que decide cuál es el correcto para el ordenador del alumno. Si has compilado con qt5 o qt6 o gtk sólo, entonces depende de la versión del sistema operativo de los alumnos. Hay versiones algo antiguas que no llevan qt6, por ejemplo o qt4 si son más modernas. En mis días aquello fue uno de los caballos de batalla en la empresa y no hay más remedio a forzar a los usuarios a que mantengan sus ordenadores dentro de un marco de versiones del sistema operativo... y a que usen todos la misma familia de Sistemas, que si debian, que si Arch, etc.

La solución guay es montarte un repositorio propio. Yo monté uno en la empresa y entonces basta subir tu nuevo .deb al mismo y se actualiza en todas las máquinas junto con las actualizaciones normales. Eso sí, todas las máquinas tenían linuxmint y si la versión era demasiado antigua, era necesario que se actualizase. Ahí desarrollé un programa de conexión a la VPN que comprobaba todas esas cosas al conectar y primero avisaba y si se seguía sin actualizar bloqueaba el acceso a la misma... pero es un tema más complejo de lo que puedo contar aquí.

Saludos

No podemos regresar
  
Usuarios navegando en este tema: 1 invitado(s)
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.