summaryrefslogtreecommitdiffstats
path: root/admin/Interface
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2013-04-03 09:39:26 +0000
committerramon <ramongomez@us.es>2013-04-03 09:39:26 +0000
commit314dafb7b6632f70b344526c0a112cc413ea5e5b (patch)
tree840a504085e72b344eec88b39a5b15107ecad7f2 /admin/Interface
parented5611d0cc3206d4fdc10881f421ef10e12020cb (diff)
#594: Script de interfaz web para el Comando Formatear y Particionar, con corrección de erratas y soporte para que las particiones no deban indicarse en orden consecutivo.
git-svn-id: https://opengnsys.es/svn/branches/version1.0@3724 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'admin/Interface')
-rwxr-xr-xadmin/Interface/Configurar189
1 files changed, 80 insertions, 109 deletions
diff --git a/admin/Interface/Configurar b/admin/Interface/Configurar
index 811fcd18..c9cc7bee 100755
--- a/admin/Interface/Configurar
+++ b/admin/Interface/Configurar
@@ -10,9 +10,8 @@
echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp
# Registro de inicio de ejecución
-#echo "[START Interface ] Run this command: $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE
echo "$MSG_INTERFACE_START $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE
-
+
# Solo ejecutable por OpenGnSys Client.
PATH=$PATH:$(dirname $0)
PROG=$(basename $0)
@@ -22,103 +21,84 @@ 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
+# *=caracter de separación
# che=Vale 0 o 1
-# $=caracter de separación
+# *=caracter de separación
# $tch=tamaño cache
-# @= caracter de separación
+# != 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
+# 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
-param=$2;
-#param='dis=1$che=0$tch=70000000@par=1$cpt=NTFS$sfi=NTFS$tam=11000000$ope=0#'
-echo "Parametros recibidos"$param | tee -a $OGLOGSESSION $OGLOGFILE
+# 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
-# Separacion de los dos bloques separados por '@'
+# Leer los dos bloques de parámetros, separados por '!'.
declare -a TBPRM
-for ((i=1;i<3;i++));
- do
- TBPRM[$i]=$(echo $param | awk p=$i'{
- n=split($0,sep,"!");
- printf("%s",sep[p]);}')
- done
-
-pparam=${TBPRM[1]}
-sparam=${TBPRM[2]}
-
-#echo "Parametros recibidos pparam"$pparam | tee -a $OGLOGSESSION $OGLOGFILE
-#echo "Parametros recibidos sparam"$sparam | tee -a $OGLOGSESSION $OGLOGFILE
-
-# Toma valores de disco y caché
-# Los valores están en las variables $dis: disco,$che: vale 1 0 cero, $tch: Tamaño de la cache"
-declare -a TBP
-for ((prm=1;prm<4;prm++));
- do
- TBPRM[$prm]=$(echo $pparam | awk -v p=$prm '{
- split($0,sep,"*");
- printf("%s",sep[p]);
- }')
- eval ${TBPRM[$prm]}
- done
-
-# Toma valores de tamaño y distribución de particiones
-declare -a TBP
-declare -a TBF
-
-particiones=$(echo $sparam | awk '{n=split($0,sep,"%");print n}')
-
-for ((par=1;par<$particiones;par++));
- do
- TBP[$par]=$(echo $sparam | 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 %s %s %s %s",par,cpt,sfi,tam,ope);
- }')
- done
-
-# 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];
- printf("%s:%s ",cpt,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
+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
+
+# 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
#____________________________________________________
#
@@ -127,37 +107,30 @@ for ((par=1;par<$particiones;par++));
# Desmonta todas las particiones y la caché
-echo "Desmonta todas las particiones y la caché" | tee -a $OGLOGSESSION $OGLOGFILE
ogUnmountCache
-ogUnmountAll $dis
+ogUnmountAll $dis &>/dev/null
# Elimina la tabla de particiones
-echo "Elimina la tabla de particiones" | tee -a $OGLOGSESSION $OGLOGFILE
ogDeletePartitionTable $dis
ogUpdatePartitionTable $dis | tee -a $OGLOGSESSION $OGLOGFILE
-echo "Creando tabla de particiones tipo MSDOS" | tee -a $OGLOGSESSION $OGLOGFILE
-# Crea tabla de particiones MSDOS
+# Crea tabla de particiones MSDOS (NOTA: adaptar para tablas GPT).
ogCreatePartitionTable $dis MSDOS
-echo "Creando entradas en la tabla de particiones $dis $cP" | tee -a $OGLOGSESSION $OGLOGFILE
-ogCreatePartitions $dis $cP | tee -a $OGLOGSESSION $OGLOGFILE
-
+ogCreatePartitions $dis ${TBP[@]} | tee -a $OGLOGSESSION $OGLOGFILE
+
RETVAL=$?
if [ $RETVAL -ne 0 ]; then
kill $COPROC_PID
- exit $RETVAL
+ exit $RETVAL
fi
-echo "Tabla de particiones creada" | tee -a $OGLOGSESSION $OGLOGFILE
-
-# Formatear particiones
-for ((par=1;par<$particiones;par++));
- do
- sfi=${TBF[$par]}
+
+# Formatear particiones, excepto las marcadas como "EMPTY".
+for ((par=1; par<=$maxp; par++)); do
+ sfi="${TBF[par]}"
if [ "$sfi" != "EMPTY" ]; then
- echo "Formateando disco $dis, particion $par con tipo $sfi" | tee -a $OGLOGSESSION $OGLOGFILE
ogFormatFs $dis $par $sfi | tee -a $OGLOGSESSION $OGLOGFILE
- RETVAL=$?
+ RETVAL=$?
if [ $RETVAL -ne 0 ]; then
kill $COPROC_PID
exit $OG_ERR_PARTITION
@@ -167,8 +140,7 @@ done
# Cuestión caché
if [ "$che" == "1" ]; then
- echo "Creando y actualizando la cache con el tamaño:$tch" | tee -a $OGLOGSESSION $OGLOGFILE
- initCache $tch &>/dev/null | tee -a $OGLOGSESSION $OGLOGFILE
+ initCache $tch >/dev/null | tee -a $OGLOGSESSION $OGLOGFILE
fi
ogUpdatePartitionTable $dis | tee -a $OGLOGSESSION $OGLOGFILE
@@ -178,7 +150,6 @@ ogUpdatePartitionTable $dis | tee -a $OGLOGSESSION $OGLOGFILE
# Retorno
#___________________________________________________________________
- echo "¡¡¡ El proceso ha terminado con exito !!!" | tee -a $OGLOGSESSION $OGLOGFILE
- kill $COPROC_PID
- exit 0
+kill $COPROC_PID
+exit 0