#!/bin/bash #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 # 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 # 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. # Componer datos de particionado. if [ "$cpt" != "CACHE" ]; then TBP[par]="$cpt:$tam" fi # Si se activa operación de formatear, componer datos de formateo. if [ "$ope" == 1 ]; then # Comprobamos que la particion y el s.f sean validos. ogCheckStringInGroup $cpt "EMPTY EXTENDED LINUX-LVM LVM ZPOOL" [ $? -ne 0 ] && TBF[par]="$sfi" fi # Obtener la partición mayor. [ $par -gt $maxp ] && maxp=$par done #____________________________________________________ # # Proceso #____________________________________________________ # Tamaño actual de la cache CACHESIZE=$(ogGetCacheSize) # Desmonta todas las particiones y la caché ogEcho session log "[10] $MSG_HELP_ogUnmountAll" ogUnmountAll $dis &>/dev/null ogUnmountCache # Elimina la tabla de particiones ogDeletePartitionTable $dis ogExecAndLog COMMAND ogUpdatePartitionTable $dis # Crea tabla de particiones MSDOS (NOTA: adaptar para tablas GPT). ogCreatePartitionTable $dis MSDOS # Inicia la cache. if echo "$sparam" |grep "CACHE" >/dev/null; then ogEcho session log "[30] $MSG_HELP_ogCreateCache" ogEcho session log " initCache $tch" ogExecAndLog COMMAND initCache $tch fi # Definir particionado. ogEcho session log "[50] $MSG_HELP_ogCreatePartitions" ogEcho session log " ogCreatePartitions $dis ${TBP[@]}" ogExecAndLog COMMAND ogCreatePartitions $dis ${TBP[@]} if [ $? -ne 0 ]; then kill $COPROC_PID exit $(ogRaiseError session log $OG_ERR_GENERIC "ogCreatePartitions $dis ${TBP[@]}") fi ogExecAndLog COMMAND ogUpdatePartitionTable $dis # Formatear particiones ogEcho session log "[70] $MSG_HELP_ogFormat" for ((par=1; par<=$maxp; par++)); do case "${TBF[par]}" in CACHE) # Si el tamaño es distinto ya se ha formateado. if [ "$CACHESIZE" == $tch ]; then ogEcho session log " ogFormatCache" ogExecAndLog COMMAND ogFormatCache fi ;; "") ;; *) ogEcho session log " ogFormatFs $dis $par ${TBF[par]}" ogExecAndLog COMMAND ogFormatFs $dis $par ${TBF[par]} if [ $? -ne 0 ]; then kill $COPROC_PID exit $(ogRaiseError session log $OG_ERR_GENERIC "ogFormatFs $dis $par ${TBF[par]}"); fi ;; esac done RETVAL=$? # Registro de fin de ejecución ogEcho log session "$MSG_INTERFACE_END $RETVAL" #___________________________________________________________________ # # Retorno #___________________________________________________________________ kill $COPROC_PID exit 0