| 1 | #!/bin/bash | 
|---|
| 2 |  | 
|---|
| 3 |  | 
|---|
| 4 | #Load engine configurator from engine.cfg file. | 
|---|
| 5 | #Carga el configurador del engine desde el fichero engine.cfg | 
|---|
| 6 | [ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg | 
|---|
| 7 |  | 
|---|
| 8 | # Clear temporary file used as log track by httpdlog | 
|---|
| 9 | # Limpia los ficheros temporales usados como log de seguimieincludento para httpdlog | 
|---|
| 10 | echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp | 
|---|
| 11 |  | 
|---|
| 12 | # Registro de inicio de ejecución | 
|---|
| 13 | ogEcho log session "$MSG_INTERFACE_START $0 $*" | 
|---|
| 14 |  | 
|---|
| 15 | # Solo ejecutable por OpenGnsys Client. | 
|---|
| 16 | PATH=$PATH:$(dirname $0) | 
|---|
| 17 | PROG=$(basename $0) | 
|---|
| 18 |  | 
|---|
| 19 | #____________________________________________________________________ | 
|---|
| 20 | # | 
|---|
| 21 | # El parámetro $2 es el que aporta toda la información y el $1 se queda obsoleto | 
|---|
| 22 | # Formato de entrada: | 
|---|
| 23 | #               dis=Número de disco | 
|---|
| 24 | #               *=caracter de separación | 
|---|
| 25 | #               che=Vale 0 o 1 | 
|---|
| 26 | #               *=caracter de separación | 
|---|
| 27 | #               $tch=tamaño cache | 
|---|
| 28 | #               != caracter de separación | 
|---|
| 29 | # | 
|---|
| 30 | #   Y un numero indeterminado de cadenas del tipo siguuenteseparadas por el caracter '$': | 
|---|
| 31 | #               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 | 
|---|
| 32 | #               @= caracter de separación | 
|---|
| 33 | #____________________________________________________________________ | 
|---|
| 34 |  | 
|---|
| 35 | # Captura de parámetros (se ignora el 1er parámetro y se eliminan espacios y tabuladores). | 
|---|
| 36 | #param='dis=1*che=0*tch=70000000!par=1*cpt=NTFS*sfi=NTFS*tam=11000000*ope=0%' | 
|---|
| 37 | shift | 
|---|
| 38 | param="$(echo $* | sed 's/[     ]//g')" | 
|---|
| 39 |  | 
|---|
| 40 | # Activa navegador para ver progreso | 
|---|
| 41 | coproc /opt/opengnsys/bin/browser -qws http://localhost/cgi-bin/httpd-log.sh | 
|---|
| 42 |  | 
|---|
| 43 | # Leer los dos bloques de parámetros, separados por '!'. | 
|---|
| 44 | declare -a TBPRM | 
|---|
| 45 |  | 
|---|
| 46 | IFS='!' read -a TBPRM <<<"$param" | 
|---|
| 47 | pparam="${TBPRM[0]}"    # Parámetros generales del disco. | 
|---|
| 48 | sparam="${TBPRM[1]}"    # Parámetros de particionado y formateo. | 
|---|
| 49 |  | 
|---|
| 50 |  | 
|---|
| 51 | # Toma valores de disco y caché, separados por "*". | 
|---|
| 52 | # Los valores están en las variables $dis: disco, $che: existe cache (1, 0), $tch: Tamaño de la cache. | 
|---|
| 53 | unset TBPRM | 
|---|
| 54 | IFS='*' read -a TBPRM <<<"$pparam" | 
|---|
| 55 | [[ ${TBPRM} =~ = ]] && eval ${TBPRM[@]}         # Comprobar asignación antes de exportar valores. | 
|---|
| 56 |  | 
|---|
| 57 | # Error si no se define el parámetro de disco (dis). | 
|---|
| 58 | [ -z "$dis" ] && exit $OG_ERR_FORMAT | 
|---|
| 59 |  | 
|---|
| 60 | # Toma valores de distribución de particiones, separados por "%". | 
|---|
| 61 | declare -a CFG          # Valores de configuración. | 
|---|
| 62 | declare -a TBP          # Tabla de particionado. | 
|---|
| 63 | declare -a TBF          # Tabla de formateo. | 
|---|
| 64 |  | 
|---|
| 65 | unset TBPRM | 
|---|
| 66 | IFS='%' read -a TBPRM <<<"$sparam" | 
|---|
| 67 |  | 
|---|
| 68 | maxp=0 | 
|---|
| 69 | for ((i=0; i<${#TBPRM[@]}; i++)); do | 
|---|
| 70 | # Leer datos de la partición, separados por "*". | 
|---|
| 71 | unset par | 
|---|
| 72 | IFS='*' read -a CFG <<<"${TBPRM[i]}" 2>/dev/null | 
|---|
| 73 | [[ ${CFG} =~ = ]] && eval ${CFG[@]}     # Comprobar asignación antes de exportar valores. | 
|---|
| 74 | # Componer datos de particionado. | 
|---|
| 75 | if [ "$cpt" != "CACHE" ]; then | 
|---|
| 76 | TBP[par]="$cpt:$tam" | 
|---|
| 77 | fi | 
|---|
| 78 | # Si se activa operación de formatear, componer datos de formateo. | 
|---|
| 79 | if [ "$ope" == 1 ]; then | 
|---|
| 80 | # Comprobamos que la particion y el s.f sean validos. | 
|---|
| 81 | ogCheckStringInGroup $cpt "EMPTY EXTENDED LINUX-LVM LVM ZPOOL" | 
|---|
| 82 | [ $? -ne 0 ] && TBF[par]="$sfi" | 
|---|
| 83 | fi | 
|---|
| 84 | # Obtener la partición mayor. | 
|---|
| 85 | [ $par -gt $maxp ] && maxp=$par | 
|---|
| 86 | done | 
|---|
| 87 | #____________________________________________________ | 
|---|
| 88 | # | 
|---|
| 89 | # Proceso | 
|---|
| 90 | #____________________________________________________ | 
|---|
| 91 |  | 
|---|
| 92 | # Tamaño actual de la cache | 
|---|
| 93 | CACHESIZE=$(ogGetCacheSize) | 
|---|
| 94 |  | 
|---|
| 95 | # Desmonta todas las particiones y la caché | 
|---|
| 96 |  | 
|---|
| 97 | ogEcho session log "[10] $MSG_HELP_ogUnmountAll" | 
|---|
| 98 | ogUnmountAll $dis &>/dev/null | 
|---|
| 99 | ogUnmountCache | 
|---|
| 100 |  | 
|---|
| 101 | # Elimina la tabla de particiones | 
|---|
| 102 | ogDeletePartitionTable $dis | 
|---|
| 103 | ogExecAndLog COMMAND ogUpdatePartitionTable $dis | 
|---|
| 104 |  | 
|---|
| 105 | # Crea tabla de particiones MSDOS (NOTA: adaptar para tablas GPT). | 
|---|
| 106 | ogCreatePartitionTable $dis MSDOS | 
|---|
| 107 |  | 
|---|
| 108 | # Inicia la cache. | 
|---|
| 109 | if echo "$sparam" |grep "CACHE" >/dev/null; then | 
|---|
| 110 | ogEcho session log "[30] $MSG_HELP_ogCreateCache" | 
|---|
| 111 | ogEcho session log "   initCache $tch" | 
|---|
| 112 | ogExecAndLog COMMAND  initCache $tch | 
|---|
| 113 | fi | 
|---|
| 114 |  | 
|---|
| 115 | # Definir particionado. | 
|---|
| 116 | ogEcho session log "[50] $MSG_HELP_ogCreatePartitions" | 
|---|
| 117 | ogEcho session log "   ogCreatePartitions $dis ${TBP[@]}" | 
|---|
| 118 | ogExecAndLog COMMAND ogCreatePartitions $dis ${TBP[@]} | 
|---|
| 119 | if [ $? -ne 0 ]; then | 
|---|
| 120 | kill $COPROC_PID | 
|---|
| 121 | exit $(ogRaiseError session log $OG_ERR_GENERIC "ogCreatePartitions $dis ${TBP[@]}") | 
|---|
| 122 | fi | 
|---|
| 123 | ogExecAndLog COMMAND ogUpdatePartitionTable $dis | 
|---|
| 124 |  | 
|---|
| 125 | #  Formatear particiones | 
|---|
| 126 | ogEcho session log "[70] $MSG_HELP_ogFormat" | 
|---|
| 127 |  | 
|---|
| 128 | for ((par=1; par<=$maxp; par++)); do | 
|---|
| 129 | case "${TBF[par]}" in | 
|---|
| 130 | CACHE)  # Si el tamaño es distinto ya se ha formateado. | 
|---|
| 131 | if [ "$CACHESIZE" == $tch ]; then | 
|---|
| 132 | ogEcho session log "   ogFormatCache" | 
|---|
| 133 | ogExecAndLog COMMAND ogFormatCache | 
|---|
| 134 | fi | 
|---|
| 135 | ;; | 
|---|
| 136 | "") ;; | 
|---|
| 137 | *) ogEcho session log "   ogFormatFs $dis $par ${TBF[par]}" | 
|---|
| 138 | ogExecAndLog COMMAND ogFormatFs $dis $par ${TBF[par]} | 
|---|
| 139 | if [ $? -ne 0 ]; then | 
|---|
| 140 | kill $COPROC_PID | 
|---|
| 141 | exit $(ogRaiseError session log $OG_ERR_GENERIC "ogFormatFs  $dis $par ${TBF[par]}"); | 
|---|
| 142 | fi | 
|---|
| 143 | ;; | 
|---|
| 144 | esac | 
|---|
| 145 | done | 
|---|
| 146 | RETVAL=$? | 
|---|
| 147 | # Registro de fin de ejecución | 
|---|
| 148 | ogEcho log session "$MSG_INTERFACE_END $RETVAL" | 
|---|
| 149 |  | 
|---|
| 150 | #___________________________________________________________________ | 
|---|
| 151 | # | 
|---|
| 152 | # Retorno | 
|---|
| 153 | #___________________________________________________________________ | 
|---|
| 154 |  | 
|---|
| 155 | kill $COPROC_PID | 
|---|
| 156 | exit 0 | 
|---|
| 157 |  | 
|---|