source: installer/opengnsys_update.sh @ d8d86ff

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-instalacionwebconsole3
Last change on this file since d8d86ff was 57f7e9c, checked in by ramon <ramongomez@…>, 12 years ago

Versión 1.0.5, #562: Actualizador guarda el registro de operaciones en el directorio log de OpenGnSys.

git-svn-id: https://opengnsys.es/svn/branches/version1.0@3503 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100755
File size: 25.8 KB
RevLine 
[a0867b37]1#!/bin/bash
2#/**
3#@file    opengnsys_update.sh
4#@brief   Script actualización de OpenGnSys
5#@warning No se actualiza BD, ni ficheros de configuración.
6#@version 0.9 - basado en opengnsys_installer.sh
7#@author  Ramón Gómez - ETSII Univ. Sevilla
8#@date    2010/01/27
[c1e00e4]9#@version 1.0 - adaptación a OpenGnSys 1.0
10#@author  Ramón Gómez - ETSII Univ. Sevilla
11#@date    2011/03/02
[64dd765]12#@version 1.0.1 - control de auto actualización del script
13#@author  Ramón Gómez - ETSII Univ. Sevilla
14#@date    2011/05/17
[739fb00]15#@version 1.0.2a - obtiene valor de dirección IP por defecto
16#@author  Ramón Gómez - ETSII Univ. Sevilla
17#@date    2012/01/18
[1175096]18#@version 1.0.3 - Compatibilidad con Debian y auto configuración de acceso a BD.
[7bb72f7]19#@author  Ramón Gómez - ETSII Univ. Sevilla
[1175096]20#@date    2012/03/12
[db9e706]21#@version 1.0.4 - Detector de distribución y compatibilidad con CentOS.
22#@author  Ramón Gómez - ETSII Univ. Sevilla
23#@date    2012/05/04
[0b8a1f1]24#@version 1.0.5 - Actualizar BD en la misma versión.
25#@author  Ramón Gómez - ETSII Univ. Sevilla
26#@date    2012/12/14
[a0867b37]27#*/
28
29
[1175096]30####  AVISO: NO EDITAR variables de configuración.
31####  WARNING: DO NOT EDIT configuration variables.
32INSTALL_TARGET=/opt/opengnsys           # Directorio de instalación
[295b4ab]33OPENGNSYS_CLIENTUSER="opengnsys"        # Usuario Samba
34
35
[a0867b37]36# Sólo ejecutable por usuario root
[6ef01d9]37if [ "$(whoami)" != 'root' ]; then
[a0867b37]38        echo "ERROR: this program must run under root privileges!!"
39        exit 1
40fi
[4e51cb0]41# Error si OpenGnSys no está instalado (no existe el directorio del proyecto)
42if [ ! -d $INSTALL_TARGET ]; then
43        echo "ERROR: OpenGnSys is not installed, cannot update!!"
44        exit 1
45fi
[1175096]46# Cargar configuración de acceso a la base de datos.
47if [ -r $INSTALL_TARGET/etc/ogAdmServer.cfg ]; then
48        source $INSTALL_TARGET/etc/ogAdmServer.cfg
49elif [ -r $INSTALL_TARGET/etc/ogAdmAgent.cfg ]; then
50        source $INSTALL_TARGET/etc/ogAdmAgent.cfg
51fi
52OPENGNSYS_DATABASE=${OPENGNSYS_DATABASE:-"$CATALOG"}            # Base datos
53OPENGNSYS_DBUSER=${OPENGNSYS_DBUSER:-"$USUARIO"}                # Usuario de acceso
54OPENGNSYS_DBPASSWORD=${OPENGNSYS_DBPASSWORD:-"$PASSWORD"}       # Clave del usuario
55if [ -z "$OPENGNSYS_DATABASE" -o -z "$OPENGNSYS_DBUSER" -o -z "$OPENGNSYS_DBPASSWORD" ]; then
56        echo "ERROR: set OPENGNSYS_DATABASE, OPENGNSYS_DBUSER and OPENGNSYS_DBPASSWORD"
57        echo "       variables, and run this script again."
58fi
[a0867b37]59
60# Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1).
61PROGRAMDIR=$(readlink -e $(dirname "$0"))
[64dd765]62PROGRAMNAME=$(basename "$0")
[07c3a59]63OPENGNSYS_SERVER="www.opengnsys.es"
[a0867b37]64if [ -d "$PROGRAMDIR/../installer" ]; then
[6ef01d9]65        USESVN=0
[a0867b37]66else
[6ef01d9]67        USESVN=1
[a0867b37]68fi
[eb9424f]69SVN_URL="http://$OPENGNSYS_SERVER/svn/branches/version1.0/"
[a0867b37]70
71WORKDIR=/tmp/opengnsys_update
72mkdir -p $WORKDIR
73
[57f7e9c]74OGLOGFILE=$INSTALL_TARGET/log/opengnsys_installation.log
75LOG_FILE=/tmp/$(basename $OGLOGFILE)
[a0867b37]76
77
78
79#####################################################################
80####### Algunas funciones útiles de propósito general:
81#####################################################################
[295b4ab]82
[db9e706]83# Generar variables de configuración del actualizador
84# Variables globales:
[2e38f60]85# - OSDISTRIB - distribución Linux
[db9e706]86# - DEPENDENCIES - array de dependencias que deben estar instaladas
87# - UPDATEPKGLIST, INSTALLPKGS, CHECKPKG - comandos para gestión de paquetes
[2e38f60]88# - APACHECFGDIR, APACHESERV, DHCPSERV - configuración y servicios
[db9e706]89function autoConfigure()
90{
[2e38f60]91local i
92
[db9e706]93# Detectar sistema operativo del servidor (debe soportar LSB).
94OSDISTRIB=$(lsb_release -is 2>/dev/null)
95
96# Configuración según la distribución de Linux.
97case "$OSDISTRIB" in
98        Ubuntu|Debian|LinuxMint)
[badac80]99                DEPENDENCIES=( php5-ldap )
[db9e706]100                UPDATEPKGLIST="apt-get update"
101                INSTALLPKGS="apt-get -y install --force-yes"
102                CHECKPKG="dpkg -s \$package 2>/dev/null | grep -q \"Status: install ok\""
[2e38f60]103                APACHEUSER="www-data"
104                APACHEGROUP="www-data"
[db9e706]105                ;;
106        Fedora|CentOS)
[badac80]107                DEPENDENCIES=( php-ldap )
[db9e706]108                INSTALLPKGS="yum install -y"
109                CHECKPKG="rpm -q --quiet \$package"
[2a5c1a4]110                APACHEUSER="apache"
111                APACHEGROUP="apache"
[db9e706]112                ;;
[de8bbb1]113        *)      # Otras distribuciones.
[0b6304e]114                ;;
[db9e706]115esac
[2e38f60]116for i in apache2 httpd; do
117        [ -f /etc/$i ] && APACHECFGDIR="/etc/$i"
118        [ -f /etc/init.d/$i ] && APACHESERV="/etc/init.d/$i"
119done
120for i in dhcpd dhcpd3-server isc-dhcp-server; do
121        [ -f /etc/init.d/$i ] && DHCPSERV="/etc/init.d/$i"
122done
[db9e706]123}
124
125
[64dd765]126# Comprobar auto-actualización.
127function checkAutoUpdate()
128{
129        local update=0
130
131        # Actaulizar el script si ha cambiado o no existe el original.
132        if [ $USESVN -eq 1 ]; then
[7b0c6ff]133                svn export $SVN_URL/installer/$PROGRAMNAME
[d372e6e]134                if ! diff -q $PROGRAMNAME $INSTALL_TARGET/lib/$PROGRAMNAME 2>/dev/null || ! test -f $INSTALL_TARGET/lib/$PROGRAMNAME; then
[64dd765]135                        mv $PROGRAMNAME $INSTALL_TARGET/lib
136                        update=1
137                else
138                        rm -f $PROGRAMNAME
139                fi
140        else
[d372e6e]141                if ! diff -q $PROGRAMDIR/$PROGRAMNAME $INSTALL_TARGET/lib/$PROGRAMNAME 2>/dev/null || ! test -f $INSTALL_TARGET/lib/$PROGRAMNAME; then
[64dd765]142                        cp -a $PROGRAMDIR/$PROGRAMNAME $INSTALL_TARGET/lib
143                        update=1
144                fi
145        fi
146
147        return $update
148}
149
150
[a0867b37]151function getDateTime()
152{
[5eb61a6]153        date "+%Y%m%d-%H%M%S"
[a0867b37]154}
155
156# Escribe a fichero y muestra por pantalla
157function echoAndLog()
158{
[5eb61a6]159        echo $1
[6ef01d9]160        DATETIME=`getDateTime`
161        echo "$DATETIME;$SSH_CLIENT;$1" >> $LOG_FILE
[a0867b37]162}
163
164function errorAndLog()
165{
[5eb61a6]166        echo "ERROR: $1"
167        DATETIME=`getDateTime`
[6ef01d9]168        echo "$DATETIME;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE
[a0867b37]169}
170
171
172#####################################################################
173####### Funciones de copia de seguridad y restauración de ficheros
174#####################################################################
175
176# Hace un backup del fichero pasado por parámetro
177# deja un -last y uno para el día
178function backupFile()
179{
180        if [ $# -ne 1 ]; then
181                errorAndLog "${FUNCNAME}(): invalid number of parameters"
182                exit 1
183        fi
184
185        local fichero=$1
186        local fecha=`date +%Y%m%d`
187
188        if [ ! -f $fichero ]; then
189                errorAndLog "${FUNCNAME}(): file $fichero doesn't exists"
190                return 1
191        fi
192
[ebbbfc01]193        echoAndLog "${FUNCNAME}(): Making $fichero back-up"
[a0867b37]194
195        # realiza una copia de la última configuración como last
[6ef01d9]196        cp -a $fichero "${fichero}-LAST"
[a0867b37]197
198        # si para el día no hay backup lo hace, sino no
199        if [ ! -f "${fichero}-${fecha}" ]; then
[6ef01d9]200                cp -a $fichero "${fichero}-${fecha}"
[a0867b37]201        fi
202}
203
204# Restaura un fichero desde su copia de seguridad
205function restoreFile()
206{
207        if [ $# -ne 1 ]; then
208                errorAndLog "${FUNCNAME}(): invalid number of parameters"
209                exit 1
210        fi
211
212        local fichero=$1
213
[ebbbfc01]214        echoAndLog "${FUNCNAME}(): restoring file $fichero"
[a0867b37]215        if [ -f "${fichero}-LAST" ]; then
[6ef01d9]216                cp -a "$fichero-LAST" "$fichero"
[a0867b37]217        fi
218}
219
220
221#####################################################################
[295b4ab]222####### Funciones de acceso a base de datos
223#####################################################################
224
225# Actualizar la base datos
226function importSqlFile()
227{
228        if [ $# -ne 4 ]; then
229                errorAndLog "${FNCNAME}(): invalid number of parameters"
230                exit 1
231        fi
232
233        local dbuser="$1"
234        local dbpassword="$2"
235        local database="$3"
236        local sqlfile="$4"
237        local tmpfile=$(mktemp)
238        local status
239
240        if [ ! -r $sqlfile ]; then
241                errorAndLog "${FUNCNAME}(): Unable to read $sqlfile!!"
242                return 1
243        fi
244
245        echoAndLog "${FUNCNAME}(): importing SQL file to ${database}..."
246        chmod 600 $tmpfile
247        sed -e "s/SERVERIP/$SERVERIP/g" -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
248            -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" $sqlfile > $tmpfile
[e262ce7]249        mysql -u$dbuser -p"$dbpassword" --default-character-set=utf8 -D "$database" < $tmpfile
[295b4ab]250        status=$?
251        rm -f $tmpfile
252        if [ $status -ne 0 ]; then
253                errorAndLog "${FUNCNAME}(): error importing $sqlfile in database $database"
254                return 1
255        fi
256        echoAndLog "${FUNCNAME}(): file imported to database $database"
257        return 0
258}
259
260
261#####################################################################
[a0867b37]262####### Funciones de instalación de paquetes
263#####################################################################
264
265# Instalar las deependencias necesarias para el actualizador.
[64dd765]266function installDependencies()
[a0867b37]267{
[db9e706]268        local package
269
[a0867b37]270        if [ $# = 0 ]; then
271                echoAndLog "${FUNCNAME}(): no deps needed."
[c1e00e4]272        else
273                while [ $# -gt 0 ]; do
[db9e706]274                        package="$1"
275                        eval $CHECKPKG || INSTALLDEPS="$INSTALLDEPS $1"
[c1e00e4]276                        shift
277                done
278                if [ -n "$INSTALLDEPS" ]; then
[db9e706]279                        $UPDATEPKGLIST
280                        $INSTALLPKGS $INSTALLDEPS
[c1e00e4]281                        if [ $? -ne 0 ]; then
282                                errorAndLog "${FUNCNAME}(): cannot install some dependencies: $INSTALLDEPS."
283                                return 1
284                        fi
285                fi
286        fi
[a0867b37]287}
288
289
290#####################################################################
291####### Funciones para el manejo de Subversion
292#####################################################################
293
294function svnExportCode()
295{
296        if [ $# -ne 1 ]; then
297                errorAndLog "${FUNCNAME}(): invalid number of parameters"
298                exit 1
299        fi
300
[27dc5ff]301        local url="$1"
[a0867b37]302
303        echoAndLog "${FUNCNAME}(): downloading subversion code..."
304
[7ad4465]305        svn checkout "${url}" opengnsys
[a0867b37]306        if [ $? -ne 0 ]; then
307                errorAndLog "${FUNCNAME}(): error getting code from ${url}, verify your user and password"
308                return 1
309        fi
310        echoAndLog "${FUNCNAME}(): subversion code downloaded"
311        return 0
312}
313
314
315############################################################
316###  Detectar red
317############################################################
318
[07c3a59]319# Comprobar si existe conexión.
320function checkNetworkConnection()
321{
322        OPENGNSYS_SERVER=${OPENGNSYS_SERVER:-"www.opengnsys.es"}
323        wget --spider -q $OPENGNSYS_SERVER
324}
325
[739fb00]326# Obtener los parámetros de red del servidor.
327function getNetworkSettings()
328{
329        # Variables globales definidas:
330        # - SERVERIP:   IP local de la interfaz por defecto.
331
332        local DEVICES
333        local dev
334
335        echoAndLog "${FUNCNAME}(): Detecting network parameters."
336        DEVICES="$(ip -o link show up | awk '!/loopback/ {sub(/:.*/,"",$2); print $2}')"
337        for dev in $DEVICES; do
338                [ -z "$SERVERIP" ] && SERVERIP=$(ip -o addr show dev $dev | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4)}')
339        done
340}
341
[a0867b37]342
343#####################################################################
344####### Funciones específicas de la instalación de Opengnsys
345#####################################################################
346
[45f1fe8]347# Actualizar cliente OpenGnSys
[295b4ab]348function updateClientFiles()
[45f1fe8]349{
350        echoAndLog "${FUNCNAME}(): Updating OpenGnSys Client files."
351        rsync --exclude .svn -irplt $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client
352        if [ $? -ne 0 ]; then
353                errorAndLog "${FUNCNAME}(): error while updating client structure"
[51b179a]354                exit 1
[45f1fe8]355        fi
356        find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null
357       
358        echoAndLog "${FUNCNAME}(): Updating OpenGnSys Cloning Engine files."
[51b179a]359        rsync --exclude .svn -irplt $WORKDIR/opengnsys/client/engine/*.lib* $INSTALL_TARGET/client/lib/engine/bin
[45f1fe8]360        if [ $? -ne 0 ]; then
361                errorAndLog "${FUNCNAME}(): error while updating engine files"
[51b179a]362                exit 1
[45f1fe8]363        fi
364       
[51b179a]365        echoAndLog "${FUNCNAME}(): client files update success."
[45f1fe8]366}
[4e51cb0]367
[3ce53a7]368# Configurar HTTPS y exportar usuario y grupo del servicio Apache.
369function apacheConfiguration ()
[4e51cb0]370{
[2e38f60]371        # Activar HTTPS (solo actualizando desde versiones anteriores a 1.0.2).
372        if [ -e $APACHECFGDIR/sites-available/opengnsys.conf ]; then
[3ce53a7]373                echoAndLog "${FUNCNAME}(): Configuring HTTPS access..."
[2e38f60]374                mv $APACHECFGDIR/sites-available/opengnsys.conf $APACHECFGDIR/sites-available/opengnsys
[3ce53a7]375                a2ensite default-ssl
376                a2enmod ssl
[3e24aa5]377                a2dissite opengnsys.conf
[3ce53a7]378                a2ensite opengnsys
[2e38f60]379                $APACHESERV restart
[3ce53a7]380        fi
381
382        # Variables de ejecución de Apache.
[4e51cb0]383        # - APACHE_RUN_USER
384        # - APACHE_RUN_GROUP
[2e38f60]385        if [ -f $APACHECFGDIR/envvars ]; then
386                source $APACHECFGDIR/envvars
[4e51cb0]387        fi
[2e38f60]388        APACHE_RUN_USER=${APACHE_RUN_USER:-"$APACHEUSER"}
[de8bbb1]389        APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"$APACHEGROUP"}
[4e51cb0]390}
391
[a0867b37]392# Copiar ficheros del OpenGnSys Web Console.
393function updateWebFiles()
394{
[d655cc4]395        local ERRCODE
[a0867b37]396        echoAndLog "${FUNCNAME}(): Updating web files..."
[d655cc4]397        backupFile $INSTALL_TARGET/www/controlacceso.php
398        mv $INSTALL_TARGET/www $INSTALL_TARGET/WebConsole
[1db2ed8]399        rsync --exclude .svn -irplt $WORKDIR/opengnsys/admin/WebConsole $INSTALL_TARGET
[d655cc4]400        ERRCODE=$?
401        mv $INSTALL_TARGET/WebConsole $INSTALL_TARGET/www
[c1e00e4]402        unzip -o $WORKDIR/opengnsys/admin/xajax_0.5_standard.zip -d $INSTALL_TARGET/www/xajax
[d655cc4]403        if [ $ERRCODE != 0 ]; then
[a0867b37]404                errorAndLog "${FUNCNAME}(): Error updating web files."
405                exit 1
406        fi
[d655cc4]407        restoreFile $INSTALL_TARGET/www/controlacceso.php
[a0867b37]408        # Cambiar permisos para ficheros especiales.
[e6d22c6]409        chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/images/{fotos,iconos}
[a0867b37]410        echoAndLog "${FUNCNAME}(): Web files updated successfully."
411}
412
[72134d5]413# Copiar carpeta de Interface
[64dd765]414function updateInterfaceAdm()
[72134d5]415{
[27dc5ff]416        local errcode=0
[72134d5]417         
418        # Crear carpeta y copiar Interface
419        echoAndLog "${FUNCNAME}(): Copying Administration Interface Folder"
420        mv $INSTALL_TARGET/client/interfaceAdm $INSTALL_TARGET/client/Interface
421        rsync --exclude .svn -irplt $WORKDIR/opengnsys/admin/Interface $INSTALL_TARGET/client
[27dc5ff]422        errcoce=$?
[72134d5]423        mv $INSTALL_TARGET/client/Interface $INSTALL_TARGET/client/interfaceAdm
[27dc5ff]424        if [ $errcode -ne 0 ]; then
[72134d5]425                echoAndLog "${FUNCNAME}(): error while updating admin interface"
426                exit 1
427        fi
428        chmod -R +x $INSTALL_TARGET/client/interfaceAdm
[b6f1726]429        chown $OPENGNSYS_CLIENTUSER:$OPENGNSYS_CLIENTUSER $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso
[f6c1d2b]430        chmod 700 $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso
[72134d5]431        echoAndLog "${FUNCNAME}(): Admin interface updated successfully."
432}
[a0867b37]433
[5d6bf97]434# Crear documentación Doxygen para la consola web.
435function makeDoxygenFiles()
436{
437        echoAndLog "${FUNCNAME}(): Making Doxygen web files..."
438        $WORKDIR/opengnsys/installer/ogGenerateDoc.sh \
439                        $WORKDIR/opengnsys/client/engine $INSTALL_TARGET/www
440        if [ ! -d "$INSTALL_TARGET/www/html" ]; then
441                errorAndLog "${FUNCNAME}(): unable to create Doxygen web files."
442                return 1
443        fi
[45f1fe8]444        rm -fr "$INSTALL_TARGET/www/api"
[15b2a4e]445        mv "$INSTALL_TARGET/www/html" "$INSTALL_TARGET/www/api"
446        rm -fr $INSTALL_TARGET/www/{man,perlmod,rtf}
[5d6bf97]447        chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/api
448        echoAndLog "${FUNCNAME}(): Doxygen web files created successfully."
449}
450
451
[a0867b37]452# Crea la estructura base de la instalación de opengnsys
453function createDirs()
454{
[eb9424f]455        # Crear estructura de directorios.
[a0867b37]456        echoAndLog "${FUNCNAME}(): creating directory paths in ${INSTALL_TARGET}"
[7bb72f7]457        local dir
458
[cfad47b]459        mkdir -p ${INSTALL_TARGET}/{bin,doc,etc,lib,sbin,www}
460        mkdir -p ${INSTALL_TARGET}/{client,images}
[a0867b37]461        mkdir -p ${INSTALL_TARGET}/log/clients
[eb9424f]462        ln -fs ${INSTALL_TARGET}/log /var/log/opengnsys
[7bb72f7]463        # Detectar directorio de instalación de TFTP.
464        if [ ! -L ${INSTALL_TARGET}/tftpboot ]; then
465                for dir in /var/lib/tftpboot /srv/tftp; do
466                        [ -d $dir ] && ln -fs $dir ${INSTALL_TARGET}/tftpboot
467                done
468        fi
[cfad47b]469        mkdir -p ${INSTALL_TARGET}/tftpboot/{pxelinux.cfg,menu.lst}
[a0867b37]470        if [ $? -ne 0 ]; then
471                errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?"
472                return 1
473        fi
474
[eb9424f]475        # Crear usuario ficticio.
476        if id -u $OPENGNSYS_CLIENTUSER &>/dev/null; then
477                echoAndLog "${FUNCNAME}(): user \"$OPENGNSYS_CLIENTUSER\" is already created"
478        else
479                echoAndLog "${FUNCNAME}(): creating OpenGnSys user"
480                useradd $OPENGNSYS_CLIENTUSER 2>/dev/null
481                if [ $? -ne 0 ]; then
482                        errorAndLog "${FUNCNAME}(): error creating OpenGnSys user"
483                        return 1
484                fi
485        fi
486
487        # Establecer los permisos básicos.
488        echoAndLog "${FUNCNAME}(): setting directory permissions"
[cfad47b]489        chmod -R 775 $INSTALL_TARGET/{log/clients,images,tftpboot/pxelinux.cfg,tftpboot/menu.lst}
490        chown -R :$OPENGNSYS_CLIENTUSER $INSTALL_TARGET/{log/clients,images,tftpboot/pxelinux.cfg,tftpboot/menu.lst}
[eb9424f]491        if [ $? -ne 0 ]; then
492                errorAndLog "${FUNCNAME}(): error while setting permissions"
493                return 1
494        fi
495
[57f7e9c]496        # Mover el fichero de registro al directorio de logs.
497        echoAndLog "${FUNCNAME}(): moving update log file"
498        mv $LOG_FILE $OGLOGFILE && LOG_FILE=$OGLOGFILE
499
[a0867b37]500        echoAndLog "${FUNCNAME}(): directory paths created"
501        return 0
502}
503
504# Copia ficheros de configuración y ejecutables genéricos del servidor.
[64dd765]505function updateServerFiles()
[bb30a50]506{
[c1e00e4]507        # No copiar ficheros del antiguo cliente Initrd
[873cf1e]508        local SOURCES=( repoman/bin \
[c1e00e4]509                        server/bin \
[873cf1e]510                        server/tftpboot \
[bb30a50]511                        installer/opengnsys_uninstall.sh \
[a8bb7641]512                        installer/install_ticket_wolunicast.sh \
[873cf1e]513                        doc )
514        local TARGETS=( bin \
515                        bin \
516                        tftpboot \
[9a2c0f9d]517                        lib/opengnsys_uninstall.sh \
518                        lib/install_ticket_wolunicast.sh \
[873cf1e]519                        doc )
[a0867b37]520
521        if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then
522                errorAndLog "${FUNCNAME}(): inconsistent number of array items"
523                exit 1
524        fi
525
526        echoAndLog "${FUNCNAME}(): updating files in server directories"
527        pushd $WORKDIR/opengnsys >/dev/null
528        local i
529        for (( i = 0; i < ${#SOURCES[@]}; i++ )); do
[27dc5ff]530                if [ -d "$INSTALL_TARGET/${TARGETS[i]}" ]; then
[4057c5d]531                        rsync --exclude .svn -irplt "${SOURCES[i]}" $(dirname $(readlink -e "$INSTALL_TARGET/${TARGETS[i]}"))
[aa36857]532                else
[56f100f]533                        rsync -irplt "${SOURCES[i]}" $(readlink -m "$INSTALL_TARGET/${TARGETS[i]}")
[aa36857]534                fi
[a0867b37]535        done
536        popd >/dev/null
[df3cd7f]537        NEWFILES=""             # Ficheros de configuración que han cambiado de formato.
[f80f839]538        if grep -q 'pxelinux.0' /etc/dhcp*/dhcpd*.conf; then
[df3cd7f]539                echoAndLog "${FUNCNAME}(): updating DHCP files"
[f80f839]540                perl -pi -e 's/pxelinux.0/grldr/' /etc/dhcp*/dhcpd*.conf
[2e38f60]541                $DHCPSERV restart
[df3cd7f]542                NEWFILES="/etc/dhcp*/dhcpd*.conf"
543        fi
[d372e6e]544        if ! diff -q $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys 2>/dev/null; then
[df3cd7f]545                echoAndLog "${FUNCNAME}(): updating new init file"
546                backupFile /etc/init.d/opengnsys
547                cp -a $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys
548                NEWFILES="$NEWFILES /etc/init.d/opengnsys"
549        fi
[984093e]550        if grep -q "UrlMsg=.*msgbrowser.php" $INSTALL_TARGET/client/etc/ogAdmClient.cfg 2>/dev/null; then
[df3cd7f]551                echoAndLog "${FUNCNAME}(): updating new client config file"
552                backupFile $INSTALL_TARGET/client/etc/ogAdmClient.cfg
553                perl -pi -e 's!UrlMsg=.*msgbrowser\.php!UrlMsg=http://localhost/cgi-bin/httpd-log\.sh!g' $INSTALL_TARGET/client/etc/ogAdmClient.cfg
554                NEWFILES="$NEWFILES $INSTALL_TARGET/client/etc/ogAdmClient.cfg"
[f80f839]555        fi
[9ee62ad]556        echoAndLog "${FUNCNAME}(): updating cron files"
[db9e706]557        [ ! -f /etc/cron.d/opengnsys ] && echo "* * * * *   root   [ -x $INSTALL_TARGET/bin/opengnsys.cron ] && $INSTALL_TARGET/bin/opengnsys.cron" > /etc/cron.d/opengnsys
558        [ ! -f /etc/cron.d/torrentcreator ] && echo "* * * * *   root   [ -x $INSTALL_TARGET/bin/torrent-creator ] && $INSTALL_TARGET/bin/torrent-creator" > /etc/cron.d/torrentcreator
559        [ ! -f /etc/cron.d/torrenttracker ] && echo "5 * * * *   root   [ -x $INSTALL_TARGET/bin/torrent-tracker ] && $INSTALL_TARGET/bin/torrent-tracker" > /etc/cron.d/torrenttracker
[da8db11]560        echoAndLog "${FUNCNAME}(): server files updated successfully."
[a0867b37]561}
562
563####################################################################
564### Funciones de compilación de código fuente de servicios
565####################################################################
566
[bb30a50]567# Recompilar y actualiza los serivicios y clientes.
[64dd765]568function compileServices()
[a0867b37]569{
[bb30a50]570        local hayErrores=0
571
572        # Compilar OpenGnSys Server
573        echoAndLog "${FUNCNAME}(): Recompiling OpenGnSys Admin Server"
574        pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmServer
575        make && mv ogAdmServer $INSTALL_TARGET/sbin
576        if [ $? -ne 0 ]; then
577                echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Server"
578                hayErrores=1
579        fi
580        popd
581        # Compilar OpenGnSys Repository Manager
582        echoAndLog "${FUNCNAME}(): Recompiling OpenGnSys Repository Manager"
583        pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepo
584        make && mv ogAdmRepo $INSTALL_TARGET/sbin
585        if [ $? -ne 0 ]; then
586                echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Repository Manager"
587                hayErrores=1
588        fi
589        popd
590        # Compilar OpenGnSys Agent
591        echoAndLog "${FUNCNAME}(): Recompiling OpenGnSys Agent"
592        pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmAgent
593        make && mv ogAdmAgent $INSTALL_TARGET/sbin
594        if [ $? -ne 0 ]; then
595                echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Agent"
596                hayErrores=1
597        fi
598        popd
599
[a0867b37]600        # Compilar OpenGnSys Client
[bb30a50]601        echoAndLog "${FUNCNAME}(): Recompiling OpenGnSys Client"
[72134d5]602        pushd $WORKDIR/opengnsys/admin/Sources/Clients/ogAdmClient
[e473667]603        make && mv ogAdmClient $INSTALL_TARGET/client/bin
[a0867b37]604        if [ $? -ne 0 ]; then
605                echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Client"
606                hayErrores=1
607        fi
608        popd
609
610        return $hayErrores
611}
612
613
614####################################################################
[4e51cb0]615### Funciones instalacion cliente OpenGnSys
[a0867b37]616####################################################################
617
[595f397]618# Actualizar cliente OpenGnSys
[c1e00e4]619function updateClient()
620{
[df3cd7f]621        local DOWNLOADURL="http://$OPENGNSYS_SERVER/downloads"
[bad3806]622        #local FILENAME=ogLive-precise-3.2.0-23-generic-pae-r3017.iso   # 1.0.4-rc1
623        local FILENAME=ogLive-precise-3.2.0-23-generic-r3257.iso        # 1.0.4-rc2
[0b85cc93]624        local SOURCEFILE=$DOWNLOADURL/$FILENAME
625        local TARGETFILE=$INSTALL_TARGET/lib/$FILENAME
626        local SOURCELENGTH
627        local TARGETLENGTH
628        local TMPDIR=/tmp/${FILENAME%.iso}
[a63345ac]629        local OGINITRD=$INSTALL_TARGET/tftpboot/ogclient/oginitrd.img
630        local SAMBAPASS
[0b85cc93]631
632        # Comprobar si debe actualizarse el cliente.
[c3cc6b0]633        SOURCELENGTH=$(LANG=C wget --spider $SOURCEFILE 2>&1 | awk '/Length:/ {print $2}')
[d168a46]634        TARGETLENGTH=$(ls -l $TARGETFILE 2>/dev/null | awk '{print $5}')
[d4e90c1]635        [ -z $TARGETLENGTH ] && TARGETLENGTH=0
[0b85cc93]636        if [ "$SOURCELENGTH" != "$TARGETLENGTH" ]; then
637                echoAndLog "${FUNCNAME}(): Loading Client"
638                wget $DOWNLOADURL/$FILENAME -O $TARGETFILE
639                if [ ! -s $TARGETFILE ]; then
640                        errorAndLog "${FUNCNAME}(): Error loading OpenGnSys Client"
641                        return 1
642                fi
[a63345ac]643                # Obtener la clave actual de acceso a Samba para restaurarla.
644                if [ -f $OGINITRD ]; then
645                        SAMBAPASS=$(gzip -dc $OGINITRD | \
646                                    cpio -i --to-stdout scripts/ogfunctions 2>&1 | \
[c3cc6b0]647                                    grep "^[    ]*OPTIONS=" | \
[a63345ac]648                                    sed 's/\(.*\)pass=\(\w*\)\(.*\)/\2/')
649                fi
650                # Montar la imagen ISO del ogclient, actualizar ficheros y desmontar.
651                echoAndLog "${FUNCNAME}(): Updatting ogclient files"
652                mkdir -p $TMPDIR
653                mount -o loop,ro $TARGETFILE $TMPDIR
654                rsync -irlt $TMPDIR/ogclient $INSTALL_TARGET/tftpboot
655                umount $TMPDIR
656                rmdir $TMPDIR
657                # Recuperar la clave de acceso a Samba.
658                if [ -n "$SAMBAPASS" ]; then
659                        echoAndLog "${FUNCNAME}(): Restoring client access key"
660                        echo -ne "$SAMBAPASS\n$SAMBAPASS\n" | \
661                                        $INSTALL_TARGET/bin/setsmbpass
662                fi
663                # Establecer los permisos.
664                find -L $INSTALL_TARGET/tftpboot -type d -exec chmod 755 {} \;
665                find -L $INSTALL_TARGET/tftpboot -type f -exec chmod 644 {} \;
666                chown -R :$OPENGNSYS_CLIENTUSER $INSTALL_TARGET/tftpboot/ogclient
667                chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/tftpboot/{menu.lst,pxelinux.cfg}
[e1c01217]668               
[e8963d0]669                # Ofrecer md5 del kernel y vmlinuz para ogupdateinitrd en cache
[7bb72f7]670                cp -av $INSTALL_TARGET/tftpboot/ogclient/ogvmlinuz* $INSTALL_TARGET/tftpboot
671                cp -av $INSTALL_TARGET/tftpboot/ogclient/oginitrd.img* $INSTALL_TARGET/tftpboot
[e1c01217]672               
[a63345ac]673                echoAndLog "${FUNCNAME}(): Client update successfully"
[0b85cc93]674        else
[a63345ac]675                echoAndLog "${FUNCNAME}(): Client is already updated"
[c1e00e4]676        fi
677}
[a0867b37]678
[eb9424f]679# Resumen de actualización.
680function updateSummary()
681{
682        # Actualizar fichero de versión y revisión.
683        local VERSIONFILE="$INSTALL_TARGET/doc/VERSION.txt"
[57f7e9c]684        local REVISION=$(LANG=C svn info $SVN_URL|awk '/Rev:/ {print "r"$4}')
[eb9424f]685
686        [ -f $VERSIONFILE ] || echo "OpenGnSys" >$VERSIONFILE
687        perl -pi -e "s/($| r[0-9]*)/ $REVISION/" $VERSIONFILE
688
689        echo
690        echoAndLog "OpenGnSys Update Summary"
[df3cd7f]691        echo       "========================"
692        echoAndLog "Project version:                  $(cat $VERSIONFILE)"
[57f7e9c]693        echoAndLog "Update log file:                  $LOG_FILE"
[df3cd7f]694        if [ -n "$NEWFILES" ]; then
695                echoAndLog "Check the new config files:       $(echo $NEWFILES)"
696        fi
[eb9424f]697        echo
698}
699
700
[a0867b37]701
702#####################################################################
[3320409]703####### Proceso de actualización de OpenGnSys
[a0867b37]704#####################################################################
705
706
707echoAndLog "OpenGnSys update begins at $(date)"
708
[bb30a50]709pushd $WORKDIR
710
[27dc5ff]711# Comprobar si hay conexión y detectar parámetros de red por defecto.
712checkNetworkConnection
713if [ $? -ne 0 ]; then
714        errorAndLog "Error connecting to server. Causes:"
715        errorAndLog " - Network is unreachable, review devices parameters."
716        errorAndLog " - You are inside a private network, configure the proxy service."
717        errorAndLog " - Server is temporally down, try agian later."
718        exit 1
719fi
[739fb00]720getNetworkSettings
[27dc5ff]721
[64dd765]722# Comprobar auto-actualización del programa.
723if [ "$PROGRAMDIR" != "$INSTALL_TARGET/bin" ]; then
724        checkAutoUpdate
725        if [ $? -ne 0 ]; then
[f580c51]726                echoAndLog "OpenGnSys updater has been overwritten."
727                echoAndLog "Please, re-execute this script."
[64dd765]728                exit
729        fi
730fi
731
[db9e706]732# Detectar datos de auto-configuración del instalador.
733autoConfigure
734
[bb30a50]735# Instalar dependencias.
[db9e706]736installDependencies $DEPENDENCIES
[a0867b37]737if [ $? -ne 0 ]; then
738        errorAndLog "Error: you may install all needed dependencies."
739        exit 1
740fi
741
742# Arbol de directorios de OpenGnSys.
743createDirs ${INSTALL_TARGET}
744if [ $? -ne 0 ]; then
745        errorAndLog "Error while creating directory paths!"
746        exit 1
747fi
748
749# Si es necesario, descarga el repositorio de código en directorio temporal
750if [ $USESVN -eq 1 ]; then
751        svnExportCode $SVN_URL
752        if [ $? -ne 0 ]; then
753                errorAndLog "Error while getting code from svn"
754                exit 1
755        fi
756else
757        ln -fs "$(dirname $PROGRAMDIR)" opengnsys
758fi
759
[295b4ab]760# Si existe fichero de actualización de la base de datos; aplicar cambios.
761INSTVERSION=$(awk '{print $2}' $INSTALL_TARGET/doc/VERSION.txt)
762REPOVERSION=$(awk '{print $2}' $WORKDIR/opengnsys/doc/VERSION.txt)
[0b8a1f1]763if [ "$INSTVERSION" == "$REPOVERSION" ]; then
764        OPENGNSYS_DBUPDATEFILE="$WORKDIR/opengnsys/admin/Database/$OPENGNSYS_DATABASE-$INSTVERSION.sql"
765else
766        OPENGNSYS_DBUPDATEFILE="$WORKDIR/opengnsys/admin/Database/$OPENGNSYS_DATABASE-$INSTVERSION-$REPOVERSION.sql"
767fi
[295b4ab]768if [ -f $OPENGNSYS_DBUPDATEFILE ]; then
[0b8a1f1]769        echoAndLog "Updating tables from file: $(basename $OPENGNSYS_DBUPDATEFILE)"
[295b4ab]770        importSqlFile $OPENGNSYS_DBUSER $OPENGNSYS_DBPASSWORD $OPENGNSYS_DATABASE $OPENGNSYS_DBUPDATEFILE
771else
772        echoAndLog "Database unchanged."
773fi
774
775# Actualizar ficheros complementarios del servidor
[a0867b37]776updateServerFiles
777if [ $? -ne 0 ]; then
[da8db11]778        errorAndLog "Error updating OpenGnSys Server files"
[a0867b37]779        exit 1
780fi
781
[295b4ab]782# Actualizar ficheros del cliente
783updateClientFiles
784updateInterfaceAdm
[45f1fe8]785
[295b4ab]786# Actualizar páqinas web
[3ce53a7]787apacheConfiguration
[a0867b37]788updateWebFiles
789if [ $? -ne 0 ]; then
[da8db11]790        errorAndLog "Error updating OpenGnSys Web Admin files"
[a0867b37]791        exit 1
792fi
[5d6bf97]793# Generar páginas Doxygen para instalar en el web
794makeDoxygenFiles
[a0867b37]795
[bb30a50]796# Recompilar y actualizar los servicios del sistema
797compileServices
798
799# Actaulizar ficheros auxiliares del cliente
[a0867b37]800updateClient
801if [ $? -ne 0 ]; then
802        errorAndLog "Error updating clients"
803        exit 1
804fi
805
[3320409]806# Eliminamos el fichero de estado del tracker porque es incompatible entre los distintos paquetes
[ebbbfc01]807if [ -f /tmp/dstate ]; then
808        rm -f /tmp/dstate
[3320409]809fi
810
[eb9424f]811# Mostrar resumen de actualización.
812updateSummary
813
[a0867b37]814#rm -rf $WORKDIR
815echoAndLog "OpenGnSys update finished at $(date)"
816
817popd
818
Note: See TracBrowser for help on using the repository browser.