summaryrefslogtreecommitdiffstats
path: root/admin/Interface/Configurar
blob: 661f4d573b2d775bc86f5752d85ac732da11d4dc (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
#!/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.
	# Saltar si no existe definición de partición.
	if [ -n "$par" -a $par != 0 ]; then
		# Componer datos de particionado. 
		TBP[par]="$cpt:$tam"
		# Si se activa operación de formatear, componer datos de formateo.
		if [ "$ope" == 1 ]; then
			TBF[par]="$sfi"
		else
			TBF[par]="EMPTY"
		fi
		# Obtener la partición mayor por si hay que rellenar con valores EMPTY.
		[ $par -gt $maxp ] && maxp=$par
	fi
done

# Control de datos.
for ((par=1; par<=maxp; par++)); do
	# Ignorar partición 4 si existe caché.
	if [ $che != 1 -o $par -ne 4 ]; then
		# Rellenar con "EMPTY:0" la configuración de particiones no definidas.
		[ -z "${TBP[par]}" ] && TBP[par]="EMPTY:0"
	fi
	# Ignorar formateo en particiones que no soportan sistemas de archivos.
	case "${TBP[par]%:*}" in
		""|EMPTY|EXTENDED|LINUX-SWAP|LINUX-LVM)
			TBF[par]="EMPTY" ;;
	esac
done

#____________________________________________________
# 
# Proceso
#____________________________________________________


# Desmonta todas las particiones y la caché
ogUnmountCache 
ogUnmountAll $dis &>/dev/null

# Elimina la tabla de particiones
ogDeletePartitionTable $dis  
ogExecAndLog session log ogUpdatePartitionTable $dis

# Crea tabla de particiones MSDOS (NOTA: adaptar para tablas GPT).
ogCreatePartitionTable $dis MSDOS 

# Cuestión caché
if [ "$che" == "1" ]; then
	ogExecAndLog session log initCache $tch
fi

# Definir particionado.
ogExecAndLog session log ogCreatePartitions $dis ${TBP[@]}
ogExecAndLog session log ogUpdatePartitionTable $dis

RETVAL=$?
if [ $RETVAL -ne 0 ]; then
	kill $COPROC_PID
	exit $RETVAL
fi 

# Formatear particiones, excepto las marcadas como "EMPTY".
for ((par=1; par<=$maxp; par++)); do
	sfi="${TBF[par]}"
	if [ "$sfi" != "EMPTY" ]; then
		ogExecAndLog session log ogFormatFs $dis $par $sfi
		RETVAL=$?
		if [ $RETVAL -ne 0 ]; then
			kill $COPROC_PID
			exit $OG_ERR_PARTITION
		fi 
	fi
done	

#___________________________________________________________________
#
# Retorno
#___________________________________________________________________

kill $COPROC_PID
exit 0