source: client/shared/scripts/configureOs @ f028c36

918-git-images-111dconfigfileconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacion
Last change on this file since f028c36 was 30238ab, checked in by Irina Gómez <irinagomez@…>, 6 years ago

#802 UEFI Windows compatibility: necessary functions for create and restore images.

  • Property mode set to 100755
File size: 7.9 KB
RevLine 
[f3850507]1#!/bin/bash
2
[7ee2d1a]3#/**
[dbe5122]4#         configureOs
[870619d]5#@brief   Script para realizar la configuracion del sistema operativo restaurado.
[7ee2d1a]6#@param 1 disco
7#@param 2 particion
[30238ab]8#@param 3 Repositorio (CACHE, REPO o dirección IP)
9#@param 4 Nombre canónico de la imagen (sin extensión)
[7ee2d1a]10#@return 
11#@TODO  comprobar que el tipo de particion corresponde con el sistema de archivos.
12#@exception OG_ERR_FORMAT     # 1 formato incorrecto.
13#@version 1.0.1 - Integracion cambio de nombre, extender fs, chequear particion activa
14#@author 
15#@date   2011-05-11
[78b5dfe7]16#@version 1.0.1 - Configura el sector de la particion y el gestor de windows para iniciarse desde cualquier particion. 
17#@author Antonio J. Doblas Viso.    Universidad de Malaga.
18#@date   2011-05-20
[ab82469]19#@version 1.0.2 - Configura el sector de la particion y el gestor de linux para iniciarse desde cualquier particion. 
20#@author Antonio J. Doblas Viso.    Universidad de Malaga.
21#@date   2011-11-22
[5ccb999]22#@version 1.0.3 - Configura el chkdisk en el arranque de windows, segun variable OGWINCHKDISK del engine.cfg. 
23#@author Antonio J. Doblas Viso.    Universidad de Malaga.
24#@date   2011-12-23
[eedf2ce]25#@version 1.0.4 - Inyecta el cliente para gestión del sistema operativo.
26#@author Ramon Gomez, ETSII Universidad de Sevilla
27#@date   2012-04-11
[4ff56c5]28#@version 1.0.5 - Postconfiguración para Mac OS X.
29#@author Ramon Gomez, ETSII Universidad de Sevilla
30#@date   2013-10-11
[f05d952]31#@version 1.1.0 - Postconfiguración para agente de sistema operativo basado en REST.
32#@author Ramon Gomez, ETSII Universidad de Sevilla
33#@date   2016-08-16
[870619d]34#@version 1.0.6b - llamadas opcionales para mejoras varias. Descomentar la instruccion para su activacion. ogConfigureFstab 
35#@author Antonio J. Doblas Viso.    Universidad de Malaga.
36#@date   2016-11-03
[30238ab]37#@version 1.1.1 - Equipos UEFI: cambia uuid de las particiones y restaura el cargador de arranque (Windows) (tickect #802)
38#@author Irina Gomez, ETSII Universidad de Sevilla
39#@date   2019-01-08
[f05d952]40#*/ ##
[78b5dfe7]41
[91c9921]42# Carga el configurador del engine y los parámetros de red.
[a4cedda]43[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
[91c9921]44[ -f $DEVICECFG ] && source $DEVICECFG
[7ee2d1a]45
[30238ab]46PROG="$(basename $0)"
47
48# Para Windows en equipos EFI son necesarios cuatro parámetros
49OSTYPE="$(ogGetOsType $1 $2)"
50if [ ogIsEfiActive -a "$OSTYPE" == "Windows" ]; then
51    if [ $# -lt 4 ]; then
52        ogRaiseError session $OG_ERR_FORMAT
53        ogHelp "$PROG:" \
54               "$PROG ndisco nparticion [ REPO|CACHE|IPSERVER ] [imagename]" \
55               "$PROG 1 1" \
56               "$PROG 1 2 REPO Windows  (UEFI)"
57        exit $OG_ERR_FORMAT
58    fi
59
60    REPO="${3^^}"
61    REPO=${REPO:-"REPO"}
62    IMGNAME="$4"
63    # Cambio de repositorio
64    if [ "$REPO" == "$(ogGetIpAddress)" -o "$REPO" == "CACHE" ]; then
65        REPO="CACHE"
66    else
67        ogCheckIpAddress "$REPO"
68        if [ $? == 0 -o "$REPO" == "REPO"  ]; then
69            # Si falla el cambio -> salimos con error repositorio no valido
70            ogChangeRepo $REPO ${OGUNIT} || exit $(ogRaiseError $OG_ERR_NOTFOUND "$REPO $OGUNIT"; echo $?)
71            REPO="REPO"
72        fi
73    fi
74fi
75
[91c9921]76# Si el sistema de archivos no esta extendido, ampliarlo al tamaño de su partición.
[7b9dedd]77PARTSIZE=$(ogGetPartitionSize $1 $2) || exit $?
[f3850507]78FSSIZE=$(ogGetFsSize $1 $2)
79if [ $FSSIZE -lt $PARTSIZE ]; then
[4ff56c5]80    echo "Extender sistema de archivos."
81    ogExtendFs $1 $2
[f3850507]82fi
83
[91c9921]84# Si no existe partición activa, activar este sistema.
[7ee2d1a]85FLAGACTIVE=$(ogGetPartitionActive $1)
86[ -z $FLAGACTIVE ] && ogSetPartitionActive $1 $2
87
[4ff56c5]88# Si el sistema de archivos es de solo lectura, no hacer la post-configuración.
89MNTDIR=$(ogMount $1 $2)
90if ! ogIsWritable $1 $2; then
91    echo "AVISO: sistema de archivos de solo lectura, no se ejecuta postconfiguración."
92    exit
93fi
94
95# Nombre del cliente.
96HOST="$(ogGetHostname)"
97
[eedf2ce]98# Post-configuración personalizada para cada tipo de sistema operativo.
99case "$OSTYPE" in
[4ff56c5]100    Windows)    # Postconfiguración de Windows.
[30238ab]101        # Si es UEFI pongo el UUID de la partición del modelo
102        if ogIsEfiActive; then
103            echo ogRestoreUuidPartitions $REPO $IMGNAME $1 $2
104            ogRestoreUuidPartitions $REPO $IMGNAME $1 $2
105        fi
[eedf2ce]106        # Cambiar nombre en sistemas Windows.
107        HOST=${HOST:-"pc"}
108        ogSetWindowsName $1 $2 "$HOST"
109        # Configurar el boot sector de la partición Windows.
110        ogFixBootSector $1 $2
111        # Configurar el gestor de arranque de Windows XP/Vista/7.
112        ogWindowsBootParameters $1 $2
113        # Registrar en Windows que la partición indicada es su nueva unidad C:\
114        ogWindowsRegisterPartition $1 $2 C $1 $2
[046004d]115        # Configurar nuevo agente OGAgent.
116        ogConfigureOgagent $1 $2
[1777170]117        # Eliminar el antiguo cliente de Windows.
118        if [ -n "$(ogGetPath $MNTDIR/windows/ogAdmWinClient.exe)$(ogGetPath $MNTDIR/winnt/ogAdmWinClient.exe)" ]; then
[31eb4dd]119            ogInstallMiniSetup $1 $2 postconf.cmd
[1777170]120            ogUninstallWindowsClient $1 $2 postconf.cmd
[31eb4dd]121        fi
[30238ab]122        # Si es UEFI copio el cargador de arranque a la partición EFI
123        if ogIsEfiActive; then
124            echo ogRestoreEfiBootLoader $1 $2
125            ogRestoreEfiBootLoader $1 $2
126        fi
[eedf2ce]127        ;;
[4ff56c5]128    Linux)      # Postconfiguración de GNU/Linux.
[39b84ff]129        # Instalamos EFI Boot Loader
130        if [ ogIsEfiActive ]; then
131            # Cambio UUID del sistema de ficheros
[30238ab]132            ogUuidChange $1 $2
[39b84ff]133            ogConfigureFstab $1 $2
134        fi
[a86a15b]135        ## Instala (no configura) el codigo de arranque del Grub en la partición (no lo configura, se mantiene el original de la imagen)
[3037c80]136        ogGrubInstallPartition $1 $2
[1777170]137        # Eliminar el antiguo cliente de Linux.
138        [ -n "$(find $MNTDIR/usr/sbin $MNTDIR/sbin $MNTDIR/usr/local/sbin -name ogAdmLnxClient -print)" ] && ogUninstallLinuxClient $1 $2
139        # Configurar nuevo agente OGAgent.
[27c67d9]140        ogConfigureOgagent $1 $2
[eedf2ce]141        ;;
[4ff56c5]142    MacOS)      # Postconfiguración de Mac OS X.
143        # Fichero indicador de activación de postconfiguración.
144        touch $MNTDIR/osxpostconf
145
146        # Crear fichero de configuración del servicio de arranque.
147        cat << EOT >$MNTDIR/Library/LaunchDaemons/es.opengnsys.postconfd.plist
148<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
149<plist version="1.0">
150        <dict>
151                <key>Label</key>
152                <string>es.opengnsys.postconfd.sh</string>
153                <key>ProgramArguments</key>
154                <array>
155                        <string>/var/root/postconfd.sh</string>
156                </array>
157                <key>RunAtLoad</key>
158                <true/>
159                <key>StandardOutPath</key>
160                <string>/var/log/postconfd.log</string>
161                <key>StandardErrorPath</key>
162                <string>/var/log/postconfd.err</string>
163                <key>Debug</key>
164                <true/>
165        </dict>
166</plist>
167EOT
168
169        # Programa de inicio que será ejecutado en el arranque de Mac OS X.
170        cat << EOT >$MNTDIR/var/root/postconfd.sh
171#!/bin/bash
172# postconfd - ejecución de scripts de inicio.
173
174# Ejecutar postconfiguración si existe el fichero indicador.
175if [ -e /osxpostconf ]; then
176        # Tomar nombre del equipo.
177        HOST="$HOST"
178        if [ -z "\$HOST" ]; then
179                # Si no hay nombre asociado, activar la red para obtener datos del DHCP.
180                source /etc/rc.common
181                CheckForNetwork
182                while [ "\$NETWORKUP" != "-YES-" ]; do
183                        sleep 5
184                        NETWORKUP=
185                        CheckForNetwork
186                done
187                # Componer nombre del equipo a partir de datos del DHCP.
188                IP=\$(ifconfig en0 inet | awk '{if (\$1=="inet") print \$2}')
189                HOST="mac-\$(echo \${IP//./-} | cut -f3-4 -d-)"
190        fi
191        # Asignar nombre del equipo.
192        scutil --set ComputerName "\$HOST"
193        scutil --set LocalHostName "\$HOST"
194        scutil --set HostName "\$HOST"
195        hostname "\$HOST"
196        # Descromprimir ficheros de versión para obtener inventario de aplicaciones.
197        find /Applications -type d -name "*.app" -prune -exec \
198             ditto --nopreserveHFSCompression "{}/Contents/version.plist" "{}/Contents/version.plist.uncompress"
[4dea2be]199        rm -f /osxpostconf    # Borrar fichero indicador de psotconfiguración
[4ff56c5]200fi
201EOT
202        # Dar permiso de ejecución.
203        chmod 700 $MNTDIR/var/root/postconfd.sh
[27c67d9]204        # Configurar nuevo agente OGAgent de sistema operativo.
205        ogConfigureOgagent $1 $2
[4ff56c5]206        ;;
[eedf2ce]207esac
[27c67d9]208exit 0
[b0ff94d]209
Note: See TracBrowser for help on using the repository browser.