Compare commits

..

No commits in common. "main" and "1.1.3" have entirely different histories.
main ... 1.1.3

12 changed files with 534 additions and 6 deletions

View File

@ -5,12 +5,6 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.2.0] - 2025-08-26
### Removed
- Removed init bash files
## [1.1.3] - 2025-08-08
### Fixed

View File

@ -0,0 +1,46 @@
#!/bin/bash
# Proceso general de arranque de OpenGnsys Client.
# Fichero de registro de incidencias (en el servidor; si no, en local).
OPENGNSYS=${OPENGNSYS:-/opt/opengnsys}
OGLOGFILE=${OGLOGFILE:-$OPENGNSYS/log/$(ogGetIpAdderss).log}
if ! touch $OGLOGFILE 2>/dev/null; then
OGLOGFILE=/var/log/opengnsys.log
fi
LOGLEVEL=5
# Matando plymount para inicir browser o shell
pkill -9 plymouthd
# Arranque de OpenGnsys Client daemon (socket).
echo "${MSG_LAUNCHCLIENT:-.}"
# Indicar fichero de teclado de Qt para el idioma especificado (tipo "es.qmap").
[ -f /usr/local/etc/${LANG%_*}.qmap ] && export QWS_KEYBOARD="TTY:keymap=/usr/local/etc/${LANG%_*}.qmap"
if [ -f "/usr/share/OGAgent/opengnsys/linux/OGAgentService.py" -a "$ogstatus" != "offline" ]; then
# Ejecutar servicio cliente.
cd /usr/share/OGAgent
export OGAGENTCFG_OGCORE_IP=$ogcore
export OGAGENTCFG_OGLOG_IP=$oglog
export OGAGENTCFG_URLMENU_SCHEME=http
export OGAGENTCFG_URLMENU_IP=127.0.0.1
export OGAGENTCFG_URLMENU_PORT=81
(
## remove bash functions and some OG vars from the agent's environment
unset -f $(declare -F |awk '/og[A-Z]|NT[A-Z]/ { print $3 }')
unset $(declare |awk -F= '/^MSG_|^OG_ERR_/ { print $1 }')
python3 -m opengnsys.linux.OGAgentService fg
)
else
for FILE in index $OGGROUP $(ogGetIpAddress)
do
[ -f $OGCAC/menus/$FILE.html ] && OGMENU="$OGCAC/menus/$FILE.html"
done
$OPENGNSYS/bin/launch_browser $OGMENU
fi
# Si fallo en cliente y modo "admin", cargar shell; si no, salir.
if [ "$ogactiveadmin" == "true" ]; then
bash
fi

View File

@ -0,0 +1,12 @@
#!/bin/bash
F=/opt/opengnsys/functions
## BootLib.bootOs() makes a copy of grub.cfg in /boot/grub within the ESP
## clean it up
if $F/ogIsEfiActive; then
ESP=$($F/ogGetEsp)
MNTPT=$($F/ogMount $ESP)
rm -f $MNTPT/boot/grub/grub.cfg
$F/ogUnmount $ESP
fi

View File

@ -0,0 +1,32 @@
#!/bin/bash
if grep -q pyinit=false /proc/cmdline; then
echo "shell init"
else
echo "python init"
exec /opt/opengnsys/etc/preinit.py
fi
# Cargar entorno de OpenGnsys
set -a
source /opt/opengnsys/etc/preinit/loadenviron.sh
# Scripts de inicio.
for f in cleanesp fileslinks loadmodules metadevs mountrepo poweroff filebeat otherservices; do
source $OGETC/preinit/$f.sh
done
unset f
if [ -f $OGETC/init/$IPV4ADDR.sh ]; then
$OGETC/init/$OG_IP.sh
elif [ -f $OGETC/init/$OGGROUP.sh ]; then
$OGETC/init/$OGGROUP.sh
elif [ -f $OGETC/init/default.sh ]; then
$OGETC/init/default.sh
else
echo "No se ha encontrado script de inicio"
halt
fi

View File

@ -0,0 +1,19 @@
#!/bin/bash
F=/etc/filebeat/filebeat.yml
OPENSEARCH_PORT=9200
if [ -f $F ]; then
PASS=$(grep "^[ ]*\(export \)\?OPTIONS=" /scripts/ogfunctions 2>&1 |sed 's/\(.*\)pass=\(\w*\)\(.*\)/\2/') ## taken from a sibling script
PASS=${PASS:-"og"}
PASS=OG+$(echo -n $PASS |sha256sum |cut -c1-12) ## og KDF
chmod 0600 $F
sed -i -e "s/__OGLOG_IP__/$oglog/g" \
-e "s/__OGLOG_PORT__/$OPENSEARCH_PORT/g" \
-e "s/__OPENSEARCH_PASSWORD__/$PASS/g" \
$F
unset PASS
mkdir -p /var/log/filebeat
/usr/bin/filebeat -c $F --path.home /usr/share/filebeat --path.config /etc/filebeat --path.data /var/lib/filebeat --path.logs /var/log/filebeat &
fi

View File

@ -0,0 +1,53 @@
#!/bin/bash
#/**
#@file fileslinks.sh
#@brief Script de inicio para copiar ficheros y deinir enlaces simbólicos.
#@warning License: GNU GPLv3+
#@version 0.9
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-10-10
#@version 1.0.5 - Enlace para librería libmac (obsoleto en versión 1.1.1).
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2012-06-28
#@version 1.1.2 - Autenticación con clave pública para SSH
#@author Irina Gómez, ETSII Universidad de Sevilla
#@date 2019-09-25
#*/
# Si está configurado OpenGnsys ...
if [ -n "$OPENGNSYS" ]; then
echo "${MSG_MAKELINKS:-.}"
# Shell BASH por defecto (para usar "runtest")
ln -fs /bin/bash /bin/sh 2>/dev/null
# Crear directorio de bloqueos
mkdir -p /var/lock 2>/dev/null || mkdir -p /run/lock
# Crear ficheros temporales.
touch $OGLOGCOMMAND $OGLOGCOMMAND.tmp $OGLOGSESSION /tmp/menu.tmp
chmod 777 $OGLOGCOMMAND $OGLOGCOMMAND.tmp $OGLOGSESSION /tmp/menu.tmp
# Enlaces para Qt Embeded.
QTDIR="/usr/local"
mkdir -p $QTDIR/{etc,lib,plugins}
for i in $OGLIB/qtlib/* $OGLIB/fonts; do
[ -f $QTDIR/lib/$i ] || ln -fs $i $QTDIR/lib 2>/dev/null
done
for i in $OGLIB/qtplugins/*; do
[ -f $QTDIR/plugins/$i ] || ln -fs $i $QTDIR/plugins 2>/dev/null
done
for i in $OGETC/*.qmap; do
[ -f $QTDIR/etc/$i ] || ln -fs $i $QTDIR/etc 2>/dev/null
done
# Autenticación con clave pública para SSH
[ -f /scripts/ssl/authorized_keys ] && cp /scripts/ssl/* /root/.ssh
else
# FIXME Error: entorno de OpenGnsys no configurado.
echo "Error: OpenGnsys environment is not configured." # FIXME: definir mensaje.
exit 1
fi

View File

@ -0,0 +1,150 @@
#!/bin/bash
#/**
#@file loadenviron.sh
#@brief Script de carga de la API de funciones de OpenGnsys.
#@warning License: GNU GPLv3+
#@version 0.9
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-10-10
#@version 1.0.3 - Limpiar código y configuración modo off-line
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2012-01-12
#@version 1.0.5 - Compatibilidad para usar proxy y servidor DNS.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2014-04-23
#*/
# Idioma por defecto.
export LANG="${LANG:-es_ES}"
locale-gen $LANG
# Directorios del proyecto OpenGnsys.
export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}"
if [ -d $OPENGNSYS ]; then
export OGBIN=$OPENGNSYS/bin
export OGETC=$OPENGNSYS/etc
export OGLIB=$OPENGNSYS/lib
export OGAPI=$OGLIB/engine/bin
export OGPYFUNCS=$OPENGNSYS/functions
export OGSCRIPTS=$OPENGNSYS/scripts
export OGIMG=$OPENGNSYS/images
export OGCAC=$OPENGNSYS/cache
export OGLOG=$OPENGNSYS/log
export PATH=$OGSCRIPTS:$OGPYFUNCS:$OGBIN:$PATH:/opt/oglive/rootfs/opt/drbl/sbin
export PYTHONPATH=$OPENGNSYS/lib/python3
# Exportar parámetros del kernel.
for i in $(cat /proc/cmdline); do
echo $i | grep -q "=" && export $i
done
# Cargar sysctls
sysctl -p &>/dev/null
# Cargar fichero de idioma.
LANGFILE=$OGETC/lang.${LANG%@*}.conf
if [ -f $LANGFILE ]; then
source $LANGFILE
for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do
export $i
done
fi
# Mensaje de carga del entorno.
echo "${MSG_LOADAPI:-.}"
# Cargar mapa de teclado.
loadkeys ${LANG%_*} >/dev/null
# Cargar API de funciones.
for i in $OGAPI/*.lib; do
source $i
done
for i in $(typeset -F | cut -f3 -d" "); do
export -f $i
done
# Cargar configuración del engine.
[ -f ${OGETC}/engine.cfg ] && source ${OGETC}/engine.cfg
export OGLOGCOMMAND=${OGLOGCOMMAND:-/tmp/command.log}
export OGLOGSESSION=${OGLOGSESSION:-/tmp/session.log}
# Cargar las APIs según engine.
if [ -n "$ogengine" ]; then
for i in $OGAPI/*.$ogengine; do
[ -f $i ] && source $i
done
fi
# Configuración de la red (modo offline).
eval $(grep "^DEVICECFG=" /tmp/initrd.cfg 2>/dev/null)
if [ -n "$DEVICECFG" ]; then
export DEVICECFG
[ -f $DEVICECFG ] && source $DEVICECFG
fi
# FIXME Pruebas para grupos de ordenadores
export OGGROUP="$group"
ROOTREPO=${ROOTREPO:-"$OGSERVERIMAGES"}
# Fichero de registros.
export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log"
fi
# Compatibilidad para usar proxy en clientes ogLive.
[ -z "$http_proxy" -a -n "$ogproxy" ] && export http_proxy="$ogproxy"
# Compatibilidad para usar servidor DNS en clientes ogLive.
if [ ! -f /run/resolvconf/resolv.conf -a -n "$ogdns" ]; then
mkdir -p /run/resolvconf
echo "nameserver $ogdns" > /run/resolvconf/resolv.conf
fi
# Declaración de códigos de error.
export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto.
export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado.
export OG_ERR_PARTITION=3 # Error en partición de disco.
export OG_ERR_LOCKED=4 # Partición o fichero bloqueado.
export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen.
export OG_ERR_NOTOS=6 # Sin sistema operativo.
export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable.
# Códigos 8-13 reservados por ogAdmClient.h
export OG_ERR_NOTWRITE=14 # No hay acceso de escritura
export OG_ERR_NOTCACHE=15 # No hay particion cache en cliente
export OG_ERR_CACHESIZE=16 # No hay espacio en la cache para almacenar fichero-imagen
export OG_ERR_REDUCEFS=17 # Error al reducir sistema archivos
export OG_ERR_EXTENDFS=18 # Error al expandir el sistema de archivos
export OG_ERR_OUTOFLIMIT=19 # Valor fuera de rango o no válido.
export OG_ERR_FILESYS=20 # Sistema de archivos desconocido o no se puede montar
export OG_ERR_CACHE=21 # Error en partición de caché local
export OG_ERR_NOGPT=22 # El disco indicado no contiene una particion GPT
export OG_ERR_REPO=23 # Error al montar el repositorio de imagenes
export OG_ERR_NOMSDOS=24 # El disco indicado no contienen una particion MSDOS
export OG_ERR_IMGSIZEPARTITION=30 # Error al restaurar partición más pequeña que la imagen
export OG_ERR_UPDATECACHE=31 # Error al realizar el comando updateCache
export OG_ERR_DONTFORMAT=32 # Error al formatear
export OG_ERR_IMAGEFILE=33 # Archivo de imagen corrupto o de otra versión de $IMGPROG
export OG_ERR_GENERIC=40 # Error imprevisto no definido
export OG_ERR_UCASTSYNTAXT=50 # Error en la generación de sintaxis de transferenica UNICAST
export OG_ERR_UCASTSENDPARTITION=51 # Error en envío UNICAST de partición
export OG_ERR_UCASTSENDFILE=52 # Error en envío UNICAST de un fichero
export OG_ERR_UCASTRECEIVERPARTITION=53 # Error en la recepcion UNICAST de una particion
export OG_ERR_UCASTRECEIVERFILE=54 # Error en la recepcion UNICAST de un fichero
export OG_ERR_MCASTSYNTAXT=55 # Error en la generacion de sintaxis de transferenica Multicast.
export OG_ERR_MCASTSENDFILE=56 # Error en envio MULTICAST de un fichero
export OG_ERR_MCASTRECEIVERFILE=57 # Error en la recepcion MULTICAST de un fichero
export OG_ERR_MCASTSENDPARTITION=58 # Error en envio MULTICAST de una particion
export OG_ERR_MCASTRECEIVERPARTITION=59 # Error en la recepcion MULTICAST de una particion
export OG_ERR_PROTOCOLJOINMASTER=60 # Error en la conexion de una sesion UNICAST|MULTICAST con el MASTER
export OG_ERR_DONTMOUNT_IMAGE=70 # Error al montar una imagen sincronizada.
export OG_ERR_DONTSYNC_IMAGE=71 # Imagen no sincronizable (es monolitica)
export OG_ERR_DONTUNMOUNT_IMAGE=72 # Error al desmontar la imagen
export OG_ERR_NOTDIFFERENT=73 # No se detectan diferencias entre la imagen basica y la particion.
export OG_ERR_SYNCHRONIZING=74 # Error al sincronizar, puede afectar la creacion/restauracion de la imagen
export OG_ERR_NOTUEFI=80 # La interfaz UEFI no está activa
export OG_ERR_NOTBIOS=81 # La interfaz BIOS legacy no está activa

View File

@ -0,0 +1,23 @@
#!/bin/bash
#/**
#@file loadmodules.sh
#@brief Script de inicio para cargar módulos complementarios del kernel.
#@version 1.0
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-01-26
#@version 1.0.5 - Cargar módulos específicos para el cliente.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2013-11-11
#*/
echo "${MSG_LOADMODULES:-.}"
# Módulo del ratón.
modprobe psmouse 2>/dev/null
# Cargar módulos específicos del kernel del cliente.
for m in $OGLIB/modules/$(uname -r)/*.ko; do
[ -r $m ] && insmod $m &>/dev/null
done

View File

@ -0,0 +1,28 @@
#!/bin/bash
#/**
#@file metadevs.sh
#@brief Script de inicio para detectar metadispositivos LVM y RAID.
#@note Desglose del script "loadenviron.sh".
#@warning License: GNU GPLv3+
#@version 0.9
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-10-10
#@version 0.9.4
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-04-19
#*/
# Si está configurado OpenGnsys ...
if [ -n "$OPENGNSYS" ]; then
echo "$MSG_DETECTLVMRAID"
# Detectar metadispositivos LVM.
vgchange -ay &>/dev/null
# Detectar metadispositivos RAID.
dmraid -ay &>/dev/null
else
# FIXME Error: entorno de OpenGnsys no configurado.
echo "Error: OpenGnsys environment is not configured." # FIXME: definir mensaje.
exit 1
fi

View File

@ -0,0 +1,54 @@
#!/bin/bash
#/**
#@file mountrepo.sh
#@brief Script para montar el repositorio de datos remoto.
#@warning License: GNU GPLv3+
#@version 1.0
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2011-03-17
#*/
OGIMG=${OGIMG:-/opt/opengnsys/images}
ROOTREPO=${ROOTREPO:-"$ROOTSERVER"}
# TODO Revisar proceso de arranque para no montar 2 veces el repositorio.
if [ "$ogactiveadmin" == "true" ]; then
export boot=admin # ATENCIÓN: siempre en modo "admin".
umount $OGIMG 2>/dev/null
protocol=${ogprotocol:-"smb"}
[ "$ogunit" != "" ] && OGUNIT="/$ogunit"
printf "$MSG_MOUNTREPO\n" "$protocol" "$boot"
case "$ogprotocol" in
nfs) mount.nfs ${ROOTREPO}:$OGIMG$OGUNIT $OGIMG -o rw,nolock ;;
smb) PASS=$(grep "^[ ]*\(export \)\?OPTIONS=" /scripts/ogfunctions 2>&1 | \
sed 's/\(.*\)pass=\(\w*\)\(.*\)/\2/')
PASS=${PASS:-"og"}
mount.cifs //${ROOTREPO}/ogimages$OGUNIT $OGIMG -o rw,serverino,acl,username=opengnsys,password=$PASS
;;
local) # TODO: hacer funcion dentro de este script que monte smb
# Comprobamos que estatus sea online.
if [ "$ogstatus" == "offline" -o "$SERVER" == "" ]; then
# Si estatus es offline buscamos un dispositivo con etiqueta repo
# y si no existe montamos la cache como repo (si existe).
TYPE=$(blkid | grep REPO | awk -F"TYPE=" '{print $2}' | tr -d \")
if [ "$TYPE" == "" ]; then
[ -d $OGCAC/$OGIMG ] && mount --bind $OGCAC/$OGIMG $OGIMG
else
mount -t $TYPE LABEL=REPO $OGIMG &>/dev/null
fi
else
# Comprobamos que existe un servicio de samba.
smbclient -L $SERVER -N &>/dev/null
if [ $? -eq 0 ]; then
PASS=$(grep "^[ ]*\(export \)\?OPTIONS=" /scripts/ogfunctions 2>&1 | \
sed 's/\(.*\)pass=\(\w*\)\(.*\)/\2/')
PASS=${PASS:-"og"}
mount.cifs //${ROOTREPO}/ogimages $OGIMG -o rw,serverino,acl,username=opengnsys,password=$PASS
fi
# TODO: buscar condicion para NFS
fi
;;
esac
fi

View File

@ -0,0 +1,77 @@
#!/bin/bash
#/**
#@file otherservices.sh
#@brief Script de inicio para cargar otros servicios complementarios.
#@version 1.0.3
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2012-01-12
#*/
ogIsEfiActive && mount -t efivarfs none /sys/firmware/efi/efivars
echo "${MSG_OTHERSERVICES:-.}"
# stunnel start
cat >/etc/stunnel/menu.conf <<__EOF__
setuid = stunnel4
setgid = stunnel4
pid = /var/run/stunnel4/menu.pid
foreground = yes
debug = info
[menu]
client = yes
accept = 127.0.0.1:81
connect = $ogcore:8443
__EOF__
if [[ true == "$ogusetls" ]]; then
if [[ true == "$ogverifytls" ]]; then
## use tls and verify
cat >>/etc/stunnel/menu.conf <<__EOF__
cert = /opt/opengnsys/etc/ogagent.crt
key = /opt/opengnsys/etc/ogagent.key
CAfile = /opt/opengnsys/etc/ca.crt
requireCert = yes
verifyChain = yes
__EOF__
else
## use tls but not verify
cat >>/etc/stunnel/menu.conf <<__EOF__
cert = /opt/opengnsys/etc/ogagent.crt
key = /opt/opengnsys/etc/ogagent.key
CAfile = /opt/opengnsys/etc/ca.crt
requireCert = no
verifyChain = no
__EOF__
fi
else
## don't use tls
cat >>/etc/stunnel/menu.conf <<__EOF__
requireCert = no
verifyChain = no
__EOF__
fi
mkdir -p /var/run/stunnel4; chown stunnel4:stunnel4 /var/run/stunnel4
stunnel /etc/stunnel/menu.conf &>/var/log/stunnel4/menu.log &
# stunnel end
# dbus
if [ -e /etc/dbus-1/system.d/ogbrowser.conf ]; then
mkdir -p /run/dbus
DBUS_SESSION_BUS_ADDRESS=$(dbus-daemon --print-address --system --nosyslog)
export DBUS_SESSION_BUS_ADDRESS
dbus-monitor --system &>/var/log/dbus-monitor.log &
fi
[ -S /dev/log ] || service rsyslog start
# root password
PASS=$(grep "^[ ]*\(export \)\?OPTIONS=" /scripts/ogfunctions 2>&1 | sed 's/\(.*\)pass=\(\w*\)\(.*\)/\2/')
PASS=${PASS:-"og"}
echo -ne "$PASS\n$PASS\n" | passwd root 2>/dev/null
cp -a $OPENGNSYS/etc/preinit/loadenviron.sh /etc/profile.d/
/etc/init.d/ssh start &>/dev/null
#setterm -blank 0 -powersave off -powerdown 0 < /dev/console > /dev/console 2>&1 ## apagado de monitor
ethtool -s $DEVICE wol g 2>/dev/null ## Activado WOL en la interfaz usada en arranque PXE.
[ -f /opt/opengnsys/scripts/runhttplog.sh ] && /opt/opengnsys/scripts/runhttplog.sh 2>/dev/null

View File

@ -0,0 +1,40 @@
#!/bin/bash
#/**
#@file poweroff.sh
#@brief Script de inicio para cargar el proceso comprobación de clientes inactivos.
#@note Arranca y configura el proceso "cron".
#@warning License: GNU GPLv3+
#@version 1.0.2
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2011-10-25
#*/
# Si está configurado OpenGnsys ...
if [ -n "$OPENGNSYS" ]; then
echo "${MSG_POWEROFFCONF:-.}"
# Sincronización horaria con servidor NTP.
[ -n "$ogntp" -a "$status" != "offline" ] && ntpdate $ogntp
# Crear fichero de configuración por defecto (30 min. de espera).
POWEROFFCONF=/etc/poweroff.conf
cat << FIN > $POWEROFFCONF
POWEROFFSLEEP=30
POWEROFFTIME=
FIN
# Incluir zona horaria en el fichero de configuración.
awk 'BEGIN {RS=" "} /^TZ=/ {print}' /proc/cmdline >> $POWEROFFCONF
# Lanzar el proceso "cron".
cron -l
# Definir la "crontab" lanzando el proceso de comprobación cada minuto.
echo "* * * * * [ -x $OGBIN/poweroffconf ] && $OGBIN/poweroffconf" | crontab -
else
# FIXME Error: entorno de OpenGnsys no configurado.
echo "Error: OpenGnsys environment is not configured." # FIXME: definir mensaje.
exit 1
fi