refs #505 adds sources from ogAdmClient and changes setsmbpass to set samba pass in client, adds file installation package too

ogboot_installer
Luis Gerardo Romero Garcia 2024-07-24 13:44:48 +00:00
parent 8d65ecd1d1
commit 5b6bc76d62
27 changed files with 3464 additions and 59 deletions

View File

@ -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

View File

@ -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}")

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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);

View File

@ -0,0 +1,3 @@
#!/bin/bash
poweroff
exit 0

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,3 @@
#!/bin/bash
chmod +x $1
$1>$2 || exit $?

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -0,0 +1,3 @@
#!/bin/bash
reboot
exit 0

View File

@ -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 $?

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,2 @@
#!/bin/bash
getIpAddress

View File

@ -0,0 +1,2 @@
#!/bin/bash
initCache $1