refs #505 adds sources from ogAdmClient and changes setsmbpass to set samba pass in client, adds file installation package too
parent
8d65ecd1d1
commit
5b6bc76d62
|
@ -1,9 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
#/**
|
||||
# setsmbpass
|
||||
#@file setsmbpass [ogLive]
|
||||
#@brief Cambia la contraseña del usuario del cliente para acceder a los servicios Samba.
|
||||
#@brief Cambia la contraseña de los clientes para acceder a los servicios principales.
|
||||
#@usage setsmbpass [ogLive]
|
||||
#@param ogLive solo modifica la clave del cliente indicado (puede crear inconsistencias)
|
||||
#@warning Se modifica el Initrd del cliente y se cambia la clave en el servidor.
|
||||
#@warning No se modifica el usuario de acceso (usuario "opengnsys").
|
||||
#@version 1.0.2 - Versión inicial.
|
||||
|
@ -12,38 +13,41 @@
|
|||
#@version 1.1.0 - Soporte para varios clientes ogLive.
|
||||
#@author Ramón M. Gómez - ETSII Univ. Sevilla
|
||||
#@date 2017-06-20
|
||||
#@version 1.2.0 - Soporte para varios compresores de Initrd.
|
||||
#@author Ramón M. Gómez - ETSII Univ. Sevilla
|
||||
#@date 2020-09-02
|
||||
#*/ ##
|
||||
|
||||
|
||||
# Variables.
|
||||
PROG=$(basename "$0")
|
||||
PATH=$PATH:$(dirname "$(realpath "$0")")
|
||||
# Variables y funciones globales.
|
||||
PROG="$(basename "$0")"
|
||||
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
|
||||
OGCFGFILE=$OPENGNSYS/etc/opengnsys.json
|
||||
PATH=$PATH:$OPENGNSYS/bin
|
||||
SAMBAUSER="opengnsys" # Usuario por defecto.
|
||||
TFTPDIR=$OPENGNSYS/tftpboot
|
||||
INITRD=oginitrd.img
|
||||
TMPDIR=/tmp/oglive$$
|
||||
let CHANGES=0
|
||||
|
||||
# Control básico de errores.
|
||||
if [ "$USER" != "root" ]; then
|
||||
echo "$PROG: Error: solo ejecutable por root" >&2
|
||||
exit 1
|
||||
fi
|
||||
source $OPENGNSYS/lib/ogfunctions.sh || exit 1
|
||||
|
||||
# Control de parámetros.
|
||||
[ "$*" == "help" ] && help
|
||||
[ "$*" == "version" ] && version
|
||||
[ "$USER" != "root" ] && raiseError access "Solo ejecutable por root"
|
||||
case $# in
|
||||
0) # Cambios en todos los clientes ogLive instalados.
|
||||
echolog "Cambiando contraseña en todos los clientes ogLive instalados"
|
||||
if which oglivecli &>/dev/null; then
|
||||
LIST=$(oglivecli list | awk '{print $2}')
|
||||
else
|
||||
LIST="ogclient"
|
||||
fi ;;
|
||||
1) # Cambios en único ogLive (AVISO: puede crear inconsistencias con otros ogLive).
|
||||
echolog "Cambiando contraseña en un solo ogLive"
|
||||
LIST="$1" ;;
|
||||
*) # Error de formato.
|
||||
echo "$PROG: Error de ejecución" >&2
|
||||
echo "Formato: $PROG ogLive"
|
||||
exit 1 ;;
|
||||
raiseError usage ;;
|
||||
esac
|
||||
|
||||
# Recuperar eco de consola si se corta el proceso.
|
||||
|
@ -61,9 +65,8 @@ for OGLIVE in $LIST; do
|
|||
# Solo se deben aceptar números y letras para la clave de acceso.
|
||||
if [[ "$SAMBAPASS" =~ [^a-zA-Z0-9] ]]; then
|
||||
echo
|
||||
echo "$PROG: Error: la clave solo debe contener caracteres alfanuméricos" >&2
|
||||
stty echo 2>/dev/null
|
||||
exit 2
|
||||
raiseError cancel "La clave solo debe contener caracteres alfanuméricos"
|
||||
fi
|
||||
echo
|
||||
# Obtener confirmación clave sin eco en pantalla.
|
||||
|
@ -71,34 +74,15 @@ for OGLIVE in $LIST; do
|
|||
read -r SAMBAPASS2
|
||||
echo
|
||||
stty echo 2>/dev/null
|
||||
if [ "$SAMBAPASS" != "$SAMBAPASS2" ]; then
|
||||
echo "$PROG: Error: las claves no coinciden" >&2
|
||||
exit 2
|
||||
fi
|
||||
[ "$SAMBAPASS" != "$SAMBAPASS2" ] && raiseError cancel "Las claves no coinciden"
|
||||
fi
|
||||
# Editar la parte de acceso del cliente:
|
||||
# descomprimir Initrd, sustituir clave y recomprimir Initrd).
|
||||
echo "Configurando cliente \"$OGLIVE\" ..."
|
||||
echolog "Configurando cliente \"$OGLIVE\" ..."
|
||||
mkdir -p $TMPDIR
|
||||
cd $TMPDIR || { echo "Error: no se pudo cambiar al directorio temporal."; exit 3; }
|
||||
|
||||
# Verificar si el archivo es gzip o lz4 antes de descomprimir.
|
||||
if file "$CLIENTINITRD" | grep -q "gzip compressed data"; then
|
||||
if ! gzip -dc "$CLIENTINITRD" | cpio -im; then
|
||||
echo "Error: No se pudo descomprimir y extraer $CLIENTINITRD con gzip."
|
||||
exit 4
|
||||
fi
|
||||
COMPRESS_CMD="gzip -9c"
|
||||
elif file "$CLIENTINITRD" | grep -q "LZ4 compressed data"; then
|
||||
if ! lz4 -d "$CLIENTINITRD" | cpio -im; then
|
||||
echo "Error: No se pudo descomprimir y extraer $CLIENTINITRD con lz4."
|
||||
exit 4
|
||||
fi
|
||||
COMPRESS_CMD="lz4 -c"
|
||||
else
|
||||
echo "Error: $CLIENTINITRD no está en formato gzip o lz4."
|
||||
exit 4
|
||||
fi
|
||||
cd $TMPDIR || ogRaiseError access "Directorio temporal"
|
||||
COMPRESS=$(file -b "$CLIENTINITRD" | awk '{print tolower($1);}')
|
||||
$COMPRESS -dc "$CLIENTINITRD" | cpio -im
|
||||
if [ -f scripts/ogfunctions ]; then
|
||||
sed -i "s/OPTIONS=\(.*\)user=\w*\(.*\)pass=\w*\(.*\)/OPTIONS=\1user=$SAMBAUSER\2pass=$SAMBAPASS\3/" scripts/ogfunctions
|
||||
# TEMPORAL: solución ticket 554, actualizar cliente en caché (ogLive r3257).
|
||||
|
@ -106,37 +90,30 @@ for OGLIVE in $LIST; do
|
|||
# FIN CÓDIGO TEMPORAL.
|
||||
# Ticket 565, preparar acceso Rsync cliente.
|
||||
echo "$SAMBAPASS" > scripts/passrsync
|
||||
# Guardar tokens de seguridad.
|
||||
cat << EOT > scripts/client.cfg
|
||||
CLIENTID=$(jq -r .client.id $OGCFGFILE)
|
||||
CLIENTSECRET=$(jq -r .client.secret $OGCFGFILE)
|
||||
EOT
|
||||
chown root.root scripts/passrsync scripts/client.cfg
|
||||
chmod 400 scripts/passrsync scripts/client.cfg
|
||||
# Generar Initrd del cliente.
|
||||
if ! find . | cpio -H newc -oa | $COMPRESS_CMD > "$CLIENTINITRD"; then
|
||||
echo "Error: No se pudo recomprimir $CLIENTINITRD."
|
||||
exit 5
|
||||
fi
|
||||
chown root.root scripts/passrsync
|
||||
chmod 400 scripts/passrsync
|
||||
# Generar Initrd del cliente (siempre comprimido con gzip).
|
||||
find . | cpio -H newc -oa | gzip -9c > "$CLIENTINITRD"
|
||||
else
|
||||
echo "$PROG: Aviso: no se ha modificado la clave del cliente \"$OGLIVE\"."
|
||||
echolog "$PROG: Aviso: no se ha modificado la clave del cliente \"$OGLIVE\"."
|
||||
fi
|
||||
rm -fr $TMPDIR
|
||||
# Calcular suma de comprobación.
|
||||
md5sum "$CLIENTINITRD" | cut -f1 -d" " > "$CLIENTINITRD.sum"
|
||||
let CHANGES++
|
||||
else
|
||||
echo "$PROG: Cliente \"$OGLIVE\" no accesible."
|
||||
echolog "$PROG: Cliente \"$OGLIVE\" no accesible."
|
||||
fi
|
||||
done
|
||||
if [[ $CHANGES != 0 ]]; then
|
||||
# Ticket 565, preparar acceso Rsync servidor.
|
||||
echo "$SAMBAUSER:$SAMBAPASS" > /etc/rsyncd.secrets
|
||||
[ -e /etc/rsyncd.secrets ] && sed -i -n -e "/^$SAMBAUSER:/!p" -e "$ a$SAMBAUSER:$SAMBAPASS" /etc/rsyncd.secrets || echo "$SAMBAUSER:$SAMBAPASS" > /etc/rsyncd.secrets
|
||||
chown root.root /etc/rsyncd.secrets
|
||||
chmod 600 /etc/rsyncd.secrets
|
||||
# Cambiar clave Samba.
|
||||
echo -ne "$SAMBAPASS\n$SAMBAPASS\n" | smbpasswd -a -s $SAMBAUSER
|
||||
else
|
||||
echo "$PROG: Aviso: no se ha modificado la clave de ningún cliente."
|
||||
echolog "$PROG: Aviso: no se ha modificado la clave de ningún cliente."
|
||||
fi
|
||||
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ ROUTERIP = []
|
|||
BRANCH = sys.argv[1] if len(sys.argv) > 1 else "main"
|
||||
INETDSERV = "xinetd"
|
||||
|
||||
UBUNTU_OS_VERSION = "22"
|
||||
UBUNTU_OS_VERSION = "24"
|
||||
PYTHON_VERSION = 3
|
||||
|
||||
if os.path.isdir(f"{PROGRAM_DIR}/../installer"):
|
||||
|
@ -151,7 +151,7 @@ def get_missing_packages():
|
|||
case "22.04":
|
||||
PACKAGES_TO_INSTALL = ["nfs-common", "xorriso", "genisoimage", "syslinux", "liblzma-dev", "nginx", "arp-scan", "automake", "build-essential", "btrfs-progs", "composer", "curl", "ctorrent", "debootstrap", "g++-multilib", "gawk", "gettext", "graphviz", "grub-efi-amd64-signed", "jq", "libdbi-dev", "libdbi1", "libev-dev", "libjansson-dev", "liblz4-tool", "libssl-dev", "moreutils", "netpipes", "php", "php-bcmath", "php-cli", "php-curl", "php-fpm", "php-gd", "php-json", "php-ldap", "php-mbstring", "php-mysql", "php8.1-common", "php-pear", "php-xml", "php-zip", "procps", "coreutils", "rsync", "samba", "samba-common-bin", "schroot", "shim-signed", "squashfs-tools", "subversion", "tftpd-hpa", "udpcast", "unzip", "wakeonlan", "wget", "xinetd", "jq", "moreutils", "net-tools", "isolinux", "syslinux"]
|
||||
case "24.04":
|
||||
PACKAGES_TO_INSTALL = ["nfs-common", "xorriso", "genisoimage", "syslinux", "liblzma-dev", "nginx", "arp-scan", "automake", "build-essential", "btrfs-progs", "composer", "curl", "ctorrent", "debootstrap", "g++-multilib", "gawk", "gettext", "graphviz", "grub-efi-amd64-signed", "jq", "libdbi-dev", "libdbi1", "libev-dev", "libjansson-dev", "liblz4-tool", "libssl-dev", "moreutils", "netpipes", "php", "php-bcmath", "php-cli", "php-curl", "php-fpm", "php-gd", "php-json", "php-ldap", "php-mbstring", "php-mysql", "php8.3-common", "php-pear", "php-xml", "php-zip", "procps", "coreutils", "rsync", "samba", "samba-common-bin", "schroot", "shim-signed", "squashfs-tools", "subversion", "tftpd-hpa", "udpcast", "unzip", "wakeonlan", "wget", "xinetd", "jq", "moreutils", "net-tools", "isolinux", "syslinux"]
|
||||
PACKAGES_TO_INSTALL = ["nfs-common", "xorriso", "genisoimage", "syslinux", "liblzma-dev", "nginx", "arp-scan", "automake", "build-essential", "btrfs-progs", "composer", "curl", "ctorrent", "debootstrap", "g++-multilib", "gawk", "gettext", "graphviz", "grub-efi-amd64-signed", "jq", "libdbi-dev", "libdbi1", "libev-dev", "libjansson-dev", "liblz4-tool", "libssl-dev", "moreutils", "netpipes", "php8.3", "php8.3-bcmath", "php8.3-cli", "php8.3-curl", "php8.3-fpm", "php8.3-gd", "php8.3-ldap", "php8.3-mbstring", "php8.3-mysql", "php8.3-common", "php-pear", "php8.3-xml", "php8.3-zip", "procps", "coreutils", "rsync", "samba", "samba-common-bin", "schroot", "shim-signed", "squashfs-tools", "subversion", "tftpd-hpa", "udpcast", "unzip", "wakeonlan", "wget", "xinetd", "jq", "moreutils", "isolinux", "syslinux", "file"]
|
||||
case _:
|
||||
PACKAGES_TO_INSTALL = ["bash", "rsync"]
|
||||
case "suse":
|
||||
|
@ -483,7 +483,7 @@ TFTP_OPTIONS="--secure"
|
|||
symlink_target = f"{INSTALL_OGBOOT_TARGET}/tftpboot"
|
||||
logger.info(f"Creating symbolic link from {TFTPCFGDIR} to {symlink_target}")
|
||||
if not os.path.exists(symlink_target):
|
||||
os.symlink(TFTPCFGDIR, symlink_target)
|
||||
os.symlink(TFTPCFGDIR, symlink_targetnstaller/ogboot_installer.py)
|
||||
os.lchown(symlink_target, pwd.getpwnam("tftp").pw_uid, pwd.getpwnam("ogboot").pw_gid)
|
||||
else:
|
||||
logger.warning(f"The symbolic link already exists: {symlink_target}")
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
OpenGnsys Services for Clients README
|
||||
=======================================
|
||||
|
||||
|
||||
Este directorio contiene el código fuente de los servicios OpenGnsys específicos para clientes.
|
||||
|
||||
- ogAdmClient servicio para cliente ogLive que atiende peticiones de OpenGnsys Server
|
||||
- ogagent OGAgent: agente modular para sistemas operativos con API REST
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
# makefile
|
||||
|
||||
# Nombre del proyecto
|
||||
PROYECTO := ogAdmClient
|
||||
|
||||
# Directorios y librerias
|
||||
DIRS :=
|
||||
LIBS := -static
|
||||
|
||||
# Opciones de compilacion
|
||||
OPCS := -m32 -O0 -g -Wall # Depuracion
|
||||
#OPCS := -m32 -O3 -Wall # Optimizacion
|
||||
|
||||
# Ficheros objetos
|
||||
OBJS := sources/ogAdmClient.o
|
||||
|
||||
all: $(PROYECTO)
|
||||
|
||||
$(PROYECTO): $(OBJS)
|
||||
gcc $(OPCS) $(DIRS) $(LIBS) $(OBJS) -o $(PROYECTO)
|
||||
# strip $(PROYECTO) # Optimizacion
|
||||
|
||||
clean:
|
||||
rm -f $(PROYECTO) $(OBJS)
|
||||
|
||||
sources/%.o: sources/%.c
|
||||
gcc $(OPCS) -I ../../Includes -c -o"$@" "$<"
|
||||
|
||||
|
||||
|
||||
|
Binary file not shown.
|
@ -0,0 +1,5 @@
|
|||
ServidorAdm=172.17.8.67
|
||||
PUERTO=2008
|
||||
PATHINTERFACE=/opt/opengnsys/interfaceAdm
|
||||
UrlMenu=https:/172.17.8.67/opengnsys/varios/menubrowser.php
|
||||
UrlMsg=http://localhost/cgi-bin/httpd-log.sh
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,183 @@
|
|||
// ********************************************************************************************************
|
||||
// Cliernte: ogAdmClient
|
||||
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
|
||||
// Fecha Creación: Marzo-2010
|
||||
// Fecha Última modificación: Marzo-2010
|
||||
// Nombre del fichero: ogAdmClient.h
|
||||
// Descripción :Este fichero implementa el cliente general del sistema
|
||||
// ********************************************************************************************************
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <time.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/wait.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <signal.h>
|
||||
#include "ogAdmLib.h"
|
||||
// ________________________________________________________________________________________________________
|
||||
// Variables globales
|
||||
// ________________________________________________________________________________________________________
|
||||
char *idordenador; // Identificador del ordenador
|
||||
char *nombreordenador; // Nombre del ordenador
|
||||
char *cache; // Tamaño de la caché
|
||||
char *idproautoexec; // Identificador del procedimiento de autoexec
|
||||
char *idcentro; // Identificador de la Unidad Organizativa
|
||||
char *idaula; // Identificador del aula
|
||||
char IPlocal[LONIP]; // Ip local
|
||||
|
||||
char servidoradm[LONPRM]; // Dirección IP del servidor de administración
|
||||
char puerto[LONPRM]; // Puerto de comunicación
|
||||
char pathinterface[LONPRM]; // Path donde está la interface entre la administración y el módulo de clonación
|
||||
|
||||
char interface[LONFUN]; // Nombre del módulo,función o script de la interface con el módulo de administración
|
||||
char parametros[LONSTD]; // Parámetros para la llamada
|
||||
int herror;
|
||||
|
||||
BOOLEAN CMDPTES; // Para bucle de comandos pendientes
|
||||
|
||||
|
||||
char urlmenu[MAXLONURL]; // Url de la pagina de menu para el browser
|
||||
char urlmsg[MAXLONURL]; // Url de la página de mensajed para el browser
|
||||
|
||||
|
||||
typedef struct{ // Estructura usada para referenciar las funciones que procesan las tramas
|
||||
char nf[LONFUN]; // Nombre de la función
|
||||
BOOLEAN (*fptr)(TRAMA*); // Puntero a la función que procesa la trama
|
||||
}MSGFUN;
|
||||
MSGFUN tbfuncionesClient[MAXIMAS_FUNCIONES];
|
||||
// ________________________________________________________________________________________________________
|
||||
// Tabla de errores de la ejecución de los scripts
|
||||
// ________________________________________________________________________________________________________
|
||||
char* tbErroresScripts[]={"Se han generado errores desconocidos. No se puede continuar la ejecución de este módulo",\
|
||||
"001-Formato de ejecución incorrecto.",\
|
||||
"002-Fichero o dispositivo no encontrado",\
|
||||
"003-Error en partición de disco",\
|
||||
"004-Partición o fichero bloqueado",\
|
||||
"005-Error al crear o restaurar una imagen",\
|
||||
"006-Sin sistema operativo",\
|
||||
"007-Programa o función BOOLEAN no ejecutable",\
|
||||
"008-Error en la creación del archivo de eco para consola remota",\
|
||||
"009-Error en la lectura del archivo temporal de intercambio",\
|
||||
"010-Error al ejecutar la llamada a la interface de administración",\
|
||||
"011-La información retornada por la interface de administración excede de la longitud permitida",\
|
||||
"012-Error en el envío de fichero por la red",\
|
||||
"013-Error en la creación del proceso hijo",\
|
||||
"014-Error de escritura en destino",\
|
||||
"015-Sin Cache en el Cliente",\
|
||||
"016-No hay espacio en la cache para almacenar fichero-imagen",\
|
||||
"017-Error al Reducir el Sistema Archivos",\
|
||||
"018-Error al Expandir el Sistema Archivos",\
|
||||
"019-Valor fuera de rango o no válido.",\
|
||||
"020-Sistema de archivos desconocido o no se puede montar",\
|
||||
"021-Error en partición de caché local",\
|
||||
"022-El disco indicado no contiene una particion GPT",\
|
||||
"023-Error no definido",\
|
||||
"024-Error no definido",\
|
||||
"025-Error no definido",\
|
||||
"026-Error no definido",\
|
||||
"027-Error no definido",\
|
||||
"028-Error no definido",\
|
||||
"029-Error no definido",\
|
||||
"030-Error al restaurar imagen - Imagen mas grande que particion",\
|
||||
"031-Error al realizar el comando updateCache",\
|
||||
"032-Error al formatear",\
|
||||
"033-Archivo de imagen corrupto o de otra versión de partclone",\
|
||||
"034-Error no definido",\
|
||||
"035-Error no definido",\
|
||||
"036-Error no definido",\
|
||||
"037-Error no definido",\
|
||||
"038-Error no definido",\
|
||||
"039-Error no definido",\
|
||||
"040-Error imprevisto no definido",\
|
||||
"041-Error no definido",\
|
||||
"042-Error no definido",\
|
||||
"043-Error no definido",\
|
||||
"044-Error no definido",\
|
||||
"045-Error no definido",\
|
||||
"046-Error no definido",\
|
||||
"047-Error no definido",\
|
||||
"048-Error no definido",\
|
||||
"049-Error no definido",\
|
||||
"050-Error en la generación de sintaxis de transferenica unicast",\
|
||||
"051-Error en envio UNICAST de una particion",\
|
||||
"052-Error en envio UNICAST de un fichero",\
|
||||
"053-Error en la recepcion UNICAST de una particion",\
|
||||
"054-Error en la recepcion UNICAST de un fichero",\
|
||||
"055-Error en la generacion de sintaxis de transferenica Multicast",\
|
||||
"056-Error en envio MULTICAST de un fichero",\
|
||||
"057-Error en la recepcion MULTICAST de un fichero",\
|
||||
"058-Error en envio MULTICAST de una particion",\
|
||||
"059-Error en la recepcion MULTICAST de una particion",\
|
||||
"060-Error en la conexion de una sesion UNICAST|MULTICAST con el MASTER",\
|
||||
"061-Error no definido",\
|
||||
"062-Error no definido",\
|
||||
"063-Error no definido",\
|
||||
"064-Error no definido",\
|
||||
"065-Error no definido",\
|
||||
"066-Error no definido",\
|
||||
"067-Error no definido",\
|
||||
"068-Error no definido",\
|
||||
"069-Error no definido",\
|
||||
"070-Error al montar una imagen sincronizada.",\
|
||||
"071-Imagen no sincronizable (es monolitica).",\
|
||||
"072-Error al desmontar la imagen.",\
|
||||
"073-No se detectan diferencias entre la imagen basica y la particion.",\
|
||||
"074-Error al sincronizar, puede afectar la creacion/restauracion de la imagen.",\
|
||||
"Error desconocido "
|
||||
};
|
||||
#define MAXERRORSCRIPT 74 // Error máximo cometido
|
||||
// ________________________________________________________________________________________________________
|
||||
// Prototipo de funciones
|
||||
// ________________________________________________________________________________________________________
|
||||
BOOLEAN autoexecCliente(TRAMA*);
|
||||
BOOLEAN RESPUESTA_AutoexecCliente(TRAMA*);
|
||||
void procesaComandos(TRAMA*);
|
||||
|
||||
BOOLEAN tomaConfiguracion(char*);
|
||||
BOOLEAN tomaIPlocal(void);
|
||||
void scriptLog(const char *,int );
|
||||
|
||||
BOOLEAN gestionaTrama(TRAMA *);
|
||||
BOOLEAN inclusionCliente();
|
||||
char* LeeConfiguracion();
|
||||
BOOLEAN RESPUESTA_InclusionCliente(TRAMA *);
|
||||
|
||||
BOOLEAN comandosPendientes(TRAMA*);
|
||||
BOOLEAN NoComandosPtes(TRAMA *);
|
||||
|
||||
BOOLEAN respuestaEjecucionComando(TRAMA *,int,char*);
|
||||
BOOLEAN Sondeo(TRAMA *);
|
||||
BOOLEAN Actualizar(TRAMA *);
|
||||
int Purgar(TRAMA* );
|
||||
|
||||
BOOLEAN ConsolaRemota(TRAMA*);
|
||||
|
||||
BOOLEAN Arrancar(TRAMA *);
|
||||
BOOLEAN Apagar(TRAMA *);
|
||||
BOOLEAN Reiniciar(TRAMA *);
|
||||
BOOLEAN IniciarSesion(TRAMA *);
|
||||
BOOLEAN CrearImagen(TRAMA *);
|
||||
BOOLEAN CrearImagenBasica(TRAMA *);
|
||||
BOOLEAN CrearSoftIncremental(TRAMA*);
|
||||
|
||||
BOOLEAN InventarioHardware(TRAMA *);
|
||||
BOOLEAN InventariandoSoftware(TRAMA *,BOOLEAN,char*);
|
||||
BOOLEAN EjecutarScript(TRAMA *);
|
||||
BOOLEAN ejecutaArchivo(char*,TRAMA*);
|
||||
|
||||
BOOLEAN cuestionCache(char*);
|
||||
int cargaPaginaWeb(char *);
|
||||
void muestraMenu(void);
|
||||
void muestraMensaje(int idx,char*);
|
||||
|
||||
BOOLEAN enviaMensajeServidor(SOCKET *,TRAMA *,char);
|
||||
|
||||
|
||||
|
||||
|
Binary file not shown.
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
poweroff
|
||||
exit 0
|
|
@ -0,0 +1,54 @@
|
|||
#!/bin/bash
|
||||
|
||||
#______________________________________
|
||||
#
|
||||
# PARAMETROS RECIBIDOS DESDE EL CLIENTE
|
||||
# $1 modo (admin, user)
|
||||
#______________________________________
|
||||
|
||||
# Error si llamada no se realliza desde OpenGnsys Client.
|
||||
PROG=$(basename $0)
|
||||
CALLER=$(ogGetCaller)
|
||||
if ! $(ogCheckStringInGroup "$CALLER" "CrearImagen ConsolaRemota CrearImagenBasica CrearSoftIncremental"); then
|
||||
ogRaiseError $OG_ERR_NOTEXEC "$CALLER -> $PROG"
|
||||
exit $?
|
||||
fi
|
||||
|
||||
# Salir si el repositorio está bloquedo (tiene ficheros abiertos).
|
||||
REPOIP=$(ogGetRepoIp)
|
||||
if [ -z "$REPOIP" ]; then
|
||||
ogRaiseError $OG_ERR_NOTFOUND "repo no montado"
|
||||
exit $?
|
||||
fi
|
||||
if ogIsRepoLocked; then
|
||||
ogRaiseError $OG_ERR_LOCKED "repo $REPOIP"
|
||||
exit $?
|
||||
fi
|
||||
|
||||
# Comprobar protocolo y modo de acceso.
|
||||
PROTO=${ogprotocol:-"smb"}
|
||||
case "$PROTO" in
|
||||
nfs|smb) ;;
|
||||
*) ogRaiseError $OG_ERR_FORMAT "protocolo desconocido $PROTO"
|
||||
exit $? ;;
|
||||
esac
|
||||
case "$1" in
|
||||
admin) MODE="rw" ;;
|
||||
user) MODE="ro" ;;
|
||||
*) ogRaiseError $OG_ERR_FORMAT "modo desconocido $1"
|
||||
exit $? ;;
|
||||
esac
|
||||
|
||||
# Desmontar repositorio y volver a montarlo con el modo adecuado.
|
||||
umount $OGIMG
|
||||
# Unidad organizativa
|
||||
[ "$ogunit" != "" ] && OGUNIT="/$ogunit"
|
||||
ogEcho info "$PROG: Montar repositorio $REPO por $PROTO en modo $1"
|
||||
case "$PROTO" in
|
||||
nfs) mount -t nfs $REPOIP:$OGIMG$OGUNIT $OGIMG -o $MODE ;;
|
||||
smb) PASS=$(grep "^[ ]*\(export \)\?OPTIONS=" /scripts/ogfunctions 2>&1 | \
|
||||
sed 's/\(.*\)pass=\(\w*\)\(.*\)/\2/')
|
||||
PASS=${PASS:-"og"}
|
||||
mount.cifs //$REPOIP/ogimages$OGUNIT $OGIMG -o $MODE,serverino,acl,username=opengnsys,password=$PASS
|
||||
esac
|
||||
|
|
@ -0,0 +1,159 @@
|
|||
#!/bin/bash
|
||||
|
||||
|
||||
#Load engine configurator from engine.cfg file.
|
||||
#Carga el configurador del engine desde el fichero engine.cfg
|
||||
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
|
||||
|
||||
# Clear temporary file used as log track by httpdlog
|
||||
# Limpia los ficheros temporales usados como log de seguimieincludento para httpdlog
|
||||
echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp
|
||||
|
||||
# Registro de inicio de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_START $0 $*"
|
||||
|
||||
# Solo ejecutable por OpenGnsys Client.
|
||||
PATH=$PATH:$(dirname $0)
|
||||
PROG=$(basename $0)
|
||||
|
||||
#____________________________________________________________________
|
||||
#
|
||||
# El parámetro $2 es el que aporta toda la información y el $1 se queda obsoleto
|
||||
# Formato de entrada:
|
||||
# dis=Número de disco
|
||||
# *=caracter de separación
|
||||
# che=Vale 0 o 1
|
||||
# *=caracter de separación
|
||||
# $tch=tamaño cache
|
||||
# != caracter de separación
|
||||
#
|
||||
# Y un numero indeterminado de cadenas del tipo siguuenteseparadas por el caracter '$':
|
||||
# par=Número de particion*cod=Código de partición*sfi=Sistema de ficheros*tam=Tamaño de la partición*ope=Operación
|
||||
# @= caracter de separación
|
||||
#____________________________________________________________________
|
||||
|
||||
# Captura de parámetros (se ignora el 1er parámetro y se eliminan espacios y tabuladores).
|
||||
#param='dis=1*che=0*tch=70000000!par=1*cpt=NTFS*sfi=NTFS*tam=11000000*ope=0%'
|
||||
shift
|
||||
param="$(echo $* | sed 's/[ ]//g')"
|
||||
|
||||
# Activa navegador para ver progreso
|
||||
coproc /opt/opengnsys/bin/browser -qws http://localhost/cgi-bin/httpd-log.sh
|
||||
|
||||
# Leer los dos bloques de parámetros, separados por '!'.
|
||||
declare -a TBPRM
|
||||
|
||||
IFS='!' read -a TBPRM <<<"$param"
|
||||
pparam="${TBPRM[0]}" # Parámetros generales del disco.
|
||||
sparam="${TBPRM[1]}" # Parámetros de particionado y formateo.
|
||||
|
||||
|
||||
# Toma valores de disco y caché, separados por "*".
|
||||
# Los valores están en las variables $dis: disco, $che: existe cache (1, 0), $tch: Tamaño de la cache.
|
||||
unset TBPRM
|
||||
IFS='*' read -a TBPRM <<<"$pparam"
|
||||
[[ ${TBPRM} =~ = ]] && eval ${TBPRM[@]} # Comprobar asignación antes de exportar valores.
|
||||
|
||||
# Error si no se define el parámetro de disco (dis).
|
||||
[ -z "$dis" ] && exit $OG_ERR_FORMAT
|
||||
|
||||
# Toma valores de distribución de particiones, separados por "%".
|
||||
declare -a CFG # Valores de configuración.
|
||||
declare -a TBP # Tabla de particionado.
|
||||
declare -a TBF # Tabla de formateo.
|
||||
|
||||
unset TBPRM
|
||||
IFS='%' read -a TBPRM <<<"$sparam"
|
||||
|
||||
maxp=0
|
||||
for ((i=0; i<${#TBPRM[@]}; i++)); do
|
||||
# Leer datos de la partición, separados por "*".
|
||||
unset par
|
||||
IFS='*' read -a CFG <<<"${TBPRM[i]}" 2>/dev/null
|
||||
[[ ${CFG} =~ = ]] && eval ${CFG[@]} # Comprobar asignación antes de exportar valores.
|
||||
# Componer datos de particionado.
|
||||
if [ "$cpt" != "CACHE" ]; then
|
||||
TBP[par]="$cpt:$tam"
|
||||
fi
|
||||
# Si se activa operación de formatear, componer datos de formateo.
|
||||
if [ "$ope" == 1 ]; then
|
||||
# Comprobamos que la particion y el s.f sean validos.
|
||||
ogCheckStringInGroup $cpt "EMPTY EXTENDED LINUX-LVM LVM ZPOOL"
|
||||
[ $? -ne 0 ] && TBF[par]="$sfi"
|
||||
fi
|
||||
# Obtener la partición mayor.
|
||||
[ $par -gt $maxp ] && maxp=$par
|
||||
done
|
||||
#____________________________________________________
|
||||
#
|
||||
# Proceso
|
||||
#____________________________________________________
|
||||
|
||||
# Tamaño actual de la cache
|
||||
CACHESIZE=$(ogGetCacheSize)
|
||||
|
||||
# Desmonta todas las particiones y la caché
|
||||
|
||||
ogEcho session log "[10] $MSG_HELP_ogUnmountAll"
|
||||
ogUnmountAll $dis &>/dev/null
|
||||
ogUnmountCache
|
||||
|
||||
# Elimina la tabla de particiones
|
||||
if [ `ogGetPartitionTableType 1` != 'MSDOS' ]; then
|
||||
ogDeletePartitionTable $dis
|
||||
ogExecAndLog COMMAND ogUpdatePartitionTable $dis
|
||||
|
||||
# Crea tabla de particiones MSDOS (NOTA: adaptar para tablas GPT).
|
||||
ogCreatePartitionTable $dis MSDOS
|
||||
fi
|
||||
|
||||
# Inicia la cache.
|
||||
if echo "$sparam" |grep "CACHE" >/dev/null; then
|
||||
ogEcho session log "[30] $MSG_HELP_ogCreateCache"
|
||||
ogEcho session log " initCache $tch"
|
||||
ogExecAndLog COMMAND initCache $tch
|
||||
fi
|
||||
|
||||
# Definir particionado.
|
||||
ogEcho session log "[50] $MSG_HELP_ogCreatePartitions"
|
||||
ogEcho session log " ogCreatePartitions $dis ${TBP[@]}"
|
||||
ogExecAndLog COMMAND ogCreatePartitions $dis ${TBP[@]}
|
||||
if [ $? -ne 0 ]; then
|
||||
kill $COPROC_PID
|
||||
exit $(ogRaiseError session log $OG_ERR_GENERIC "ogCreatePartitions $dis ${TBP[@]}")
|
||||
fi
|
||||
ogExecAndLog COMMAND ogUpdatePartitionTable $dis
|
||||
|
||||
# Formatear particiones
|
||||
ogEcho session log "[70] $MSG_HELP_ogFormat"
|
||||
|
||||
for ((par=1; par<=$maxp; par++)); do
|
||||
case "${TBF[par]}" in
|
||||
CACHE) # Si el tamaño es distinto ya se ha formateado.
|
||||
if [ "$CACHESIZE" == $tch ]; then
|
||||
ogEcho session log " ogFormatCache"
|
||||
ogExecAndLog COMMAND ogFormatCache
|
||||
fi
|
||||
;;
|
||||
"") ;;
|
||||
*) ogEcho session log " ogFormatFs $dis $par ${TBF[par]}"
|
||||
ogExecAndLog COMMAND ogFormatFs $dis $par ${TBF[par]}
|
||||
if [ $? -ne 0 ]; then
|
||||
kill $COPROC_PID
|
||||
exit $(ogRaiseError session log $OG_ERR_GENERIC "ogFormatFs $dis $par ${TBF[par]}");
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
RETVAL=$?
|
||||
# Registro de fin de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_END $RETVAL"
|
||||
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Retorno
|
||||
#___________________________________________________________________
|
||||
|
||||
kill $COPROC_PID
|
||||
exit 0
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
chmod +x $1
|
||||
$1>$2 || exit $?
|
|
@ -0,0 +1,91 @@
|
|||
#!/bin/bash
|
||||
|
||||
#___________________________________________________
|
||||
#
|
||||
# PARAMETROS RECIBIDOS DESDE EL CLIENTE:
|
||||
# $1 Número de disco
|
||||
# $2 Número de particion
|
||||
# $3 Nombre canónico de la imagen (sin extensión)
|
||||
# $4 Dirección del repositorio (REPO, por defecto)
|
||||
#___________________________________________________
|
||||
|
||||
|
||||
#$OG_ERR_NOTEXEC Si no es llamada por OG client
|
||||
#$OG_ERR_LOCKED=4 Si la particion está bloqueada.
|
||||
|
||||
|
||||
#Codigos de error del scripts createImage
|
||||
#@exception OG_ERR_FORMAT # 1 formato incorrecto.
|
||||
#@exception OG_ERR_PARTITION # 3 Error en partición de disco o en su sistema de archivos
|
||||
#@exception OG_ERR_IMAGE # 5 Error en funcion ogCreateImage o ogRestoreImage.
|
||||
#@exception OG_ERR_NOTWRITE # 14 error de escritura
|
||||
#@exception OG_ERR_NOTCACHE # 15 si cache no existe 15
|
||||
#@exception OG_ERR_CACHESIZE # 16 si espacio de la cache local o remota no tiene espacio 16
|
||||
#@exception OG_ERR_REDUCEFS # 17 error al reducir sistema de archivos.
|
||||
#@exception OG_ERR_EXTENDFS # 18 Errror al expandir el sistema de archivos.
|
||||
|
||||
|
||||
#Códigos de error de la funcion ogCreateImage
|
||||
|
||||
|
||||
|
||||
TIME1=$SECONDS
|
||||
|
||||
#Load engine configurator from engine.cfg file.
|
||||
#Carga el configurador del engine desde el fichero engine.cfg
|
||||
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
|
||||
|
||||
# Clear temporary file used as log track by httpdlog
|
||||
# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
|
||||
echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp
|
||||
|
||||
# Registro de inicio de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_START $0 $*"
|
||||
|
||||
# Solo ejecutable por OpenGnsys Client.
|
||||
PATH=$PATH:$(dirname $0)
|
||||
PROG=$(basename $0)
|
||||
CALLER=$(ogGetCaller)
|
||||
if [ "$CALLER" != "ogAdmClient" ]; then
|
||||
ogRaiseError $OG_ERR_NOTEXEC "$CALLER -> $PROG"
|
||||
exit $?
|
||||
fi
|
||||
|
||||
# Valor por defecto para el repositorio.
|
||||
REPO=${4:-"REPO"}
|
||||
[ "$REPO" == "$(ogGetIpAddress)" ] && REPO="CACHE"
|
||||
# Si es una ip y es distinta a la del recurso samba cambiamos de REPO.
|
||||
ogCheckIpAddress $REPO
|
||||
if [ $? == 0 -o $REPO == "REPO" ] ; then
|
||||
# Unidad organizativa
|
||||
[ "$ogunit" != "" ] && OGUNIT="$ogunit"
|
||||
# Si falla el cambio -> salimos con error repositorio no valido
|
||||
ogChangeRepo $REPO $OGUNIT || exit $(ogRaiseError $OG_ERR_NOTFOUND '$REPO'; echo $?)
|
||||
REPO="REPO"
|
||||
fi
|
||||
|
||||
# Si el destino es REPO y el cliente no está en modo "admin"; activar repositorio para escritura,
|
||||
if [ "$REPO" == "REPO" -a "$boot" != "admin" ]
|
||||
then
|
||||
CambiarAcceso admin &>> $OGLOGFILE
|
||||
RETVAL=$?
|
||||
[ $RETVAL -gt 0 ] && exit $RETVAL
|
||||
fi
|
||||
|
||||
ogEcho createImage "$1" "$2" "$4" /"$3"
|
||||
# Si existe, ejecuta script personalizado "createImageCustom"; si no, llama al genérico "createImage".
|
||||
if which createImageCustom &>/dev/null; then
|
||||
createImageCustom "$1" "$2" "$4" /"$3" &>> $OGLOGCOMMAND
|
||||
else
|
||||
createImage "$1" "$2" "$4" /"$3" &>> $OGLOGCOMMAND
|
||||
fi
|
||||
RETVAL=$?
|
||||
|
||||
# Cambiar acceso a modo usuario, si es necesario.
|
||||
[ "$REPO" == "REPO" -a "$boot" != "admin" ] && CambiarAcceso user
|
||||
|
||||
# Registro de fin de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_END $RETVAL"
|
||||
|
||||
exit $RETVAL
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
#!/bin/bash
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# CREAR IMAGEN BÁSICA
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Parámetros recibidos desde el cliente:
|
||||
#
|
||||
# $1 Número de disco
|
||||
# $2 Número de particion
|
||||
# $3 Nombre canónico de la imagen básica (sin extensión)
|
||||
# $4 Dirección del repositorio
|
||||
# $5 Es una cadena "nnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnn" donde "n" vale 0 ó 1.
|
||||
# 1XX: Gestionar fichero completo en lugar de diferencas
|
||||
# X1X: Eliminar archivos de la imagen que no estén en la partición
|
||||
# XX1: Comprimir archivos para enviarlos por la red
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $6 Es una cadena "nnnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
|
||||
# 1XXX: Borrar la imagen del repositorio antes de crearla
|
||||
# X1XX: Copiar Imagen básica también a la cache
|
||||
# XX1X: Borrar previamente la imagen de la cache antes de copiarla
|
||||
# XXX1: No borrar archivos en destino
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $7 Método de syncronización 1=Sincronización1 2=Sincronizacion2
|
||||
# $8 Ruta de origen de la Imagen (Carpeta)
|
||||
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Control parámetros
|
||||
#___________________________________________________________________
|
||||
|
||||
|
||||
PROG="$(basename $0)"
|
||||
if [ $# -lt 7 ]; then
|
||||
usage=" ndisco nparticion nombre_imagen_basica ip_repositorio"
|
||||
usage="$usage copiar_a_caché Borrar_cache_previamente Ruta_origen"
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG $usage"
|
||||
exit $?
|
||||
fi
|
||||
|
||||
#Load engine configurator from engine.cfg file.
|
||||
#Carga el configurador del engine desde el fichero engine.cfg
|
||||
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
|
||||
|
||||
# Clear temporary file used as log track by httpdlog
|
||||
# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
|
||||
echo -n "" > $OGLOGSESSION; echo -n "" > $OGLOGCOMMAND
|
||||
|
||||
# Registro de inicio de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_START $0 $*"
|
||||
|
||||
# Si el destino es REPO y el cliente no está en modo "admin"; activar repositorio para escritura,
|
||||
PATH=$PATH:$(dirname $0)
|
||||
CLIENTIP=$(ogGetIpAddress)
|
||||
[ "$4" == "$CLIENTIP" ] && DEST=CACHE || DEST=REPO
|
||||
if [ "$DEST" == "REPO" -a "$boot" != "admin" ]; then
|
||||
CambiarAcceso admin &>> $OGLOGFILE
|
||||
RETVAL=$?
|
||||
[ $RETVAL -gt 0 ] && exit $RETVAL
|
||||
fi
|
||||
|
||||
if [ $7 -eq 1 ]; then
|
||||
#sincronizacion1
|
||||
ogCrearImagenBasica "$@"
|
||||
RETVAL=$?
|
||||
fi
|
||||
|
||||
if [ $7 -eq 2 ]; then
|
||||
# Sincronizacion2
|
||||
flag=$5
|
||||
WHOLE=${flag:0:1}
|
||||
DELFILE=${flag:1:1}
|
||||
COMPRESS=${flag:2:1}
|
||||
|
||||
# Nota los valores se pasan como variables de entorno,
|
||||
# la idea es que mas adelante vayan en el fichero PXE.
|
||||
[ $WHOLE -eq 1 ] && export ogrsyncw=true || export ogrsyncw=false
|
||||
[ $DELFILE -eq 1 ] && export ogrsyncdel=true || export ogrsyncdel=false
|
||||
[ $COMPRESS -eq 1 ] && export ogrsyncz=true || export ogrsyncz=false
|
||||
|
||||
# [ "$4" == "0.0.0.0" ] && DEST="CACHE" || DEST="REPO"
|
||||
|
||||
createBaseImage $1 $2 $DEST "$3"
|
||||
RETVAL=$?
|
||||
|
||||
fi
|
||||
|
||||
# Si estamos en modo user montamos el repositorio en modo lectura.
|
||||
[ "$DEST" == "REPO" -a "$boot" != "admin" ] && CambiarAcceso user
|
||||
# Registro de fin de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_END $RETVAL"
|
||||
|
||||
|
||||
|
||||
exit $RETVAL
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
#!/bin/bash
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# CREAR IMAGEN INCREMENTAL
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Parámetros recibidos desde el cliente:
|
||||
#
|
||||
# $1 Número de disco
|
||||
# $2 Número de particion
|
||||
# $3 Nombre canónico de la imagen básica (sin extensión)
|
||||
# $4 Dirección del repositorio
|
||||
# $5 Nombre canónico de la imagen incremental (sin extensión)
|
||||
# $6 Es una cadena "nnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnn" donde "n" vale 0 ó 1.
|
||||
# 1XX: Gestionar fichero completo en lugar de diferencas
|
||||
# X1X: Eliminar archivos de la imagen que no estén en la partición
|
||||
# XX1: Comprimir archivos para enviarlos por la red
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $7 Es una cadena "nnnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
|
||||
# 1XXX: Borrar la imagen incremental del repositorio antes de crearla
|
||||
# X1XX: Copiar imagen incremental también a la cache
|
||||
# XX1X: Borrar previamente la imagen incremental de la cache antes de copiarla
|
||||
# XXX1: No borrar archivos en destino
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $8 Método de syncronización 1=Sincronización1 2=Sincronizacion2
|
||||
# $9 Ruta de origen de la Imagen (Carpeta)
|
||||
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Control parámetros
|
||||
#___________________________________________________________________
|
||||
PROG="$(basename $0)"
|
||||
if [ $# -lt 8 ]; then
|
||||
usage=" ndisco nparticion nombre_imagen_basica ip_repositorio nombre_imagen_incremental"
|
||||
usage="$usage copiar_a_caché Borrar_cache_previamente Ruta_origen"
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG $usage"
|
||||
exit $?
|
||||
fi
|
||||
|
||||
#Load engine configurator from engine.cfg file.
|
||||
#Carga el configurador del engine desde el fichero engine.cfg
|
||||
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
|
||||
|
||||
# Clear temporary file used as log track by httpdlog
|
||||
# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
|
||||
echo -n "" > $OGLOGSESSION; echo -n "" > $OGLOGCOMMAND
|
||||
|
||||
# Registro de inicio de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_START $0 $*"
|
||||
|
||||
|
||||
# Si el destino es REPO y el cliente no está en modo "admin"; activar repositorio para escritura,
|
||||
PATH=$PATH:$(dirname $0)
|
||||
CLIENTIP=$(ogGetIpAddress)
|
||||
[ "$4" == "$CLIENTIP" ] && DEST=CACHE || DEST=REPO
|
||||
if [ "$DEST" == "REPO" -a "$boot" != "admin" ]; then
|
||||
CambiarAcceso admin &>> $OGLOGFILE
|
||||
RETVAL=$?
|
||||
[ $RETVAL -gt 0 ] && exit $RETVAL
|
||||
fi
|
||||
|
||||
if [ $8 -eq 1 ]; then
|
||||
#sincronizacion1
|
||||
ogCrearSoftIncremental "$@"
|
||||
RETVAL=$?
|
||||
fi
|
||||
|
||||
|
||||
if [ $8 -eq 2 ]; then
|
||||
#sincronizacion 2
|
||||
flag=$6
|
||||
WHOLE=${flag:0:1}
|
||||
DELFILE=${flag:1:1}
|
||||
COMPRESS=${flag:2:1}
|
||||
|
||||
# Nota los valores se pasan como variables de entorno,
|
||||
# la idea es que mas adelante vayan en el fichero PXE.
|
||||
[ $WHOLE -eq 1 ] && export ogrsyncw=true || export ogrsyncw=false
|
||||
[ $DELFILE -eq 1 ] && export ogrsyncdel=true || export ogrsyncdel=false
|
||||
[ $COMPRESS -eq 1 ] && export ogrsyncz=true || export ogrsyncz=false
|
||||
|
||||
# REPOSITORIO: Si la ip es la del propio equipo CACHE, si no REPO
|
||||
#CLIENTIP=$(ogGetIpAddress)
|
||||
#[ "$4" == "$CLIENTIP" ] && DEST=CACHE || DEST=REPO
|
||||
createDiffImage $1 $2 $DEST "$3" "$5"
|
||||
RETVAL=$?
|
||||
|
||||
fi
|
||||
|
||||
# Si estamos en modo user montamos el repositorio en modo lectura.
|
||||
[ "$DEST" == "REPO" -a "$boot" != "admin" ] && CambiarAcceso user
|
||||
|
||||
# Registro de fin de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_END $RETVAL"
|
||||
|
||||
exit $RETVAL
|
|
@ -0,0 +1,44 @@
|
|||
#!/bin/bash
|
||||
TIME1=$SECONDS
|
||||
|
||||
|
||||
#Load engine configurator from engine.cfg file.
|
||||
#Carga el configurador del engine desde el fichero engine.cfg
|
||||
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
|
||||
|
||||
# Clear temporary file used as log track by httpdlog
|
||||
# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
|
||||
echo -n "" > $OGLOGSESSION; echo -n "" > $OGLOGCOMMAND
|
||||
|
||||
# Registro de inicio de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_START $0 $*"
|
||||
|
||||
echo -e "\n Instrucciones a ejecutar: *****************************" >> $OGLOGFILE
|
||||
cat $1 >> $OGLOGFILE
|
||||
|
||||
|
||||
echo -e "\n Salida de las instrucciones: *****************************" >> $OGLOGFILE
|
||||
chmod +x $1
|
||||
# Si mandamos la salida a OGLOGCOMMAND reescribimos lo que manda el comando.
|
||||
#$1 &>> $OGLOGCOMMAND
|
||||
$1
|
||||
RETVAL=$?
|
||||
|
||||
|
||||
|
||||
TIME=$[SECONDS-TIME1]
|
||||
if [ $RETVAL == 0 ]
|
||||
then
|
||||
ogEcho log session "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s"
|
||||
else
|
||||
ogRaiseError log session $RETVAL
|
||||
ogEcho log session error "Operacion no realizada"
|
||||
fi
|
||||
|
||||
|
||||
# Registro de fin de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_END $RETVAL"
|
||||
|
||||
|
||||
exit $RETVAL
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
|
||||
# UHU - Comprobamos el disco, si solo hay un parametro, disco es 1, por compatibilidad con clientes antiguos
|
||||
if [ $# == 1 ]
|
||||
then
|
||||
disk=1
|
||||
part=$1
|
||||
else
|
||||
disk=$1
|
||||
part=$2
|
||||
fi
|
||||
|
||||
bootOs $disk $part
|
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
# Script de interfaz para guardar en un fichero el inventario de hardware de un cliente.
|
||||
|
||||
file=$(listHardwareInfo)
|
||||
tail -n+2 $file >$1
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
#!/bin/bash
|
||||
|
||||
TIME1=$SECONDS
|
||||
|
||||
#Carga el configurador del engine desde el fichero engine.cfg
|
||||
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
|
||||
|
||||
# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
|
||||
echo -n " " | tee $OGLOGSESSION $OGLOGCOMMAND ${OGLOGCOMMAND}.tmp
|
||||
|
||||
# Registro de inicio de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_START $0 $*"
|
||||
|
||||
file=$(listSoftwareInfo $1 $2)
|
||||
cp $file $3
|
||||
|
||||
TIME=$[SECONDS-TIME1]
|
||||
ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL : $[TIME/60]m $[TIME%60]s"
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
reboot
|
||||
exit 0
|
|
@ -0,0 +1,15 @@
|
|||
#!/bin/bash
|
||||
#_______________________________________________________________________________________________________________________________
|
||||
#
|
||||
# PARAMETROS RECIBIDOS DESDE EL CLIENTE:
|
||||
# $1 disco
|
||||
# $2 par=Número de particion
|
||||
# $3 Nombre canónico de la imagen
|
||||
# $4 Dirección IP del repositorio
|
||||
# $5 Protocolo UNICAST MULTICAST TORRENT
|
||||
# $6 Opciones del protocolo
|
||||
#_______________________________________________________________________________________________________________________________
|
||||
|
||||
# Llamar al script de despliegue "deployImage".
|
||||
deployImage "$4" "$3" "$1" "$2" "$5" "$6" "$7" "$8" || exit $?
|
||||
|
|
@ -0,0 +1,89 @@
|
|||
#!/bin/bash
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# RESTAURAR IMAGEN BÁSICA
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Parámetros recibidos desde el cliente:
|
||||
#
|
||||
# $1 Número de disco
|
||||
# $2 Número de particion
|
||||
# $3 Nombre canónico de la imagen básica (sin extensión)
|
||||
# $4 Dirección del repositorio
|
||||
# $5 Tipo de transmisión 0=Unicast 1=Multicast
|
||||
# $6 Es una cadena "nnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnn" donde "n" vale 0 ó 1.
|
||||
# 1XX: Gestionar fichero completo en lugar de diferencas
|
||||
# X1X: Eliminar archivos de la partición que no estén en la imagen
|
||||
# XX1: Comprimir archivos para enviarlos por la red
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $7 Es una cadena "nnnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
|
||||
# 1XXX: Borrar la particion de destino antes de restaurar la imagen basica
|
||||
# X1XX: Copiar Imagen básica también a la cache
|
||||
# XX1X: Borrar previamente la imagen basica de la cache antes de copiarla
|
||||
# XXX1: No borrar archivos en destino
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $8 Método de clonación 0=Desde caché 1=Desde repositorio
|
||||
# $9 Metodo de sincronizacion 1=Sincronización1 2=Sincronizacion2
|
||||
# $10 Ruta de origen de la Imagen (Carpeta)
|
||||
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Control parámetros
|
||||
#___________________________________________________________________
|
||||
|
||||
PROG="$(basename $0)"
|
||||
if [ $# -lt 9 ]; then
|
||||
usage=" ndisco nparticion nombre_imagen_basica ip_repositorio copiar_a_caché "
|
||||
usage="$usage Borrar_cache_previamente metodo_clonación Ruta_origen"
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG $usage"
|
||||
exit $?
|
||||
fi
|
||||
|
||||
#Load engine configurator from engine.cfg file.
|
||||
#Carga el configurador del engine desde el fichero engine.cfg
|
||||
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
|
||||
|
||||
# Clear temporary file used as log track by httpdlog
|
||||
# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
|
||||
echo -n "" > $OGLOGSESSION; echo " " > $OGLOGCOMMAND
|
||||
|
||||
# Registro de inicio de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_START $0 $*"
|
||||
|
||||
if [ $9 -eq 1 ]; then
|
||||
#sincronizacion1
|
||||
ogRestaurarImagenBasica "$@"
|
||||
RETVAL=$?
|
||||
fi
|
||||
|
||||
if [ $9 -eq 2 ]; then
|
||||
#sincronizacion2
|
||||
# Opciones de clonacion
|
||||
flag=$6
|
||||
WHOLE=${flag:0:1}
|
||||
DELFILE=${flag:1:1}
|
||||
COMPRESS=${flag:2:1}
|
||||
|
||||
# Nota los valores se pasan como variables de entorno,
|
||||
# la idea es que mas adelante vayan en el fichero PXE.
|
||||
[ $WHOLE -eq 1 ] && export ogrsyncw=true || export ogrsyncw=false
|
||||
[ $DELFILE -eq 1 ] && export ogrsyncdel=true || export ogrsyncdel=false
|
||||
[ $COMPRESS -eq 1 ] && export ogrsyncz=true || export ogrsyncz=false
|
||||
|
||||
# Origen de la imagen.
|
||||
[ $8 -eq 0 ] && DEST="CACHE" || DEST="REPO"
|
||||
|
||||
# Protocolo de clonacion y opciones
|
||||
PROTO=${5%_*}
|
||||
OPT=${5#*_}
|
||||
|
||||
restoreBaseImage $DEST "$3" $1 $2 $PROTO $OPT
|
||||
RETVAL=$?
|
||||
fi
|
||||
|
||||
# Registro de fin de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_END $RETVAL"
|
||||
|
||||
exit $RETVAL
|
|
@ -0,0 +1,82 @@
|
|||
#!/bin/bash
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# RESTAURAR IMAGEN INCREMENTAL
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Parámetros recibidos desde el cliente:
|
||||
#
|
||||
# $1 Número de disco
|
||||
# $2 Número de particion
|
||||
# $3 Nombre canónico de la imagen básica (sin extensión)
|
||||
# $4 Dirección del repositorio
|
||||
# $5 Nombre canónico del software incremental (sin extensión)
|
||||
# $6 Tipo de transmisión 0=Unicast 1=Multicast
|
||||
# $7 Es una cadena "nnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnn" donde "n" vale 0 ó 1.
|
||||
# 1XX: Gestionar fichero completo en lugar de diferencas
|
||||
# X1X: Eliminar archivos de la partición que no estén en la imagen
|
||||
# XX1: Comprimir archivos para enviarlos por la red
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $8 Es una cadena "nnnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
|
||||
# 1XXX: Borrar la particion de destino antes de restaurar la imagen basica
|
||||
# X1XX: Copiar Imagen básica también a la cache
|
||||
# XX1X: Borrar previamente la imagen basica de la cache antes de copiarla
|
||||
# XXX1: No borrar archivos en destino
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $9 Método de clonación 0=Desde caché 1=Desde repositorio
|
||||
# $10 Metodo de sincronizacion 1=Sincronización1 2=Sincronizacion2
|
||||
# $11 Ruta de origen de la Imagen (Carpeta)
|
||||
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Control parámetros
|
||||
#___________________________________________________________________
|
||||
#Load engine configurator from engine.cfg file.
|
||||
#Carga el configurador del engine desde el fichero engine.cfg
|
||||
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
|
||||
|
||||
# Clear temporary file used as log track by httpdlog
|
||||
# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
|
||||
echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND
|
||||
|
||||
# Registro de inicio de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_START $0 $*"
|
||||
|
||||
|
||||
if [ ${10} -eq 1 ]; then
|
||||
#sincronizacion1
|
||||
ogRestaurarSoftIncremental "$@"
|
||||
RETVAL=$?
|
||||
fi
|
||||
|
||||
if [ ${10} -eq 2 ]; then
|
||||
#sincronizacion2
|
||||
# Opciones de clonacion
|
||||
flag=$7
|
||||
WHOLE=${flag:0:1}
|
||||
DELFILE=${flag:1:1}
|
||||
COMPRESS=${flag:2:1}
|
||||
|
||||
# Nota los valores se pasan como variables de entorno,
|
||||
# la idea es que mas adelante vayan en el fichero PXE.
|
||||
[ $WHOLE -eq 1 ] && export ogrsyncw=true || export ogrsyncw=false
|
||||
[ $DELFILE -eq 1 ] && export ogrsyncdel=true || export ogrsyncdel=false
|
||||
[ $COMPRESS -eq 1 ] && export ogrsyncz=true || export ogrsyncz=false
|
||||
|
||||
# Origen de la imagen.
|
||||
[ $9 -eq 0 ] && DEST="CACHE" || DEST="REPO"
|
||||
|
||||
# Protocolo de clonacion y opciones
|
||||
PROTO=${6%_*}
|
||||
OPT=${6#*_}
|
||||
|
||||
restoreDiffImage $DEST "$3" "$5" $1 $2 $PROTO $OPT
|
||||
RETVAL=$?
|
||||
fi
|
||||
|
||||
# Registro de fin de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_END $RETVAL"
|
||||
|
||||
exit $RETVAL
|
|
@ -0,0 +1,88 @@
|
|||
#!/bin/bash
|
||||
|
||||
#_______________________________________________________________________________________________________________________________
|
||||
#
|
||||
# Formato de salida:
|
||||
# disk=Número de disco\tpar=Número de particion\tcod=Código de partición\tsfi=Sistema de ficheros\tsoi=Sistema instalado\ttam=Tamaño de la partición\n
|
||||
#_______________________________________________________________________________________________________________________________
|
||||
|
||||
|
||||
# No registrar los errores.
|
||||
export DEBUG="no"
|
||||
|
||||
ser=$(ogGetSerialNumber)
|
||||
cfg=""
|
||||
disks=$(ogDiskToDev | wc -w)
|
||||
for ((dsk=1; dsk<=$disks; dsk++)); do
|
||||
particiones=$(ogGetPartitionsNumber $dsk)
|
||||
particiones=${particiones:-0}
|
||||
# Tipo de tabla de particiones: 1=MSDOS, 2=GPT
|
||||
ptt=$(ogGetPartitionTableType $dsk)
|
||||
case "$ptt" in
|
||||
MSDOS) ptt=1 ;;
|
||||
GPT) ptt=2 ;;
|
||||
LVM) ptt=3 ;;
|
||||
ZPOOL) ptt=4 ;;
|
||||
*) ptt=0 ;;
|
||||
esac
|
||||
# Información de disco (partición 0)
|
||||
cfg="$cfg$dsk:0:$ptt:::$(ogGetDiskSize $dsk):0;"
|
||||
for ((par=1;par<=$particiones;par++)); do
|
||||
# Código del identificador de tipo de partición
|
||||
cod=$(ogGetPartitionId $dsk $par 2>/dev/null)
|
||||
# Tipo del sistema de ficheros
|
||||
fsi=$(getFsType $dsk $par 2>/dev/null)
|
||||
fsi=${fsi:-"EMPTY"}
|
||||
# Tamaño de la particón
|
||||
tam=$(ogGetPartitionSize $dsk $par 2>/dev/null)
|
||||
tam=${tam:-"0"}
|
||||
# Sistema operativo instalado
|
||||
case "$fsi" in
|
||||
""|EMPTY|LINUX-SWAP|LINUX-LVM|ZVOL)
|
||||
soi=""; uso=0 ;;
|
||||
*) if [ -n "$(ogMount $dsk $par 2>/dev/null)" ]; then
|
||||
soi=$(getOsVersion $dsk $par 2>/dev/null | cut -f2 -d:)
|
||||
# Hacer un 2º intento para algunos casos especiales.
|
||||
[ -z "$soi" ] && soi=$(getOsVersion $dsk $par 2>/dev/null | cut -f2 -d:)
|
||||
# Sistema de archivos para datos (sistema operativo "DATA")
|
||||
[ -z "$soi" -a "$fsi" != "EMPTY" -a "$fsi" != "CACHE" ] && soi="DATA"
|
||||
# Obtener porcentaje de uso.
|
||||
uso=$(df $(ogGetMountPoint $dsk $par) | awk '{getline; printf "%d",$5}')
|
||||
uso=${uso:0}
|
||||
else
|
||||
soi=""; uso=0
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
cfg="$cfg$dsk:$par:$cod:$fsi:$soi:$tam:$uso;"
|
||||
done
|
||||
done
|
||||
|
||||
# Crear configuración por defecto para cliente sin disco.
|
||||
[ -z "$cfg" ] && cfg="1:0:0:::0;"
|
||||
|
||||
# Guardar salida en fichero temporal.
|
||||
cfgfile=/tmp/getconfig
|
||||
echo "${ser:+$ser;}$cfg" > $cfgfile
|
||||
|
||||
# Crear el menú por defecto a partir del fichero generado (no dar ninguna salida).
|
||||
generateMenuDefault &>/dev/null
|
||||
|
||||
# Componer salida formateada.
|
||||
awk '{ n=split($0,sep,";");
|
||||
for (i=1; i<n; i++){
|
||||
c=split (sep[i],dua,":");
|
||||
if (i==1 && c==1)
|
||||
printf ("ser=%s\n", dua[1]);
|
||||
else
|
||||
printf ("disk=%s\tpar=%s\tcpt=%s\tfsi=%s\tsoi=%s\ttam=%s\tuso=%s\n",
|
||||
dua[1],dua[2],dua[3],dua[4],dua[5],dua[6],dua[7]);
|
||||
}
|
||||
}' $cfgfile
|
||||
|
||||
# Borramos marcas de arranque de Windows
|
||||
rm -f /mnt/*/ogboot.* /mnt/*/*/ogboot.*
|
||||
|
||||
# Volver a registrar los errores.
|
||||
unset DEBUG
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
#!/bin/bash
|
||||
getIpAddress
|
|
@ -0,0 +1,2 @@
|
|||
#!/bin/bash
|
||||
initCache $1
|
Loading…
Reference in New Issue