summaryrefslogtreecommitdiffstats
path: root/client/shared/scripts/configureOs
blob: 6eaab8700ab546746a6394764d4177b580102d02 (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
#!/bin/bash

#/**
#         configureOs
#@brief   Script para realizar la configuracion del sistema operativo restaurado.
#@param 1 disco 
#@param 2 particion 
#@return  
#@TODO  comprobar que el tipo de particion corresponde con el sistema de archivos.
#@exception OG_ERR_FORMAT     # 1 formato incorrecto.
#@version 1.0.1 - Integracion cambio de nombre, extender fs, chequear particion activa
#@author  
#@date   2011-05-11
#@version 1.0.1 - Configura el sector de la particion y el gestor de windows para iniciarse desde cualquier particion.  
#@author Antonio J. Doblas Viso.    Universidad de Malaga.
#@date   2011-05-20
#@version 1.0.2 - Configura el sector de la particion y el gestor de linux para iniciarse desde cualquier particion.  
#@author Antonio J. Doblas Viso.    Universidad de Malaga.
#@date   2011-11-22
#@version 1.0.3 - Configura el chkdisk en el arranque de windows, segun variable OGWINCHKDISK del engine.cfg.  
#@author Antonio J. Doblas Viso.    Universidad de Malaga.
#@date   2011-12-23
#@version 1.0.4 - Inyecta el cliente para gestión del sistema operativo.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date   2012-04-11
#@version 1.0.5 - Postconfiguración para Mac OS X.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date   2013-10-11
#@version 1.0.6b - Pasar las opciones no usadas al configureOsCustom.templates 
#@author 
#@date   2016-11-03

# Carga el configurador del engine y los parámetros de red.
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
[ -f $DEVICECFG ] && source $DEVICECFG

# Si el sistema de archivos no esta extendido, ampliarlo al tamaño de su partición.
PARTSIZE=$(ogGetPartitionSize $1 $2) || exit $?
FSSIZE=$(ogGetFsSize $1 $2)
if [ $FSSIZE -lt $PARTSIZE ]; then
    echo "Extender sistema de archivos."
    ogExtendFs $1 $2
fi

# Si no existe partición activa, activar este sistema.
FLAGACTIVE=$(ogGetPartitionActive $1)
[ -z $FLAGACTIVE ] && ogSetPartitionActive $1 $2

# Si el sistema de archivos es de solo lectura, no hacer la post-configuración.
MNTDIR=$(ogMount $1 $2)
if ! ogIsWritable $1 $2; then
    echo "AVISO: sistema de archivos de solo lectura, no se ejecuta postconfiguración."
    exit
fi

# Nombre del cliente.
HOST="$(ogGetHostname)"

# Post-configuración personalizada para cada tipo de sistema operativo.
OSTYPE="$(ogGetOsType $1 $2)"
case "$OSTYPE" in 
    Windows)    # Postconfiguración de Windows.
        # Cambiar nombre en sistemas Windows.
        HOST=${HOST:-"pc"}
        ogSetWindowsName $1 $2 "$HOST"
        # Configurar el boot sector de la partición Windows.
        ogFixBootSector $1 $2
        # Configurar el gestor de arranque de Windows XP/Vista/7.
        ogWindowsBootParameters $1 $2        
        # Registrar en Windows que la partición indicada es su nueva unidad C:\
        ogWindowsRegisterPartition $1 $2 C $1 $2
        # Instalar cliente para Windows si se indica en la variable INSTALLOSCLIENT.
	if [ "${INSTALLOSCLIENT^^}" == "TRUE" ]; then
        	ogInstallMiniSetup $1 $2 postconf.cmd
        	ogInstallWindowsClient $1 $2 postconf.cmd
	fi
        ;;
    Linux)      # Postconfiguración de GNU/Linux.
         ## Instala (no configura) el codigo de arranque del Grub en la partición (no lo configura, se mantiene el original de la imagen)
        ogGrubInstallPartition $1 $2
	if [ "${INSTALLOSCLIENT^^}" == "TRUE" ]; then
        	ogInstallLinuxClient $1 $2
	fi
        ;;
    MacOS)      # Postconfiguración de Mac OS X.
        # Fichero indicador de activación de postconfiguración.
        touch $MNTDIR/osxpostconf

        # Crear fichero de configuración del servicio de arranque.
        cat << EOT >$MNTDIR/Library/LaunchDaemons/es.opengnsys.postconfd.plist
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
	<dict>
		<key>Label</key>
		<string>es.opengnsys.postconfd.sh</string>
		<key>ProgramArguments</key>
		<array>
			<string>/var/root/postconfd.sh</string>
		</array>
		<key>RunAtLoad</key>
		<true/>
		<key>StandardOutPath</key>
		<string>/var/log/postconfd.log</string>
		<key>StandardErrorPath</key>
		<string>/var/log/postconfd.err</string>
		<key>Debug</key>
		<true/>
	</dict>
</plist>
EOT

        # Programa de inicio que será ejecutado en el arranque de Mac OS X.
        cat << EOT >$MNTDIR/var/root/postconfd.sh
#!/bin/bash
# postconfd - ejecución de scripts de inicio.

# Ejecutar postconfiguración si existe el fichero indicador.
if [ -e /osxpostconf ]; then
	# Tomar nombre del equipo.
	HOST="$HOST"
	if [ -z "\$HOST" ]; then
		# Si no hay nombre asociado, activar la red para obtener datos del DHCP.
		source /etc/rc.common
		CheckForNetwork
		while [ "\$NETWORKUP" != "-YES-" ]; do
			sleep 5
			NETWORKUP=
			CheckForNetwork
		done
		# Componer nombre del equipo a partir de datos del DHCP.
		IP=\$(ifconfig en0 inet | awk '{if (\$1=="inet") print \$2}')
		HOST="mac-\$(echo \${IP//./-} | cut -f3-4 -d-)"
	fi
	# Asignar nombre del equipo.
	scutil --set ComputerName "\$HOST"
	scutil --set LocalHostName "\$HOST"
	scutil --set HostName "\$HOST"
	hostname "\$HOST"
	# Descromprimir ficheros de versión para obtener inventario de aplicaciones.
	find /Applications -type d -name "*.app" -prune -exec \
	     ditto --nopreserveHFSCompression "{}/Contents/version.plist" "{}/Contents/version.plist.uncompress"
	rm -f /osxpostconf       # Borrar fichero indicador de psotconfiguración
fi
EOT
        # Dar permiso de ejecución.
        chmod 700 $MNTDIR/var/root/postconfd.sh
        ;;
esac