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 $dis $tch" |
---|
112 | ogExecAndLog COMMAND initCache $dis $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 | |
---|