284 lines
10 KiB
Bash
Executable File
284 lines
10 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
# Pide la contraseña de sudo al principio (si no tiene permisos)
|
|
if ! sudo -v; then
|
|
echo "Este script requiere permisos de sudo para algunas operaciones."
|
|
exit 1
|
|
fi
|
|
|
|
# Refresca el tiempo de sudo mientras el script corre
|
|
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &
|
|
|
|
# =======================
|
|
# VARIABLES Y FUNCIONES
|
|
# =======================
|
|
BUILD_DIR="build"
|
|
DEB_DIR="$BUILD_DIR/Deb64"
|
|
DEBS_OUT="$BUILD_DIR/debs"
|
|
TMP_DIR="$BUILD_DIR/tmp"
|
|
EMALIBRE_DIR="$BUILD_DIR/emalibre"
|
|
EMALIBRE_NOGUI="$TMP_DIR/emalibre_nogui"
|
|
CONTROL_DEB="$BUILD_DIR/controlDeb"
|
|
LOG_FILE="/tmp/ema.log"
|
|
NODE_HID_LOG="/tmp/ema-node-hid.log"
|
|
|
|
function log_info() { printf "\033[1;10m$1\033[0m"; }
|
|
function log_ok() { printf "\033[1;32m$1\033[0m\n"; }
|
|
function log_warn() { printf "\033[1;33m$1\033[0m\n"; }
|
|
function log_error() { printf "\033[1;31m$1\033[0m\n"; }
|
|
function log_final() { printf "\033[5;10m$1\033[0m\n"; }
|
|
|
|
function spinner() {
|
|
local info="$1"
|
|
local pid=$!
|
|
local delay=0.25
|
|
local spinstr='|/-\'
|
|
while kill -0 $pid 2> /dev/null; do
|
|
local temp=${spinstr#?}
|
|
printf " [%c] $info" "$spinstr"
|
|
local spinstr=$temp${spinstr%"$temp"}
|
|
sleep $delay
|
|
local reset="\b\b\b\b\b"
|
|
for ((i=1; i<=$(echo $info | wc -c); i++)); do
|
|
reset+="\b"
|
|
done
|
|
printf $reset
|
|
done
|
|
printf " \b\b\b\b"
|
|
}
|
|
|
|
# =======================
|
|
# VERSIONES
|
|
# =======================
|
|
VERSION=$(grep Version src/conf/ConfiguracionGlobal.js | sed -e "s/'Version': //g" | sed -e "s/,//g" | sed -e "s/^[ \t]*//")
|
|
NWJS_VERSION=$(node src/tools/nw.cjs version)
|
|
|
|
# =======================
|
|
# INICIO
|
|
# =======================
|
|
echo ""
|
|
echo "*************************************************"
|
|
echo "* Comprobando y preparando el entorno ***"
|
|
echo "*************************************************"
|
|
echo ""
|
|
log_info "--->Versión de EmaLibre: $VERSION \n"
|
|
log_info "----- >Versión de NW.Js: $NWJS_VERSION \n"
|
|
echo ""
|
|
|
|
# =======================
|
|
# LIMPIEZA Y PREPARACIÓN
|
|
# =======================
|
|
log_info "1) Limpiando compilación anterior."
|
|
mkdir -p "$DEB_DIR/usr/bin" "$DEB_DIR/usr/share/emalibre" "$DEBS_OUT"
|
|
sudo rm -rf "$EMALIBRE_DIR"/* "$TMP_DIR/emalibre_nogui" "$DEB_DIR/usr/bin/"* "$DEB_DIR/usr/share/emalibre/"*
|
|
log_ok " --> OK."
|
|
|
|
# =======================
|
|
# DEPENDENCIAS DEL SISTEMA
|
|
# =======================
|
|
log_info "2) Instalando/comprobando paquetes con APT necesarios."
|
|
sudo apt-get -y -qq install build-essential git wget libusb-1.0-0 libusb-1.0-0-dev libudev-dev lld binutils
|
|
sudo chmod -R 755 "$DEB_DIR"
|
|
log_ok " --> OK."
|
|
|
|
# =======================
|
|
# DEPENDENCIAS NODE/NPM
|
|
# =======================
|
|
log_info "3) Verificando node y dependencias:\n"
|
|
|
|
if ! command -v node >/dev/null 2>&1; then
|
|
log_error " --> Node.js no está instalado. Instálelo manualmente."
|
|
exit 1
|
|
else
|
|
log_ok " 3.1) Node.js OK."
|
|
fi
|
|
|
|
if ! command -v npm >/dev/null 2>&1; then
|
|
log_error " --> npm no está instalado. Instálelo manualmente."
|
|
exit 1
|
|
else
|
|
log_ok " 3.2) npm OK."
|
|
fi
|
|
|
|
if ! npm list --depth=0 | grep -q nw-builder@; then
|
|
log_warn " 3.4) nw-builder no encontrado localmente. Instalando..."
|
|
npm install --no-audit --silent 2>>"$LOG_FILE" 1>/dev/null
|
|
log_ok " --> nw-builder instalado."
|
|
else
|
|
log_ok " 3.3) nw-builder OK."
|
|
fi
|
|
|
|
# =======================
|
|
# EMPAQUETADO
|
|
# =======================
|
|
log_info "4) Empaquetando el proyecto emalibre."
|
|
|
|
if node empaquetarLinux.js | grep -q "Correcto!"; then
|
|
log_ok " --> OK. "
|
|
else
|
|
log_error " --> ERROR. Problema empaquetando con nw-builder."
|
|
exit 1
|
|
fi
|
|
|
|
# =======================
|
|
# PERMISOS Y NODE_MODULES
|
|
# =======================
|
|
log_info "5) Aplicando Permisos al proyecto."
|
|
sudo chmod -R 755 "$EMALIBRE_DIR/package.nw"
|
|
log_ok " --> OK."
|
|
|
|
log_info "6) Eliminando node_modules del proyecto."
|
|
rm -rf "$EMALIBRE_DIR/package.nw/node_modules"
|
|
log_ok " --> OK."
|
|
|
|
log_info "7) Generando node_modules con NPM del proyecto."
|
|
cd "$EMALIBRE_DIR/package.nw"
|
|
npm ci --only=production --no-audit --silent 2>>"$LOG_FILE" 1>/dev/null
|
|
log_ok " --> OK."
|
|
|
|
# =======================
|
|
# LIMPIEZA DE LOGS Y CONFIG
|
|
# =======================
|
|
log_info "8) Se purgan los tanques y logs."
|
|
: > logs/debug.log
|
|
echo "[]" > logs/TanquePendientes.log
|
|
echo "[]" > logs/registro_diario.log
|
|
log_ok " --> OK."
|
|
|
|
log_info "9) Se blanquea el archivo de Configuracion General."
|
|
cp ../../conf/ConfiguracionGeneral.js conf/ConfiguracionGeneral.js
|
|
log_ok " --> OK."
|
|
cd ../../..
|
|
|
|
log_info "9.1) Se copia emalibre antes de implementar el módulo node-hid con NWJS."
|
|
cp -R "$EMALIBRE_DIR" "$TMP_DIR/emalibre_nogui"
|
|
chmod -R 755 "$TMP_DIR/emalibre_nogui"
|
|
cd "$EMALIBRE_DIR/package.nw"
|
|
log_ok " --> OK."
|
|
|
|
log_info "10) Corriendo el post-script para el rebuild del módulo node-hid en i64."
|
|
npm run postLINUX --no-audit --silent >"$NODE_HID_LOG" 2>&1 &
|
|
REBUILD_PID=$!
|
|
spinner "Procesando..."
|
|
if wait "$REBUILD_PID"; then
|
|
log_ok " --> OK. "
|
|
else
|
|
REBUILD_STATUS=$?
|
|
log_error " --> ERROR. Falló el rebuild de node-hid (código $REBUILD_STATUS). Detalle:"
|
|
tail -n 80 "$NODE_HID_LOG"
|
|
exit "$REBUILD_STATUS"
|
|
fi
|
|
cd ../../..
|
|
|
|
# =======================
|
|
# BUILD GUI DESKTOP
|
|
# =======================
|
|
echo ""
|
|
echo "*************************************************"
|
|
echo "* Build EMA Libre Cliente Gráfico - GNU/Linux *"
|
|
echo "*************************************************"
|
|
echo ""
|
|
log_info "1) Limpiando archivos temporales."
|
|
sudo rm -f "$DEB_DIR/DEBIAN/control"
|
|
sudo rm -rf "$DEB_DIR/usr/bin/"* "$DEB_DIR/usr/share/emalibre/"*
|
|
log_ok " --> OK."
|
|
|
|
log_info "2) Copiando los fuentes de EMA Libre para 64 bits."
|
|
sudo cp -R "$EMALIBRE_DIR/"* "$DEB_DIR/usr/share/emalibre/"
|
|
# Las plantillas también se usan para web, cuya raíz no contiene package.nw.
|
|
sudo sed -i 's|^Icon=.*|Icon=/usr/share/emalibre/package.nw/gui_common/iconos/icono_app.png|; s|^Actions=.*|Actions=RootWindow;Window;|' "$DEB_DIR/usr/share/applications/emalibre.desktop"
|
|
sudo sed -i 's|^icon=.*|icon="/usr/share/emalibre/package.nw/gui_common/iconos/icono_app.png"|' "$DEB_DIR/usr/share/menu/emalibre"
|
|
log_ok " --> OK."
|
|
|
|
log_info "3) Reemplazando el archivo de control DEB."
|
|
sudo cp -f "$CONTROL_DEB/control_linux_gui" "$DEB_DIR/DEBIAN/control"
|
|
log_ok " --> OK."
|
|
|
|
log_info "4) Aplicando permisos necesarios."
|
|
sudo chmod +x "$DEB_DIR/usr/share/emalibre/emalibre"
|
|
sudo chmod 0755 "$DEB_DIR/DEBIAN" "$DEB_DIR/DEBIAN/postrm" "$DEB_DIR/DEBIAN/postinst" "$DEB_DIR/DEBIAN/preinst"
|
|
sudo chown -R root:root "$DEB_DIR"
|
|
log_ok " --> OK."
|
|
|
|
log_info "5) Generando enlaces simbólicos del binario."
|
|
sudo ln -sf ../share/emalibre/emalibre "$DEB_DIR/usr/bin/emalibre"
|
|
log_ok " --> OK."
|
|
|
|
log_info "6) Eliminando node/web/express/forever/servicio para modo GUI y la interfaz para el modo web."
|
|
sudo mv "$DEB_DIR/etc/init.d" "$TMP_DIR" 2>/dev/null || true
|
|
sudo mv "$DEB_DIR/etc/emalibre_modo" "$TMP_DIR" 2>/dev/null || true
|
|
sudo rm -rf "$DEB_DIR/usr/share/emalibre/node_modules/node" \
|
|
"$DEB_DIR/usr/share/emalibre/node_modules/express" \
|
|
"$DEB_DIR/usr/share/emalibre/node_modules/forever" \
|
|
"$DEB_DIR/usr/share/emalibre/node_modules/forever-agent" \
|
|
"$DEB_DIR/usr/share/emalibre/node_modules/forever-monitor" \
|
|
"$DEB_DIR/usr/share/emalibre/gui_web"
|
|
log_ok " --> OK."
|
|
|
|
log_info "7) Generando Paquete DEB para GUI 64 bits Linux."
|
|
#sudo dpkg -b Deb64 debs/"emalibre-gui-linux_$VERSION.deb"
|
|
sudo dpkg-deb -Zxz -b "$DEB_DIR" "$DEBS_OUT/emalibre-gui-linux_$VERSION.deb"
|
|
mv "$TMP_DIR/init.d" "$DEB_DIR/etc" 2>/dev/null || true
|
|
mv "$TMP_DIR/emalibre_modo" "$DEB_DIR/etc/emalibre_modo" 2>/dev/null || true
|
|
log_final " Finalizó con éxito, build/debs/emalibre-gui-linux_$VERSION.deb."
|
|
log_ok " --> OK."
|
|
|
|
log_info "8) Limpiando archivos temporales."
|
|
sudo rm -f "$DEB_DIR/DEBIAN/control"
|
|
sudo rm -rf "$DEB_DIR/usr/bin/"* "$DEB_DIR/usr/share/emalibre/"*
|
|
log_ok " --> OK."
|
|
|
|
# =======================
|
|
# BUILD CONSOLA/WEB
|
|
# =======================
|
|
echo ""
|
|
echo "*************************************************"
|
|
echo "* Build EMA Libre Cliente Web - GNU/Linux *"
|
|
echo "*************************************************"
|
|
echo ""
|
|
log_info "1) Limpiando archivos temporales."
|
|
rm -f "$DEB_DIR/DEBIAN/control"
|
|
rm -rf "$DEB_DIR/usr/bin/"* "$DEB_DIR/usr/share/emalibre/"*
|
|
log_ok " --> OK."
|
|
log_info "2) Copiando los fuentes de EMA Libre para 64bit."
|
|
sudo cp -R "$TMP_DIR/emalibre_nogui/package.nw/core" "$DEB_DIR/usr/share/emalibre/"
|
|
sudo cp -R "$TMP_DIR/emalibre_nogui/package.nw/logs" "$DEB_DIR/usr/share/emalibre/"
|
|
sudo cp -R "$TMP_DIR/emalibre_nogui/package.nw/conf" "$DEB_DIR/usr/share/emalibre/"
|
|
sudo cp -R "$TMP_DIR/emalibre_nogui/package.nw/gui_web" "$DEB_DIR/usr/share/emalibre/"
|
|
sudo cp -R "$TMP_DIR/emalibre_nogui/package.nw/gui_common" "$DEB_DIR/usr/share/emalibre/"
|
|
sudo cp -R "$TMP_DIR/emalibre_nogui/package.nw/node_modules" "$DEB_DIR/usr/share/emalibre/"
|
|
sudo cp -R "$TMP_DIR/emalibre_nogui/package.nw/CHANGELOG" "$DEB_DIR/usr/share/emalibre/"
|
|
sudo cp -R "$TMP_DIR/emalibre_nogui/package.nw/COPYING" "$DEB_DIR/usr/share/emalibre/"
|
|
sudo cp -R "$TMP_DIR/emalibre_nogui/package.nw/AUTHORS" "$DEB_DIR/usr/share/emalibre/"
|
|
sudo cp -R "$TMP_DIR/emalibre_nogui/package.nw/package.json" "$DEB_DIR/usr/share/emalibre/"
|
|
|
|
log_ok " --> OK."
|
|
|
|
log_info "3) Remplazando el archivo de control DEB."
|
|
sudo cp -f "$CONTROL_DEB/control_linux_web" "$DEB_DIR/DEBIAN/control"
|
|
sudo sed -i 's|/emalibre/package.nw/gui_common/|/emalibre/gui_common/|' "$DEB_DIR/usr/share/applications/emalibre.desktop" "$DEB_DIR/usr/share/menu/emalibre"
|
|
log_ok " --> OK."
|
|
|
|
log_info "4) Aplicando permisos necesarios."
|
|
sudo chmod 0755 "$DEB_DIR/DEBIAN" "$DEB_DIR/DEBIAN/postrm" "$DEB_DIR/DEBIAN/postinst" "$DEB_DIR/DEBIAN/preinst"
|
|
sudo chown -R root:root "$DEB_DIR"
|
|
log_ok " --> OK."
|
|
|
|
cd "$BUILD_DIR"
|
|
log_info "7) Generando Paquete DEB para Web 64bit Linux."
|
|
#sudo dpkg -b Deb64 debs/"emalibre-web-linux_$VERSION.deb"
|
|
sudo dpkg-deb -Zxz -b Deb64 debs/"emalibre-web-linux_$VERSION.deb"
|
|
|
|
cd ..
|
|
log_final " Finalizó con éxito, build/debs/emalibre-web-linux_$VERSION.deb."
|
|
log_ok " --> OK."
|
|
|
|
log_info "8) Limpiando archivos temporales."
|
|
sudo rm -f "$DEB_DIR/DEBIAN/control"
|
|
sudo rm -rf "$DEB_DIR/usr/bin/"* "$DEB_DIR/usr/share/emalibre/"*
|
|
sudo rm -rf "$EMALIBRE_DIR"
|
|
log_ok " --> OK."
|
|
echo ""
|
|
|
|
exit 0 |