source: installer/opengnsys_update.sh @ 8971cdf6

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 8971cdf6 was e8963d0, checked in by adv <adv@…>, 14 years ago

version 1.0.2 #449 ogupdateinitrd=true para Iniciar el ogLive desde cache. Dispone de actualización automática del kernel y el initrd

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

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