summaryrefslogtreecommitdiffstats
path: root/client/shared/scripts/configureOs
blob: 2aa5288d87ac6e0967fa38d3244e0f5ed2da29cb (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
158
159
160
161
162
163
164
165
166
167
#!/bin/bash

#/**
#         configureOs
#@brief   Scirpt 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

# 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"
        # Descomentar la siguiente línea para cambiar usuario de inicio.
        #ogSetWinlogonUser $1 $2 " "
        # 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
        #ogLoadHiveWindows $1 $2; ogSetWindowsChkdisk $OGWINCHKDISK; ogUpdateHiveWindows
        # 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.
        ## Install and Configure Grub based on OS installed and Grub 1st stage location.
        ogGrubInstallPartition $1 $2
        # Instalar cliente para GNU/Linux si se indica en la variable INSTALLOSCLIENT.
	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
	### NOTA: descomentar las opciones deseadas.
	# Activar Journaling en HFS+ (no usar si el cliente continua en OpenGnsys).
	#diskutil enableJournal disk$[$1-1]s$2
	# Pedir usuario y clave en pantalla de conexión.
	#defaults write /Library/Preferences/com.apple.loginwindow SHOWFULLNAME -bool yes
	# No mostrar botón de cambio rápido de usuario.
	#defaults write /Library/Preferences/.GlobalPreferences MultipleSessionEnabled -bool NO
	# Bloquear escritorio, fondo, dock, etc del usuario "usuario".
	#chflags uchange /Users/usuario/Library/Preferences/com.apple.desktop.plist
	#chflags uchange /Users/usuario/Library/Preferences/com.apple.dock.plist
	#chflags uchange /Users/usuario/Desktop
	# Añadir usuario "usuario" a la lista de desarrolladores de Xcode.
	#DevToolsSecurity --enable
	#dscl . -append /Groups/_developer GroupMembership usuario
	# Bajar volumen (valor entre 0 y 7).
	#osascript -e 'set volume 1'
	# 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"
	# Borrar fichero indicador de psotconfiguración
	rm -f /osxpostconf
fi
EOT
        # Dar permiso de ejecución.
        chmod 700 $MNTDIR/var/root/postconfd.sh
        ;;
esac