From b4b21b0180fed1bc86ab4c8171a68e2b3da7b63e Mon Sep 17 00:00:00 2001 From: "Ramón M. Gómez" Date: Thu, 17 May 2018 09:41:27 +0200 Subject: #812: integrar r5653 de SVN en rama {{{configfile}}} de Git. --- admin/Database/ogAdmBD.sql | 92 +-------- admin/Interface/getConfiguration | 15 +- .../includes/ConfiguracionesParticiones.php | 77 +++++-- admin/WebConsole/includes/pintaParticiones.php | 12 +- client/engine/Disk.lib | 225 +++++---------------- client/shared/etc/preinit/loadenviron.sh | 44 +--- doc/VERSION.txt | 2 +- 7 files changed, 130 insertions(+), 337 deletions(-) diff --git a/admin/Database/ogAdmBD.sql b/admin/Database/ogAdmBD.sql index b45b59d8..422ace93 100644 --- a/admin/Database/ogAdmBD.sql +++ b/admin/Database/ogAdmBD.sql @@ -608,7 +608,7 @@ INSERT INTO `parametros` (`idparametro`, `nemonico`, `descripcion`, `nomidentifi (16, 'exe', 'Identificador del procedimiento que será el que ejecute el cliente al arrancar (Autoexec)', '', '', '', 0, 0), (17, 'res', 'Respuesta del comando: Puede tomar los valores 1 o 2 en el caso de que la respuesta sea correcta o que haya un error al ejecutarse.', '', '', '', 0, 0), (19, 'ipr', 'Repositorio', 'ip', 'repositorios', 'nombrerepositorio', 1, 1), -(20, 'cpt', 'Tipo partición', 'codpar', 'tipospar', 'tipopar', 1, 1), +(20, 'cpt', 'Tipo partición', '', '', '', 1, 1), (21, 'sfi', 'Sistema de fichero', 'nemonico', 'sistemasficheros', 'nemonico', 1, 0), (22, 'tam', 'Tamaño', '', '', '', 0, 1), (23, 'ope', 'Operación', ';', '', 'Sin operación;Formatear;Ocultar;Mostrar', 3, 1), @@ -1004,96 +1004,6 @@ INSERT INTO `tiposos` (`idtiposo`, `tiposo`, `idplataforma`) VALUES (19, 'Linux Red Hat', 3), (20, 'Windows 7', 2); --- -------------------------------------------------------- - --- --- Estructura de tabla para la tabla `tipospar` --- - -DROP TABLE IF EXISTS `tipospar`; -CREATE TABLE `tipospar` ( - `codpar` int(8) NOT NULL, - `tipopar` varchar(250) NOT NULL DEFAULT '', - `clonable` tinyint(4) NOT NULL DEFAULT '0', - UNIQUE KEY `codpar` (`codpar`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- --- Volcar la base de datos para la tabla `tipospar` --- - -INSERT INTO `tipospar` (`codpar`, `tipopar`, `clonable`) VALUES -(0, 'EMPTY', 0), -(1, 'FAT12', 1), -(5, 'EXTENDED', 0), -(6, 'FAT16', 1), -(7, 'NTFS', 1), -(CONV('0B',16,10), 'FAT32', 1), -(CONV('11',16,10), 'HFAT12', 1), -(CONV('16',16,10), 'HFAT16', 1), -(CONV('17',16,10), 'HNTFS', 1), -(CONV('1B',16,10), 'HFAT32', 1), -(CONV('82',16,10), 'LINUX-SWAP', 0), -(CONV('83',16,10), 'LINUX', 1), -(CONV('8E',16,10), 'LINUX-LVM', 1), -(CONV('A5',16,10), 'FREEBSD', 1), -(CONV('A6',16,10), 'OPENBSD', 1), -(CONV('A9',16,10), 'NETBSD', 1), -(CONV('AF',16,10), 'HFS', 1), -(CONV('BE',16,10), 'SOLARIS-BOOT', 1), -(CONV('BF',16,10), 'SOLARIS', 1), -(CONV('CA',16,10), 'CACHE', 0), -(CONV('DA',16,10), 'DATA', 1), -(CONV('EE',16,10), 'GPT', 0), -(CONV('EF',16,10), 'EFI', 1), -(CONV('FB',16,10), 'VMFS', 1), -(CONV('FD',16,10), 'LINUX-RAID', 1), -(CONV('0700',16,10), 'WINDOWS', 1), -(CONV('0C01',16,10), 'WIN-RESERV', 1), -(CONV('2700',16,10), 'WIN-RECOV', 1), -(CONV('7F00',16,10), 'CHROMEOS-KRN', 1), -(CONV('7F01',16,10), 'CHROMEOS', 1), -(CONV('7F02',16,10), 'CHROMEOS-RESERV', 1), -(CONV('8200',16,10), 'LINUX-SWAP', 0), -(CONV('8300',16,10), 'LINUX', 1), -(CONV('8301',16,10), 'LINUX-RESERV', 1), -(CONV('8302',16,10), 'LINUX', 1), -(CONV('8E00',16,10), 'LINUX-LVM', 1), -(CONV('A500',16,10), 'FREEBSD-DISK', 0), -(CONV('A501',16,10), 'FREEBSD-BOOT', 1), -(CONV('A502',16,10), 'FREEBSD-SWAP', 0), -(CONV('A503',16,10), 'FREEBSD', 1), -(CONV('A504',16,10), 'FREEBSD', 1), -(CONV('A901',16,10), 'NETBSD-SWAP', 0), -(CONV('A902',16,10), 'NETBSD', 1), -(CONV('A903',16,10), 'NETBSD', 1), -(CONV('A904',16,10), 'NETBSD', 1), -(CONV('A905',16,10), 'NETBSD', 1), -(CONV('A906',16,10), 'NETBSD-RAID', 1), -(CONV('AB00',16,10), 'HFS-BOOT', 1), -(CONV('AF00',16,10), 'HFS', 1), -(CONV('AF01',16,10), 'HFS-RAID', 1), -(CONV('AF02',16,10), 'HFS-RAID', 1), -(CONV('BE00',16,10), 'SOLARIS-BOOT', 1), -(CONV('BF00',16,10), 'SOLARIS', 1), -(CONV('BF01',16,10), 'SOLARIS', 1), -(CONV('BF02',16,10), 'SOLARIS-SWAP', 0), -(CONV('BF03',16,10), 'SOLARIS-DISK', 1), -(CONV('BF04',16,10), 'SOLARIS', 1), -(CONV('BF05',16,10), 'SOLARIS', 1), -(CONV('CA00',16,10), 'CACHE', 0), -(CONV('EF00',16,10), 'EFI', 1), -(CONV('EF01',16,10), 'MBR', 0), -(CONV('EF02',16,10), 'BIOS-BOOT', 0), -(CONV('FB00',16,10), 'VMFS', 1), -(CONV('FB01',16,10), 'VMFS-RESERV', 1), -(CONV('FB02',16,10), 'VMFS-KRN', 1), -(CONV('FD00',16,10), 'LINUX-RAID', 1), -(CONV('FFFF',16,10), 'UNKNOWN', 1), -(CONV('10000',16,10), 'LVM-LV', 1), -(CONV('10010',16,10), 'ZFS-VOL', 1); - - -- -------------------------------------------------------- -- diff --git a/admin/Interface/getConfiguration b/admin/Interface/getConfiguration index ddfc3821..c5046d19 100755 --- a/admin/Interface/getConfiguration +++ b/admin/Interface/getConfiguration @@ -16,17 +16,14 @@ 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 + # Tipo de tabla de particiones ptt=$(ogGetPartitionTableType $dsk) - case "$ptt" in - MSDOS) ptt=1 ;; - GPT) ptt=2 ;; - LVM) ptt=3 ;; - ZPOOL) ptt=4 ;; - *) ptt=0 ;; - esac + ptt=$(jq -r ".partitiontables[] | select(.type==\"$ptt\").id" $ENGINECFG 2>/dev/null) + ptt=${ptt:-"0"} + # Tipo de disco + dst=$(ogGetDiskType $(ogDiskToDev $dsk) 2>/dev/null) # Información de disco (partición 0) - cfg="$cfg$dsk:0:$ptt:::$(ogGetDiskSize $dsk):0;" + cfg="$cfg$dsk:0:$ptt:$dst::$(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) diff --git a/admin/WebConsole/includes/ConfiguracionesParticiones.php b/admin/WebConsole/includes/ConfiguracionesParticiones.php index 816843b5..963e1d08 100644 --- a/admin/WebConsole/includes/ConfiguracionesParticiones.php +++ b/admin/WebConsole/includes/ConfiguracionesParticiones.php @@ -1,8 +1,48 @@ partitiontables)) { + foreach ($json->partitiontables as $tab) { + if (isset($tab->partitions)) { + foreach ($tab->partitions as $par) { + if (hexdec($par->id) == $code) { + return [$par->type, $par->clonable]; + } + } + } + } + } + return [$partcode, true]; +} + +/** + * Busca en la configuración JSON los datos de tabla de particiones para el código correspondiente. + * @param object $json datos JSON de configuración + * @param string $code código de tabla de particiones + * @return string tipo de tabla de particiones + */ +function getParttableData($json, $code) { + if (isset($json->partitiontables)) { + foreach ($json->partitiontables as $tab) { + if (hexdec($tab->id) == $code) { + return $tab->type; + } + } + return ""; +} + /*________________________________________________________________________________________________________ - UHU - 2013/05/14 - Se añade la clave número de disco + UHU - 2013/05/14 - Se añade la clave número de disco + Ramón - 2018/03/09 - Usar fichero de configuración JSON para datos estáticos + La clave de configuración está formada por una serie de valores separados por ";" Ejemplo:1;1;7;30000000;3;3;0;11 @@ -57,7 +97,6 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) global $AMBITO_AULAS; global $AMBITO_GRUPOSORDENADORES; global $AMBITO_ORDENADORES; - global $msk_sysFi; global $msk_nombreSO; global $msk_tamano; @@ -65,6 +104,9 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) global $msk_perfil; global $msk_cache; + // Cargar datos JSON de configuración. + $json=json_decode(file_get_contents(ENGINEJSON)); + // Comprobar modos SQL para hacer que la consulta sea compatible. $cmd->texto="SELECT @@sql_mode AS mode"; $cmd->ejecutar(); @@ -95,8 +137,6 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) ANY_VALUE(ordenadores_particiones.numdisk) AS numdisk, ANY_VALUE(ordenadores_particiones.numpar) AS numpar, ANY_VALUE(ordenadores_particiones.codpar) AS codpar, - IFNULL (ANY_VALUE(tipospar.tipopar), ANY_VALUE(ordenadores_particiones.codpar)) AS tipopar, - ANY_VALUE(tipospar.clonable) AS clonable, ANY_VALUE(ordenadores_particiones.tamano) AS tamano, ANY_VALUE(ordenadores_particiones.uso) AS uso, ANY_VALUE(sistemasficheros.descripcion) AS sistemafichero, @@ -113,7 +153,6 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) FROM ordenadores INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso - LEFT OUTER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero"; @@ -133,7 +172,7 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) } if($swr) // Si se trata de restauración no se tiene en cuenta las partciones no clonables - $cmd->texto.=" AND tipospar.clonable=1 AND ordenadores_particiones.numpar>0 "; + $cmd->texto.=" AND ordenadores_particiones.numpar>0 "; $cmd->texto.=" GROUP BY configuracion"; // Comprobar compatiblidad de cláusula GROUP BY. @@ -145,13 +184,26 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) if (!$rs->Abrir()) return(false); // Error al abrir recordset $rs->Primero(); $idx=0; - while (!$rs->EOF){ + while (!$rs->EOF) { + $numpar=$rs->campos["numpar"]; + $codpar=$rs->campos["codpar"]; + if ($numpar == 0) { + // Tipo de tabla de particiones. + $tipopar = getParttableData($json, $codpar); + } else { + // Saltar si no es clonable en restauración. + list($tipopar, $clonable) = getPartitionData($json, $codpar); + if ($swr and $clonable == false) { + continue; + } + } + // Leer datos. $tbKeys[$idx]["cfg"]=$rs->campos["configuracion"]; $tbKeys[$idx]["numdisk"]=$rs->campos["numdisk"]; $tbKeys[$idx]["numpar"]=$rs->campos["numpar"]; - $tbKeys[$idx]["codpar"]=$rs->campos["codpar"]; - $tbKeys[$idx]["tipopar"]=$rs->campos["tipopar"]; - $tbKeys[$idx]["clonable"]=$rs->campos["clonable"]; + $tbKeys[$idx]["codpar"]=$codpar; + $tbKeys[$idx]["tipopar"]=$tipopar; + $tbKeys[$idx]["clonable"]=$clonable; $tbKeys[$idx]["tamano"]=$rs->campos["tamano"]; $tbKeys[$idx]["uso"]=$rs->campos["uso"]; $tbKeys[$idx]["sistemafichero"]=$rs->campos["sistemafichero"]; @@ -243,7 +295,6 @@ function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr,$pintaPar FROM ordenadores INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso - LEFT JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero"; @@ -261,7 +312,7 @@ function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr,$pintaPar } if ($swr) // Si se trata de restauración no se tiene en cuenta las particiones no clonables - $cmd->texto.=" AND tipospar.clonable=1 AND ordenadores_particiones.numpar>0"; + $cmd->texto.=" AND ordenadores_particiones.numpar>0"; $cmd->texto.=" ORDER BY ordenadores_particiones.idordenador, ordenadores_particiones.numdisk, ordenadores_particiones.numpar) AS temp1 GROUP BY temp1.idordenador) AS temp2 @@ -833,5 +884,3 @@ function tomaCache($numpar,$ordenadores,$numdisk = 1) } } } -?> - diff --git a/admin/WebConsole/includes/pintaParticiones.php b/admin/WebConsole/includes/pintaParticiones.php index 44c3f10c..cf9cd98e 100644 --- a/admin/WebConsole/includes/pintaParticiones.php +++ b/admin/WebConsole/includes/pintaParticiones.php @@ -81,17 +81,7 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc) if (empty ($disksize)) { $disksize = ''.$TbMsg["VARIABLE"].''; } - switch ($tbKeys[$k]["codpar"]) { - case 1: $disktable[$tbKeys[$k]["numdisk"]] = "MSDOS"; - break; - case 2: $disktable[$tbKeys[$k]["numdisk"]] = "GPT"; - break; - case 3: $disktable[$tbKeys[$k]["numdisk"]] = "LVM"; - break; - case 4: $disktable[$tbKeys[$k]["numdisk"]] = "ZPOOL"; - break; - default: $disktable[$tbKeys[$k]["numdisk"]] = ""; - } + $disktable[$tbKeys[$k]["numdisk"]] = $tbKeys[$k]["tipopar"]; } else { // Información de partición (numpart>0) echo''.chr(13); diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib index e9b1992b..7f46d789 100755 --- a/client/engine/Disk.lib +++ b/client/engine/Disk.lib @@ -33,16 +33,16 @@ timeout -k 5s -s KILL 3s $(which parted) "$@" #@todo Definir atributos (arranque, oculta) y tamaños en MB, GB, etc. #@version 0.9 - Primera versión para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009/09/09 +#@date 2009-09-09 #@version 0.9.1 - Corrección del redondeo del tamaño del disco. #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010/03/09 +#@date 2010-03-09 #@version 1.0.4 - Llamada a función específica para tablas GPT. #@author Universidad de Huelva -#@date 2012/03/30 +#@date 2012-03-30 #@version 1.1.1 - El inicio de la primera partición logica es el de la extendida más 4x512 #@author Irina Gomez, ETSII Universidad de Sevilla -#@date 2016/07/11 +#@date 2016-07-11 #*/ ## function ogCreatePartitions () { @@ -174,7 +174,7 @@ rm -f $tmpsfdisk #@todo Definir atributos (arranque, oculta) y tamaños en MB, GB, etc. #@version 1.0.4 - Primera versión para OpenGnSys #@author Universidad de Huelva -#@date 2012/03/30 +#@date 2012-03-30 #*/ ## function ogCreateGptPartitions () { @@ -269,10 +269,10 @@ sgdisk $DELOPTIONS $OPTIONS $DISK 2>/dev/null && partprobe $DISK #@note Requisitos: fdisk, gdisk, parted #@version 1.0.4 - Primera versión compatible con OpenGnSys. #@author Universidad de Huelva -#@date 2012/03/06 +#@date 2012-03-06 #@version 1.0.6a - Adaptar creación de nueva tabla MSDOS. #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2016/01/29 +#@date 2016-01-29 #*/ ## function ogCreatePartitionTable () { @@ -339,10 +339,10 @@ esac #@return la informacion propia del fdisk #@version 0.1 - Integracion para OpenGnSys #@author Antonio J. Doblas Viso. Universidad de Malaga -#@date 2008/10/27 +#@date 2008-10-27 #@version 1.0.4 - Adaptado para su uso con discos GPT #@author Universidad de Huelva -#@date 2012/03/13 +#@date 2012-03-13 #*/ ## function ogDeletePartitionTable () { @@ -380,13 +380,13 @@ esac #@note Solo se acepta en cada llamada 1 de los 3 tipos de parámetros. #@version 0.1 - Integracion para Opengnsys - EAC: DiskEAC() en ATA.lib #@author Antonio J. Doblas Viso, Universidad de Malaga -#@date 2008/10/27 +#@date 2008-10-27 #@version 0.9 - Primera version para OpenGnSys #@author Ramon Gomez, ETSII Universidad Sevilla -#@date 2009/07/20 +#@date 2009-07-20 #@version 1.0.6 - Soporta parámetro con UIID o etiqueta. #@author Ramon Gomez, ETSII Universidad Sevilla -#@date 2014/07/13 +#@date 2014-07-13 #*/ ## function ogDevToDisk () { @@ -449,7 +449,7 @@ return $OG_ERR_NOTFOUND #@author Ramon Gomez, ETSII Universidad de Sevilla #@Date 2008/06/19 #@author Antonio J. Doblas Viso, Universidad de Malaga -#@date 2008/10/27 +#@date 2008-10-27 #@version 0.9 - Primera version para OpenGnSys #@author Ramon Gomez, ETSII Universidad Sevilla #@date 2009-07-20 @@ -494,9 +494,7 @@ fi # Continuar para detectar nuevos dispositivos. # Listar dispositivos de discos. -ALLDISKS=$((lsblk -n -e 1,2 -x MAJ:MIN 2>/dev/null || lsblk -n -e 1,2) | \ - awk '$6~/^disk$/ {gsub(/!/,"/"); printf "/dev/%s ",$1}') -#ALLDISKS=$(lsblk -Jdp | jq -r '.blockdevices[] | select(.type=="disk").name') +ALLDISKS=$(lsblk -Jdp | jq -r '.blockdevices[] | select(.type=="disk").name') # Listar volúmenes lógicos. VOLGROUPS=$(vgs -a --noheadings 2>/dev/null | awk '{printf "/dev/%s ",$1}') ALLDISKS="$ALLDISKS $VOLGROUPS" @@ -589,10 +587,10 @@ esac #@note Requisitos: sfdisk, awk #@version 0.9.2 - Primera version para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010/09/15 +#@date 2010-09-15 #@version 1.0.6 - Soportar LVM. #@author Universidad de Huelva -#@date 2014/09/04 +#@date 2014-09-04 #*/ ## function ogGetDiskSize () { @@ -748,7 +746,7 @@ echo $LASTSECTOR #@todo Queda definir formato para atributos (arranque, oculta, ...). #@version 0.9 - Primera version compatible con OpenGnSys. #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009/09/17 +#@date 2009-09-17 #*/ ## function ogGetPartitionActive () { @@ -794,7 +792,7 @@ LANG=C parted -sm $DISK print 2>/dev/null | awk -F: '$7~/boot/ {print $1}' function ogGetPartitionId () { # Variables locales. -local DISK ID +local DISK PTTYPE ID # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -807,15 +805,16 @@ fi # Detectar y mostrar el id. de tipo de partición. DISK=$(ogDiskToDev $1) || return $? -case "$(ogGetPartitionTableType $1)" in +PTTYPE=$(ogGetPartitionTableType $1) +case "$PTTYPE" in GPT) ID=$(sgdisk -p $DISK 2>/dev/null | awk -v p="$2" '{if ($1==p) print $6;}') || ogRaiseError $OG_ERR_NOTFOUND "$1,$2" || return $? [ "$ID" == "8300" -a "$1 $2" == "$(ogFindCache)" ] && ID=CA00 ;; MSDOS) ID=$(sfdisk --id $DISK $2 2>/dev/null) || ogRaiseError $OG_ERR_NOTFOUND "$1,$2" || return $? ;; - LVM) ID=10000 ;; - ZPOOL) ID=10010 ;; + *) ID=$(jq -r ".partitiontables[] | select(.type==\"$PTTYPE\").partitions[0].id") $ENGINECFG ;; esac -echo $ID +# Id. hexadecimal en minúsculas. +echo ${ID,,} } @@ -830,13 +829,13 @@ echo $ID #@note Requisitos: sfdisk, awk #@version 0.1 - Integracion para Opengnsys - EAC: SizePartition () en ATA.lib #@author Antonio J. Doblas Viso, Universidad de Malaga -#@date 2008/10/27 +#@date 2008-10-27 #@version 0.9 - Primera version para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009/07/24 +#@date 2009-07-24 #@version 1.1.0 - Sustituir "sfdisk" por "partx". #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2016/05/04 +#@date 2016-05-04 #*/ ## function ogGetPartitionSize () { @@ -871,7 +870,7 @@ echo ${SIZE:-0} #@note Notas sin especificar #@version 0.1 - Integracion para Opengnsys - EAC: DetectNumberPartition () en ATA.lib #@author Antonio J. Doblas Viso. Universidad de Malaga -#@date Date: 27/10/2008 +#@date 2008-10-27 #@version 1.0 - Uso de sfdisk Primera version para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009-07-24 @@ -924,7 +923,7 @@ esac #@note Requisitos: blkid, parted, vgs #@version 1.0.4 - Primera versión para OpenGnSys #@author Universidad de Huelva -#@date 2012/03/01 +#@date 2012-03-01 #@version 1.0.6 - Soportar LVM. #@author Universidad de Huelva #@date 2014-09-04 @@ -1018,7 +1017,7 @@ echo "$TYPE" #@exception OG_ERR_PARTITION tipo de partición no reconocido. #@version 1.0 - Versión en pruebas. #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010/01/12 +#@date 2010-01-12 #*/ ## function ogHidePartition () { @@ -1058,6 +1057,9 @@ ogSetPartitionType $1 $2 $NEWTYPE #@version 1.0.5 - Primera version para OpenGnSys #@author Ramon Gomez, ETSII Universidad Sevilla #@date 2013-02-07 +#@version 1.1.1 - Usar fichero de configuración JSON +#@author Ramon Gomez, ETSII Universidad Sevilla +#@date 2018-02-27 #*/ ## function ogIdToType () { @@ -1073,56 +1075,9 @@ fi # Error si no se recibe 1 parámetro. [ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $? -# Obtener valor hexadecimal de 4 caracteres rellenado con 0 por delante. -ID=$(printf "%4s" "$1" | tr ' ' '0') -case "${ID,,}" in - 0000) TYPE="EMPTY" ;; - 0001) TYPE="FAT12" ;; - 0005|000f) TYPE="EXTENDED" ;; - 0006|000e) TYPE="FAT16" ;; - 0007) TYPE="NTFS" ;; - 000b|000c) TYPE="FAT32" ;; - 0011) TYPE="HFAT12" ;; - 0012) TYPE="COMPAQDIAG" ;; - 0016|001e) TYPE="HFAT16" ;; - 0017) TYPE="HNTFS" ;; - 001b|001c) TYPE="HFAT32" ;; - 0042) TYPE="WIN-DYNAMIC" ;; - 0082|8200) TYPE="LINUX-SWAP" ;; - 0083|8300) TYPE="LINUX" ;; - 008e|8E00) TYPE="LINUX-LVM" ;; - 00a5|a503) TYPE="FREEBSD" ;; - 00a6) TYPE="OPENBSD" ;; - 00a7) TYPE="CACHE" ;; # (compatibilidad con Brutalix) - 00af|af00) TYPE="HFS" ;; - 00be|be00) TYPE="SOLARIS-BOOT" ;; - 00bf|bf0[0145]) TYPE="SOLARIS" ;; - 00ca|ca00) TYPE="CACHE" ;; - 00da) TYPE="DATA" ;; - 00ee) TYPE="GPT" ;; - 00ef|ef00) TYPE="EFI" ;; - 00fb) TYPE="VMFS" ;; - 00fd|fd00) TYPE="LINUX-RAID" ;; - 0700) TYPE="WINDOWS" ;; - 0c01) TYPE="WIN-RESERV" ;; - 7f00) TYPE="CHROMEOS-KRN" ;; - 7f01) TYPE="CHROMEOS" ;; - 7f02) TYPE="CHROMEOS-RESERV" ;; - 8301) TYPE="LINUX-RESERV" ;; - a500) TYPE="FREEBSD-DISK" ;; - a501) TYPE="FREEBSD-BOOT" ;; - a502) TYPE="FREEBSD-SWAP" ;; - ab00) TYPE="HFS-BOOT" ;; - af01) TYPE="HFS-RAID" ;; - bf02) TYPE="SOLARIS-SWAP" ;; - bf03) TYPE="SOLARIS-DISK" ;; - ef01) TYPE="MBR" ;; - ef02) TYPE="BIOS-BOOT" ;; - 10000) TYPE="LVM-LV" ;; - 10010) TYPE="ZFS-VOL" ;; - *) TYPE="UNKNOWN" ;; -esac -echo "$TYPE" +# Consulta JSON del valor hexadecimal quitando 0 no significativos. +ID=$(printf "%x" "$((0x$1))" 2>/dev/null) +jq -r "(.partitiontables[].partitions[]) | select(.id==\"${ID,,}\").type" $ENGINECFG 2>/dev/null } @@ -1168,7 +1123,7 @@ test -f $LOCKFILE #@attention Las tuplas de valores están separadas por espacios. #@version 0.9 - Primera versión para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009/07/24 +#@date 2009-07-24 #*/ ## function ogListPartitions () { @@ -1293,10 +1248,10 @@ touch $LOCKFILE #@note Requisitos: parted #@version 0.1 - Integracion para Opengnsys - EAC: SetPartitionActive() en ATA.lib #@author Antonio J. Doblas Viso, Universidad de Malaga -#@date 2008/10/27 +#@date 2008-10-27 #@version 0.9 - Primera version compatible con OpenGnSys. #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009/09/17 +#@date 2009-09-17 #*/ ## function ogSetPartitionActive () { @@ -1333,13 +1288,13 @@ parted -s $DISK set $2 boot on 2>/dev/null #@attention Requisitos: fdisk, sgdisk #@version 0.1 - Integracion para Opengnsys - SetPartitionType() en ATA.lib #@author Antonio J. Doblas Viso. Universidad de Malaga -#@date 2008/10/27 +#@date 2008-10-27 #@version 1.0.4 - Soporte para discos GPT. #@author Universidad de Huelva -#@date 2012/03/13 +#@date 2012-03-13 #@version 1.0.5 - Utiliza el id. de tipo de partición (no el mnemónico) #@author Universidad de Huelva -#@date 2012/05/14 +#@date 2012-05-14 #*/ ## function ogSetPartitionId () { @@ -1395,7 +1350,7 @@ fi #@todo Compruebar que el tamaño sea numérico positivo y evitar que pueda solaparse con la siguiente partición. #@version 0.9 - Primera versión para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009/07/24 +#@date 2009-07-24 #*/ ## function ogSetPartitionSize () { @@ -1432,13 +1387,13 @@ partprobe $DISK 2>/dev/null #@attention Requisitos: fdisk, sgdisk #@version 0.1 - Integracion para Opengnsys - SetPartitionType() en ATA.lib #@author Antonio J. Doblas Viso. Universidad de Malaga -#@date 2008/10/27 +#@date 2008-10-27 #@version 1.0.4 - Soporte para discos GPT. #@author Universidad de Huelva -#@date 2012/03/13 +#@date 2012-03-13 #@version 1.0.5 - Renombrada de ogSetPartitionId. #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2013/03/07 +#@date 2013-03-07 #*/ ## function ogSetPartitionType () { @@ -1476,18 +1431,21 @@ ogSetPartitionId $1 $2 $ID #@note tabletype = { MSDOS, GPT }, (MSDOS, por defecto) #@version 0.1 - Integracion para Opengnsys - EAC: TypeFS () en ATA.lib #@author Antonio J. Doblas Viso, Universidad de Malaga -#@date 2008/10/27 +#@date 2008-10-27 #@version 0.9 - Primera version para OpenGnSys #@author Ramon Gomez, ETSII Universidad Sevilla #@date 2009-12-14 #@version 1.0.4 - Soportar discos GPT (sustituye a ogFsToId). #@author Universidad de Huelva -#@date 2012/03/30 +#@date 2012-03-30 +#@version 1.1.1 - Usar fichero de configuración JSON +#@author Ramon Gomez, ETSII Universidad Sevilla +#@date 2018-02-27 #*/ ## function ogTypeToId () { # Variables locales -local PTTYPE ID="" +local PTTYPE # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -1499,82 +1457,9 @@ fi # Error si no se reciben 1 o 2 parámetros. [ $# -lt 1 -o $# -gt 2 ] && (ogRaiseError $OG_ERR_FORMAT; return $?) -# Asociar id. de partición para su mnemónico. +# Consulta JSON con tipo de tabla y tipo de partición. PTTYPE=${2:-"MSDOS"} -case "$PTTYPE" in - GPT) # Se incluyen mnemónicos compatibles con tablas MSDOS. - case "$1" in - EMPTY) ID=0 ;; - WINDOWS|NTFS|EXFAT|FAT32|FAT16|FAT12|HNTFS|HFAT32|HFAT16|HFAT12) - ID=0700 ;; - WIN-RESERV) ID=0C01 ;; - CHROMEOS-KRN) ID=7F00 ;; - CHROMEOS) ID=7F01 ;; - CHROMEOS-RESERV) ID=7F02 ;; - LINUX-SWAP) ID=8200 ;; - LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS) - ID=8300 ;; - LINUX-RESERV) ID=8301 ;; - LINUX-LVM) ID=8E00 ;; - FREEBSD-DISK) ID=A500 ;; - FREEBSD-BOOT) ID=A501 ;; - FREEBSD-SWAP) ID=A502 ;; - FREEBSD) ID=A503 ;; - HFS-BOOT) ID=AB00 ;; - HFS|HFS+) ID=AF00 ;; - HFSPLUS) ID=AF00 ;; - HFS-RAID) ID=AF01 ;; - SOLARIS-BOOT) ID=BE00 ;; - SOLARIS) ID=BF00 ;; - SOLARIS-SWAP) ID=BF02 ;; - SOLARIS-DISK) ID=BF03 ;; - CACHE) ID=CA00;; - EFI) ID=EF00 ;; - LINUX-RAID) ID=FD00 ;; - esac - ;; - MSDOS) - case "$1" in - EMPTY) ID=0 ;; - FAT12) ID=1 ;; - EXTENDED) ID=5 ;; - FAT16) ID=6 ;; - WINDOWS|NTFS|EXFAT) - ID=7 ;; - FAT32) ID=b ;; - HFAT12) ID=11 ;; - HFAT16) ID=16 ;; - HNTFS) ID=17 ;; - HFAT32) ID=1b ;; - LINUX-SWAP) ID=82 ;; - LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS) - ID=83 ;; - LINUX-LVM) ID=8e ;; - FREEBSD) ID=a5 ;; - OPENBSD) ID=a6 ;; - HFS|HFS+) ID=af ;; - SOLARIS-BOOT) ID=be ;; - SOLARIS) ID=bf ;; - CACHE) ID=ca ;; - DATA) ID=da ;; - GPT) ID=ee ;; - EFI) ID=ef ;; - VMFS) ID=fb ;; - LINUX-RAID) ID=fd ;; - esac - ;; - LVM) - case "$1" in - LVM-LV) ID=10000 ;; - esac - ;; - ZVOL) - case "$1" in - ZFS-VOL) ID=10010 ;; - esac - ;; -esac -echo $ID +jq -r "(.partitiontables[] | select(.type==\"${PTTYPE^^}\").partitions[]) | select(.type==\"${1^^}\").id" $ENGINECFG 2>/dev/null } @@ -1589,7 +1474,7 @@ echo $ID #@exception OG_ERR_PARTITION tipo de partición no reconocido. #@version 1.0 - Versión en pruebas. #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010/01/12 +#@date 2010-01-12 #*/ ## function ogUnhidePartition () { @@ -1664,7 +1549,7 @@ rm -f $LOCKFILE #@warning pendiente estructurar la funcion a opengnsys #@version 0.1 - Integracion para Opengnsys - EAC: UpdatePartitionTable() en ATA.lib #@author Antonio J. Doblas Viso. Universidad de Malaga -#@date 27/10/2008 +#@date 2008-10-27 #*/ ## function ogUpdatePartitionTable () { diff --git a/client/shared/etc/preinit/loadenviron.sh b/client/shared/etc/preinit/loadenviron.sh index 314fb872..7c9bc027 100755 --- a/client/shared/etc/preinit/loadenviron.sh +++ b/client/shared/etc/preinit/loadenviron.sh @@ -23,6 +23,7 @@ export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" if [ -d $OPENGNSYS ]; then export OGBIN=$OPENGNSYS/bin export OGETC=$OPENGNSYS/etc + export ENGINECFG=$OGETC/engine.json export OGLIB=$OPENGNSYS/lib export OGAPI=$OGLIB/engine/bin export OGSCRIPTS=$OPENGNSYS/scripts @@ -63,7 +64,7 @@ if [ -d $OPENGNSYS ]; then done # Cargar configuración del engine. - [ -f ${OGETC}/engine.cfg ] && source ${OGETC}/engine.cfg + eval $(jq -r 'foreach .variables[] as $var (""; "export "+$var.name+"=\""+($var.value|tostring)+"\"")' $ENGINECFG 2>/dev/null) export OGLOGCOMMAND=${OGLOGCOMMAND:-/tmp/command.log} export OGLOGSESSION=${OGLOGSESSION:-/tmp/session.log} @@ -100,44 +101,5 @@ if [ ! -f /run/resolvconf/resolv.conf -a -n "$ogdns" ]; then fi # Declaración de códigos de error. -export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. -export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. -export OG_ERR_PARTITION=3 # Error en partición de disco. -export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. -export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. -export OG_ERR_NOTOS=6 # Sin sistema operativo. -export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. -# Códigos 8-13 reservados por ogAdmClient.h -export OG_ERR_NOTWRITE=14 # No hay acceso de escritura -export OG_ERR_NOTCACHE=15 # No hay particion cache en cliente -export OG_ERR_CACHESIZE=16 # No hay espacio en la cache para almacenar fichero-imagen -export OG_ERR_REDUCEFS=17 # Error al reducir sistema archivos -export OG_ERR_EXTENDFS=18 # Error al expandir el sistema de archivos -export OG_ERR_OUTOFLIMIT=19 # Valor fuera de rango o no válido. -export OG_ERR_FILESYS=20 # Sistema de archivos desconocido o no se puede montar -export OG_ERR_CACHE=21 # Error en partición de caché local -export OG_ERR_NOGPT=22 # El disco indicado no contiene una particion GPT -export OG_ERR_REPO=23 # Error al montar el repositorio de imagenes - -export OG_ERR_IMGSIZEPARTITION=30 # Error al restaurar partición más pequeña que la imagen -export OG_ERR_UPDATECACHE=31 # Error al realizar el comando updateCache -export OG_ERR_DONTFORMAT=32 # Error al formatear -export OG_ERR_GENERIC=40 # Error imprevisto no definido -export OG_ERR_UCASTSYNTAXT=50 # Error en la generación de sintaxis de transferenica UNICAST -export OG_ERR_UCASTSENDPARTITION=51 # Error en envío UNICAST de partición -export OG_ERR_UCASTSENDFILE=52 # Error en envío UNICAST de un fichero -export OG_ERR_UCASTRECEIVERPARTITION=53 # Error en la recepcion UNICAST de una particion -export OG_ERR_UCASTRECEIVERFILE=54 # Error en la recepcion UNICAST de un fichero -export OG_ERR_MCASTSYNTAXT=55 # Error en la generacion de sintaxis de transferenica Multicast. -export OG_ERR_MCASTSENDFILE=56 # Error en envio MULTICAST de un fichero -export OG_ERR_MCASTRECEIVERFILE=57 # Error en la recepcion MULTICAST de un fichero -export OG_ERR_MCASTSENDPARTITION=58 # Error en envio MULTICAST de una particion -export OG_ERR_MCASTRECEIVERPARTITION=59 # Error en la recepcion MULTICAST de una particion -export OG_ERR_PROTOCOLJOINMASTER=60 # Error en la conexion de una sesion UNICAST|MULTICAST con el MASTER - -export OG_ERR_DONTMOUNT_IMAGE=70 # Error al montar una imagen sincronizada. -export OG_ERR_DONTSYNC_IMAGE=71 # Imagen no sincronizable (es monolitica) -export OG_ERR_DONTUNMOUNT_IMAGE=72 # Error al desmontar la imagen -export OG_ERR_NOTDIFFERENT=73 # No se detectan diferencias entre la imagen basica y la particion. -export OG_ERR_SYNCHRONIZING=74 # Error al sincronizar, puede afectar la creacion/restauracion de la imagen +eval $(jq -r 'foreach .errors[] as $err (""; "export "+$err.name+"="+($err.id|tostring))' $ENGINECFG 2>/dev/null) diff --git a/doc/VERSION.txt b/doc/VERSION.txt index b7f4b4fc..d1e5323a 100644 --- a/doc/VERSION.txt +++ b/doc/VERSION.txt @@ -1 +1 @@ -OpenGnsys 1.1.1pre +OpenGnsys 1.1.1pre #812 -- cgit v1.2.3-18-g5258 From 7bb3296a2d5cb97d20c57974218da2a407ef186a Mon Sep 17 00:00:00 2001 From: "Ramón M. Gómez" Date: Fri, 18 May 2018 14:32:01 +0200 Subject: #812: configuraciones web leen tipo de partición del fichero de configuración. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../includes/ConfiguracionesParticiones.php | 3 ++- .../includes/pintaTablaConfiguraciones.php | 26 ++++++++++------------ 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/admin/WebConsole/includes/ConfiguracionesParticiones.php b/admin/WebConsole/includes/ConfiguracionesParticiones.php index 963e1d08..e27899f0 100644 --- a/admin/WebConsole/includes/ConfiguracionesParticiones.php +++ b/admin/WebConsole/includes/ConfiguracionesParticiones.php @@ -20,7 +20,7 @@ function getPartitionData($json, $code) { } } } - return [$partcode, true]; + return [$code, true]; } /** @@ -36,6 +36,7 @@ function getParttableData($json, $code) { return $tab->type; } } + } return ""; } diff --git a/admin/WebConsole/includes/pintaTablaConfiguraciones.php b/admin/WebConsole/includes/pintaTablaConfiguraciones.php index 27e6fac4..ee79263d 100644 --- a/admin/WebConsole/includes/pintaTablaConfiguraciones.php +++ b/admin/WebConsole/includes/pintaTablaConfiguraciones.php @@ -1,4 +1,5 @@ texto="SELECT ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.tamano, ordenadores_particiones.idnombreso, nombresos.nombreso, - tipospar.tipopar, imagenes.descripcion AS imagen, - perfilessoft.descripcion AS perfilsoft, + imagenes.descripcion AS imagen, perfilessoft.descripcion AS perfilsoft, sistemasficheros.descripcion AS sistemafichero FROM ordenadores INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso - INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero @@ -195,14 +194,14 @@ function tablaConfiguracionesCrearImagen($cmd,$idordenador,$idrepositorio) global $idcentro; global $TbMsg; $tablaHtml=""; - $cmd->texto="SELECT ordenadores.ip AS masterip,ordenadores_particiones.numdisk, ordenadores_particiones.numpar,ordenadores_particiones.codpar,ordenadores_particiones.tamano, - ordenadores_particiones.idnombreso,nombresos.nombreso,tipospar.tipopar,tipospar.clonable, - imagenes.nombreca,imagenes.descripcion as imagen,perfilessoft.idperfilsoft, - perfilessoft.descripcion as perfilsoft,sistemasficheros.descripcion as sistemafichero + $cmd->texto="SELECT ordenadores.ip AS masterip, ordenadores_particiones.numdisk, ordenadores_particiones.numpar, + ordenadores_particiones.codpar, ordenadores_particiones.tamano, + ordenadores_particiones.idnombreso, nombresos.nombreso, + imagenes.nombreca, imagenes.descripcion AS imagen, perfilessoft.idperfilsoft, + perfilessoft.descripcion AS perfilsoft, sistemasficheros.descripcion AS sistemafichero FROM ordenadores INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso - INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero @@ -220,7 +219,7 @@ function tablaConfiguracionesCrearImagen($cmd,$idordenador,$idrepositorio) $actualDisk = $rs->campos["numdisk"]; $tablaHtml.=' '.$TbMsg["DISK"].' '.$actualDisk.''.chr(13); } - + list($rs->campos["tipopar"], $rs->campos["clonable"]) = getPartitionData($json, $rs->campos["codpar"]); $swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]); $swc=$rs->campos["idperfilsoft"]>0; // Una partición es clonable si posee un identificador de perfil software $swccc=$swcc && $swcc; @@ -283,10 +282,8 @@ function tablaConfiguracionesSincronizacion1($idordenador) $cmd->texto="SELECT DISTINCT ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.idnombreso, nombresos.nombreso, ordenadores_particiones.idimagen, ordenadores_particiones.codpar, - tipospar.clonable, perfilessoft.idperfilsoft, - nombresos.idnombreso, nombresos.nombreso + perfilessoft.idperfilsoft, nombresos.idnombreso, nombresos.nombreso FROM ordenadores_particiones - INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft WHERE ordenadores_particiones.idordenador=".$idordenador." @@ -305,8 +302,9 @@ function tablaConfiguracionesSincronizacion1($idordenador) $actualDisk = $rs->campos["numdisk"]; $tablaHtml.=' '.$TbMsg["DISK"].' '.$actualDisk.''.chr(13); } - //$swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]) && !empty($rs->campos["idperfilsoft"]); - $sw=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]); + list($rs->campos["tipopar"], $rs->campos["clonable"]) = getPartitionData($json, $rs->campos["codpar"]); + //$swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]) && !empty($rs->campos["idperfilsoft"]); + $sw=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]); if($sw){// Una partici�n es clonable si es cierta esta variable $tbPAR.=$rs->campos["numpar"].";"; // Cadena con las particiones a procesar $tablaHtml.=''; -- cgit v1.2.3-18-g5258 From 873328be371588a87406193ed12e3285b795b257 Mon Sep 17 00:00:00 2001 From: "Ramón M. Gómez" Date: Wed, 23 May 2018 12:42:19 +0200 Subject: #812: Tomar tipos de partición del fichero JSON en formularios de comandos web. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + admin/Database/ogAdmBD-1.1.1pre.sql | 3 + admin/WebConsole/comandos/Configurar.php | 10 +-- .../includes/ConfiguracionesParticiones.php | 53 ++----------- admin/WebConsole/includes/configfunctions.php | 87 ++++++++++++++++++++++ admin/WebConsole/includes/pintaParticiones.php | 9 ++- .../includes/pintaTablaConfiguraciones.php | 12 ++- 7 files changed, 114 insertions(+), 61 deletions(-) create mode 100644 .gitignore create mode 100644 admin/WebConsole/includes/configfunctions.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..485dee64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea diff --git a/admin/Database/ogAdmBD-1.1.1pre.sql b/admin/Database/ogAdmBD-1.1.1pre.sql index cdac985b..8d815040 100644 --- a/admin/Database/ogAdmBD-1.1.1pre.sql +++ b/admin/Database/ogAdmBD-1.1.1pre.sql @@ -20,3 +20,6 @@ DELIMITER ';' CALL addcols(); DROP PROCEDURE addcols; +# Eliminar tabla sustituida por fichero de configuracion (ticket #812). +DROP TABLE IF EXISTS tipospar; + diff --git a/admin/WebConsole/comandos/Configurar.php b/admin/WebConsole/comandos/Configurar.php index 6ce89cfa..6c81f68f 100644 --- a/admin/WebConsole/comandos/Configurar.php +++ b/admin/WebConsole/comandos/Configurar.php @@ -124,7 +124,7 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"]; echo ''; echo ''; echo ''; - echo ''; + echo ''; echo ''; echo ''; echo ''; @@ -167,10 +167,11 @@ function opeFormatear() /*________________________________________________________________________________________________________ Crea la etiqueta html de los sistemas de ficheros ________________________________________________________________________________________________________*/ @@ -178,5 +179,4 @@ function HTMLSELECT_sistemasficheros($cmd,$idsistemafichero) { return(HTMLSELECT($cmd,0,"sistemasficheros",$idsistemafichero,"idsistemafichero","descripcion",150,"","formulariodatos")); } -?> diff --git a/admin/WebConsole/includes/ConfiguracionesParticiones.php b/admin/WebConsole/includes/ConfiguracionesParticiones.php index e27899f0..b5da9d68 100644 --- a/admin/WebConsole/includes/ConfiguracionesParticiones.php +++ b/admin/WebConsole/includes/ConfiguracionesParticiones.php @@ -1,44 +1,6 @@ partitiontables)) { - foreach ($json->partitiontables as $tab) { - if (isset($tab->partitions)) { - foreach ($tab->partitions as $par) { - if (hexdec($par->id) == $code) { - return [$par->type, $par->clonable]; - } - } - } - } - } - return [$code, true]; -} - -/** - * Busca en la configuración JSON los datos de tabla de particiones para el código correspondiente. - * @param object $json datos JSON de configuración - * @param string $code código de tabla de particiones - * @return string tipo de tabla de particiones - */ -function getParttableData($json, $code) { - if (isset($json->partitiontables)) { - foreach ($json->partitiontables as $tab) { - if (hexdec($tab->id) == $code) { - return $tab->type; - } - } - } - return ""; -} +include_once(__DIR__ . "/configfunctions.php"); +include_once(__DIR__ . "/pintaParticiones.php"); /*________________________________________________________________________________________________________ UHU - 2013/05/14 - Se añade la clave número de disco @@ -177,9 +139,9 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) $cmd->texto.=" GROUP BY configuracion"; // Comprobar compatiblidad de cláusula GROUP BY. - if (strpos($mode, 'ONLY_FULL_GROUP_BY') === false) + if (strpos($mode, 'ONLY_FULL_GROUP_BY') === false) { $cmd->texto=preg_replace('/ANY_VALUE/', '', $cmd->texto); - + } $rs=new Recordset; $rs->Comando=&$cmd; if (!$rs->Abrir()) return(false); // Error al abrir recordset @@ -191,6 +153,7 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) if ($numpar == 0) { // Tipo de tabla de particiones. $tipopar = getParttableData($json, $codpar); + $clonable = ""; } else { // Saltar si no es clonable en restauración. list($tipopar, $clonable) = getPartitionData($json, $codpar); @@ -224,6 +187,7 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) } $conKeys=$idx; // Guarda contador $rs->Cerrar(); + return(true); } /*________________________________________________________________________________________________________ UHU - 2013/05/14 - Se añade la clave número de disco @@ -297,8 +261,7 @@ function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr,$pintaPar INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen - LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft - LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero"; + LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft"; switch($ambito){ case $AMBITO_AULAS : @@ -410,7 +373,7 @@ function cargaSistemasFicheros($cmd,$idambito,$ambito) global $AMBITO_AULAS; global $AMBITO_GRUPOSORDENADORES; global $AMBITO_ORDENADORES; - + $cmd->texto="SELECT COUNT(*) AS con, ordenadores_particiones.idsistemafichero, ordenadores_particiones.numdisk, diff --git a/admin/WebConsole/includes/configfunctions.php b/admin/WebConsole/includes/configfunctions.php new file mode 100644 index 00000000..04d265f0 --- /dev/null +++ b/admin/WebConsole/includes/configfunctions.php @@ -0,0 +1,87 @@ +partitiontables)) { + foreach ($json->partitiontables as $tab) { + if (isset($tab->partitions)) { + foreach ($tab->partitions as $par) { + if (hexdec($par->id) == $code) { + return [$par->type, $par->clonable]; + } + } + } + } + } + return [$code, true]; +} + +/** + * @function getParttableData + * @brief Busca en la configuración JSON los datos de tabla de particiones para el código correspondiente. + * @param object $json datos JSON de configuración + * @param string $code código de tabla de particiones + * @return string tipo de tabla de particiones + * @date 2018-17-05 + */ +function getParttableData($json, $code) { + if (isset($json->partitiontables)) { + foreach ($json->partitiontables as $tab) { + if ($tab->id == $code) { + return $tab->type; + } + } + } + return ""; +} + +/** + * @function htmlSelectPartitions + * @brief Devuelve la cláusula '.chr(13); + $html.=' '.chr(13); + + if (isset($json->partitiontables)) { + foreach ($json->partitiontables as $tab) { + if (isset($partTable) and $tab->type != $partTable) { + continue; + } + if (isset($tab->partitions)) { + foreach ($tab->partitions as $par) { + $html.=' '.chr(13); + } + } + } + } + $html.=''.chr(13); + return($html); +} diff --git a/admin/WebConsole/includes/pintaParticiones.php b/admin/WebConsole/includes/pintaParticiones.php index cf9cd98e..b12faafb 100644 --- a/admin/WebConsole/includes/pintaParticiones.php +++ b/admin/WebConsole/includes/pintaParticiones.php @@ -328,11 +328,11 @@ function pintaParticionesConfigurar($cmd,$configuraciones,$idordenadores,$cc) echo ''; echo ''; echo ''; - echo ''; + echo ''; $sf=tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores,true); echo ''; $tm=tomaTamano($tbKeys[$k]["numpar"],$idordenadores); - echo ''; + echo ''; echo ''; echo ''; echo ''; @@ -351,8 +351,9 @@ function pintaParticionesConfigurar($cmd,$configuraciones,$idordenadores,$cc) // Datos del disco $tm=tomaTamano(0,$idordenadores); echo ''. - "\n\n\n".$TbMsg["DISK"]."". - "\n\n '.(isset($tm)?$tm:("".$TbMsg["VARIABLE"].""))." ". + "\n\n\n".$TbMsg["DISK"]."". + "\n\n '.(isset($tm)?$tm:("".$TbMsg["VARIABLE"]."")). + "". "\n\n\n"; echo ''; // Mostrar aviso: solo disco 1 con tabla MSDOS. diff --git a/admin/WebConsole/includes/pintaTablaConfiguraciones.php b/admin/WebConsole/includes/pintaTablaConfiguraciones.php index ee79263d..a1edf1f6 100644 --- a/admin/WebConsole/includes/pintaTablaConfiguraciones.php +++ b/admin/WebConsole/includes/pintaTablaConfiguraciones.php @@ -1,5 +1,5 @@ '.chr(13).'
'.HTMLSELECT_particiones(0).''.HTMLSELECT_tipospar($cmd,"").''.HTMLSELECT_tipospar("").''.HTMLSELECT_sistemasficheros($cmd,"").' 
'.HTMLSELECT_particiones($tbKeys[$k]["numpar"]).''.HTMLSELECT_tipospar($cmd,$tbKeys[$k]["tipopar"]).''.HTMLSELECT_tipospar($tbKeys[$k]["tipopar"]).''.HTMLSELECT_sistemasficheros($cmd,$sf).''.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).''.opeFormatear().'
 '.$TbMsg["WARN_DISKSIZE"].'
'.$TbMsg["CONFIG_NOCONFIG"].'
'.chr(13); // CONSULTA BD: grupo de equipos con iguales sistemas operativos: idordenadores,configuracion - $cmd->texto=""; // agrupamos equipos con igual conf de disco. $cmd->texto="select GROUP_CONCAT(pcconf.idordenador SEPARATOR ',') AS idordenadores, pcconf.configuraciones FROM ("; @@ -126,14 +125,12 @@ function tablaConfiguracionesInventarioSoftware($cmd,$idordenador){ $cmd->texto="SELECT ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.tamano, ordenadores_particiones.idnombreso, nombresos.nombreso, - imagenes.descripcion AS imagen, perfilessoft.descripcion AS perfilsoft, - sistemasficheros.descripcion AS sistemafichero + imagenes.descripcion AS imagen, perfilessoft.descripcion AS perfilsoft FROM ordenadores INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft - LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero WHERE ordenadores.idordenador=".$idordenador." AND nombresos.nombreso!='DATA' ORDER BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar"; @@ -193,18 +190,19 @@ function tablaConfiguracionesCrearImagen($cmd,$idordenador,$idrepositorio) { global $idcentro; global $TbMsg; + $json = json_decode(file_get_contents(ENGINEJSON)); + $tablaHtml=""; $cmd->texto="SELECT ordenadores.ip AS masterip, ordenadores_particiones.numdisk, ordenadores_particiones.numpar, ordenadores_particiones.codpar, ordenadores_particiones.tamano, ordenadores_particiones.idnombreso, nombresos.nombreso, imagenes.nombreca, imagenes.descripcion AS imagen, perfilessoft.idperfilsoft, - perfilessoft.descripcion AS perfilsoft, sistemasficheros.descripcion AS sistemafichero + perfilessoft.descripcion AS perfilsofttemafichero FROM ordenadores INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft - LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero WHERE ordenadores.idordenador=".$idordenador." ORDER BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar"; $rs=new Recordset; $rs->Comando=&$cmd; -- cgit v1.2.3-18-g5258 From 91981e17ab42c5dd731599ea9f2d47db1e01d2d8 Mon Sep 17 00:00:00 2001 From: "Ramón M. Gómez" Date: Thu, 24 May 2018 11:02:20 +0200 Subject: #812: Usar fichero de configuración JSON en comandos Configurar e Iniciar Sesión. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/WebConsole/comandos/Configurar.php | 11 ++- admin/WebConsole/comandos/IniciarSesion.php | 15 ++-- .../includes/ConfiguracionesParticiones.php | 9 +-- admin/WebConsole/includes/configfunctions.php | 94 +++++++++++++--------- .../includes/pintaTablaConfiguraciones.php | 7 +- 5 files changed, 75 insertions(+), 61 deletions(-) diff --git a/admin/WebConsole/comandos/Configurar.php b/admin/WebConsole/comandos/Configurar.php index 6c81f68f..0166a40a 100644 --- a/admin/WebConsole/comandos/Configurar.php +++ b/admin/WebConsole/comandos/Configurar.php @@ -74,7 +74,7 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"]; //________________________________________________________________________________________________________ - echo '

'.$TbMsg[19].'

'; + echo '

'.$TbMsg[19].'

'; if($ambito!=$AMBITO_ORDENADORES){ $cadenaid=""; $cadenaip=""; @@ -167,10 +167,13 @@ function opeFormatear() /*________________________________________________________________________________________________________ Crea la etiqueta html '."\n"; + $html.=' '."\n"; + $html.=htmlOptionPartitions($tablapar, $codpar, ""); + $html.=''."\n"; + return($html); } /*________________________________________________________________________________________________________ Crea la etiqueta html @@ -95,6 +95,7 @@ function toma_propiedades($cmd,$idordenador){ global $idperfilhard; global $idservidordhcp; global $idservidorrembo; + $rs=new Recordset; $cmd->texto="SELECT nombreordenador,ip,mac,idperfilhard FROM ordenadores WHERE idordenador='".$idordenador."'"; $rs->Comando=&$cmd; @@ -116,32 +117,31 @@ function toma_propiedades($cmd,$idordenador){ ________________________________________________________________________________________________________*/ function tabla_configuraciones($cmd,$idordenador){ global $idcentro; + $tablaHtml=""; $cmd->texto="SELECT ordenadores_particiones.numpar, - ordenadores_particiones.tamano, + ordenadores_particiones.codpar, ordenadores_particiones.tamano, ordenadores_particiones.idnombreso, nombresos.nombreso, - tipospar.tipopar, imagenes.descripcion AS imagen, + imagenes.descripcion AS imagen, perfilessoft.descripcion AS perfilsoft, sistemasficheros.descripcion AS sistemafichero FROM ordenadores INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso - INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero WHERE ordenadores.idordenador=".$idordenador." - AND tipospar.clonable=1 AND nombresos.nombreso!='DATA' ORDER BY ordenadores_particiones.numpar"; - + $rs->Comando=&$cmd; $rs=new Recordset; $rs->Comando=&$cmd; if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset $rs->Primero(); while (!$rs->EOF){ - if(!empty($rs->campos["idnombreso"])){ + if(!empty($rs->campos["idnombreso"]) and isClonable($rs->campos["codpar"])){ $tablaHtml.=''.chr(13); $tablaHtml.=''.chr(13); $tablaHtml.=' '.$rs->campos["numpar"].' '.chr(13); @@ -153,5 +153,4 @@ function tabla_configuraciones($cmd,$idordenador){ $rs->Cerrar(); return($tablaHtml); } -?> diff --git a/admin/WebConsole/includes/ConfiguracionesParticiones.php b/admin/WebConsole/includes/ConfiguracionesParticiones.php index b5da9d68..319c26be 100644 --- a/admin/WebConsole/includes/ConfiguracionesParticiones.php +++ b/admin/WebConsole/includes/ConfiguracionesParticiones.php @@ -67,9 +67,6 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) global $msk_perfil; global $msk_cache; - // Cargar datos JSON de configuración. - $json=json_decode(file_get_contents(ENGINEJSON)); - // Comprobar modos SQL para hacer que la consulta sea compatible. $cmd->texto="SELECT @@sql_mode AS mode"; $cmd->ejecutar(); @@ -152,11 +149,11 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) $codpar=$rs->campos["codpar"]; if ($numpar == 0) { // Tipo de tabla de particiones. - $tipopar = getParttableData($json, $codpar); - $clonable = ""; + $tipopar = getParttableData($codpar); + $clonable = false; } else { // Saltar si no es clonable en restauración. - list($tipopar, $clonable) = getPartitionData($json, $codpar); + list($tipopar, $clonable) = getPartitionData($codpar); if ($swr and $clonable == false) { continue; } diff --git a/admin/WebConsole/includes/configfunctions.php b/admin/WebConsole/includes/configfunctions.php index 04d265f0..8321c954 100644 --- a/admin/WebConsole/includes/configfunctions.php +++ b/admin/WebConsole/includes/configfunctions.php @@ -1,16 +1,20 @@ + */ + +// JSON configuration file path define("ENGINEJSON", __DIR__ . "/../../client/etc/engine.json"); /** - * @function getPartitionData - * @brief Busca en la configuración JSON los datos de partición para el código hexadecimal correspondiente - * @param object $json datos JSON de configuración - * @param string $code código hexadecimal de partición - * @return array tipo de partición (string) e indicador de clonable (bool) - * @date 2018-17-05 + * @param string $code Partition code, in hexadecimal + * @return array Partition data (type and clonable indicator) */ -function getPartitionData($json, $code) { +function getPartitionData($code) { + /** @var object $json JSON configuration data */ + $json=json_decode(file_get_contents(ENGINEJSON)); + if (isset($json->partitiontables)) { foreach ($json->partitiontables as $tab) { if (isset($tab->partitions)) { @@ -26,14 +30,35 @@ function getPartitionData($json, $code) { } /** - * @function getParttableData - * @brief Busca en la configuración JSON los datos de tabla de particiones para el código correspondiente. - * @param object $json datos JSON de configuración - * @param string $code código de tabla de particiones - * @return string tipo de tabla de particiones - * @date 2018-17-05 + * @param string $code Partition code, in hexadecimal + * @return bool True, if partition is marked as clonable */ -function getParttableData($json, $code) { +function isClonable($code) { + /** @var object $json JSON configuration data */ + $json=json_decode(file_get_contents(ENGINEJSON)); + + if (isset($json->partitiontables)) { + foreach ($json->partitiontables as $tab) { + if (isset($tab->partitions)) { + foreach ($tab->partitions as $par) { + if (hexdec($par->id) == $code) { + return $par->clonable; + } + } + } + } + } + return false; +} + +/** + * @param int $code Partition table code + * @return string partition table type + */ +function getParttableData($code) { + /** @var object $json JSON configuration data */ + $json=json_decode(file_get_contents(ENGINEJSON)); + if (isset($json->partitiontables)) { foreach ($json->partitiontables as $tab) { if ($tab->id == $code) { @@ -45,26 +70,16 @@ function getParttableData($json, $code) { } /** - * @function htmlSelectPartitions - * @brief Devuelve la cláusula clause */ -function htmlSelectPartitions($json, $type, $name="", $width, $eventChg="", $class="", $partTable) { - if (!empty($eventhg)) $eventChg='onchange="'.$eventChg.'(this);"'; - if (empty($class)) $class='formulariodatos'; - if (empty($name)) $name='id'; - - /** @var string $html */ - $html =''.chr(13); return($html); } diff --git a/admin/WebConsole/includes/pintaTablaConfiguraciones.php b/admin/WebConsole/includes/pintaTablaConfiguraciones.php index a1edf1f6..2d55f7d8 100644 --- a/admin/WebConsole/includes/pintaTablaConfiguraciones.php +++ b/admin/WebConsole/includes/pintaTablaConfiguraciones.php @@ -190,7 +190,6 @@ function tablaConfiguracionesCrearImagen($cmd,$idordenador,$idrepositorio) { global $idcentro; global $TbMsg; - $json = json_decode(file_get_contents(ENGINEJSON)); $tablaHtml=""; $cmd->texto="SELECT ordenadores.ip AS masterip, ordenadores_particiones.numdisk, ordenadores_particiones.numpar, @@ -217,7 +216,7 @@ function tablaConfiguracionesCrearImagen($cmd,$idordenador,$idrepositorio) $actualDisk = $rs->campos["numdisk"]; $tablaHtml.=' '.$TbMsg["DISK"].' '.$actualDisk.''.chr(13); } - list($rs->campos["tipopar"], $rs->campos["clonable"]) = getPartitionData($json, $rs->campos["codpar"]); + list($rs->campos["tipopar"], $rs->campos["clonable"]) = getPartitionData($rs->campos["codpar"]); $swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]); $swc=$rs->campos["idperfilsoft"]>0; // Una partición es clonable si posee un identificador de perfil software $swccc=$swcc && $swcc; @@ -300,10 +299,10 @@ function tablaConfiguracionesSincronizacion1($idordenador) $actualDisk = $rs->campos["numdisk"]; $tablaHtml.=' '.$TbMsg["DISK"].' '.$actualDisk.''.chr(13); } - list($rs->campos["tipopar"], $rs->campos["clonable"]) = getPartitionData($json, $rs->campos["codpar"]); + list($rs->campos["tipopar"], $rs->campos["clonable"]) = getPartitionData($rs->campos["codpar"]); //$swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]) && !empty($rs->campos["idperfilsoft"]); $sw=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]); - if($sw){// Una partici�n es clonable si es cierta esta variable + if($sw){// Una partición es clonable si es cierta esta variable $tbPAR.=$rs->campos["numpar"].";"; // Cadena con las particiones a procesar $tablaHtml.=''; $tablaHtml.=''; -- cgit v1.2.3-18-g5258 From 3829186af46434a530ab392323fcaf477c1c74ef Mon Sep 17 00:00:00 2001 From: "Ramón M. Gómez" Date: Thu, 17 May 2018 09:41:27 +0200 Subject: #812: integrar r5653 de SVN en rama {{{configfile}}} de Git. --- admin/Database/ogAdmBD.sql | 92 +-------- admin/Interface/getConfiguration | 15 +- .../includes/ConfiguracionesParticiones.php | 77 +++++-- admin/WebConsole/includes/pintaParticiones.php | 12 +- client/engine/Disk.lib | 221 +++++---------------- client/shared/etc/preinit/loadenviron.sh | 44 +--- 6 files changed, 127 insertions(+), 334 deletions(-) diff --git a/admin/Database/ogAdmBD.sql b/admin/Database/ogAdmBD.sql index d411d243..372398e4 100644 --- a/admin/Database/ogAdmBD.sql +++ b/admin/Database/ogAdmBD.sql @@ -608,7 +608,7 @@ INSERT INTO `parametros` (`idparametro`, `nemonico`, `descripcion`, `nomidentifi (16, 'exe', 'Identificador del procedimiento que será el que ejecute el cliente al arrancar (Autoexec)', '', '', '', 0, 0), (17, 'res', 'Respuesta del comando: Puede tomar los valores 1 o 2 en el caso de que la respuesta sea correcta o que haya un error al ejecutarse.', '', '', '', 0, 0), (19, 'ipr', 'Repositorio', 'ip', 'repositorios', 'nombrerepositorio', 1, 1), -(20, 'cpt', 'Tipo partición', 'codpar', 'tipospar', 'tipopar', 1, 1), +(20, 'cpt', 'Tipo partición', '', '', '', 1, 1), (21, 'sfi', 'Sistema de fichero', 'nemonico', 'sistemasficheros', 'nemonico', 1, 0), (22, 'tam', 'Tamaño', '', '', '', 0, 1), (23, 'ope', 'Operación', ';', '', 'Sin operación;Formatear;Ocultar;Mostrar', 3, 1), @@ -1002,96 +1002,6 @@ INSERT INTO `tiposos` (`idtiposo`, `tiposo`, `idplataforma`) VALUES (19, 'Linux Red Hat', 3), (20, 'Windows 7', 2); --- -------------------------------------------------------- - --- --- Estructura de tabla para la tabla `tipospar` --- - -DROP TABLE IF EXISTS `tipospar`; -CREATE TABLE `tipospar` ( - `codpar` int(8) NOT NULL, - `tipopar` varchar(250) NOT NULL DEFAULT '', - `clonable` tinyint(4) NOT NULL DEFAULT '0', - UNIQUE KEY `codpar` (`codpar`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- --- Volcar la base de datos para la tabla `tipospar` --- - -INSERT INTO `tipospar` (`codpar`, `tipopar`, `clonable`) VALUES -(0, 'EMPTY', 0), -(1, 'FAT12', 1), -(5, 'EXTENDED', 0), -(6, 'FAT16', 1), -(7, 'NTFS', 1), -(CONV('0B',16,10), 'FAT32', 1), -(CONV('11',16,10), 'HFAT12', 1), -(CONV('16',16,10), 'HFAT16', 1), -(CONV('17',16,10), 'HNTFS', 1), -(CONV('1B',16,10), 'HFAT32', 1), -(CONV('82',16,10), 'LINUX-SWAP', 0), -(CONV('83',16,10), 'LINUX', 1), -(CONV('8E',16,10), 'LINUX-LVM', 1), -(CONV('A5',16,10), 'FREEBSD', 1), -(CONV('A6',16,10), 'OPENBSD', 1), -(CONV('A9',16,10), 'NETBSD', 1), -(CONV('AF',16,10), 'HFS', 1), -(CONV('BE',16,10), 'SOLARIS-BOOT', 1), -(CONV('BF',16,10), 'SOLARIS', 1), -(CONV('CA',16,10), 'CACHE', 0), -(CONV('DA',16,10), 'DATA', 1), -(CONV('EE',16,10), 'GPT', 0), -(CONV('EF',16,10), 'EFI', 1), -(CONV('FB',16,10), 'VMFS', 1), -(CONV('FD',16,10), 'LINUX-RAID', 1), -(CONV('0700',16,10), 'WINDOWS', 1), -(CONV('0C01',16,10), 'WIN-RESERV', 1), -(CONV('2700',16,10), 'WIN-RECOV', 1), -(CONV('7F00',16,10), 'CHROMEOS-KRN', 1), -(CONV('7F01',16,10), 'CHROMEOS', 1), -(CONV('7F02',16,10), 'CHROMEOS-RESERV', 1), -(CONV('8200',16,10), 'LINUX-SWAP', 0), -(CONV('8300',16,10), 'LINUX', 1), -(CONV('8301',16,10), 'LINUX-RESERV', 1), -(CONV('8302',16,10), 'LINUX', 1), -(CONV('8E00',16,10), 'LINUX-LVM', 1), -(CONV('A500',16,10), 'FREEBSD-DISK', 0), -(CONV('A501',16,10), 'FREEBSD-BOOT', 1), -(CONV('A502',16,10), 'FREEBSD-SWAP', 0), -(CONV('A503',16,10), 'FREEBSD', 1), -(CONV('A504',16,10), 'FREEBSD', 1), -(CONV('A901',16,10), 'NETBSD-SWAP', 0), -(CONV('A902',16,10), 'NETBSD', 1), -(CONV('A903',16,10), 'NETBSD', 1), -(CONV('A904',16,10), 'NETBSD', 1), -(CONV('A905',16,10), 'NETBSD', 1), -(CONV('A906',16,10), 'NETBSD-RAID', 1), -(CONV('AB00',16,10), 'HFS-BOOT', 1), -(CONV('AF00',16,10), 'HFS', 1), -(CONV('AF01',16,10), 'HFS-RAID', 1), -(CONV('AF02',16,10), 'HFS-RAID', 1), -(CONV('BE00',16,10), 'SOLARIS-BOOT', 1), -(CONV('BF00',16,10), 'SOLARIS', 1), -(CONV('BF01',16,10), 'SOLARIS', 1), -(CONV('BF02',16,10), 'SOLARIS-SWAP', 0), -(CONV('BF03',16,10), 'SOLARIS-DISK', 1), -(CONV('BF04',16,10), 'SOLARIS', 1), -(CONV('BF05',16,10), 'SOLARIS', 1), -(CONV('CA00',16,10), 'CACHE', 0), -(CONV('EF00',16,10), 'EFI', 1), -(CONV('EF01',16,10), 'MBR', 0), -(CONV('EF02',16,10), 'BIOS-BOOT', 0), -(CONV('FB00',16,10), 'VMFS', 1), -(CONV('FB01',16,10), 'VMFS-RESERV', 1), -(CONV('FB02',16,10), 'VMFS-KRN', 1), -(CONV('FD00',16,10), 'LINUX-RAID', 1), -(CONV('FFFF',16,10), 'UNKNOWN', 1), -(CONV('10000',16,10), 'LVM-LV', 1), -(CONV('10010',16,10), 'ZFS-VOL', 1); - - -- -------------------------------------------------------- -- diff --git a/admin/Interface/getConfiguration b/admin/Interface/getConfiguration index ddfc3821..c5046d19 100755 --- a/admin/Interface/getConfiguration +++ b/admin/Interface/getConfiguration @@ -16,17 +16,14 @@ 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 + # Tipo de tabla de particiones ptt=$(ogGetPartitionTableType $dsk) - case "$ptt" in - MSDOS) ptt=1 ;; - GPT) ptt=2 ;; - LVM) ptt=3 ;; - ZPOOL) ptt=4 ;; - *) ptt=0 ;; - esac + ptt=$(jq -r ".partitiontables[] | select(.type==\"$ptt\").id" $ENGINECFG 2>/dev/null) + ptt=${ptt:-"0"} + # Tipo de disco + dst=$(ogGetDiskType $(ogDiskToDev $dsk) 2>/dev/null) # Información de disco (partición 0) - cfg="$cfg$dsk:0:$ptt:::$(ogGetDiskSize $dsk):0;" + cfg="$cfg$dsk:0:$ptt:$dst::$(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) diff --git a/admin/WebConsole/includes/ConfiguracionesParticiones.php b/admin/WebConsole/includes/ConfiguracionesParticiones.php index 9cbd6fcf..963e1d08 100644 --- a/admin/WebConsole/includes/ConfiguracionesParticiones.php +++ b/admin/WebConsole/includes/ConfiguracionesParticiones.php @@ -1,8 +1,48 @@ partitiontables)) { + foreach ($json->partitiontables as $tab) { + if (isset($tab->partitions)) { + foreach ($tab->partitions as $par) { + if (hexdec($par->id) == $code) { + return [$par->type, $par->clonable]; + } + } + } + } + } + return [$partcode, true]; +} + +/** + * Busca en la configuración JSON los datos de tabla de particiones para el código correspondiente. + * @param object $json datos JSON de configuración + * @param string $code código de tabla de particiones + * @return string tipo de tabla de particiones + */ +function getParttableData($json, $code) { + if (isset($json->partitiontables)) { + foreach ($json->partitiontables as $tab) { + if (hexdec($tab->id) == $code) { + return $tab->type; + } + } + return ""; +} + /*________________________________________________________________________________________________________ - UHU - 2013/05/14 - Se añade la clave número de disco + UHU - 2013/05/14 - Se añade la clave número de disco + Ramón - 2018/03/09 - Usar fichero de configuración JSON para datos estáticos + La clave de configuración está formada por una serie de valores separados por ";" Ejemplo:1;1;7;30000000;3;3;0;11 @@ -57,7 +97,6 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) global $AMBITO_AULAS; global $AMBITO_GRUPOSORDENADORES; global $AMBITO_ORDENADORES; - global $msk_sysFi; global $msk_nombreSO; global $msk_tamano; @@ -65,6 +104,9 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) global $msk_perfil; global $msk_cache; + // Cargar datos JSON de configuración. + $json=json_decode(file_get_contents(ENGINEJSON)); + // Comprobar modos SQL para hacer que la consulta sea compatible. $cmd->texto="SELECT @@sql_mode AS mode"; $cmd->ejecutar(); @@ -95,8 +137,6 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) ANY_VALUE(ordenadores_particiones.numdisk) AS numdisk, ANY_VALUE(ordenadores_particiones.numpar) AS numpar, ANY_VALUE(ordenadores_particiones.codpar) AS codpar, - IFNULL (ANY_VALUE(tipospar.tipopar), ANY_VALUE(ordenadores_particiones.codpar)) AS tipopar, - ANY_VALUE(tipospar.clonable) AS clonable, ANY_VALUE(ordenadores_particiones.tamano) AS tamano, ANY_VALUE(ordenadores_particiones.uso) AS uso, ANY_VALUE(sistemasficheros.descripcion) AS sistemafichero, @@ -113,7 +153,6 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) FROM ordenadores INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso - LEFT OUTER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero"; @@ -133,7 +172,7 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) } if($swr) // Si se trata de restauración no se tiene en cuenta las partciones no clonables - $cmd->texto.=" AND tipospar.clonable=1 AND ordenadores_particiones.numpar>0 "; + $cmd->texto.=" AND ordenadores_particiones.numpar>0 "; $cmd->texto.=" GROUP BY configuracion"; // Comprobar compatiblidad de cláusula GROUP BY. @@ -145,13 +184,26 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) if (!$rs->Abrir()) return(false); // Error al abrir recordset $rs->Primero(); $idx=0; - while (!$rs->EOF){ + while (!$rs->EOF) { + $numpar=$rs->campos["numpar"]; + $codpar=$rs->campos["codpar"]; + if ($numpar == 0) { + // Tipo de tabla de particiones. + $tipopar = getParttableData($json, $codpar); + } else { + // Saltar si no es clonable en restauración. + list($tipopar, $clonable) = getPartitionData($json, $codpar); + if ($swr and $clonable == false) { + continue; + } + } + // Leer datos. $tbKeys[$idx]["cfg"]=$rs->campos["configuracion"]; $tbKeys[$idx]["numdisk"]=$rs->campos["numdisk"]; $tbKeys[$idx]["numpar"]=$rs->campos["numpar"]; - $tbKeys[$idx]["codpar"]=$rs->campos["codpar"]; - $tbKeys[$idx]["tipopar"]=$rs->campos["tipopar"]; - $tbKeys[$idx]["clonable"]=$rs->campos["clonable"]; + $tbKeys[$idx]["codpar"]=$codpar; + $tbKeys[$idx]["tipopar"]=$tipopar; + $tbKeys[$idx]["clonable"]=$clonable; $tbKeys[$idx]["tamano"]=$rs->campos["tamano"]; $tbKeys[$idx]["uso"]=$rs->campos["uso"]; $tbKeys[$idx]["sistemafichero"]=$rs->campos["sistemafichero"]; @@ -243,7 +295,6 @@ function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr,$pintaPar FROM ordenadores INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso - LEFT JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero"; @@ -261,7 +312,7 @@ function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr,$pintaPar } if ($swr) // Si se trata de restauración no se tiene en cuenta las particiones no clonables - $cmd->texto.=" AND tipospar.clonable=1 AND ordenadores_particiones.numpar>0"; + $cmd->texto.=" AND ordenadores_particiones.numpar>0"; $cmd->texto.=" ORDER BY ordenadores_particiones.idordenador, ordenadores_particiones.numdisk, ordenadores_particiones.numpar) AS temp1 GROUP BY temp1.idordenador) AS temp2 @@ -833,5 +884,3 @@ function tomaCache($numpar,$ordenadores,$numdisk = 1) } } } - - diff --git a/admin/WebConsole/includes/pintaParticiones.php b/admin/WebConsole/includes/pintaParticiones.php index 3db46818..5b43a54c 100644 --- a/admin/WebConsole/includes/pintaParticiones.php +++ b/admin/WebConsole/includes/pintaParticiones.php @@ -81,17 +81,7 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc) if (empty ($disksize)) { $disksize = ''.$TbMsg["VARIABLE"].''; } - switch ($tbKeys[$k]["codpar"]) { - case 1: $disktable[$tbKeys[$k]["numdisk"]] = "MSDOS"; - break; - case 2: $disktable[$tbKeys[$k]["numdisk"]] = "GPT"; - break; - case 3: $disktable[$tbKeys[$k]["numdisk"]] = "LVM"; - break; - case 4: $disktable[$tbKeys[$k]["numdisk"]] = "ZPOOL"; - break; - default: $disktable[$tbKeys[$k]["numdisk"]] = ""; - } + $disktable[$tbKeys[$k]["numdisk"]] = $tbKeys[$k]["tipopar"]; } else { // Información de partición (numpart>0) echo''.chr(13); diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib index f7def42e..04095d5a 100755 --- a/client/engine/Disk.lib +++ b/client/engine/Disk.lib @@ -33,16 +33,16 @@ timeout -k 5s -s KILL 3s $(which parted) "$@" #@todo Definir atributos (arranque, oculta) y tamaños en MB, GB, etc. #@version 0.9 - Primera versión para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009/09/09 +#@date 2009-09-09 #@version 0.9.1 - Corrección del redondeo del tamaño del disco. #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010/03/09 +#@date 2010-03-09 #@version 1.0.4 - Llamada a función específica para tablas GPT. #@author Universidad de Huelva -#@date 2012/03/30 +#@date 2012-03-30 #@version 1.1.1 - El inicio de la primera partición logica es el de la extendida más 4x512 #@author Irina Gomez, ETSII Universidad de Sevilla -#@date 2016/07/11 +#@date 2016-07-11 #*/ ## function ogCreatePartitions () { @@ -186,7 +186,7 @@ rm -f $tmpsfdisk #@todo Definir atributos (arranque, oculta) y tamaños en MB, GB, etc. #@version 1.0.4 - Primera versión para OpenGnSys #@author Universidad de Huelva -#@date 2012/03/30 +#@date 2012-03-30 #*/ ## function ogCreateGptPartitions () { @@ -281,10 +281,10 @@ sgdisk $DELOPTIONS $OPTIONS $DISK 2>/dev/null && partprobe $DISK #@note Requisitos: fdisk, gdisk, parted #@version 1.0.4 - Primera versión compatible con OpenGnSys. #@author Universidad de Huelva -#@date 2012/03/06 +#@date 2012-03-06 #@version 1.0.6a - Adaptar creación de nueva tabla MSDOS. #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2016/01/29 +#@date 2016-01-29 #*/ ## function ogCreatePartitionTable () { @@ -351,10 +351,10 @@ esac #@return la informacion propia del fdisk #@version 0.1 - Integracion para OpenGnSys #@author Antonio J. Doblas Viso. Universidad de Malaga -#@date 2008/10/27 +#@date 2008-10-27 #@version 1.0.4 - Adaptado para su uso con discos GPT #@author Universidad de Huelva -#@date 2012/03/13 +#@date 2012-03-13 #*/ ## function ogDeletePartitionTable () { @@ -392,13 +392,13 @@ esac #@note Solo se acepta en cada llamada 1 de los 3 tipos de parámetros. #@version 0.1 - Integracion para Opengnsys - EAC: DiskEAC() en ATA.lib #@author Antonio J. Doblas Viso, Universidad de Malaga -#@date 2008/10/27 +#@date 2008-10-27 #@version 0.9 - Primera version para OpenGnSys #@author Ramon Gomez, ETSII Universidad Sevilla -#@date 2009/07/20 +#@date 2009-07-20 #@version 1.0.6 - Soporta parámetro con UIID o etiqueta. #@author Ramon Gomez, ETSII Universidad Sevilla -#@date 2014/07/13 +#@date 2014-07-13 #*/ ## function ogDevToDisk () { @@ -467,7 +467,7 @@ return $OG_ERR_NOTFOUND #@author Ramon Gomez, ETSII Universidad de Sevilla #@Date 2008/06/19 #@author Antonio J. Doblas Viso, Universidad de Malaga -#@date 2008/10/27 +#@date 2008-10-27 #@version 0.9 - Primera version para OpenGnSys #@author Ramon Gomez, ETSII Universidad Sevilla #@date 2009-07-20 @@ -512,9 +512,7 @@ fi # Continuar para detectar nuevos dispositivos. # Listar dispositivos de discos. -ALLDISKS=$((lsblk -n -e 1,2 -x MAJ:MIN 2>/dev/null || lsblk -n -e 1,2) | \ - awk '$6~/^disk$/ {gsub(/!/,"/"); printf "/dev/%s ",$1}') -#ALLDISKS=$(lsblk -Jdp | jq -r '.blockdevices[] | select(.type=="disk").name') +ALLDISKS=$(lsblk -Jdp | jq -r '.blockdevices[] | select(.type=="disk").name') # Listar volúmenes lógicos. VOLGROUPS=$(vgs -a --noheadings 2>/dev/null | awk '{printf "/dev/%s ",$1}') ALLDISKS="$ALLDISKS $VOLGROUPS" @@ -607,10 +605,10 @@ esac #@note Requisitos: sfdisk, awk #@version 0.9.2 - Primera version para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010/09/15 +#@date 2010-09-15 #@version 1.0.6 - Soportar LVM. #@author Universidad de Huelva -#@date 2014/09/04 +#@date 2014-09-04 #*/ ## function ogGetDiskSize () { @@ -775,7 +773,7 @@ echo $LASTSECTOR #@todo Queda definir formato para atributos (arranque, oculta, ...). #@version 0.9 - Primera version compatible con OpenGnSys. #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009/09/17 +#@date 2009-09-17 #*/ ## function ogGetPartitionActive () { @@ -821,7 +819,7 @@ LANG=C parted -sm $DISK print 2>/dev/null | awk -F: '$7~/boot/ {print $1}' function ogGetPartitionId () { # Variables locales. -local DISK ID +local DISK PTTYPE ID # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -834,15 +832,16 @@ fi # Detectar y mostrar el id. de tipo de partición. DISK=$(ogDiskToDev $1) || return $? -case "$(ogGetPartitionTableType $1)" in +PTTYPE=$(ogGetPartitionTableType $1) +case "$PTTYPE" in GPT) ID=$(sgdisk -p $DISK 2>/dev/null | awk -v p="$2" '{if ($1==p) print $6;}') || ogRaiseError $OG_ERR_NOTFOUND "$1,$2" || return $? [ "$ID" == "8300" -a "$1 $2" == "$(ogFindCache)" ] && ID=CA00 ;; MSDOS) ID=$(sfdisk --id $DISK $2 2>/dev/null) || ogRaiseError $OG_ERR_NOTFOUND "$1,$2" || return $? ;; - LVM) ID=10000 ;; - ZPOOL) ID=10010 ;; + *) ID=$(jq -r ".partitiontables[] | select(.type==\"$PTTYPE\").partitions[0].id") $ENGINECFG ;; esac -echo $ID +# Id. hexadecimal en minúsculas. +echo ${ID,,} } @@ -857,13 +856,13 @@ echo $ID #@note Requisitos: sfdisk, awk #@version 0.1 - Integracion para Opengnsys - EAC: SizePartition () en ATA.lib #@author Antonio J. Doblas Viso, Universidad de Malaga -#@date 2008/10/27 +#@date 2008-10-27 #@version 0.9 - Primera version para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009/07/24 +#@date 2009-07-24 #@version 1.1.0 - Sustituir "sfdisk" por "partx". #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2016/05/04 +#@date 2016-05-04 #*/ ## function ogGetPartitionSize () { @@ -898,7 +897,7 @@ echo ${SIZE:-0} #@note Notas sin especificar #@version 0.1 - Integracion para Opengnsys - EAC: DetectNumberPartition () en ATA.lib #@author Antonio J. Doblas Viso. Universidad de Malaga -#@date Date: 27/10/2008 +#@date 2008-10-27 #@version 1.0 - Uso de sfdisk Primera version para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009-07-24 @@ -951,7 +950,7 @@ esac #@note Requisitos: blkid, parted, vgs #@version 1.0.4 - Primera versión para OpenGnSys #@author Universidad de Huelva -#@date 2012/03/01 +#@date 2012-03-01 #@version 1.0.6 - Soportar LVM. #@author Universidad de Huelva #@date 2014-09-04 @@ -1089,6 +1088,9 @@ ogSetPartitionType $1 $2 $NEWTYPE #@version 1.0.5 - Primera version para OpenGnSys #@author Ramon Gomez, ETSII Universidad Sevilla #@date 2013-02-07 +#@version 1.1.1 - Usar fichero de configuración JSON +#@author Ramon Gomez, ETSII Universidad Sevilla +#@date 2018-02-27 #*/ ## function ogIdToType () { @@ -1104,56 +1106,9 @@ fi # Error si no se recibe 1 parámetro. [ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $? -# Obtener valor hexadecimal de 4 caracteres rellenado con 0 por delante. -ID=$(printf "%4s" "$1" | tr ' ' '0') -case "${ID,,}" in - 0000) TYPE="EMPTY" ;; - 0001) TYPE="FAT12" ;; - 0005|000f) TYPE="EXTENDED" ;; - 0006|000e) TYPE="FAT16" ;; - 0007) TYPE="NTFS" ;; - 000b|000c) TYPE="FAT32" ;; - 0011) TYPE="HFAT12" ;; - 0012) TYPE="COMPAQDIAG" ;; - 0016|001e) TYPE="HFAT16" ;; - 0017) TYPE="HNTFS" ;; - 001b|001c) TYPE="HFAT32" ;; - 0042) TYPE="WIN-DYNAMIC" ;; - 0082|8200) TYPE="LINUX-SWAP" ;; - 0083|8300) TYPE="LINUX" ;; - 008e|8E00) TYPE="LINUX-LVM" ;; - 00a5|a503) TYPE="FREEBSD" ;; - 00a6) TYPE="OPENBSD" ;; - 00a7) TYPE="CACHE" ;; # (compatibilidad con Brutalix) - 00af|af00) TYPE="HFS" ;; - 00be|be00) TYPE="SOLARIS-BOOT" ;; - 00bf|bf0[0145]) TYPE="SOLARIS" ;; - 00ca|ca00) TYPE="CACHE" ;; - 00da) TYPE="DATA" ;; - 00ee) TYPE="GPT" ;; - 00ef|ef00) TYPE="EFI" ;; - 00fb) TYPE="VMFS" ;; - 00fd|fd00) TYPE="LINUX-RAID" ;; - 0700) TYPE="WINDOWS" ;; - 0c01) TYPE="WIN-RESERV" ;; - 7f00) TYPE="CHROMEOS-KRN" ;; - 7f01) TYPE="CHROMEOS" ;; - 7f02) TYPE="CHROMEOS-RESERV" ;; - 8301) TYPE="LINUX-RESERV" ;; - a500) TYPE="FREEBSD-DISK" ;; - a501) TYPE="FREEBSD-BOOT" ;; - a502) TYPE="FREEBSD-SWAP" ;; - ab00) TYPE="HFS-BOOT" ;; - af01) TYPE="HFS-RAID" ;; - bf02) TYPE="SOLARIS-SWAP" ;; - bf03) TYPE="SOLARIS-DISK" ;; - ef01) TYPE="MBR" ;; - ef02) TYPE="BIOS-BOOT" ;; - 10000) TYPE="LVM-LV" ;; - 10010) TYPE="ZFS-VOL" ;; - *) TYPE="UNKNOWN" ;; -esac -echo "$TYPE" +# Consulta JSON del valor hexadecimal quitando 0 no significativos. +ID=$(printf "%x" "$((0x$1))" 2>/dev/null) +jq -r "(.partitiontables[].partitions[]) | select(.id==\"${ID,,}\").type" $ENGINECFG 2>/dev/null } @@ -1199,7 +1154,7 @@ test -f $LOCKFILE #@attention Las tuplas de valores están separadas por espacios. #@version 0.9 - Primera versión para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009/07/24 +#@date 2009-07-24 #*/ ## function ogListPartitions () { @@ -1324,10 +1279,10 @@ touch $LOCKFILE #@note Requisitos: parted #@version 0.1 - Integracion para Opengnsys - EAC: SetPartitionActive() en ATA.lib #@author Antonio J. Doblas Viso, Universidad de Malaga -#@date 2008/10/27 +#@date 2008-10-27 #@version 0.9 - Primera version compatible con OpenGnSys. #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009/09/17 +#@date 2009-09-17 #*/ ## function ogSetPartitionActive () { @@ -1368,13 +1323,13 @@ parted -s $DISK set $2 boot on 2>/dev/null #@attention Requisitos: fdisk, sgdisk #@version 0.1 - Integracion para Opengnsys - SetPartitionType() en ATA.lib #@author Antonio J. Doblas Viso. Universidad de Malaga -#@date 2008/10/27 +#@date 2008-10-27 #@version 1.0.4 - Soporte para discos GPT. #@author Universidad de Huelva -#@date 2012/03/13 +#@date 2012-03-13 #@version 1.0.5 - Utiliza el id. de tipo de partición (no el mnemónico) #@author Universidad de Huelva -#@date 2012/05/14 +#@date 2012-05-14 #*/ ## function ogSetPartitionId () { @@ -1430,7 +1385,7 @@ fi #@todo Compruebar que el tamaño sea numérico positivo y evitar que pueda solaparse con la siguiente partición. #@version 0.9 - Primera versión para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009/07/24 +#@date 2009-07-24 #*/ ## function ogSetPartitionSize () { @@ -1467,13 +1422,13 @@ partprobe $DISK 2>/dev/null #@attention Requisitos: fdisk, sgdisk #@version 0.1 - Integracion para Opengnsys - SetPartitionType() en ATA.lib #@author Antonio J. Doblas Viso. Universidad de Malaga -#@date 2008/10/27 +#@date 2008-10-27 #@version 1.0.4 - Soporte para discos GPT. #@author Universidad de Huelva -#@date 2012/03/13 +#@date 2012-03-13 #@version 1.0.5 - Renombrada de ogSetPartitionId. #@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2013/03/07 +#@date 2013-03-07 #*/ ## function ogSetPartitionType () { @@ -1511,18 +1466,21 @@ ogSetPartitionId $1 $2 $ID #@note tabletype = { MSDOS, GPT }, (MSDOS, por defecto) #@version 0.1 - Integracion para Opengnsys - EAC: TypeFS () en ATA.lib #@author Antonio J. Doblas Viso, Universidad de Malaga -#@date 2008/10/27 +#@date 2008-10-27 #@version 0.9 - Primera version para OpenGnSys #@author Ramon Gomez, ETSII Universidad Sevilla #@date 2009-12-14 #@version 1.0.4 - Soportar discos GPT (sustituye a ogFsToId). #@author Universidad de Huelva -#@date 2012/03/30 +#@date 2012-03-30 +#@version 1.1.1 - Usar fichero de configuración JSON +#@author Ramon Gomez, ETSII Universidad Sevilla +#@date 2018-02-27 #*/ ## function ogTypeToId () { # Variables locales -local PTTYPE ID="" +local PTTYPE # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -1534,82 +1492,9 @@ fi # Error si no se reciben 1 o 2 parámetros. [ $# -lt 1 -o $# -gt 2 ] && (ogRaiseError $OG_ERR_FORMAT; return $?) -# Asociar id. de partición para su mnemónico. +# Consulta JSON con tipo de tabla y tipo de partición. PTTYPE=${2:-"MSDOS"} -case "$PTTYPE" in - GPT) # Se incluyen mnemónicos compatibles con tablas MSDOS. - case "$1" in - EMPTY) ID=0 ;; - WINDOWS|NTFS|EXFAT|FAT32|FAT16|FAT12|HNTFS|HFAT32|HFAT16|HFAT12) - ID=0700 ;; - WIN-RESERV) ID=0C01 ;; - CHROMEOS-KRN) ID=7F00 ;; - CHROMEOS) ID=7F01 ;; - CHROMEOS-RESERV) ID=7F02 ;; - LINUX-SWAP) ID=8200 ;; - LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS) - ID=8300 ;; - LINUX-RESERV) ID=8301 ;; - LINUX-LVM) ID=8E00 ;; - FREEBSD-DISK) ID=A500 ;; - FREEBSD-BOOT) ID=A501 ;; - FREEBSD-SWAP) ID=A502 ;; - FREEBSD) ID=A503 ;; - HFS-BOOT) ID=AB00 ;; - HFS|HFS+) ID=AF00 ;; - HFSPLUS) ID=AF00 ;; - HFS-RAID) ID=AF01 ;; - SOLARIS-BOOT) ID=BE00 ;; - SOLARIS) ID=BF00 ;; - SOLARIS-SWAP) ID=BF02 ;; - SOLARIS-DISK) ID=BF03 ;; - CACHE) ID=CA00;; - EFI) ID=EF00 ;; - LINUX-RAID) ID=FD00 ;; - esac - ;; - MSDOS) - case "$1" in - EMPTY) ID=0 ;; - FAT12) ID=1 ;; - EXTENDED) ID=5 ;; - FAT16) ID=6 ;; - WINDOWS|NTFS|EXFAT) - ID=7 ;; - FAT32) ID=b ;; - HFAT12) ID=11 ;; - HFAT16) ID=16 ;; - HNTFS) ID=17 ;; - HFAT32) ID=1b ;; - LINUX-SWAP) ID=82 ;; - LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS) - ID=83 ;; - LINUX-LVM) ID=8e ;; - FREEBSD) ID=a5 ;; - OPENBSD) ID=a6 ;; - HFS|HFS+) ID=af ;; - SOLARIS-BOOT) ID=be ;; - SOLARIS) ID=bf ;; - CACHE) ID=ca ;; - DATA) ID=da ;; - GPT) ID=ee ;; - EFI) ID=ef ;; - VMFS) ID=fb ;; - LINUX-RAID) ID=fd ;; - esac - ;; - LVM) - case "$1" in - LVM-LV) ID=10000 ;; - esac - ;; - ZVOL) - case "$1" in - ZFS-VOL) ID=10010 ;; - esac - ;; -esac -echo $ID +jq -r "(.partitiontables[] | select(.type==\"${PTTYPE^^}\").partitions[]) | select(.type==\"${1^^}\").id" $ENGINECFG 2>/dev/null } @@ -1703,7 +1588,7 @@ rm -f $LOCKFILE #@warning pendiente estructurar la funcion a opengnsys #@version 0.1 - Integracion para Opengnsys - EAC: UpdatePartitionTable() en ATA.lib #@author Antonio J. Doblas Viso. Universidad de Malaga -#@date 27/10/2008 +#@date 2008-10-27 #*/ ## function ogUpdatePartitionTable () { diff --git a/client/shared/etc/preinit/loadenviron.sh b/client/shared/etc/preinit/loadenviron.sh index c80043cf..c442eb5f 100755 --- a/client/shared/etc/preinit/loadenviron.sh +++ b/client/shared/etc/preinit/loadenviron.sh @@ -23,6 +23,7 @@ export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" if [ -d $OPENGNSYS ]; then export OGBIN=$OPENGNSYS/bin export OGETC=$OPENGNSYS/etc + export ENGINECFG=$OGETC/engine.json export OGLIB=$OPENGNSYS/lib export OGAPI=$OGLIB/engine/bin export OGSCRIPTS=$OPENGNSYS/scripts @@ -63,7 +64,7 @@ if [ -d $OPENGNSYS ]; then done # Cargar configuración del engine. - [ -f ${OGETC}/engine.cfg ] && source ${OGETC}/engine.cfg + eval $(jq -r 'foreach .variables[] as $var (""; "export "+$var.name+"=\""+($var.value|tostring)+"\"")' $ENGINECFG 2>/dev/null) export OGLOGCOMMAND=${OGLOGCOMMAND:-/tmp/command.log} export OGLOGSESSION=${OGLOGSESSION:-/tmp/session.log} @@ -100,45 +101,6 @@ if [ ! -f /run/resolvconf/resolv.conf -a -n "$ogdns" ]; then fi # Declaración de códigos de error. -export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. -export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. -export OG_ERR_PARTITION=3 # Error en partición de disco. -export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. -export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. -export OG_ERR_NOTOS=6 # Sin sistema operativo. -export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. -# Códigos 8-13 reservados por ogAdmClient.h -export OG_ERR_NOTWRITE=14 # No hay acceso de escritura -export OG_ERR_NOTCACHE=15 # No hay particion cache en cliente -export OG_ERR_CACHESIZE=16 # No hay espacio en la cache para almacenar fichero-imagen -export OG_ERR_REDUCEFS=17 # Error al reducir sistema archivos -export OG_ERR_EXTENDFS=18 # Error al expandir el sistema de archivos -export OG_ERR_OUTOFLIMIT=19 # Valor fuera de rango o no válido. -export OG_ERR_FILESYS=20 # Sistema de archivos desconocido o no se puede montar -export OG_ERR_CACHE=21 # Error en partición de caché local -export OG_ERR_NOGPT=22 # El disco indicado no contiene una particion GPT -export OG_ERR_REPO=23 # Error al montar el repositorio de imagenes - -export OG_ERR_IMGSIZEPARTITION=30 # Error al restaurar partición más pequeña que la imagen -export OG_ERR_UPDATECACHE=31 # Error al realizar el comando updateCache -export OG_ERR_DONTFORMAT=32 # Error al formatear -export OG_ERR_GENERIC=40 # Error imprevisto no definido -export OG_ERR_UCASTSYNTAXT=50 # Error en la generación de sintaxis de transferenica UNICAST -export OG_ERR_UCASTSENDPARTITION=51 # Error en envío UNICAST de partición -export OG_ERR_UCASTSENDFILE=52 # Error en envío UNICAST de un fichero -export OG_ERR_UCASTRECEIVERPARTITION=53 # Error en la recepcion UNICAST de una particion -export OG_ERR_UCASTRECEIVERFILE=54 # Error en la recepcion UNICAST de un fichero -export OG_ERR_MCASTSYNTAXT=55 # Error en la generacion de sintaxis de transferenica Multicast. -export OG_ERR_MCASTSENDFILE=56 # Error en envio MULTICAST de un fichero -export OG_ERR_MCASTRECEIVERFILE=57 # Error en la recepcion MULTICAST de un fichero -export OG_ERR_MCASTSENDPARTITION=58 # Error en envio MULTICAST de una particion -export OG_ERR_MCASTRECEIVERPARTITION=59 # Error en la recepcion MULTICAST de una particion -export OG_ERR_PROTOCOLJOINMASTER=60 # Error en la conexion de una sesion UNICAST|MULTICAST con el MASTER - -export OG_ERR_DONTMOUNT_IMAGE=70 # Error al montar una imagen sincronizada. -export OG_ERR_DONTSYNC_IMAGE=71 # Imagen no sincronizable (es monolitica) -export OG_ERR_DONTUNMOUNT_IMAGE=72 # Error al desmontar la imagen -export OG_ERR_NOTDIFFERENT=73 # No se detectan diferencias entre la imagen basica y la particion. -export OG_ERR_SYNCHRONIZING=74 # Error al sincronizar, puede afectar la creacion/restauracion de la imagen +eval $(jq -r 'foreach .errors[] as $err (""; "export "+$err.name+"="+($err.id|tostring))' $ENGINECFG 2>/dev/null) export OG_ERR_NOTUEFI=80 # La interfaz UEFI no está activa -- cgit v1.2.3-18-g5258 From 65a293798d841e65179eba4aabad189c0b790bdb Mon Sep 17 00:00:00 2001 From: "Ramón M. Gómez" Date: Fri, 18 May 2018 14:32:01 +0200 Subject: #812: configuraciones web leen tipo de partición del fichero de configuración. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../includes/ConfiguracionesParticiones.php | 3 ++- .../includes/pintaTablaConfiguraciones.php | 26 ++++++++++------------ 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/admin/WebConsole/includes/ConfiguracionesParticiones.php b/admin/WebConsole/includes/ConfiguracionesParticiones.php index 963e1d08..e27899f0 100644 --- a/admin/WebConsole/includes/ConfiguracionesParticiones.php +++ b/admin/WebConsole/includes/ConfiguracionesParticiones.php @@ -20,7 +20,7 @@ function getPartitionData($json, $code) { } } } - return [$partcode, true]; + return [$code, true]; } /** @@ -36,6 +36,7 @@ function getParttableData($json, $code) { return $tab->type; } } + } return ""; } diff --git a/admin/WebConsole/includes/pintaTablaConfiguraciones.php b/admin/WebConsole/includes/pintaTablaConfiguraciones.php index 6491856e..045e30c2 100644 --- a/admin/WebConsole/includes/pintaTablaConfiguraciones.php +++ b/admin/WebConsole/includes/pintaTablaConfiguraciones.php @@ -1,4 +1,5 @@ texto="SELECT ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.tamano, ordenadores_particiones.idnombreso, nombresos.nombreso, - tipospar.tipopar, imagenes.descripcion AS imagen, - perfilessoft.descripcion AS perfilsoft, + imagenes.descripcion AS imagen, perfilessoft.descripcion AS perfilsoft, sistemasficheros.descripcion AS sistemafichero FROM ordenadores INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso - INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero @@ -193,14 +192,14 @@ function tablaConfiguracionesCrearImagen($cmd,$idordenador,$idrepositorio) global $idcentro; global $TbMsg; $tablaHtml=""; - $cmd->texto="SELECT ordenadores.ip AS masterip,ordenadores_particiones.numdisk, ordenadores_particiones.numpar,ordenadores_particiones.codpar,ordenadores_particiones.tamano, - ordenadores_particiones.idnombreso,nombresos.nombreso,tipospar.tipopar,tipospar.clonable, - imagenes.nombreca,imagenes.descripcion as imagen,perfilessoft.idperfilsoft, - perfilessoft.descripcion as perfilsoft,sistemasficheros.descripcion as sistemafichero + $cmd->texto="SELECT ordenadores.ip AS masterip, ordenadores_particiones.numdisk, ordenadores_particiones.numpar, + ordenadores_particiones.codpar, ordenadores_particiones.tamano, + ordenadores_particiones.idnombreso, nombresos.nombreso, + imagenes.nombreca, imagenes.descripcion AS imagen, perfilessoft.idperfilsoft, + perfilessoft.descripcion AS perfilsoft, sistemasficheros.descripcion AS sistemafichero FROM ordenadores INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso - INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero @@ -218,7 +217,7 @@ function tablaConfiguracionesCrearImagen($cmd,$idordenador,$idrepositorio) $actualDisk = $rs->campos["numdisk"]; $tablaHtml.=' '.$TbMsg["DISK"].' '.$actualDisk.''.chr(13); } - + list($rs->campos["tipopar"], $rs->campos["clonable"]) = getPartitionData($json, $rs->campos["codpar"]); $swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]); $swc=$rs->campos["idperfilsoft"]>0; // Una partición es clonable si posee un identificador de perfil software $swccc=$swcc && $swcc; @@ -281,10 +280,8 @@ function tablaConfiguracionesSincronizacion1($idordenador) $cmd->texto="SELECT DISTINCT ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.idnombreso, nombresos.nombreso, ordenadores_particiones.idimagen, ordenadores_particiones.codpar, - tipospar.clonable, perfilessoft.idperfilsoft, - nombresos.idnombreso, nombresos.nombreso + perfilessoft.idperfilsoft, nombresos.idnombreso, nombresos.nombreso FROM ordenadores_particiones - INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft WHERE ordenadores_particiones.idordenador=".$idordenador." @@ -303,8 +300,9 @@ function tablaConfiguracionesSincronizacion1($idordenador) $actualDisk = $rs->campos["numdisk"]; $tablaHtml.=' '.$TbMsg["DISK"].' '.$actualDisk.''.chr(13); } - //$swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]) && !empty($rs->campos["idperfilsoft"]); - $sw=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]); + list($rs->campos["tipopar"], $rs->campos["clonable"]) = getPartitionData($json, $rs->campos["codpar"]); + //$swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]) && !empty($rs->campos["idperfilsoft"]); + $sw=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]); if($sw){// Una partici�n es clonable si es cierta esta variable $tbPAR.=$rs->campos["numpar"].";"; // Cadena con las particiones a procesar $tablaHtml.=''; -- cgit v1.2.3-18-g5258 From 19f7c92b996dc15ca4aed5a45152a077b7fae20a Mon Sep 17 00:00:00 2001 From: "Ramón M. Gómez" Date: Wed, 23 May 2018 12:42:19 +0200 Subject: #812: Tomar tipos de partición del fichero JSON en formularios de comandos web. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/Database/ogAdmBD-1.1.1pre-1.1.1.sql | 4 + admin/WebConsole/comandos/Configurar.php | 10 +-- .../includes/ConfiguracionesParticiones.php | 53 ++----------- admin/WebConsole/includes/configfunctions.php | 87 ++++++++++++++++++++++ admin/WebConsole/includes/pintaParticiones.php | 5 +- .../includes/pintaTablaConfiguraciones.php | 12 ++- 6 files changed, 112 insertions(+), 59 deletions(-) create mode 100644 admin/WebConsole/includes/configfunctions.php diff --git a/admin/Database/ogAdmBD-1.1.1pre-1.1.1.sql b/admin/Database/ogAdmBD-1.1.1pre-1.1.1.sql index 759da7bd..f425b5e6 100644 --- a/admin/Database/ogAdmBD-1.1.1pre-1.1.1.sql +++ b/admin/Database/ogAdmBD-1.1.1pre-1.1.1.sql @@ -30,3 +30,7 @@ DROP PROCEDURE addcols; # Cambio del nombre de las plantillas PXE para compatibilidad con UEFI. UPDATE ordenadores SET arranque='10' WHERE arranque='01'; + +# Eliminar tabla sustituida por fichero de configuracion (ticket #812). +DROP TABLE IF EXISTS tipospar; + diff --git a/admin/WebConsole/comandos/Configurar.php b/admin/WebConsole/comandos/Configurar.php index 89e34713..06555063 100644 --- a/admin/WebConsole/comandos/Configurar.php +++ b/admin/WebConsole/comandos/Configurar.php @@ -124,7 +124,7 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"]; echo ''; echo ''; echo ''; - echo ''; + echo ''; echo ''; echo ''; echo ''; @@ -167,10 +167,11 @@ function opeFormatear() /*________________________________________________________________________________________________________ Crea la etiqueta html de los sistemas de ficheros ________________________________________________________________________________________________________*/ @@ -178,5 +179,4 @@ function HTMLSELECT_sistemasficheros($cmd,$idsistemafichero) { return(HTMLSELECT($cmd,0,"sistemasficheros",$idsistemafichero,"idsistemafichero","descripcion",150,"","formulariodatos")); } -?> diff --git a/admin/WebConsole/includes/ConfiguracionesParticiones.php b/admin/WebConsole/includes/ConfiguracionesParticiones.php index e27899f0..b5da9d68 100644 --- a/admin/WebConsole/includes/ConfiguracionesParticiones.php +++ b/admin/WebConsole/includes/ConfiguracionesParticiones.php @@ -1,44 +1,6 @@ partitiontables)) { - foreach ($json->partitiontables as $tab) { - if (isset($tab->partitions)) { - foreach ($tab->partitions as $par) { - if (hexdec($par->id) == $code) { - return [$par->type, $par->clonable]; - } - } - } - } - } - return [$code, true]; -} - -/** - * Busca en la configuración JSON los datos de tabla de particiones para el código correspondiente. - * @param object $json datos JSON de configuración - * @param string $code código de tabla de particiones - * @return string tipo de tabla de particiones - */ -function getParttableData($json, $code) { - if (isset($json->partitiontables)) { - foreach ($json->partitiontables as $tab) { - if (hexdec($tab->id) == $code) { - return $tab->type; - } - } - } - return ""; -} +include_once(__DIR__ . "/configfunctions.php"); +include_once(__DIR__ . "/pintaParticiones.php"); /*________________________________________________________________________________________________________ UHU - 2013/05/14 - Se añade la clave número de disco @@ -177,9 +139,9 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) $cmd->texto.=" GROUP BY configuracion"; // Comprobar compatiblidad de cláusula GROUP BY. - if (strpos($mode, 'ONLY_FULL_GROUP_BY') === false) + if (strpos($mode, 'ONLY_FULL_GROUP_BY') === false) { $cmd->texto=preg_replace('/ANY_VALUE/', '', $cmd->texto); - + } $rs=new Recordset; $rs->Comando=&$cmd; if (!$rs->Abrir()) return(false); // Error al abrir recordset @@ -191,6 +153,7 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) if ($numpar == 0) { // Tipo de tabla de particiones. $tipopar = getParttableData($json, $codpar); + $clonable = ""; } else { // Saltar si no es clonable en restauración. list($tipopar, $clonable) = getPartitionData($json, $codpar); @@ -224,6 +187,7 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) } $conKeys=$idx; // Guarda contador $rs->Cerrar(); + return(true); } /*________________________________________________________________________________________________________ UHU - 2013/05/14 - Se añade la clave número de disco @@ -297,8 +261,7 @@ function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr,$pintaPar INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen - LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft - LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero"; + LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft"; switch($ambito){ case $AMBITO_AULAS : @@ -410,7 +373,7 @@ function cargaSistemasFicheros($cmd,$idambito,$ambito) global $AMBITO_AULAS; global $AMBITO_GRUPOSORDENADORES; global $AMBITO_ORDENADORES; - + $cmd->texto="SELECT COUNT(*) AS con, ordenadores_particiones.idsistemafichero, ordenadores_particiones.numdisk, diff --git a/admin/WebConsole/includes/configfunctions.php b/admin/WebConsole/includes/configfunctions.php new file mode 100644 index 00000000..04d265f0 --- /dev/null +++ b/admin/WebConsole/includes/configfunctions.php @@ -0,0 +1,87 @@ +partitiontables)) { + foreach ($json->partitiontables as $tab) { + if (isset($tab->partitions)) { + foreach ($tab->partitions as $par) { + if (hexdec($par->id) == $code) { + return [$par->type, $par->clonable]; + } + } + } + } + } + return [$code, true]; +} + +/** + * @function getParttableData + * @brief Busca en la configuración JSON los datos de tabla de particiones para el código correspondiente. + * @param object $json datos JSON de configuración + * @param string $code código de tabla de particiones + * @return string tipo de tabla de particiones + * @date 2018-17-05 + */ +function getParttableData($json, $code) { + if (isset($json->partitiontables)) { + foreach ($json->partitiontables as $tab) { + if ($tab->id == $code) { + return $tab->type; + } + } + } + return ""; +} + +/** + * @function htmlSelectPartitions + * @brief Devuelve la cláusula '.chr(13); + $html.=' '.chr(13); + + if (isset($json->partitiontables)) { + foreach ($json->partitiontables as $tab) { + if (isset($partTable) and $tab->type != $partTable) { + continue; + } + if (isset($tab->partitions)) { + foreach ($tab->partitions as $par) { + $html.=' '.chr(13); + } + } + } + } + $html.=''.chr(13); + return($html); +} diff --git a/admin/WebConsole/includes/pintaParticiones.php b/admin/WebConsole/includes/pintaParticiones.php index 5b43a54c..95b6b855 100644 --- a/admin/WebConsole/includes/pintaParticiones.php +++ b/admin/WebConsole/includes/pintaParticiones.php @@ -333,7 +333,7 @@ function pintaParticionesConfigurar($cmd,$configuraciones,$idordenadores,$cc) echo ''; echo ''; echo ''; - echo ''; + echo ''; $sf=tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores,true); echo ''; $tm=tomaTamano($tbKeys[$k]["numpar"],$idordenadores); @@ -357,7 +357,8 @@ function pintaParticionesConfigurar($cmd,$configuraciones,$idordenadores,$cc) $tm=tomaTamano(0,$idordenadores); echo ''. "\n\n\n".$TbMsg["DISK"]."". - "\n\n '.(isset($tm)?$tm:("".$TbMsg["VARIABLE"].""))." ". + "\n\n '.(isset($tm)?$tm:("".$TbMsg["VARIABLE"]."")). + "". "\n\n\n"; echo ''; // Mostrar aviso: solo disco 1 con tabla MSDOS. diff --git a/admin/WebConsole/includes/pintaTablaConfiguraciones.php b/admin/WebConsole/includes/pintaTablaConfiguraciones.php index 045e30c2..df969677 100644 --- a/admin/WebConsole/includes/pintaTablaConfiguraciones.php +++ b/admin/WebConsole/includes/pintaTablaConfiguraciones.php @@ -1,5 +1,5 @@ '.chr(13).'
'.HTMLSELECT_particiones(0).''.HTMLSELECT_tipospar($cmd,"").''.HTMLSELECT_tipospar("").''.HTMLSELECT_sistemasficheros($cmd,"").' 
'.HTMLSELECT_particiones($tbKeys[$k]["numpar"]).''.HTMLSELECT_tipospar($cmd,$tbKeys[$k]["tipopar"]).''.HTMLSELECT_tipospar($tbKeys[$k]["tipopar"]).''.HTMLSELECT_sistemasficheros($cmd,$sf).'
 '.$TbMsg["WARN_DISKSIZE"].'
'.$TbMsg["CONFIG_NOCONFIG"].'
'.chr(13); // CONSULTA BD: grupo de equipos con iguales sistemas operativos: idordenadores,configuracion - $cmd->texto=""; // agrupamos equipos con igual conf de disco. $cmd->texto="SELECT GROUP_CONCAT(pcconf.idordenador SEPARATOR ',') AS idordenadores, pcconf.configuraciones FROM ("; @@ -126,14 +125,12 @@ function tablaConfiguracionesInventarioSoftware($cmd,$idordenador){ $cmd->texto="SELECT ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.tamano, ordenadores_particiones.idnombreso, nombresos.nombreso, - imagenes.descripcion AS imagen, perfilessoft.descripcion AS perfilsoft, - sistemasficheros.descripcion AS sistemafichero + imagenes.descripcion AS imagen, perfilessoft.descripcion AS perfilsoft FROM ordenadores INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft - LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero WHERE ordenadores.idordenador=".$idordenador." AND nombresos.nombreso!='DATA' ORDER BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar"; @@ -191,18 +188,19 @@ function tablaConfiguracionesCrearImagen($cmd,$idordenador,$idrepositorio) { global $idcentro; global $TbMsg; + $json = json_decode(file_get_contents(ENGINEJSON)); + $tablaHtml=""; $cmd->texto="SELECT ordenadores.ip AS masterip, ordenadores_particiones.numdisk, ordenadores_particiones.numpar, ordenadores_particiones.codpar, ordenadores_particiones.tamano, ordenadores_particiones.idnombreso, nombresos.nombreso, imagenes.nombreca, imagenes.descripcion AS imagen, perfilessoft.idperfilsoft, - perfilessoft.descripcion AS perfilsoft, sistemasficheros.descripcion AS sistemafichero + perfilessoft.descripcion AS perfilsofttemafichero FROM ordenadores INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft - LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero WHERE ordenadores.idordenador=".$idordenador." ORDER BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar"; $rs=new Recordset; $rs->Comando=&$cmd; -- cgit v1.2.3-18-g5258 From 49584c53ecc995f048d52b5863c5ac940864c810 Mon Sep 17 00:00:00 2001 From: "Ramón M. Gómez" Date: Thu, 24 May 2018 11:02:20 +0200 Subject: #812: Usar fichero de configuración JSON en comandos Configurar e Iniciar Sesión. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/WebConsole/comandos/Configurar.php | 11 ++- admin/WebConsole/comandos/IniciarSesion.php | 17 ++-- .../includes/ConfiguracionesParticiones.php | 9 +-- admin/WebConsole/includes/configfunctions.php | 94 +++++++++++++--------- .../includes/pintaTablaConfiguraciones.php | 7 +- 5 files changed, 80 insertions(+), 58 deletions(-) diff --git a/admin/WebConsole/comandos/Configurar.php b/admin/WebConsole/comandos/Configurar.php index 06555063..f6530055 100644 --- a/admin/WebConsole/comandos/Configurar.php +++ b/admin/WebConsole/comandos/Configurar.php @@ -74,7 +74,7 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"]; //________________________________________________________________________________________________________ - echo '

'.$TbMsg[19].'

'; + echo '

'.$TbMsg[19].'

'; if($ambito!=$AMBITO_ORDENADORES){ $cadenaid=""; $cadenaip=""; @@ -167,10 +167,13 @@ function opeFormatear() /*________________________________________________________________________________________________________ Crea la etiqueta html '."\n"; + $html.=' '."\n"; + $html.=htmlOptionPartitions($tablapar, $codpar, ""); + $html.=''."\n"; + return($html); } /*________________________________________________________________________________________________________ Crea la etiqueta html @@ -94,6 +100,7 @@ function toma_propiedades($cmd,$idordenador){ global $idperfilhard; global $idservidordhcp; global $idservidorrembo; + $rs=new Recordset; $cmd->texto="SELECT nombreordenador,ip,mac,idperfilhard FROM ordenadores WHERE idordenador='".$idordenador."'"; $rs->Comando=&$cmd; @@ -115,30 +122,30 @@ function toma_propiedades($cmd,$idordenador){ ________________________________________________________________________________________________________*/ function tabla_configuraciones($cmd,$idordenador){ global $idcentro; + $tablaHtml=""; $cmd->texto="SELECT ordenadores_particiones.numpar, - ordenadores_particiones.tamano, + ordenadores_particiones.codpar, ordenadores_particiones.tamano, ordenadores_particiones.idnombreso, nombresos.nombreso, - tipospar.tipopar, imagenes.descripcion AS imagen, + imagenes.descripcion AS imagen, perfilessoft.descripcion AS perfilsoft, sistemasficheros.descripcion AS sistemafichero FROM ordenadores INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso - INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero WHERE ordenadores.idordenador=".$idordenador." - AND tipospar.clonable=1 AND nombresos.nombreso!='DATA' ORDER BY ordenadores_particiones.numpar"; $rs=new Recordset; $rs->Comando=&$cmd; + $rs->Comando=&$cmd; if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset $rs->Primero(); while (!$rs->EOF){ - if(!empty($rs->campos["idnombreso"])){ + if(!empty($rs->campos["idnombreso"]) and isClonable($rs->campos["codpar"])){ $tablaHtml.=''.chr(13); $tablaHtml.=''.chr(13); $tablaHtml.=' '.$rs->campos["numpar"].' '.chr(13); diff --git a/admin/WebConsole/includes/ConfiguracionesParticiones.php b/admin/WebConsole/includes/ConfiguracionesParticiones.php index b5da9d68..319c26be 100644 --- a/admin/WebConsole/includes/ConfiguracionesParticiones.php +++ b/admin/WebConsole/includes/ConfiguracionesParticiones.php @@ -67,9 +67,6 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) global $msk_perfil; global $msk_cache; - // Cargar datos JSON de configuración. - $json=json_decode(file_get_contents(ENGINEJSON)); - // Comprobar modos SQL para hacer que la consulta sea compatible. $cmd->texto="SELECT @@sql_mode AS mode"; $cmd->ejecutar(); @@ -152,11 +149,11 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr) $codpar=$rs->campos["codpar"]; if ($numpar == 0) { // Tipo de tabla de particiones. - $tipopar = getParttableData($json, $codpar); - $clonable = ""; + $tipopar = getParttableData($codpar); + $clonable = false; } else { // Saltar si no es clonable en restauración. - list($tipopar, $clonable) = getPartitionData($json, $codpar); + list($tipopar, $clonable) = getPartitionData($codpar); if ($swr and $clonable == false) { continue; } diff --git a/admin/WebConsole/includes/configfunctions.php b/admin/WebConsole/includes/configfunctions.php index 04d265f0..8321c954 100644 --- a/admin/WebConsole/includes/configfunctions.php +++ b/admin/WebConsole/includes/configfunctions.php @@ -1,16 +1,20 @@ + */ + +// JSON configuration file path define("ENGINEJSON", __DIR__ . "/../../client/etc/engine.json"); /** - * @function getPartitionData - * @brief Busca en la configuración JSON los datos de partición para el código hexadecimal correspondiente - * @param object $json datos JSON de configuración - * @param string $code código hexadecimal de partición - * @return array tipo de partición (string) e indicador de clonable (bool) - * @date 2018-17-05 + * @param string $code Partition code, in hexadecimal + * @return array Partition data (type and clonable indicator) */ -function getPartitionData($json, $code) { +function getPartitionData($code) { + /** @var object $json JSON configuration data */ + $json=json_decode(file_get_contents(ENGINEJSON)); + if (isset($json->partitiontables)) { foreach ($json->partitiontables as $tab) { if (isset($tab->partitions)) { @@ -26,14 +30,35 @@ function getPartitionData($json, $code) { } /** - * @function getParttableData - * @brief Busca en la configuración JSON los datos de tabla de particiones para el código correspondiente. - * @param object $json datos JSON de configuración - * @param string $code código de tabla de particiones - * @return string tipo de tabla de particiones - * @date 2018-17-05 + * @param string $code Partition code, in hexadecimal + * @return bool True, if partition is marked as clonable */ -function getParttableData($json, $code) { +function isClonable($code) { + /** @var object $json JSON configuration data */ + $json=json_decode(file_get_contents(ENGINEJSON)); + + if (isset($json->partitiontables)) { + foreach ($json->partitiontables as $tab) { + if (isset($tab->partitions)) { + foreach ($tab->partitions as $par) { + if (hexdec($par->id) == $code) { + return $par->clonable; + } + } + } + } + } + return false; +} + +/** + * @param int $code Partition table code + * @return string partition table type + */ +function getParttableData($code) { + /** @var object $json JSON configuration data */ + $json=json_decode(file_get_contents(ENGINEJSON)); + if (isset($json->partitiontables)) { foreach ($json->partitiontables as $tab) { if ($tab->id == $code) { @@ -45,26 +70,16 @@ function getParttableData($json, $code) { } /** - * @function htmlSelectPartitions - * @brief Devuelve la cláusula clause */ -function htmlSelectPartitions($json, $type, $name="", $width, $eventChg="", $class="", $partTable) { - if (!empty($eventhg)) $eventChg='onchange="'.$eventChg.'(this);"'; - if (empty($class)) $class='formulariodatos'; - if (empty($name)) $name='id'; - - /** @var string $html */ - $html =''.chr(13); return($html); } diff --git a/admin/WebConsole/includes/pintaTablaConfiguraciones.php b/admin/WebConsole/includes/pintaTablaConfiguraciones.php index df969677..eafb4bfd 100644 --- a/admin/WebConsole/includes/pintaTablaConfiguraciones.php +++ b/admin/WebConsole/includes/pintaTablaConfiguraciones.php @@ -188,7 +188,6 @@ function tablaConfiguracionesCrearImagen($cmd,$idordenador,$idrepositorio) { global $idcentro; global $TbMsg; - $json = json_decode(file_get_contents(ENGINEJSON)); $tablaHtml=""; $cmd->texto="SELECT ordenadores.ip AS masterip, ordenadores_particiones.numdisk, ordenadores_particiones.numpar, @@ -215,7 +214,7 @@ function tablaConfiguracionesCrearImagen($cmd,$idordenador,$idrepositorio) $actualDisk = $rs->campos["numdisk"]; $tablaHtml.=' '.$TbMsg["DISK"].' '.$actualDisk.''.chr(13); } - list($rs->campos["tipopar"], $rs->campos["clonable"]) = getPartitionData($json, $rs->campos["codpar"]); + list($rs->campos["tipopar"], $rs->campos["clonable"]) = getPartitionData($rs->campos["codpar"]); $swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]); $swc=$rs->campos["idperfilsoft"]>0; // Una partición es clonable si posee un identificador de perfil software $swccc=$swcc && $swcc; @@ -298,10 +297,10 @@ function tablaConfiguracionesSincronizacion1($idordenador) $actualDisk = $rs->campos["numdisk"]; $tablaHtml.=' '.$TbMsg["DISK"].' '.$actualDisk.''.chr(13); } - list($rs->campos["tipopar"], $rs->campos["clonable"]) = getPartitionData($json, $rs->campos["codpar"]); + list($rs->campos["tipopar"], $rs->campos["clonable"]) = getPartitionData($rs->campos["codpar"]); //$swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]) && !empty($rs->campos["idperfilsoft"]); $sw=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]); - if($sw){// Una partici�n es clonable si es cierta esta variable + if($sw){// Una partición es clonable si es cierta esta variable $tbPAR.=$rs->campos["numpar"].";"; // Cadena con las particiones a procesar $tablaHtml.=''; $tablaHtml.=''; -- cgit v1.2.3-18-g5258