diff options
author | ramon <ramongomez@us.es> | 2013-04-03 09:39:26 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2013-04-03 09:39:26 +0000 |
commit | 314dafb7b6632f70b344526c0a112cc413ea5e5b (patch) | |
tree | 840a504085e72b344eec88b39a5b15107ecad7f2 /admin/Interface | |
parent | ed5611d0cc3206d4fdc10881f421ef10e12020cb (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-x | admin/Interface/Configurar | 189 |
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 |