summaryrefslogtreecommitdiffstats
path: root/admin/Interface/Configurar
blob: 3247d5683efed6cecb625ae4b56076bc7b07d90f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/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  $dis $tch"
	ogExecAndLog COMMAND  initCache $dis $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