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 | echo "$MSG_INTERFACE_START $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE |
---|
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 | # Saltar si no existe definición de partición. |
---|
75 | if [ -n "$par" -a $par != 0 ]; then |
---|
76 | # Componer datos de particionado. |
---|
77 | TBP[par]="$cpt:$tam" |
---|
78 | # Si se activa operación de formatear, componer datos de formateo. |
---|
79 | if [ "$ope" == 1 ]; then |
---|
80 | TBF[par]="$sfi" |
---|
81 | else |
---|
82 | TBF[par]="EMPTY" |
---|
83 | fi |
---|
84 | # Obtener la partición mayor por si hay que rellenar con valores EMPTY. |
---|
85 | [ $par -gt $maxp ] && maxp=$par |
---|
86 | fi |
---|
87 | done |
---|
88 | |
---|
89 | # Control de datos. |
---|
90 | for ((par=1; par<=maxp; par++)); do |
---|
91 | # Ignorar partición 4 si existe caché. |
---|
92 | if [ $che != 1 -o $par -ne 4 ]; then |
---|
93 | # Rellenar con "EMPTY:0" la configuración de particiones no definidas. |
---|
94 | [ -z "${TBP[par]}" ] && TBP[par]="EMPTY:0" |
---|
95 | fi |
---|
96 | # Ignorar formateo en particiones que no soportan sistemas de archivos. |
---|
97 | case "${TBP[par]%:*}" in |
---|
98 | ""|EMPTY|EXTENDED|LINUX-SWAP|LINUX-LVM) |
---|
99 | TBF[par]="EMPTY" ;; |
---|
100 | esac |
---|
101 | done |
---|
102 | |
---|
103 | #____________________________________________________ |
---|
104 | # |
---|
105 | # Proceso |
---|
106 | #____________________________________________________ |
---|
107 | |
---|
108 | |
---|
109 | # Desmonta todas las particiones y la caché |
---|
110 | ogUnmountCache |
---|
111 | ogUnmountAll $dis &>/dev/null |
---|
112 | |
---|
113 | # Elimina la tabla de particiones |
---|
114 | ogDeletePartitionTable $dis |
---|
115 | ogUpdatePartitionTable $dis | tee -a $OGLOGSESSION $OGLOGFILE |
---|
116 | |
---|
117 | # Crea tabla de particiones MSDOS (NOTA: adaptar para tablas GPT). |
---|
118 | ogCreatePartitionTable $dis MSDOS |
---|
119 | |
---|
120 | # Cuestión caché |
---|
121 | if [ "$che" == "1" ]; then |
---|
122 | initCache $tch >/dev/null | tee -a $OGLOGSESSION $OGLOGFILE |
---|
123 | fi |
---|
124 | |
---|
125 | # Definir particionado. |
---|
126 | ogCreatePartitions $dis ${TBP[@]} | tee -a $OGLOGSESSION $OGLOGFILE |
---|
127 | ogUpdatePartitionTable $dis | tee -a $OGLOGSESSION $OGLOGFILE |
---|
128 | |
---|
129 | RETVAL=$? |
---|
130 | if [ $RETVAL -ne 0 ]; then |
---|
131 | kill $COPROC_PID |
---|
132 | exit $RETVAL |
---|
133 | fi |
---|
134 | |
---|
135 | # Formatear particiones, excepto las marcadas como "EMPTY". |
---|
136 | for ((par=1; par<=$maxp; par++)); do |
---|
137 | sfi="${TBF[par]}" |
---|
138 | if [ "$sfi" != "EMPTY" ]; then |
---|
139 | ogFormatFs $dis $par $sfi | tee -a $OGLOGSESSION $OGLOGFILE |
---|
140 | RETVAL=$? |
---|
141 | if [ $RETVAL -ne 0 ]; then |
---|
142 | kill $COPROC_PID |
---|
143 | exit $OG_ERR_PARTITION |
---|
144 | fi |
---|
145 | fi |
---|
146 | done |
---|
147 | |
---|
148 | #___________________________________________________________________ |
---|
149 | # |
---|
150 | # Retorno |
---|
151 | #___________________________________________________________________ |
---|
152 | |
---|
153 | kill $COPROC_PID |
---|
154 | exit 0 |
---|
155 | |
---|