summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--admin/Database/ogAdmBD-1.1.1pre.sql3
-rw-r--r--admin/Database/ogAdmBD.sql92
-rwxr-xr-xadmin/Interface/getConfiguration15
-rw-r--r--admin/WebConsole/comandos/Configurar.php15
-rw-r--r--admin/WebConsole/comandos/IniciarSesion.php15
-rw-r--r--admin/WebConsole/includes/ConfiguracionesParticiones.php50
-rw-r--r--admin/WebConsole/includes/configfunctions.php103
-rw-r--r--admin/WebConsole/includes/pintaParticiones.php21
-rw-r--r--admin/WebConsole/includes/pintaTablaConfiguraciones.php33
-rwxr-xr-xclient/engine/Disk.lib225
-rwxr-xr-xclient/shared/etc/preinit/loadenviron.sh44
11 files changed, 237 insertions, 379 deletions
diff --git a/admin/Database/ogAdmBD-1.1.1pre.sql b/admin/Database/ogAdmBD-1.1.1pre.sql
index d10e2e5d..0f03188b 100644
--- a/admin/Database/ogAdmBD-1.1.1pre.sql
+++ b/admin/Database/ogAdmBD-1.1.1pre.sql
@@ -28,3 +28,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/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),
@@ -1005,96 +1005,6 @@ INSERT INTO `tiposos` (`idtiposo`, `tiposo`, `idplataforma`) VALUES
-- --------------------------------------------------------
--
--- 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);
-
-
--- --------------------------------------------------------
-
---
-- Estructura de tabla para la tabla `universidades`
--
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/comandos/Configurar.php b/admin/WebConsole/comandos/Configurar.php
index 6ce89cfa..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 '<P align=center><SPAN align=center class=subcabeceras>'.$TbMsg[19].'</SPAN></P>';
+ echo '<p align="center"><span class="subcabeceras">'.$TbMsg[19].'</span></p>';
if($ambito!=$AMBITO_ORDENADORES){
$cadenaid="";
$cadenaip="";
@@ -124,7 +124,7 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"];
echo '<TABLE style="visibility:hidden"><TR id="TR_patron">';
echo '<TD align=center><input id="CHK_patron" type="checkbox"></TD>';
echo '<TD align=center>'.HTMLSELECT_particiones(0).'</TD>';
- echo '<TD align=center>'.HTMLSELECT_tipospar($cmd,"").'</TD>';
+ echo '<TD align=center>'.HTMLSELECT_tipospar("").'</TD>';
echo '<TD align=center>'.HTMLSELECT_sistemasficheros($cmd,"").'</TD>';
echo '<TD align=center><INPUT type="text" style="width:100" value="0"></TD>';
echo '<TD align=center>&nbsp;</TD>';
@@ -167,10 +167,14 @@ function opeFormatear()
/*________________________________________________________________________________________________________
Crea la etiqueta html <SELECT> de los tipos de particiones
________________________________________________________________________________________________________*/
-function HTMLSELECT_tipospar($cmd,$codpar)
+function HTMLSELECT_tipospar($tablapar="MSDOS", $codpar)
{
- return(HTMLSELECT($cmd,0,"tipospar",$codpar,"tipopar","tipopar",150,"","formulariodatos","codpar<256"));
-}
+ $html ='<select class="formulariodatos" name="tipopar" style="width: 150px">'."\n";
+ $html.=' <option value="0"></option>'."\n";
+ $html.=htmlOptionPartitions($tablapar, $codpar, "");
+ $html.='</select>'."\n";
+ return($html);
+}
/*________________________________________________________________________________________________________
Crea la etiqueta html <SELECT> de los sistemas de ficheros
________________________________________________________________________________________________________*/
@@ -178,5 +182,4 @@ function HTMLSELECT_sistemasficheros($cmd,$idsistemafichero)
{
return(HTMLSELECT($cmd,0,"sistemasficheros",$idsistemafichero,"idsistemafichero","descripcion",150,"","formulariodatos"));
}
-?>
diff --git a/admin/WebConsole/comandos/IniciarSesion.php b/admin/WebConsole/comandos/IniciarSesion.php
index 404a004d..c0aa1be1 100644
--- a/admin/WebConsole/comandos/IniciarSesion.php
+++ b/admin/WebConsole/comandos/IniciarSesion.php
@@ -60,7 +60,7 @@ if (!$cmd)
?>
<P align=center>
<SPAN align=center class=subcabeceras><?php echo $TbMsg[7] ?></SPAN>
- </BR>
+ <br>
<form align=center name="fdatos" method="POST">
<INPUT type="hidden" name="idambito" value="<?php echo $idambito?>">
<INPUT type="hidden" name="ambito" value="<?php echo $ambito?>">
@@ -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.='<TR>'.chr(13);
$tablaHtml.='<TD ><input type="radio" name="particion" value='.$rs->campos["numpar"].'></TD>'.chr(13);
$tablaHtml.='<TD align=center>&nbsp;'.$rs->campos["numpar"].'&nbsp;</TD>'.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 816843b5..319c26be 100644
--- a/admin/WebConsole/includes/ConfiguracionesParticiones.php
+++ b/admin/WebConsole/includes/ConfiguracionesParticiones.php
@@ -1,8 +1,11 @@
<?php
-include_once("pintaParticiones.php");
+include_once(__DIR__ . "/configfunctions.php");
+include_once(__DIR__ . "/pintaParticiones.php");
/*________________________________________________________________________________________________________
- 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 +60,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;
@@ -95,8 +97,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 +113,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,25 +132,39 @@ 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.
- 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
$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($codpar);
+ $clonable = false;
+ } else {
+ // Saltar si no es clonable en restauración.
+ list($tipopar, $clonable) = getPartitionData($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"];
@@ -171,6 +184,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
@@ -243,10 +257,8 @@ 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";
+ LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft";
switch($ambito){
case $AMBITO_AULAS :
@@ -261,7 +273,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
@@ -358,7 +370,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,
@@ -833,5 +845,3 @@ function tomaCache($numpar,$ordenadores,$numdisk = 1)
}
}
}
-?>
-
diff --git a/admin/WebConsole/includes/configfunctions.php b/admin/WebConsole/includes/configfunctions.php
new file mode 100644
index 00000000..8321c954
--- /dev/null
+++ b/admin/WebConsole/includes/configfunctions.php
@@ -0,0 +1,103 @@
+<?php
+/**
+ * @license GPLv3+
+ * @author Ramón M. Gómez <ramongomez@us.es>
+ */
+
+// JSON configuration file path
+define("ENGINEJSON", __DIR__ . "/../../client/etc/engine.json");
+
+/**
+ * @param string $code Partition code, in hexadecimal
+ * @return array Partition data (type and clonable indicator)
+ */
+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)) {
+ foreach ($tab->partitions as $par) {
+ if (hexdec($par->id) == $code) {
+ return [$par->type, $par->clonable];
+ }
+ }
+ }
+ }
+ }
+ return [$code, true];
+}
+
+/**
+ * @param string $code Partition code, in hexadecimal
+ * @return bool True, if partition is marked as clonable
+ */
+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) {
+ return $tab->type;
+ }
+ }
+ }
+ return "";
+}
+
+/**
+ * @param string $partTable Partition table type
+ * @param string $type Partition type selected by default
+ * @param string $exclude Partition type to exclude
+ * @return string HTML <select> clause
+ */
+function htmlOptionPartitions($partTable="MSDOS", $type="", $exclude="") {
+ /** @var object $json JSON configuration data */
+ $json=json_decode(file_get_contents(ENGINEJSON));
+ /** @var string $html HTML code */
+ $html='';
+
+ 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) {
+ if ($par->type != $exclude) {
+ $html.=' <option value="'.$par->id.'"';
+ if ($par->type == $type) {
+ $html.=' selected';
+ }
+ $html.='>'.$par->type.'</option>'."\n";
+ }
+ }
+ }
+ }
+ }
+ return($html);
+}
diff --git a/admin/WebConsole/includes/pintaParticiones.php b/admin/WebConsole/includes/pintaParticiones.php
index 44c3f10c..b12faafb 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 = '<em>'.$TbMsg["VARIABLE"].'</em>';
}
- 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'<tr height="16">'.chr(13);
@@ -338,11 +328,11 @@ function pintaParticionesConfigurar($cmd,$configuraciones,$idordenadores,$cc)
echo '<tr id="TR_'.$icp.'" align="center">';
echo '<td><input type="checkbox" onclick="eliminaParticion(this,\''.$icp.'\')"></td>';
echo '<td>'.HTMLSELECT_particiones($tbKeys[$k]["numpar"]).'</td>';
- echo '<td>'.HTMLSELECT_tipospar($cmd,$tbKeys[$k]["tipopar"]).'</td>';
+ echo '<td>'.HTMLSELECT_tipospar($tbKeys[$k]["tipopar"]).'</td>';
$sf=tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores,true);
echo '<td>'.HTMLSELECT_sistemasficheros($cmd,$sf).'</td>';
$tm=tomaTamano($tbKeys[$k]["numpar"],$idordenadores);
- echo '<td><input type="text" style="width:100" value="'.$tm.'"></td>';
+ echo '<td><input type="text" style="width:100px" value="'.$tm.'"></td>';
echo '<td>'.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).'</td>';
echo '<td>'.opeFormatear().'</td>';
echo '</tr>';
@@ -361,8 +351,9 @@ function pintaParticionesConfigurar($cmd,$configuraciones,$idordenadores,$cc)
// Datos del disco
$tm=tomaTamano(0,$idordenadores);
echo '<tr id="TRIMG_'.$cc.'" align="center">'.
- "\n<td></td>\n<td></td>\n<td".' style="font-size: 1em; padding: 1px 0px; "'.">".$TbMsg["DISK"]."</td>".
- "\n<td></td>\n<td".' style="font-size: 1em; padding: 1px 0px; "> '.(isset($tm)?$tm:("<em>".$TbMsg["VARIABLE"]."</em>"))." <input type='hidden' id='hdsize$cc' name='hdsize$cc' style='width:100' value='".$tm."'></td>".
+ "\n<td></td>\n<td></td>\n<td".' style="font-size: 1em; padding: 1px 0; "'.">".$TbMsg["DISK"]."</td>".
+ "\n<td></td>\n<td".' style="font-size: 1em; padding: 1px 0;"> '.(isset($tm)?$tm:("<em>".$TbMsg["VARIABLE"]."</em>")).
+ "<input type='hidden' id='hdsize$cc' name='hdsize$cc' style='width:100px' value='".$tm."'></td>".
"\n<td></td>\n<td></td>\n</tr>";
echo '<tr><th colspan="'.$colums.'">&nbsp;'.$TbMsg["WARN_DISKSIZE"].'</th></tr>';
// Mostrar aviso: solo disco 1 con tabla MSDOS.
diff --git a/admin/WebConsole/includes/pintaTablaConfiguraciones.php b/admin/WebConsole/includes/pintaTablaConfiguraciones.php
index 27e6fac4..2d55f7d8 100644
--- a/admin/WebConsole/includes/pintaTablaConfiguraciones.php
+++ b/admin/WebConsole/includes/pintaTablaConfiguraciones.php
@@ -1,4 +1,5 @@
<?php
+include_once(__DIR__ . "/configfunctions.php");
include_once("../idiomas/php/".$idioma."/pintaParticiones_".$idioma.".php");
/*________________________________________________________________________________________________________
@@ -36,7 +37,6 @@ function tablaConfiguracionesIniciarSesion($cmd,$idambito,$ambito){
$tablaSinConfiguracion.='<tr><th align="center" >'.$TbMsg["CONFIG_NOCONFIG"].'</th><tr>'.chr(13).'</table>'.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 (";
@@ -125,16 +125,12 @@ function tablaConfiguracionesInventarioSoftware($cmd,$idordenador){
$cmd->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,
- 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
- 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 nombresos.nombreso!='DATA'
ORDER BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar";
@@ -194,18 +190,18 @@ 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 perfilsofttemafichero
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." ORDER BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar";
$rs=new Recordset;
$rs->Comando=&$cmd;
@@ -220,7 +216,7 @@ function tablaConfiguracionesCrearImagen($cmd,$idordenador,$idrepositorio)
$actualDisk = $rs->campos["numdisk"];
$tablaHtml.='<TR><td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #D4D0C8;">&nbsp;<strong>'.$TbMsg["DISK"].'&nbsp;'.$actualDisk.'</strong></td></TR>'.chr(13);
}
-
+ 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;
@@ -283,10 +279,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,9 +299,10 @@ function tablaConfiguracionesSincronizacion1($idordenador)
$actualDisk = $rs->campos["numdisk"];
$tablaHtml.='<td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #D4D0C8;">&nbsp;<strong>'.$TbMsg["DISK"].'&nbsp;'.$actualDisk.'</strong></td>'.chr(13);
}
- //$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
+ 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
$tbPAR.=$rs->campos["numpar"].";"; // Cadena con las particiones a procesar
$tablaHtml.='<tr id="trPar-'.$rs->campos["numpar"].'">';
$tablaHtml.='<td align=center><input type=radio name="particion" value="'.$rs->campos["codpar"].'"></td>';
diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib
index 06744bd9..010dfc3a 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 ()
{
@@ -179,7 +179,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 ()
{
@@ -274,10 +274,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 ()
{
@@ -344,10 +344,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 ()
{
@@ -385,13 +385,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 ()
{
@@ -454,7 +454,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
@@ -499,9 +499,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"
@@ -594,10 +592,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 ()
{
@@ -753,7 +751,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 ()
{
@@ -799,7 +797,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
@@ -812,15 +810,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,,}
}
@@ -835,13 +834,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 ()
{
@@ -876,7 +875,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
@@ -929,7 +928,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
@@ -1023,7 +1022,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 ()
{
@@ -1063,6 +1062,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 ()
{
@@ -1078,56 +1080,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
}
@@ -1173,7 +1128,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 ()
{
@@ -1298,10 +1253,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 ()
{
@@ -1338,13 +1293,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 ()
{
@@ -1400,7 +1355,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 ()
{
@@ -1437,13 +1392,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 ()
{
@@ -1481,18 +1436,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
@@ -1504,82 +1462,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
}
@@ -1594,7 +1479,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 ()
{
@@ -1669,7 +1554,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)