summaryrefslogtreecommitdiffstats
path: root/admin/Interface/Configurar
diff options
context:
space:
mode:
Diffstat (limited to 'admin/Interface/Configurar')
-rwxr-xr-xadmin/Interface/Configurar224
1 files changed, 149 insertions, 75 deletions
diff --git a/admin/Interface/Configurar b/admin/Interface/Configurar
index d98776f4..a10143f3 100755
--- a/admin/Interface/Configurar
+++ b/admin/Interface/Configurar
@@ -1,81 +1,155 @@
#!/bin/bash
-#_______________________________________________________________________________________________________________________________
-#
-# Formato de entrada:
-# $1 disco
-# $2 par=Número de particion#cod=Código de partición#sfi=Sistema de ficheros#tam=Tamaño de la partición#ope=Operación$
-#_______________________________________________________________________________________________________________________________
-
-particiones=$(echo $2 | awk '{n=split($0,sep,"$");print n}')
-
-declare -a TBP
-declare -a TBF
-for ((par=1;par<$particiones;par++));
- do
- TBP[$par]=$(echo $2 | awk -v p=$par '{
- n=split($0,sep,"$");
- split(sep[p],dua,"#");
- split(dua[1],prm,"=");
- par=prm[2];
- split(dua[2],prm,"=");
- cpt=prm[2];
- split(dua[3],prm,"=");
- sfi=prm[2];
- split(dua[4],prm,"=");
- tam=prm[2];
- split(dua[5],prm,"=");
- ope=prm[2];
- printf("%s %x %s %s %s",par,cpt,sfi,tam,ope);
- }')
- done
+
+#Load engine configurator from engine.cfg file.
+#Carga el configurador del engine desde el fichero engine.cfg
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
-# Prepara cadena de particiones _______________________________________
-cP=""
-for ((par=1;par<$particiones;par++));
- do
- cfg=${TBP[$par]}
-
- cP=$cP$(echo $cfg | awk '{
- n=split($0,prm," ");
- par=prm[1];
- cpt=prm[2];
- sfi=prm[3];
- tam=prm[4];
- ope=prm[5];
- if(ope==1)
- printf("%s:%s ",sfi,tam);
- else{
- if(ope==2)
- printf("H%s:%s ",sfi,tam);
- else
- printf("%s:%s ",sfi,tam);
- }
- }')
-
- TBF[$par]=$(echo $cfg | awk '{
- n=split($0,prm," ");
- sfi=prm[3];
- ope=prm[5];
- if(ope==1)
- printf("%s",sfi);
- else
- printf("EMPTY");
- }')
-
- done
- ogCreatePartitions $1 $cP
-
-# Formatear _______________________________________
+# Clear temporary file used as log track by httpdlog
+# Limpia los ficheros temporales usados como log de seguimieincludento para httpdlog
+echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp
-for ((par=1;par<$particiones;par++));
- do
- sfi=${TBF[$par]}
- if [ $sfi == "EMPTY" ]; then
- TBF[$par]=" "
- else
- ogFormatFs $1 $par $sfi
+# Registro de inicio de ejecución
+ogEcho log session "$MSG_INTERFACE_START $0 $*"
+
+# Solo ejecutable por OpenGnSys Client.
+PATH=$PATH:$(dirname $0)
+PROG=$(basename $0)
+
+#____________________________________________________________________
+#
+# El parámetro $2 es el que aporta toda la información y el $1 se queda obsoleto
+# Formato de entrada:
+# dis=Número de disco
+# *=caracter de separación
+# che=Vale 0 o 1
+# *=caracter de separación
+# $tch=tamaño cache
+# != caracter de separación
+#
+# Y un numero indeterminado de cadenas del tipo siguuenteseparadas por el caracter '$':
+# par=Número de particion*cod=Código de partición*sfi=Sistema de ficheros*tam=Tamaño de la partición*ope=Operación
+# @= caracter de separación
+#____________________________________________________________________
+
+# Captura de parámetros (se ignora el 1er parámetro y se eliminan espacios y tabuladores).
+#param='dis=1*che=0*tch=70000000!par=1*cpt=NTFS*sfi=NTFS*tam=11000000*ope=0%'
+shift
+param="$(echo $* | sed 's/[ ]//g')"
+
+# Activa navegador para ver progreso
+coproc /opt/opengnsys/bin/browser -qws http://localhost/cgi-bin/httpd-log.sh
+
+# Leer los dos bloques de parámetros, separados por '!'.
+declare -a TBPRM
+
+IFS='!' read -a TBPRM <<<"$param"
+pparam="${TBPRM[0]}" # Parámetros generales del disco.
+sparam="${TBPRM[1]}" # Parámetros de particionado y formateo.
+
+
+# Toma valores de disco y caché, separados por "*".
+# Los valores están en las variables $dis: disco, $che: existe cache (1, 0), $tch: Tamaño de la cache.
+unset TBPRM
+IFS='*' read -a TBPRM <<<"$pparam"
+[[ ${TBPRM} =~ = ]] && eval ${TBPRM[@]} # Comprobar asignación antes de exportar valores.
+
+# Error si no se define el parámetro de disco (dis).
+[ -z "$dis" ] && exit $OG_ERR_FORMAT
+
+# Toma valores de distribución de particiones, separados por "%".
+declare -a CFG # Valores de configuración.
+declare -a TBP # Tabla de particionado.
+declare -a TBF # Tabla de formateo.
+
+unset TBPRM
+IFS='%' read -a TBPRM <<<"$sparam"
+
+maxp=0
+for ((i=0; i<${#TBPRM[@]}; i++)); do
+ # Leer datos de la partición, separados por "*".
+ unset par
+ IFS='*' read -a CFG <<<"${TBPRM[i]}" 2>/dev/null
+ [[ ${CFG} =~ = ]] && eval ${CFG[@]} # Comprobar asignación antes de exportar valores.
+ # Saltar si no existe definición de partición.
+ if [ -n "$par" -a $par != 0 ]; then
+ # Componer datos de particionado.
+ TBP[par]="$cpt:$tam"
+ # Si se activa operación de formatear, componer datos de formateo.
+ if [ "$ope" == 1 ]; then
+ TBF[par]="$sfi"
+ else
+ TBF[par]="EMPTY"
+ fi
+ # Obtener la partición mayor por si hay que rellenar con valores EMPTY.
+ [ $par -gt $maxp ] && maxp=$par
fi
-
- done
+done
+
+# Control de datos.
+for ((par=1; par<=maxp; par++)); do
+ # Ignorar partición 4 si existe caché.
+ if [ $che != 1 -o $par -ne 4 ]; then
+ # Rellenar con "EMPTY:0" la configuración de particiones no definidas.
+ [ -z "${TBP[par]}" ] && TBP[par]="EMPTY:0"
+ fi
+ # Ignorar formateo en particiones que no soportan sistemas de archivos.
+ case "${TBP[par]%:*}" in
+ ""|EMPTY|EXTENDED|LINUX-SWAP|LINUX-LVM)
+ TBF[par]="EMPTY" ;;
+ esac
+done
+
+#____________________________________________________
+#
+# Proceso
+#____________________________________________________
+
+
+# Desmonta todas las particiones y la caché
+ogUnmountCache
+ogUnmountAll $dis &>/dev/null
+
+# Elimina la tabla de particiones
+ogDeletePartitionTable $dis
+ogUpdatePartitionTable $dis | tee -a $OGLOGSESSION $OGLOGFILE
+
+# Crea tabla de particiones MSDOS (NOTA: adaptar para tablas GPT).
+ogCreatePartitionTable $dis MSDOS
+
+# Cuestión caché
+if [ "$che" == "1" ]; then
+ initCache $tch >/dev/null | tee -a $OGLOGSESSION $OGLOGFILE
+fi
+
+# Definir particionado.
+ogCreatePartitions $dis ${TBP[@]} | tee -a $OGLOGSESSION $OGLOGFILE
+ogUpdatePartitionTable $dis | tee -a $OGLOGSESSION $OGLOGFILE
+
+RETVAL=$?
+if [ $RETVAL -ne 0 ]; then
+ kill $COPROC_PID
+ exit $RETVAL
+fi
+
+# Formatear particiones, excepto las marcadas como "EMPTY".
+for ((par=1; par<=$maxp; par++)); do
+ sfi="${TBF[par]}"
+ if [ "$sfi" != "EMPTY" ]; then
+ ogFormatFs $dis $par $sfi | tee -a $OGLOGSESSION $OGLOGFILE
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ kill $COPROC_PID
+ exit $OG_ERR_PARTITION
+ fi
+ fi
+done
+
+#___________________________________________________________________
+#
+# Retorno
+#___________________________________________________________________
+
+kill $COPROC_PID
+exit 0