source: installer/opengnsys_installer.sh @ 04cc6bf

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 04cc6bf was e7d4fbb7, checked in by ramon <ramongomez@…>, 7 years ago

#730: Cambios menores:

  • Correcciones en comentarios.
  • Corrección al actualizar la BD.
  • Incluir curl en lista de paquetes a instalar en ogLive.
  • Volver a activar Wake-On-Lan al arrancar clientes.

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

  • Property mode set to 100755
File size: 58.2 KB
Line 
1#!/bin/bash
2
3#####################################################################
4####### Script instalador OpenGnsys
5####### Autor: Luis Guillén <lguillen@unizar.es>
6#####################################################################
7
8
9####  AVISO: Puede editar configuración de acceso por defecto.
10####  WARNING: Edit default access configuration if you wish.
11DEFAULT_MYSQL_ROOT_PASSWORD="passwordroot"      # Clave por defecto root de MySQL
12DEFAULT_OPENGNSYS_DB_USER="usuog"               # Usuario por defecto de acceso a la base de datos
13DEFAULT_OPENGNSYS_DB_PASSWD="passusuog"         # Clave por defecto de acceso a la base de datos
14DEFAULT_OPENGNSYS_CLIENT_PASSWD="og"            # Clave por defecto de acceso del cliente       
15
16# Sólo ejecutable por usuario root
17if [ "$(whoami)" != 'root' ]; then
18        echo "ERROR: this program must run under root privileges!!"
19        exit 1
20fi
21
22echo -e "\\nOpenGnsys Installation"
23echo "=============================="
24
25# Clave root de MySQL
26while : ; do
27        echo -n -e "\\nEnter root password for MySQL (${DEFAULT_MYSQL_ROOT_PASSWORD}): ";
28        read -r MYSQL_ROOT_PASSWORD
29        if [ -n "${MYSQL_ROOT_PASSWORD//[a-zA-Z0-9]/}" ]; then # Comprobamos que sea un valor alfanumerico
30                echo -e "\\aERROR: Must be alphanumeric, try again..."
31        else
32                # Si esta vacio ponemos el valor por defecto
33                MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD:-$DEFAULT_MYSQL_ROOT_PASSWORD}"
34                break
35        fi
36done
37
38# Usuario de acceso a la base de datos
39while : ; do
40        echo -n -e "\\nEnter username for OpenGnsys console (${DEFAULT_OPENGNSYS_DB_USER}): "
41        read -r OPENGNSYS_DB_USER
42        if [ -n "${OPENGNSYS_DB_USER//[a-zA-Z0-9]/}" ]; then # Comprobamos que sea un valor alfanumerico
43                echo -e "\\aERROR: Must be alphanumeric, try again..."
44        else
45                # Si esta vacio ponemos el valor por defecto
46                OPENGNSYS_DB_USER="${OPENGNSYS_DB_USER:-$DEFAULT_OPENGNSYS_DB_USER}"
47                break
48        fi
49done
50
51# Clave de acceso a la base de datos
52while : ; do
53        echo -n -e "\\nEnter password for OpenGnsys console (${DEFAULT_OPENGNSYS_DB_PASSWD}): "
54        read -r OPENGNSYS_DB_PASSWD
55        if [ -n "${OPENGNSYS_DB_PASSWD//[a-zA-Z0-9]/}" ]; then # Comprobamos que sea un valor alfanumerico
56                echo -e "\\aERROR: Must be alphanumeric, try again..."
57        else
58                # Si esta vacio ponemos el valor por defecto
59                OPENGNSYS_DB_PASSWD="${OPENGNSYS_DB_PASSWD:-$DEFAULT_OPENGNSYS_DB_PASSWD}"
60                break
61        fi
62done
63
64# Clave de acceso del cliente
65while : ; do
66        echo -n -e "\\nEnter root password for OpenGnsys client (${DEFAULT_OPENGNSYS_CLIENT_PASSWD}): "
67        read -r OPENGNSYS_CLIENT_PASSWD
68        if [ -n "${OPENGNSYS_CLIENT_PASSWD//[a-zA-Z0-9]/}" ]; then # Comprobamos que sea un valor alfanumerico
69                echo -e "\\aERROR: Must be alphanumeric, try again..."
70        else
71                # Si esta vacio ponemos el valor por defecto
72                OPENGNSYS_CLIENT_PASSWD="${OPENGNSYS_CLIENT_PASSWD:-$DEFAULT_OPENGNSYS_CLIENT_PASSWD}"
73                break
74        fi
75done
76
77# Selección de clientes ogLive para descargar.
78while : ; do
79        echo -e "\\nChoose ogLive client to install."
80        echo -e "1) Kernel 4.8, 64-bit"
81        echo -e "2) Kernel 3.2, 32-bit"
82        echo -e "3) Both"
83        echo -n -e "Please, type a valid number (1): "
84        read -r OPT
85        case "$OPT" in
86                1|"")   OGLIVE="ogLive-xenial-4.8.0-39-generic-amd64-r5331.iso"
87                        break ;;
88                2)      OGLIVE="ogLive-precise-3.2.0-23-generic-r5159.iso"
89                        break ;;
90                3)      OGLIVE="ogLive-xenial-4.8.0-39-generic-amd64-r5331.iso ogLive-precise-3.2.0-23-generic-r5159.iso";
91                        break ;;
92                *)      echo -e "\\aERROR: unknown option, try again."
93        esac
94done
95
96echo -e "\\n=============================="
97
98# Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1).
99PROGRAMDIR=$(readlink -e "$(dirname "$0")")
100PROGRAMNAME=$(basename "$0")
101OPENGNSYS_SERVER="opengnsys.es"
102DOWNLOADURL="https://$OPENGNSYS_SERVER/trac/downloads"
103if [ -d "$PROGRAMDIR/../installer" ]; then
104        USESVN=0
105else
106        USESVN=1
107fi
108SVN_URL="https://$OPENGNSYS_SERVER/svn/branches/version1.1/"
109
110WORKDIR=/tmp/opengnsys_installer
111mkdir -p $WORKDIR
112
113# Directorio destino de OpenGnsys.
114INSTALL_TARGET=/opt/opengnsys
115PATH=$PATH:$INSTALL_TARGET/bin
116
117# Registro de incidencias.
118OGLOGFILE=$INSTALL_TARGET/log/${PROGRAMNAME%.sh}.log
119LOG_FILE=/tmp/$(basename $OGLOGFILE)
120
121# Usuario del cliente para acceso remoto.
122OPENGNSYS_CLIENT_USER="opengnsys"
123
124# Nombre de la base datos y fichero SQL para su creación.
125OPENGNSYS_DATABASE="ogAdmBD"
126OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/${OPENGNSYS_DATABASE}.sql
127
128
129#####################################################################
130####### Funciones de configuración
131#####################################################################
132
133# Generar variables de configuración del instalador
134# Variables globales:
135# - OSDISTRIB, OSVERSION - tipo y versión de la distribución GNU/Linux
136# - DEPENDENCIES - array de dependencias que deben estar instaladas
137# - UPDATEPKGLIST, INSTALLPKGS, CHECKPKGS - comandos para gestión de paquetes
138# - INSTALLEXTRADEPS - instalar dependencias no incluidas en la distribución
139# - STARTSERVICE, ENABLESERVICE - iniciar y habilitar un servicio
140# - STOPSERVICE, DISABLESERVICE - parar y deshabilitar un servicio
141# - APACHESERV, APACHECFGDIR, APACHESITESDIR, APACHEUSER, APACHEGROUP - servicio y configuración de Apache
142# - APACHESSLMOD, APACHEENABLESSL, APACHEMAKECERT - habilitar módulo Apache y certificado SSL
143# - APACHEENABLEOG, APACHEOGSITE, - habilitar sitio web de OpenGnsys
144# - INETDSERV - servicio Inetd
145# - FIREWALLSERV - servicio de cortabuegos IPTables/FirewallD
146# - DHCPSERV, DHCPCFGDIR - servicio y configuración de DHCP
147# - MYSQLSERV, TMPMYCNF - servicio MySQL y fichero temporal con credenciales de acceso
148# - MARIADBSERV - servicio MariaDB (sustituto de MySQL en algunas distribuciones)
149# - RSYNCSERV, RSYNCCFGDIR - servicio y configuración de Rsync
150# - SAMBASERV, SAMBACFGDIR - servicio y configuración de Samba
151# - TFTPSERV, TFTPCFGDIR - servicio y configuración de TFTP/PXE
152function autoConfigure()
153{
154# Detectar sistema operativo del servidor (compatible con fichero os-release y con LSB).
155if [ -f /etc/os-release ]; then
156        source /etc/os-release
157        OSDISTRIB="$ID"
158        OSVERSION="$VERSION_ID"
159else
160        OSDISTRIB=$(lsb_release -is 2>/dev/null)
161        OSVERSION=$(lsb_release -rs 2>/dev/null)
162fi
163# Convertir distribución a minúsculas y obtener solo el 1er número de versión.
164OSDISTRIB="${OSDISTRIB,,}"
165OSVERSION="${OSVERSION%%.*}"
166
167# Configuración según la distribución GNU/Linux (usar minúsculas).
168case "$OSDISTRIB" in
169        ubuntu|debian|linuxmint)
170                DEPENDENCIES=( subversion apache2 php5 php5-ldap libapache2-mod-php5 mysql-server php5-mysql isc-dhcp-server bittorrent tftp-hpa tftpd-hpa xinetd build-essential g++-multilib libmysqlclient15-dev wget curl doxygen graphviz bittornado ctorrent samba rsync unzip netpipes debootstrap schroot squashfs-tools btrfs-tools procps arp-scan realpath php5-curl gettext moreutils jq wakeonlan )
171                UPDATEPKGLIST="apt-get update"
172                INSTALLPKG="apt-get -y install --force-yes"
173                CHECKPKG="dpkg -s \$package 2>/dev/null | grep Status | grep -qw install"
174                if which service &>/dev/null; then
175                        STARTSERVICE="eval service \$service restart"
176                        STOPSERVICE="eval service \$service stop"
177                else
178                        STARTSERVICE="eval /etc/init.d/\$service restart"
179                        STOPSERVICE="eval /etc/init.d/\$service stop"
180                fi
181                ENABLESERVICE="eval update-rc.d \$service defaults"
182                DISABLESERVICE="eval update-rc.d \$service disable"
183                APACHESERV=apache2
184                APACHECFGDIR=/etc/apache2
185                APACHESITESDIR=sites-available
186                APACHEOGSITE=opengnsys
187                APACHEUSER="www-data"
188                APACHEGROUP="www-data"
189                APACHESSLMOD="a2enmod ssl"
190                APACHEREWRITEMOD="a2enmod rewrite"
191                APACHEENABLESSL="a2ensite default-ssl"
192                APACHEENABLEOG="a2ensite $APACHEOGSITE"
193                APACHEMAKECERT="make-ssl-cert generate-default-snakeoil --force-overwrite"
194                DHCPSERV=isc-dhcp-server
195                DHCPCFGDIR=/etc/dhcp
196                INETDSERV=xinetd
197                INETDCFGDIR=/etc/xinetd.d
198                MYSQLSERV=mysql
199                MARIADBSERV=mariadb
200                RSYNCSERV=rsync
201                RSYNCCFGDIR=/etc
202                SAMBASERV=smbd
203                SAMBACFGDIR=/etc/samba
204                TFTPCFGDIR=/var/lib/tftpboot
205                ;;
206        fedora|centos)
207                DEPENDENCIES=( subversion httpd mod_ssl php php-ldap mysql-server mysql-devel mysql-devel.i686 php-mysql dhcp tftp-server tftp xinetd binutils gcc gcc-c++ glibc-devel glibc-devel.i686 glibc-static glibc-static.i686 libstdc++-devel.i686 make wget curl doxygen graphviz ctorrent samba samba-client rsync unzip debootstrap schroot squashfs-tools python-crypto arp-scan procps-ng gettext moreutils jq net-tools http://ftp.altlinux.org/pub/distributions/ALTLinux/5.1/branch/$(arch)/RPMS.classic/netpipes-4.2-alt1.$(arch).rpm )
208                INSTALLEXTRADEPS=( 'pushd /tmp; wget -t3 http://download.bittornado.com/download/BitTornado-0.3.18.tar.gz && tar xvzf BitTornado-0.3.18.tar.gz && cd BitTornado-CVS && python setup.py install && ln -fs btlaunchmany.py /usr/bin/btlaunchmany && ln -fs bttrack.py /usr/bin/bttrack; popd' )
209                INSTALLPKG="yum install -y libstdc++ libstdc++.i686"
210                CHECKPKG="rpm -q --quiet \$package"
211                SYSTEMD=$(which systemctl 2>/dev/null)
212                if [ -n "$SYSTEMD" ]; then
213                        STARTSERVICE="eval systemctl start \$service.service"
214                        STOPSERVICE="eval systemctl stop \$service.service"
215                        ENABLESERVICE="eval systemctl enable \$service.service"
216                        DISABLESERVICE="eval systemctl disable \$service.service"
217                else
218                        STARTSERVICE="eval service \$service start"
219                        STOPSERVICE="eval service \$service stop"
220                        ENABLESERVICE="eval chkconfig \$service on"
221                        DISABLESERVICE="eval chkconfig \$service off"
222                fi
223                APACHESERV=httpd
224                APACHECFGDIR=/etc/httpd/conf.d
225                APACHEOGSITE=opengnsys.conf
226                APACHEUSER="apache"
227                APACHEGROUP="apache"
228                APACHEREWRITEMOD="sed -i '/rewrite/s/^#//' $APACHECFGDIR/../*.conf"
229                DHCPSERV=dhcpd
230                DHCPCFGDIR=/etc/dhcp
231                if firewall-cmd --state &>/dev/null; then
232                        FIREWALLSERV=firewalld
233                else
234                        FIREWALLSERV=iptables
235                fi
236                INETDSERV=xinetd
237                INETDCFGDIR=/etc/xinetd.d
238                MYSQLSERV=mysqld
239                MARIADBSERV=mariadb
240                RSYNCSERV=rsync
241                RSYNCCFGDIR=/etc
242                SAMBASERV=smb
243                SAMBACFGDIR=/etc/samba
244                TFTPSERV=tftp
245                TFTPCFGDIR=/var/lib/tftpboot
246                ;;
247        "")     echo "ERROR: Unknown Linux distribution, please install \"lsb_release\" command."
248                exit 1 ;;
249        *)      echo "ERROR: Distribution not supported by OpenGnsys."
250                exit 1 ;;
251esac
252
253# Fichero de credenciales de acceso a MySQL.
254TMPMYCNF=/tmp/.my.cnf.$$
255}
256
257
258# Modificar variables de configuración tras instalar paquetes del sistema.
259function autoConfigurePost()
260{
261local f
262
263# Configuraciones específicas para Samba y TFTP en Debian 6.
264[ -z "$SYSTEMD" -a ! -e /etc/init.d/$SAMBASERV ] && SAMBASERV=samba
265[ ! -e $TFTPCFGDIR ] && TFTPCFGDIR=/srv/tftp
266
267# Configuraciones específicas para SELinux permisivo en distintas versiones.
268[ -f /selinux/enforce ] && echo 0 > /selinux/enforce
269for f in /etc/sysconfig/selinux /etc/selinux/config; do
270        [ -f $f ] && perl -pi -e 's/SELINUX=enforcing/SELINUX=permissive/g' $f
271done
272selinuxenabled 2>/dev/null && setenforce 0 2>/dev/null
273}
274
275
276# Cargar lista de paquetes del sistema y actualizar algunas variables de configuración
277# dependiendo de la versión instalada.
278function updatePackageList()
279{
280local DHCPVERSION PHP5VERSION
281
282# Si es necesario, actualizar la lista de paquetes disponibles.
283[ -n "$UPDATEPKGLIST" ] && eval $UPDATEPKGLIST
284
285# Configuración personallizada de algunos paquetes.
286case "$OSDISTRIB" in
287        ubuntu|linuxmint)       # Postconfiguación personalizada para Ubuntu.
288                # Configuración para DHCP v3.
289                DHCPVERSION=$(apt-cache show $(apt-cache pkgnames|egrep "dhcp.?-server$") | \
290                              awk '/Version/ {print substr($2,1,1);}' | \
291                              sort -n | tail -1)
292                if [ $DHCPVERSION = 3 ]; then
293                        DEPENDENCIES=( ${DEPENDENCIES[@]/isc-dhcp-server/dhcp3-server} )
294                        DHCPSERV=dhcp3-server
295                        DHCPCFGDIR=/etc/dhcp3
296                fi
297                # Configuración para PHP 5 en Ubuntu 16.x+.
298                if [ -z "$(apt-cache pkgnames php5)" ]; then
299                        eval $INSTALLPKG software-properties-common
300                        add-apt-repository -y ppa:ondrej/php
301                        eval $UPDATEPKGLIST
302                fi
303                PHP5VERSION=$(apt-cache pkgnames php5 | sort | head -1)
304                DEPENDENCIES=( ${DEPENDENCIES[@]//php5/$PHP5VERSION} )
305                # Dependencias correctas para libmysqlclient.
306                [ -z "$(apt-cache pkgnames libmysqlclient15)" ] && DEPENDENCIES=( ${DEPENDENCIES[@]//libmysqlclient15/libmysqlclient} )
307                ;;
308        centos) # Postconfiguación personalizada para CentOS.
309                # Configuración para PHP 5.
310                if ! yum list php5\*w &>/dev/null; then
311                        if [ $OSVERSION -ge 7 ]; then
312                                yum install -y https://mirror.webtatic.com/yum/el$OSVERSION/webtatic-release.rpm
313                        else
314                                yum install -y https://mirror.webtatic.com/yum/el$OSVERSION/latest.rpm
315                        fi
316                        PHP5VERSION=$(yum list -q php5\*w | awk -F. '/^php/ {p=$1} END {print p}')
317                        DEPENDENCIES=( ${DEPENDENCIES[@]//php/$PHP5VERSION} )
318                fi
319                # Cambios a aplicar a partir de CentOS 7.
320                if [ $OSVERSION -ge 7 ]; then
321                        # Sustituir MySQL por MariaDB.
322                        DEPENDENCIES=( ${DEPENDENCIES[*]/mysql-/mariadb-} )
323                        # Instalar ctorrent de EPEL para CentOS 6 (no disponible en CentOS 7).
324                        DEPENDENCIES=( ${DEPENDENCIES[*]/ctorrent/http://dl.fedoraproject.org/pub/epel/6/$(arch)/Packages/c/ctorrent-1.3.4-14.dnh3.3.2.el6.$(arch).rpm} )
325                fi
326                ;;
327        fedora) # Postconfiguación personalizada para Fedora.
328                # Incluir paquetes específicos.
329                DEPENDENCIES=( ${DEPENDENCIES[@]} btrfs-progs )
330                # Sustituir MySQL por MariaDB a partir de Fedora 20.
331                [ $OSVERSION -ge 20 ] && DEPENDENCIES=( ${DEPENDENCIES[*]/mysql-/mariadb-} )
332                ;;
333esac
334}
335
336
337#####################################################################
338####### Algunas funciones útiles de propósito general:
339#####################################################################
340
341function getDateTime()
342{
343        date "+%Y%m%d-%H%M%S"
344}
345
346# Escribe a fichero y muestra por pantalla
347function echoAndLog()
348{
349        local DATETIME=`getDateTime`
350        echo "$1"
351        echo "$DATETIME;$SSH_CLIENT;$1" >> $LOG_FILE
352}
353
354# Escribe a fichero y muestra mensaje de error
355function errorAndLog()
356{
357        local DATETIME=`getDateTime`
358        echo "ERROR: $1"
359        echo "$DATETIME;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE
360}
361
362# Escribe a fichero y muestra mensaje de aviso
363function warningAndLog()
364{
365        local DATETIME=`getDateTime`
366        echo "Warning: $1"
367        echo "$DATETIME;$SSH_CLIENT;Warning: $1" >> $LOG_FILE
368}
369
370# Comprueba si el elemento pasado en $2 está en el array $1
371function isInArray()
372{
373        if [ $# -ne 2 ]; then
374                errorAndLog "${FUNCNAME}(): invalid number of parameters"
375                exit 1
376        fi
377
378        local deps
379        local is_in_array=1
380        local element="$2"
381
382        echoAndLog "${FUNCNAME}(): checking if $2 is in $1"
383        eval "deps=( \"\${$1[@]}\" )"
384
385        # Copia local del array del parámetro 1.
386        for (( i = 0 ; i < ${#deps[@]} ; i++ )); do
387                if [ "${deps[$i]}" = "${element}" ]; then
388                        echoAndLog "isInArray(): $element found in array"
389                        is_in_array=0
390                fi
391        done
392
393        if [ $is_in_array -ne 0 ]; then
394                echoAndLog "${FUNCNAME}(): $element NOT found in array"
395        fi
396
397        return $is_in_array
398}
399
400
401#####################################################################
402####### Funciones de manejo de paquetes Debian
403#####################################################################
404
405function checkPackage()
406{
407        package=$1
408        if [ -z $package ]; then
409                errorAndLog "${FUNCNAME}(): parameter required"
410                exit 1
411        fi
412        echoAndLog "${FUNCNAME}(): checking if package $package exists"
413        eval $CHECKPKG
414        if [ $? -eq 0 ]; then
415                echoAndLog "${FUNCNAME}(): package $package exists"
416                return 0
417        else
418                echoAndLog "${FUNCNAME}(): package $package doesn't exists"
419                return 1
420        fi
421}
422
423# Recibe array con dependencias
424# por referencia deja un array con las dependencias no resueltas
425# devuelve 1 si hay alguna dependencia no resuelta
426function checkDependencies()
427{
428        if [ $# -ne 2 ]; then
429                errorAndLog "${FUNCNAME}(): invalid number of parameters"
430                exit 1
431        fi
432
433        echoAndLog "${FUNCNAME}(): checking dependences"
434        uncompletedeps=0
435
436        # copia local del array del parametro 1
437        local deps
438        eval "deps=( \"\${$1[@]}\" )"
439
440        declare -a local_notinstalled
441
442        for (( i = 0 ; i < ${#deps[@]} ; i++ ))
443        do
444                checkPackage ${deps[$i]}
445                if [ $? -ne 0 ]; then
446                        local_notinstalled[$uncompletedeps]=$package
447                        let uncompletedeps=uncompletedeps+1
448                fi
449        done
450
451        # relleno el array especificado en $2 por referencia
452        for (( i = 0 ; i < ${#local_notinstalled[@]} ; i++ ))
453        do
454                eval "${2}[$i]=${local_notinstalled[$i]}"
455        done
456
457        # retorna el numero de paquetes no resueltos
458        echoAndLog "${FUNCNAME}(): dependencies uncompleted: $uncompletedeps"
459        return $uncompletedeps
460}
461
462# Recibe un array con las dependencias y lo instala
463function installDependencies()
464{
465        if [ $# -ne 1 ]; then
466                errorAndLog "${FUNCNAME}(): invalid number of parameters"
467                exit 1
468        fi
469        echoAndLog "${FUNCNAME}(): installing uncompleted dependencies"
470
471        # copia local del array del parametro 1
472        local deps
473        eval "deps=( \"\${$1[@]}\" )"
474
475        local string_deps=""
476        for (( i = 0 ; i < ${#deps[@]} ; i++ ))
477        do
478                string_deps="$string_deps ${deps[$i]}"
479        done
480
481        if [ -z "${string_deps}" ]; then
482                errorAndLog "${FUNCNAME}(): array of dependeces is empty"
483                exit 1
484        fi
485
486        OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND            # Debian/Ubuntu
487        export DEBIAN_FRONTEND=noninteractive
488
489        echoAndLog "${FUNCNAME}(): now $string_deps will be installed"
490        eval $INSTALLPKG $string_deps
491        if [ $? -ne 0 ]; then
492                errorAndLog "${FUNCNAME}(): error installing dependencies"
493                return 1
494        fi
495
496        DEBIAN_FRONTEND=$OLD_DEBIAN_FRONTEND            # Debian/Ubuntu
497        test grep -q "EPEL temporal" /etc/yum.repos.d/epel.repo 2>/dev/null || mv -f /etc/yum.repos.d/epel.repo.rpmnew /etc/yum.repos.d/epel.repo 2>/dev/null   # CentOS/RedHat EPEL
498
499        echoAndLog "${FUNCNAME}(): dependencies installed"
500}
501
502# Hace un backup del fichero pasado por parámetro
503# deja un -last y uno para el día
504function backupFile()
505{
506        if [ $# -ne 1 ]; then
507                errorAndLog "${FUNCNAME}(): invalid number of parameters"
508                exit 1
509        fi
510
511        local file="$1"
512        local dateymd=`date +%Y%m%d`
513
514        if [ ! -f "$file" ]; then
515                warningAndLog "${FUNCNAME}(): file $file doesn't exists"
516                return 1
517        fi
518
519        echoAndLog "${FUNCNAME}(): making $file backup"
520
521        # realiza una copia de la última configuración como last
522        cp -a "$file" "${file}-LAST"
523
524        # si para el día no hay backup lo hace, sino no
525        if [ ! -f "${file}-${dateymd}" ]; then
526                cp -a "$file" "${file}-${dateymd}"
527        fi
528
529        echoAndLog "${FUNCNAME}(): $file backup success"
530}
531
532#####################################################################
533####### Funciones para el manejo de bases de datos
534#####################################################################
535
536# This function set password to root
537function mysqlSetRootPassword()
538{
539        if [ $# -ne 1 ]; then
540                errorAndLog "${FUNCNAME}(): invalid number of parameters"
541                exit 1
542        fi
543
544        local root_mysql="$1"
545        echoAndLog "${FUNCNAME}(): setting root password in MySQL server"
546        mysqladmin -u root password "$root_mysql"
547        if [ $? -ne 0 ]; then
548                errorAndLog "${FUNCNAME}(): error while setting root password in MySQL server"
549                return 1
550        fi
551        echoAndLog "${FUNCNAME}(): root password saved!"
552        return 0
553}
554
555# Si el servicio mysql esta ya instalado cambia la variable de la clave del root por la ya existente
556function mysqlGetRootPassword()
557{
558        local pass_mysql
559        local pass_mysql2
560        # Comprobar si MySQL está instalado con la clave de root por defecto.
561        if mysql -u root -p"$MYSQL_ROOT_PASSWORD" <<<"quit" 2>/dev/null; then
562                echoAndLog "${FUNCNAME}(): Using default mysql root password."
563        else
564                stty -echo
565                echo "There is a MySQL service already installed."
566                read -p "Enter MySQL root password: " pass_mysql
567                echo ""
568                read -p "Confrim password:" pass_mysql2
569                echo ""
570                stty echo
571                if [ "$pass_mysql" == "$pass_mysql2" ] ;then
572                        MYSQL_ROOT_PASSWORD="$pass_mysql"
573                        return 0
574                else
575                        echo "The keys don't match. Do not configure the server's key,"
576                        echo "transactions in the database will give error."
577                        return 1
578                fi
579        fi
580}
581
582# comprueba si puede conectar con mysql con el usuario root
583function mysqlTestConnection()
584{
585        if [ $# -ne 1 ]; then
586                errorAndLog "${FUNCNAME}(): invalid number of parameters"
587                exit 1
588        fi
589
590        local root_password="$1"
591        echoAndLog "${FUNCNAME}(): checking connection to mysql..."
592        # Componer fichero con credenciales de conexión a MySQL.
593        touch $TMPMYCNF
594        chmod 600 $TMPMYCNF
595        cat << EOT > $TMPMYCNF
596[client]
597user=root
598password=$root_password
599EOT
600        # Borrar el fichero temporal si termina el proceso de instalación.
601        trap "rm -f $TMPMYCNF" 0 1 2 3 6 9 15
602        # Comprobar conexión a MySQL.
603        echo "" | mysql --defaults-extra-file=$TMPMYCNF
604        if [ $? -ne 0 ]; then
605                errorAndLog "${FUNCNAME}(): connection to mysql failed, check root password and if daemon is running!"
606                return 1
607        else
608                echoAndLog "${FUNCNAME}(): connection success"
609                return 0
610        fi
611}
612
613# comprueba si la base de datos existe
614function mysqlDbExists()
615{
616        if [ $# -ne 1 ]; then
617                errorAndLog "${FUNCNAME}(): invalid number of parameters"
618                exit 1
619        fi
620
621        local database="$1"
622        echoAndLog "${FUNCNAME}(): checking if $database exists..."
623        echo "show databases" | mysql --defaults-extra-file=$TMPMYCNF | grep "^${database}$"
624        if [ $? -ne 0 ]; then
625                echoAndLog "${FUNCNAME}():database $database doesn't exists"
626                return 1
627        else
628                echoAndLog "${FUNCNAME}():database $database exists"
629                return 0
630        fi
631}
632
633# Comprueba si la base de datos está vacía.
634function mysqlCheckDbIsEmpty()
635{
636        if [ $# -ne 1 ]; then
637                errorAndLog "${FUNCNAME}(): invalid number of parameters"
638                exit 1
639        fi
640
641        local database="$1"
642        echoAndLog "${FUNCNAME}(): checking if $database is empty..."
643        num_tablas=`echo "show tables" | mysql --defaults-extra-file=$TMPMYCNF "${database}" | wc -l`
644        if [ $? -ne 0 ]; then
645                errorAndLog "${FUNCNAME}(): error executing query, check database and root password"
646                exit 1
647        fi
648
649        if [ $num_tablas -eq 0 ]; then
650                echoAndLog "${FUNCNAME}():database $database is empty"
651                return 0
652        else
653                echoAndLog "${FUNCNAME}():database $database has tables"
654                return 1
655        fi
656
657}
658
659# Importa un fichero SQL en la base de datos.
660# Parámetros:
661# - 1: nombre de la BD.
662# - 2: fichero a importar.
663# Nota: el fichero SQL puede contener las siguientes palabras reservadas:
664# - SERVERIP: se sustituye por la dirección IP del servidor.
665# - DBUSER: se sustituye por usuario de conexión a la BD definido en este script.
666# - DBPASSWD: se sustituye por la clave de conexión a la BD definida en este script.
667function mysqlImportSqlFileToDb()
668{
669        if [ $# -ne 2 ]; then
670                errorAndLog "${FNCNAME}(): invalid number of parameters"
671                exit 1
672        fi
673
674        local database="$1"
675        local sqlfile="$2"
676        local tmpfile=$(mktemp)
677        local i=0
678        local dev=""
679        local status
680        # Claves aleatorias para acceso a las APIs REST.
681        local OPENGNSYS_APIKEY=$(php -r 'echo md5(uniqid(rand(), true));')
682        OPENGNSYS_REPOKEY=$(php -r 'echo md5(uniqid(rand(), true));')
683
684        if [ ! -f $sqlfile ]; then
685                errorAndLog "${FUNCNAME}(): Unable to locate $sqlfile!!"
686                return 1
687        fi
688
689        echoAndLog "${FUNCNAME}(): importing SQL file to ${database}..."
690        chmod 600 $tmpfile
691        for dev in ${DEVICE[*]}; do
692                if [ "${DEVICE[i]}" == "$DEFAULTDEV" ]; then
693                        sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
694                            -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
695                            -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" \
696                            -e "s/APIKEY/$OPENGNSYS_APIKEY/g" \
697                            -e "s/REPOKEY/$OPENGNSYS_REPOKEY/g" \
698                                $sqlfile > $tmpfile
699                fi
700                let i++
701        done
702        mysql --defaults-extra-file=$TMPMYCNF --default-character-set=utf8 "${database}" < $tmpfile
703        status=$?
704        rm -f $tmpfile
705        if [ $status -ne 0 ]; then
706                errorAndLog "${FUNCNAME}(): error while importing $sqlfile in database $database"
707                return 1
708        fi
709        echoAndLog "${FUNCNAME}(): file imported to database $database"
710        return 0
711}
712
713# Crea la base de datos
714function mysqlCreateDb()
715{
716        if [ $# -ne 1 ]; then
717                errorAndLog "${FUNCNAME}(): invalid number of parameters"
718                exit 1
719        fi
720
721        local database="$1"
722
723        echoAndLog "${FUNCNAME}(): creating database..."
724        mysqladmin --defaults-extra-file=$TMPMYCNF create $database
725        if [ $? -ne 0 ]; then
726                errorAndLog "${FUNCNAME}(): error while creating database $database"
727                return 1
728        fi
729        # Quitar modo ONLY_FULL_GROUP_BY de MySQL (ticket #730).
730        mysql --defaults-extra-file=$TMPMYCNF -e "SET GLOBAL sql_mode=(SELECT TRIM(BOTH ',' FROM REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')));"
731
732        echoAndLog "${FUNCNAME}(): database $database created"
733        return 0
734}
735
736# Comprueba si ya está definido el usuario de acceso a la BD.
737function mysqlCheckUserExists()
738{
739        if [ $# -ne 1 ]; then
740                errorAndLog "${FUNCNAME}(): invalid number of parameters"
741                exit 1
742        fi
743
744        local userdb="$1"
745
746        echoAndLog "${FUNCNAME}(): checking if $userdb exists..."
747        echo "select user from user where user='${userdb}'\\G" |mysql --defaults-extra-file=$TMPMYCNF mysql | grep user
748        if [ $? -ne 0 ]; then
749                echoAndLog "${FUNCNAME}(): user doesn't exists"
750                return 1
751        else
752                echoAndLog "${FUNCNAME}(): user already exists"
753                return 0
754        fi
755
756}
757
758# Crea un usuario administrativo para la base de datos
759function mysqlCreateAdminUserToDb()
760{
761        if [ $# -ne 3 ]; then
762                errorAndLog "${FUNCNAME}(): invalid number of parameters"
763                exit 1
764        fi
765
766        local database="$1"
767        local userdb="$2"
768        local passdb="$3"
769
770        echoAndLog "${FUNCNAME}(): creating admin user ${userdb} to database ${database}"
771
772        cat > $WORKDIR/create_${database}.sql <<EOF
773GRANT USAGE ON *.* TO '${userdb}'@'localhost' IDENTIFIED BY '${passdb}' ;
774GRANT ALL PRIVILEGES ON ${database}.* TO '${userdb}'@'localhost' WITH GRANT OPTION ;
775FLUSH PRIVILEGES ;
776EOF
777        mysql --defaults-extra-file=$TMPMYCNF < $WORKDIR/create_${database}.sql
778        if [ $? -ne 0 ]; then
779                errorAndLog "${FUNCNAME}(): error while creating user in mysql"
780                rm -f $WORKDIR/create_${database}.sql
781                return 1
782        else
783                echoAndLog "${FUNCNAME}(): user created ok"
784                rm -f $WORKDIR/create_${database}.sql
785                return 0
786        fi
787}
788
789
790#####################################################################
791####### Funciones para el manejo de Subversion
792#####################################################################
793
794# Obtiene el código fuente del proyecto desde el servidor SVN.
795function svnExportCode()
796{
797        if [ $# -ne 1 ]; then
798                errorAndLog "${FUNCNAME}(): invalid number of parameters"
799                exit 1
800        fi
801
802        local url="$1"
803
804        echoAndLog "${FUNCNAME}(): downloading subversion code..."
805
806        svn export --force "$url" opengnsys
807        if [ $? -ne 0 ]; then
808                errorAndLog "${FUNCNAME}(): error getting OpenGnsys code from $url"
809                return 1
810        fi
811        echoAndLog "${FUNCNAME}(): subversion code downloaded"
812        return 0
813}
814
815
816############################################################
817###  Detectar red
818############################################################
819
820# Comprobar si existe conexión.
821function checkNetworkConnection()
822{
823        echoAndLog "${FUNCNAME}(): Disabling Firewall: $FIREWALLSERV."
824        if [ -n "$FIREWALLSERV" ]; then
825                service=$FIREWALLSERV
826                $STOPSERVICE; $DISABLESERVICE
827        fi
828
829        echoAndLog "${FUNCNAME}(): Checking OpenGnsys server conectivity."
830        OPENGNSYS_SERVER=${OPENGNSYS_SERVER:-"opengnsys.es"}
831        if which wget &>/dev/null; then
832                wget --spider -q $OPENGNSYS_SERVER
833        elif which curl &>/dev/null; then
834                curl --connect-timeout 10 -s $OPENGNSYS_SERVER -o /dev/null
835        else
836                echoAndLog "${FUNCNAME}(): Cannot execute \"wget\" nor \"curl\"."
837                return 1
838        fi
839}
840
841# Convierte nº de bits (notación CIDR) en máscara de red (gracias a FriedZombie en openwrt.org).
842cidr2mask ()
843{
844        # Number of args to shift, 255..255, first non-255 byte, zeroes
845        set -- $[ 5 - ($1 / 8) ] 255 255 255 255 $[ (255 << (8 - ($1 % 8))) & 255 ] 0 0 0
846        [ $1 -gt 1 ] && shift $1 || shift
847        echo ${1-0}.${2-0}.${3-0}.${4-0}
848}
849
850# Obtener los parámetros de red de la interfaz por defecto.
851function getNetworkSettings()
852{
853        # Arrays globales definidas:
854        # - DEVICE:     nombres de dispositivos de red activos.
855        # - SERVERIP:   IPs locales del servidor.
856        # - NETIP:      IPs de redes.
857        # - NETMASK:    máscaras de red.
858        # - NETBROAD:   IPs de difusión de redes.
859        # - ROUTERIP:   IPs de routers.
860        # Otras variables globales:
861        # - DEFAULTDEV: dispositivo de red por defecto.
862        # - DNSIP:      IP del servidor DNS principal.
863
864        local i=0
865        local dev=""
866
867        echoAndLog "${FUNCNAME}(): Detecting network parameters."
868        DEVICE=( $(ip -o link show up | awk '!/loopback/ {sub(/:.*/,"",$2); print $2}') )
869        if [ -z "$DEVICE" ]; then
870                errorAndLog "${FUNCNAME}(): Network devices not detected."
871                exit 1
872        fi
873        for dev in ${DEVICE[*]}; do
874                SERVERIP[i]=$(ip -o addr show dev "$dev" | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4)}')
875                if [ -n "${SERVERIP[i]}" ]; then
876                        NETMASK[i]=$( cidr2mask $(ip -o addr show dev "$dev" | awk '$3~/inet$/ {sub (/.*\//, "", $4); print ($4)}') )
877                        NETBROAD[i]=$(ip -o addr show dev "$dev" | awk '$3~/inet$/ {print ($6)}')
878                        NETIP[i]=$(ip route | awk -v d="$dev" '$3==d && /src/ {sub (/\/.*/,""); print $1}')
879                        ROUTERIP[i]=$(ip route | awk -v d="$dev" '$1=="default" && $5==d {print $3}')
880                        DEFAULTDEV=${DEFAULTDEV:-"$dev"}
881                fi
882                let i++
883        done
884        DNSIP=$(awk '/nameserver/ {print $2}' /etc/resolv.conf | head -n1)
885        if [ -z "${NETIP[*]}" -o -z "${NETMASK[*]}" ]; then
886                errorAndLog "${FUNCNAME}(): Network not detected."
887                exit 1
888        fi
889
890        # Variables de ejecución de Apache
891        # - APACHE_RUN_USER
892        # - APACHE_RUN_GROUP
893        if [ -f $APACHECFGDIR/envvars ]; then
894                source $APACHECFGDIR/envvars
895        fi
896        APACHE_RUN_USER=${APACHE_RUN_USER:-"$APACHEUSER"}
897        APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"$APACHEGROUP"}
898
899        echoAndLog "${FUNCNAME}(): Default network device: $DEFAULTDEV."
900}
901
902
903############################################################
904### Esqueleto para el Servicio pxe y contenedor tftpboot ###
905############################################################
906
907function tftpConfigure()
908{
909        echoAndLog "${FUNCNAME}(): Configuring TFTP service."
910        # Habilitar TFTP y reiniciar Inetd.
911        if [ -n "$TFTPSERV" ]; then
912                if [ -f $INETDCFGDIR/$TFTPSERV ]; then
913                        perl -pi -e 's/disable.*/disable = no/' $INETDCFGDIR/$TFTPSERV
914                else
915                        service=$TFTPSERV
916                        $ENABLESERVICE; $STARTSERVICE
917                fi
918        fi
919        service=$INETDSERV
920        $ENABLESERVICE; $STARTSERVICE
921
922        # comprobamos el servicio tftp
923        sleep 1
924        testPxe
925}
926
927# Comprueba que haya conexión al servicio TFTP/PXE.
928function testPxe ()
929{
930        echoAndLog "${FUNCNAME}(): Checking TFTP service... please wait."
931        echo "test" >$TFTPCFGDIR/testpxe
932        tftp -v 127.0.0.1 -c get testpxe /tmp/testpxe && echoAndLog "TFTP service is OK." || errorAndLog "TFTP service is down."
933        rm -f $TFTPCFGDIR/testpxe /tmp/testpxe
934}
935
936
937########################################################################
938## Configuración servicio Samba
939########################################################################
940
941# Configurar servicios Samba.
942function smbConfigure()
943{
944        echoAndLog "${FUNCNAME}(): Configuring Samba service."
945
946        backupFile $SAMBACFGDIR/smb.conf
947       
948        # Copiar plantailla de recursos para OpenGnsys
949        sed -e "s/OPENGNSYSDIR/${INSTALL_TARGET//\//\\/}/g" \
950                $WORKDIR/opengnsys/server/etc/smb-og.conf.tmpl > $SAMBACFGDIR/smb-og.conf
951        # Configurar y recargar Samba"
952        perl -pi -e "s/WORKGROUP/OPENGNSYS/; s/server string \=.*/server string \= OpenGnsys Samba Server/" $SAMBACFGDIR/smb.conf
953        if ! grep -q "smb-og" $SAMBACFGDIR/smb.conf; then
954                echo "include = $SAMBACFGDIR/smb-og.conf" >> $SAMBACFGDIR/smb.conf
955        fi
956        service=$SAMBASERV
957        $ENABLESERVICE; $STARTSERVICE
958        if [ $? -ne 0 ]; then
959                errorAndLog "${FUNCNAME}(): error while configure Samba"
960                return 1
961        fi
962        # Crear clave para usuario de acceso a los recursos.
963        echo -ne "$OPENGNSYS_CLIENT_PASSWD\n$OPENGNSYS_CLIENT_PASSWD\n" | smbpasswd -a -s $OPENGNSYS_CLIENT_USER
964
965        echoAndLog "${FUNCNAME}(): Added Samba configuration."
966        return 0
967}
968
969
970########################################################################
971## Configuración servicio Rsync
972########################################################################
973
974# Configurar servicio Rsync.
975function rsyncConfigure()
976{
977        echoAndLog "${FUNCNAME}(): Configuring Rsync service."
978
979        backupFile $RSYNCCFGDIR/rsyncd.conf
980
981        # Configurar acceso a Rsync.
982        sed -e "s/CLIENTUSER/$OPENGNSYS_CLIENT_USER/g" \
983                $WORKDIR/opengnsys/repoman/etc/rsyncd.conf.tmpl > $RSYNCCFGDIR/rsyncd.conf
984        sed -e "s/CLIENTUSER/$OPENGNSYS_CLIENT_USER/g" \
985            -e "s/CLIENTPASSWORD/$OPENGNSYS_CLIENT_PASSWD/g" \
986                $WORKDIR/opengnsys/repoman/etc/rsyncd.secrets.tmpl > $RSYNCCFGDIR/rsyncd.secrets
987        chown root.root $RSYNCCFGDIR/rsyncd.secrets
988        chmod 600 $RSYNCCFGDIR/rsyncd.secrets
989
990        # Habilitar Rsync y reiniciar Inetd.
991        if [ -n "$RSYNCSERV" ]; then
992                if [ -f /etc/default/rsync ]; then
993                        perl -pi -e 's/RSYNC_ENABLE=.*/RSYNC_ENABLE=inetd/' /etc/default/rsync
994                fi
995                if [ -f $INETDCFGDIR/rsync ]; then
996                        perl -pi -e 's/disable.*/disable = no/' $INETDCFGDIR/rsync
997                else
998                        cat << EOT > $INETDCFGDIR/rsync
999service rsync
1000{
1001        disable = no
1002        socket_type = stream
1003        wait = no
1004        user = root
1005        server = $(which rsync)
1006        server_args = --daemon
1007        log_on_failure += USERID
1008        flags = IPv6
1009}
1010EOT
1011                fi
1012                service=$RSYNCSERV $ENABLESERVICE
1013                service=$INETDSERV $STARTSERVICE
1014        fi
1015
1016        echoAndLog "${FUNCNAME}(): Added Rsync configuration."
1017        return 0
1018}
1019
1020       
1021########################################################################
1022## Configuración servicio DHCP
1023########################################################################
1024
1025# Configurar servicios DHCP.
1026function dhcpConfigure()
1027{
1028        echoAndLog "${FUNCNAME}(): Sample DHCP configuration."
1029
1030        local errcode=0
1031        local i=0
1032        local dev=""
1033
1034        backupFile $DHCPCFGDIR/dhcpd.conf
1035        for dev in ${DEVICE[*]}; do
1036                if [ -n "${SERVERIP[i]}" ]; then
1037                        backupFile $DHCPCFGDIR/dhcpd-$dev.conf
1038                        sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
1039                            -e "s/NETIP/${NETIP[i]}/g" \
1040                            -e "s/NETMASK/${NETMASK[i]}/g" \
1041                            -e "s/NETBROAD/${NETBROAD[i]}/g" \
1042                            -e "s/ROUTERIP/${ROUTERIP[i]}/g" \
1043                            -e "s/DNSIP/$DNSIP/g" \
1044                            $WORKDIR/opengnsys/server/etc/dhcpd.conf.tmpl > $DHCPCFGDIR/dhcpd-$dev.conf || errcode=1
1045                fi
1046                let i++
1047        done
1048        if [ $errcode -ne 0 ]; then
1049                errorAndLog "${FUNCNAME}(): error while configuring DHCP server"
1050                return 1
1051        fi
1052        ln -f $DHCPCFGDIR/dhcpd-$DEFAULTDEV.conf $DHCPCFGDIR/dhcpd.conf
1053        service=$DHCPSERV
1054        $ENABLESERVICE; $STARTSERVICE
1055        echoAndLog "${FUNCNAME}(): Sample DHCP configured in \"$DHCPCFGDIR\"."
1056        return 0
1057}
1058
1059
1060#####################################################################
1061####### Funciones específicas de la instalación de Opengnsys
1062#####################################################################
1063
1064# Copiar ficheros del OpenGnsys Web Console.
1065function installWebFiles()
1066{
1067        local COMPATDIR f
1068        local XAJAXFILE="xajax_0.5_standard.zip"
1069        local SLIMFILE="slim-2.6.1.zip"
1070        local SWAGGERFILE="swagger-ui-2.2.5.zip"
1071
1072        echoAndLog "${FUNCNAME}(): Installing web files..."
1073        # Copiar ficheros.
1074        cp -a $WORKDIR/opengnsys/admin/WebConsole/* $INSTALL_TARGET/www   #*/ comentario para Doxygen.
1075        if [ $? != 0 ]; then
1076                errorAndLog "${FUNCNAME}(): Error copying web files."
1077                exit 1
1078        fi
1079        find $INSTALL_TARGET/www -name .svn -type d -exec rm -fr {} \; 2>/dev/null
1080
1081        # Descomprimir librerías: XAJAX, Slim y Swagger-UI.
1082        unzip -o $WORKDIR/opengnsys/admin/$XAJAXFILE -d $INSTALL_TARGET/www/xajax
1083        unzip -o $WORKDIR/opengnsys/admin/$SLIMFILE -d $INSTALL_TARGET/www/rest
1084        unzip -o $WORKDIR/opengnsys/admin/$SWAGGERFILE -d $INSTALL_TARGET/www/rest
1085
1086        # Compatibilidad con dispositivos móviles.
1087        COMPATDIR="$INSTALL_TARGET/www/principal"
1088        for f in acciones administracion aula aulas hardwares imagenes menus repositorios softwares; do
1089                sed 's/clickcontextualnodo/clicksupnodo/g' $COMPATDIR/$f.php > $COMPATDIR/$f.device.php
1090        done
1091        cp -a $COMPATDIR/imagenes.device.php $COMPATDIR/imagenes.device4.php
1092        # Cambiar permisos para ficheros especiales.
1093        chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/images/{fotos,iconos}
1094        chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/tmp/
1095        # Ficheros de log de la API REST.
1096        touch $INSTALL_TARGET/log/{ogagent,remotepc,rest}.log
1097        chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/log/{ogagent,remotepc,rest}.log
1098
1099        echoAndLog "${FUNCNAME}(): Web files installed successfully."
1100}
1101
1102# Copiar ficheros en la zona de descargas de OpenGnsys Web Console.
1103function installDownloadableFiles()
1104{
1105        local FILENAME=ogagentpkgs-$INSTVERSION.tar.gz
1106        local TARGETFILE=$WORKDIR/$FILENAME
1107 
1108        # Descargar archivo comprimido, si es necesario.
1109        if [ -s $PROGRAMDIR/$FILENAME ]; then
1110                echoAndLog "${FUNCNAME}(): Moving $PROGRAMDIR/$FILENAME file to $(dirname $TARGETFILE)"
1111                mv $PROGRAMDIR/$FILENAME $TARGETFILE
1112        else
1113                echoAndLog "${FUNCNAME}(): Downloading $FILENAME"
1114                curl $DOWNLOADURL/$FILENAME -o $TARGETFILE
1115        fi
1116        if [ ! -s $TARGETFILE ]; then
1117                errorAndLog "${FUNCNAME}(): Cannot download $FILENAME"
1118                return 1
1119        fi
1120       
1121        # Descomprimir fichero en zona de descargas.
1122        tar xvzf $TARGETFILE -C $INSTALL_TARGET/www/descargas
1123        if [ $? != 0 ]; then
1124                errorAndLog "${FUNCNAME}(): Error uncompressing archive."
1125                exit 1
1126        fi
1127}
1128
1129# Configuración específica de Apache.
1130function installWebConsoleApacheConf()
1131{
1132        if [ $# -ne 2 ]; then
1133                errorAndLog "${FUNCNAME}(): invalid number of parameters"
1134                exit 1
1135        fi
1136
1137        local path_opengnsys_base="$1"
1138        local path_apache2_confd="$2"
1139        local CONSOLEDIR=${path_opengnsys_base}/www
1140
1141        if [ ! -d $path_apache2_confd ]; then
1142                errorAndLog "${FUNCNAME}(): path to apache2 conf.d can not found, verify your server installation"
1143                return 1
1144        fi
1145
1146        mkdir -p $path_apache2_confd/{sites-available,sites-enabled}
1147
1148        echoAndLog "${FUNCNAME}(): creating apache2 config file.."
1149
1150        # Activar HTTPS.
1151        $APACHESSLMOD
1152        $APACHEENABLESSL
1153        $APACHEMAKECERT
1154        # Activar módulo Rewrite.
1155        $APACHEREWRITEMOD
1156        # Genera configuración de consola web a partir del fichero plantilla.
1157        if [ -n "$(apachectl -v | grep "2\.[0-2]")" ]; then
1158                # Configuración para versiones anteriores de Apache.
1159                sed -e "s,CONSOLEDIR,$CONSOLEDIR,g" \
1160                        $WORKDIR/opengnsys/server/etc/apache-prev2.4.conf.tmpl > $path_apache2_confd/$APACHESITESDIR/${APACHEOGSITE}
1161        else
1162                # Configuración específica a partir de Apache 2.4
1163                sed -e "s,CONSOLEDIR,$CONSOLEDIR,g" \
1164                        $WORKDIR/opengnsys/server/etc/apache.conf.tmpl > $path_apache2_confd/$APACHESITESDIR/${APACHEOGSITE}.conf
1165        fi
1166        $APACHEENABLEOG
1167        if [ $? -ne 0 ]; then
1168                errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation"
1169                return 1
1170        fi
1171        echoAndLog "${FUNCNAME}(): config file created and linked, restarting apache daemon"
1172        service=$APACHESERV
1173        $ENABLESERVICE; $STARTSERVICE
1174        return 0
1175}
1176
1177
1178# Crear documentación Doxygen para la consola web.
1179function makeDoxygenFiles()
1180{
1181        echoAndLog "${FUNCNAME}(): Making Doxygen web files..."
1182        $WORKDIR/opengnsys/installer/ogGenerateDoc.sh \
1183                        $WORKDIR/opengnsys/client/engine $INSTALL_TARGET/www
1184        if [ ! -d "$INSTALL_TARGET/www/html" ]; then
1185                errorAndLog "${FUNCNAME}(): unable to create Doxygen web files."
1186                return 1
1187        fi
1188        mv "$INSTALL_TARGET/www/html" "$INSTALL_TARGET/www/api"
1189        chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/api
1190        echoAndLog "${FUNCNAME}(): Doxygen web files created successfully."
1191}
1192
1193
1194# Crea la estructura base de la instalación de opengnsys
1195function createDirs()
1196{
1197        if [ $# -ne 1 ]; then
1198                errorAndLog "${FUNCNAME}(): invalid number of parameters"
1199                exit 1
1200        fi
1201
1202        local path_opengnsys_base="$1"
1203
1204        # Crear estructura de directorios.
1205        echoAndLog "${FUNCNAME}(): creating directory paths in $path_opengnsys_base"
1206        mkdir -p $path_opengnsys_base
1207        mkdir -p $path_opengnsys_base/bin
1208        mkdir -p $path_opengnsys_base/client
1209        mkdir -p $path_opengnsys_base/doc
1210        mkdir -p $path_opengnsys_base/etc
1211        mkdir -p $path_opengnsys_base/lib
1212        mkdir -p $path_opengnsys_base/log/clients
1213        ln -fs $path_opengnsys_base/log /var/log/opengnsys
1214        mkdir -p $path_opengnsys_base/sbin
1215        mkdir -p $path_opengnsys_base/www
1216        mkdir -p $path_opengnsys_base/images/groups
1217        mkdir -p $TFTPCFGDIR
1218        ln -fs $TFTPCFGDIR $path_opengnsys_base/tftpboot
1219        mkdir -p $path_opengnsys_base/tftpboot/menu.lst
1220        if [ $? -ne 0 ]; then
1221                errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?"
1222                return 1
1223        fi
1224
1225        # Crear usuario ficticio.
1226        if id -u $OPENGNSYS_CLIENT_USER &>/dev/null; then
1227                echoAndLog "${FUNCNAME}(): user \"$OPENGNSYS_CLIENT_USER\" is already created"
1228        else
1229                echoAndLog "${FUNCNAME}(): creating OpenGnsys user"
1230                useradd $OPENGNSYS_CLIENT_USER 2>/dev/null
1231                if [ $? -ne 0 ]; then
1232                        errorAndLog "${FUNCNAME}(): error creating OpenGnsys user"
1233                        return 1
1234                fi
1235        fi
1236
1237        # Establecer los permisos básicos.
1238        echoAndLog "${FUNCNAME}(): setting directory permissions"
1239        chmod -R 775 $path_opengnsys_base/{log/clients,images}
1240        chown -R :$OPENGNSYS_CLIENT_USER $path_opengnsys_base/{log/clients,images}
1241        if [ $? -ne 0 ]; then
1242                errorAndLog "${FUNCNAME}(): error while setting permissions"
1243                return 1
1244        fi
1245
1246        # Mover el fichero de registro de instalación al directorio de logs.
1247        echoAndLog "${FUNCNAME}(): moving installation log file"
1248        mv $LOG_FILE $OGLOGFILE && LOG_FILE=$OGLOGFILE
1249        chmod 600 $LOG_FILE
1250
1251        echoAndLog "${FUNCNAME}(): directory paths created"
1252        return 0
1253}
1254
1255# Copia ficheros de configuración y ejecutables genéricos del servidor.
1256function copyServerFiles ()
1257{
1258        if [ $# -ne 1 ]; then
1259                errorAndLog "${FUNCNAME}(): invalid number of parameters"
1260                exit 1
1261        fi
1262
1263        local path_opengnsys_base="$1"
1264
1265        # Lista de ficheros y directorios origen y de directorios destino.
1266        local SOURCES=( server/tftpboot \
1267                        server/bin \
1268                        repoman/bin \
1269                        server/lib \
1270                        admin/Sources/Services/ogAdmServerAux
1271                        admin/Sources/Services/ogAdmRepoAux
1272                        installer/opengnsys_uninstall.sh \
1273                        installer/opengnsys_update.sh \
1274                        installer/opengnsys_export.sh \
1275                        installer/opengnsys_import.sh \
1276                        doc )
1277        local TARGETS=( tftpboot \
1278                        bin \
1279                        bin \
1280                        lib \
1281                        sbin \
1282                        sbin \
1283                        lib \
1284                        lib \
1285                        lib \
1286                        lib \
1287                        doc )
1288
1289        if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then
1290                errorAndLog "${FUNCNAME}(): inconsistent number of array items"
1291                exit 1
1292        fi
1293
1294        # Copiar ficheros.
1295        echoAndLog "${FUNCNAME}(): copying files to server directories"
1296
1297        pushd $WORKDIR/opengnsys
1298        local i
1299        for (( i = 0; i < ${#SOURCES[@]}; i++ )); do
1300                if [ -f "${SOURCES[$i]}" ]; then
1301                        echoAndLog "Copying ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
1302                        cp -a "${SOURCES[$i]}" "${path_opengnsys_base}/${TARGETS[$i]}"
1303                elif [ -d "${SOURCES[$i]}" ]; then
1304                        echoAndLog "Copying content of ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
1305                        cp -a "${SOURCES[$i]}"/* "${path_opengnsys_base}/${TARGETS[$i]}"
1306        else
1307                        warningAndLog "Unable to copy ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
1308                fi
1309        done
1310
1311        popd
1312}
1313
1314####################################################################
1315### Funciones de compilación de código fuente de servicios
1316####################################################################
1317
1318# Compilar los servicios de OpenGnsys
1319function servicesCompilation ()
1320{
1321        local hayErrores=0
1322
1323        # Compilar OpenGnsys Server
1324        echoAndLog "${FUNCNAME}(): Compiling OpenGnsys Admin Server"
1325        pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmServer
1326        make && mv ogAdmServer $INSTALL_TARGET/sbin
1327        if [ $? -ne 0 ]; then
1328                echoAndLog "${FUNCNAME}(): error while compiling OpenGnsys Admin Server"
1329                hayErrores=1
1330        fi
1331        popd
1332        # Compilar OpenGnsys Repository Manager
1333        echoAndLog "${FUNCNAME}(): Compiling OpenGnsys Repository Manager"
1334        pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepo
1335        make && mv ogAdmRepo $INSTALL_TARGET/sbin
1336        if [ $? -ne 0 ]; then
1337                echoAndLog "${FUNCNAME}(): error while compiling OpenGnsys Repository Manager"
1338                hayErrores=1
1339        fi
1340        popd
1341        # Compilar OpenGnsys Agent
1342        echoAndLog "${FUNCNAME}(): Compiling OpenGnsys Agent"
1343        pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmAgent
1344        make && mv ogAdmAgent $INSTALL_TARGET/sbin
1345        if [ $? -ne 0 ]; then
1346                echoAndLog "${FUNCNAME}(): error while compiling OpenGnsys Agent"
1347                hayErrores=1
1348        fi
1349        popd   
1350        # Compilar OpenGnsys Client
1351        echoAndLog "${FUNCNAME}(): Compiling OpenGnsys Admin Client"
1352        pushd $WORKDIR/opengnsys/admin/Sources/Clients/ogAdmClient
1353        make && mv ogAdmClient ../../../../client/shared/bin
1354        if [ $? -ne 0 ]; then
1355                echoAndLog "${FUNCNAME}(): error while compiling OpenGnsys Admin Client"
1356                hayErrores=1
1357        fi
1358        popd
1359
1360        return $hayErrores
1361}
1362
1363####################################################################
1364### Funciones de copia de la Interface de administración
1365####################################################################
1366
1367# Copiar carpeta de Interface
1368function copyInterfaceAdm ()
1369{
1370        local hayErrores=0
1371       
1372        # Crear carpeta y copiar Interface
1373        echoAndLog "${FUNCNAME}(): Copying Administration Interface Folder"
1374        cp -ar $WORKDIR/opengnsys/admin/Interface $INSTALL_TARGET/client/interfaceAdm
1375        if [ $? -ne 0 ]; then
1376                echoAndLog "${FUNCNAME}(): error while copying Administration Interface Folder"
1377                hayErrores=1
1378        fi
1379        chown $OPENGNSYS_CLIENT_USER:$OPENGNSYS_CLIENT_USER $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso
1380        chmod 700 $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso
1381
1382        return $hayErrores
1383}
1384
1385####################################################################
1386### Funciones instalacion cliente opengnsys
1387####################################################################
1388
1389function copyClientFiles()
1390{
1391        local errstatus=0
1392
1393        echoAndLog "${FUNCNAME}(): Copying OpenGnsys Client files."
1394        cp -a $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client
1395        if [ $? -ne 0 ]; then
1396                errorAndLog "${FUNCNAME}(): error while copying client estructure"
1397                errstatus=1
1398        fi
1399        find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null
1400       
1401        echoAndLog "${FUNCNAME}(): Copying OpenGnsys Cloning Engine files."
1402        mkdir -p $INSTALL_TARGET/client/lib/engine/bin
1403        cp -a $WORKDIR/opengnsys/client/engine/*.lib* $INSTALL_TARGET/client/lib/engine/bin
1404        if [ $? -ne 0 ]; then
1405                errorAndLog "${FUNCNAME}(): error while copying engine files"
1406                errstatus=1
1407        fi
1408       
1409        if [ $errstatus -eq 0 ]; then
1410                echoAndLog "${FUNCNAME}(): client copy files success."
1411        else
1412                errorAndLog "${FUNCNAME}(): client copy files with errors"
1413        fi
1414
1415        return $errstatus
1416}
1417
1418
1419# Crear cliente OpenGnsys.
1420function clientCreate()
1421{
1422        if [ $# -ne 1 ]; then
1423                errorAndLog "${FUNCNAME}(): invalid number of parameters"
1424                exit 1
1425        fi
1426
1427        local FILENAME="$1"
1428        local TARGETFILE=$INSTALL_TARGET/lib/$FILENAME
1429 
1430        # Descargar cliente, si es necesario.
1431        if [ -s $PROGRAMDIR/$FILENAME ]; then
1432                echoAndLog "${FUNCNAME}(): Moving $PROGRAMDIR/$FILENAME file to $(dirname $TARGETFILE)"
1433                mv $PROGRAMDIR/$FILENAME $TARGETFILE
1434        else
1435                echoAndLog "${FUNCNAME}(): Downloading $FILENAME"
1436                oglivecli download $FILENAME
1437        fi
1438        if [ ! -s $TARGETFILE ]; then
1439                errorAndLog "${FUNCNAME}(): Error loading $FILENAME"
1440                return 1
1441        fi
1442
1443        # Montar imagen, copiar cliente ogclient y desmontar.
1444        echoAndLog "${FUNCNAME}(): Installing ogLive Client"
1445        echo -ne "$OPENGNSYS_CLIENT_PASSWD\n$OPENGNSYS_CLIENT_PASSWD\n" | \
1446                        oglivecli install $FILENAME
1447        # Adaptar permisos.
1448        chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/tftpboot/menu.lst
1449
1450        echoAndLog "${FUNCNAME}(): Client generation success"
1451}
1452
1453
1454# Configuración básica de servicios de OpenGnsys
1455function openGnsysConfigure()
1456{
1457        local i=0
1458        local dev=""
1459        local CONSOLEURL
1460
1461        echoAndLog "${FUNCNAME}(): Copying init files."
1462        cp -a $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys
1463        cp -a $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.default /etc/default/opengnsys
1464        # Deshabilitar servicios de BitTorrent si no están instalados.
1465        if [ ! -e /usr/bin/bttrack ]; then
1466                sed -i 's/RUN_BTTRACKER="yes"/RUN_BTTRACKER="no"/; s/RUN_BTSEEDER="yes"/RUN_BTSEEDER="no"/' \
1467                        /etc/default/opengnsys
1468        fi
1469        echoAndLog "${FUNCNAME}(): Creating cron files."
1470        echo "* * * * *   root   [ -x $INSTALL_TARGET/bin/opengnsys.cron ] && $INSTALL_TARGET/bin/opengnsys.cron" > /etc/cron.d/opengnsys
1471        echo "* * * * *   root   [ -x $INSTALL_TARGET/bin/torrent-creator ] && $INSTALL_TARGET/bin/torrent-creator" > /etc/cron.d/torrentcreator
1472        echo "5 * * * *   root   [ -x $INSTALL_TARGET/bin/torrent-tracker ] && $INSTALL_TARGET/bin/torrent-tracker" > /etc/cron.d/torrenttracker
1473        echo "* * * * *   root   [ -x $INSTALL_TARGET/bin/deletepreimage ] && $INSTALL_TARGET/bin/deletepreimage" > /etc/cron.d/imagedelete
1474        echo "* * * * *   root   [ -x $INSTALL_TARGET/bin/ogagentqueue.cron ] && $INSTALL_TARGET/bin/ogagentqueue.cron" > /etc/cron.d/ogagentqueue
1475
1476        echoAndLog "${FUNCNAME}(): Creating logrotate configuration file."
1477        sed -e "s/OPENGNSYSDIR/${INSTALL_TARGET//\//\\/}/g" \
1478                $WORKDIR/opengnsys/server/etc/logrotate.tmpl > /etc/logrotate.d/opengnsys
1479
1480        echoAndLog "${FUNCNAME}(): Creating OpenGnsys config files."
1481        for dev in ${DEVICE[*]}; do
1482                if [ -n "${SERVERIP[i]}" ]; then
1483                        sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
1484                            -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
1485                            -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" \
1486                            -e "s/DATABASE/$OPENGNSYS_DATABASE/g" \
1487                                $WORKDIR/opengnsys/admin/Sources/Services/ogAdmServer/ogAdmServer.cfg > $INSTALL_TARGET/etc/ogAdmServer-$dev.cfg
1488                        sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
1489                            -e "s/REPOKEY/$OPENGNSYS_REPOKEY/g" \
1490                                $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepo/ogAdmRepo.cfg > $INSTALL_TARGET/etc/ogAdmRepo-$dev.cfg
1491                        sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
1492                            -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
1493                            -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" \
1494                            -e "s/DATABASE/$OPENGNSYS_DATABASE/g" \
1495                                $WORKDIR/opengnsys/admin/Sources/Services/ogAdmAgent/ogAdmAgent.cfg > $INSTALL_TARGET/etc/ogAdmAgent-$dev.cfg
1496                        CONSOLEURL="https://${SERVERIP[i]}/opengnsys"
1497                        sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
1498                            -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
1499                            -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" \
1500                            -e "s/DATABASE/$OPENGNSYS_DATABASE/g" \
1501                            -e "s/OPENGNSYSURL/${CONSOLEURL//\//\\/}/g" \
1502                                $INSTALL_TARGET/www/controlacceso.php > $INSTALL_TARGET/www/controlacceso-$dev.php
1503                        sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
1504                            -e "s/OPENGNSYSURL/${CONSOLEURL//\//\\/}/g" \
1505                                $WORKDIR/opengnsys/admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient-$dev.cfg
1506                        if [ "$dev" == "$DEFAULTDEV" ]; then
1507                                OPENGNSYS_CONSOLEURL="$CONSOLEURL"
1508                        fi
1509                fi
1510                let i++
1511        done
1512        ln -f $INSTALL_TARGET/etc/ogAdmServer-$DEFAULTDEV.cfg $INSTALL_TARGET/etc/ogAdmServer.cfg
1513        ln -f $INSTALL_TARGET/etc/ogAdmRepo-$DEFAULTDEV.cfg $INSTALL_TARGET/etc/ogAdmRepo.cfg
1514        ln -f $INSTALL_TARGET/etc/ogAdmAgent-$DEFAULTDEV.cfg $INSTALL_TARGET/etc/ogAdmAgent.cfg
1515        ln -f $INSTALL_TARGET/client/etc/ogAdmClient-$DEFAULTDEV.cfg $INSTALL_TARGET/client/etc/ogAdmClient.cfg
1516        ln -f $INSTALL_TARGET/www/controlacceso-$DEFAULTDEV.php $INSTALL_TARGET/www/controlacceso.php
1517        chown root:root $INSTALL_TARGET/etc/{ogAdmServer,ogAdmAgent}*.cfg
1518        chmod 600 $INSTALL_TARGET/etc/{ogAdmServer,ogAdmAgent}*.cfg
1519        chown $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/controlacceso*.php
1520        chmod 600 $INSTALL_TARGET/www/controlacceso*.php
1521
1522        # Configuración del motor de clonación.
1523        # - Zona horaria del servidor.
1524        TZ=$(timedatectl status|awk -F"[:()]" '/Time.*zone/ {print $2}')
1525        cat << EOT >> $INSTALL_TARGET/client/etc/engine.cfg
1526# OpenGnsys Server timezone.
1527TZ="${TZ// /}"
1528EOT
1529
1530        # Revisar permisos generales.
1531        if [ -x $INSTALL_TARGET/bin/checkperms ]; then
1532                echoAndLog "${FUNCNAME}(): Checking permissions."
1533                OPENGNSYS_DIR="$INSTALL_TARGET" OPENGNSYS_USER="$OPENGNSYS_CLIENT_USER" APACHE_USER="$APACHE_RUN_USER" APACHE_GROUP="$APACHE_RUN_GROUP" checkperms
1534        fi
1535
1536        # Evitar inicio de duplicado en Ubuntu 14.04 (Upstart y SysV Init).
1537        if [ -f /etc/init/${MYSQLSERV}.conf -a -n "$(which initctl 2>/dev/null)" ]; then
1538                service=$MYSQLSERV
1539                $DISABLESERVICE
1540        fi
1541
1542        echoAndLog "${FUNCNAME}(): Starting OpenGnsys services."
1543        service="opengnsys"
1544        $ENABLESERVICE; $STARTSERVICE
1545}
1546
1547
1548#####################################################################
1549#######  Función de resumen informativo de la instalación
1550#####################################################################
1551
1552function installationSummary()
1553{
1554        # Crear fichero de versión y revisión, si no existe.
1555        local VERSIONFILE="$INSTALL_TARGET/doc/VERSION.txt"
1556        [ -f $VERSIONFILE ] || echo "OpenGnsys Server" >$VERSIONFILE
1557        # Incluir datos de revisión, si se está instaladno desde el repositorio
1558        # de código o si no está incluida en el fichero de versión.
1559        if [ $USESVN -eq 1 ] || [ -z "$(awk '$3~/r[0-9]*/ {print}' $VERSIONFILE)" ]; then
1560                local REVISION=$(LANG=C svn info $SVN_URL|awk '/Rev:/ {print "r"$4}')
1561                perl -pi -e "s/($| r[0-9]*)/ $REVISION/" $VERSIONFILE
1562        fi
1563
1564        # Mostrar información.
1565        echo
1566        echoAndLog "OpenGnsys Installation Summary"
1567        echo       "=============================="
1568        echoAndLog "Project version:                  $(cat $VERSIONFILE 2>/dev/null)"
1569        echoAndLog "Installation directory:           $INSTALL_TARGET"
1570        echoAndLog "Installation log file:            $LOG_FILE"
1571        echoAndLog "Repository directory:             $INSTALL_TARGET/images"
1572        echoAndLog "DHCP configuration directory:     $DHCPCFGDIR"
1573        echoAndLog "TFTP configuration directory:     $TFTPCFGDIR"
1574        echoAndLog "Installed ogLive client(s):       $(oglivecli list | awk '{print $2}')"
1575        echoAndLog "Samba configuration directory:    $SAMBACFGDIR"
1576        echoAndLog "Web Console URL:                  $OPENGNSYS_CONSOLEURL"
1577        echoAndLog "Web Console access data:          specified in installer script"
1578        if grep -q "^RUN_BTTRACK.*no" /etc/default/opengnsys; then
1579                echoAndLog "BitTorrent service is disabled."
1580        fi
1581        echo
1582        echoAndLog "Post-Installation Instructions:"
1583        echo       "==============================="
1584        echoAndLog "Firewall service has been disabled and SELinux mode set to"
1585        echoAndLog "   permissive during OpenGnsys installation. Please check"
1586        echoAndLog "   ${FIREWALLSERV:-firewall} and SELinux configuration, if needed."
1587        echoAndLog "It's strongly recommended to synchronize this server with an NTP server."
1588        echoAndLog "Review or edit all configuration files."
1589        echoAndLog "Insert DHCP configuration data and restart service."
1590        echoAndLog "Optional: Log-in as Web Console admin user."
1591        echoAndLog " - Review default Organization data and assign access to users."
1592        echoAndLog "Log-in as Web Console organization user."
1593        echoAndLog " - Insert OpenGnsys data (labs, computers, menus, etc)."
1594echo
1595}
1596
1597
1598
1599#####################################################################
1600####### Proceso de instalación de OpenGnsys
1601#####################################################################
1602
1603echoAndLog "OpenGnsys installation begins at $(date)"
1604pushd $WORKDIR
1605
1606# Detectar datos iniciales de auto-configuración del instalador.
1607autoConfigure
1608
1609# Detectar parámetros de red y comprobar si hay conexión.
1610getNetworkSettings
1611if [ $? -ne 0 ]; then
1612        errorAndLog "Error reading default network settings."
1613        exit 1
1614fi
1615checkNetworkConnection
1616if [ $? -ne 0 ]; then
1617        errorAndLog "Error connecting to server. Causes:"
1618        errorAndLog " - Network is unreachable, review devices parameters."
1619        errorAndLog " - You are inside a private network, configure the proxy service."
1620        errorAndLog " - Server is temporally down, try agian later."
1621        exit 1
1622fi
1623
1624# Detener servicios de OpenGnsys, si están activos previamente.
1625[ -f /etc/init.d/opengnsys ] && /etc/init.d/opengnsys stop
1626
1627# Actualizar repositorios
1628updatePackageList
1629
1630# Instalación de dependencias (paquetes de sistema operativo).
1631declare -a notinstalled
1632checkDependencies DEPENDENCIES notinstalled
1633if [ $? -ne 0 ]; then
1634        installDependencies notinstalled
1635        if [ $? -ne 0 ]; then
1636                echoAndLog "Error while installing some dependeces, please verify your server installation before continue"
1637                exit 1
1638        fi
1639fi
1640if [ -n "$INSTALLEXTRADEPS" ]; then
1641        echoAndLog "Installing extra dependencies"
1642        for (( i=0; i<${#INSTALLEXTRADEPS[*]}; i++ )); do
1643                eval ${INSTALLEXTRADEPS[i]}
1644        done
1645fi     
1646
1647# Detectar datos de auto-configuración después de instalar paquetes.
1648autoConfigurePost
1649
1650# Arbol de directorios de OpenGnsys.
1651createDirs ${INSTALL_TARGET}
1652if [ $? -ne 0 ]; then
1653        errorAndLog "Error while creating directory paths!"
1654        exit 1
1655fi
1656
1657# Si es necesario, descarga el repositorio de código en directorio temporal
1658if [ $USESVN -eq 1 ]; then
1659        svnExportCode $SVN_URL
1660        if [ $? -ne 0 ]; then
1661                errorAndLog "Error while getting code from svn"
1662                exit 1
1663        fi
1664else
1665        ln -fs "$(dirname $PROGRAMDIR)" opengnsys
1666fi
1667
1668# Compilar código fuente de los servicios de OpenGnsys.
1669servicesCompilation
1670if [ $? -ne 0 ]; then
1671        errorAndLog "Error while compiling OpenGnsys services"
1672        exit 1
1673fi
1674
1675# Copiar carpeta Interface entre administración y motor de clonación.
1676copyInterfaceAdm
1677if [ $? -ne 0 ]; then
1678        errorAndLog "Error while copying Administration Interface"
1679        exit 1
1680fi
1681
1682# Configuración de TFTP.
1683tftpConfigure
1684
1685# Configuración de Samba.
1686smbConfigure
1687if [ $? -ne 0 ]; then
1688        errorAndLog "Error while configuring Samba server!"
1689        exit 1
1690fi
1691
1692# Configuración de Rsync.
1693rsyncConfigure
1694
1695# Configuración ejemplo DHCP.
1696dhcpConfigure
1697if [ $? -ne 0 ]; then
1698        errorAndLog "Error while copying your dhcp server files!"
1699        exit 1
1700fi
1701
1702# Copiar ficheros de servicios OpenGnsys Server.
1703copyServerFiles ${INSTALL_TARGET}
1704if [ $? -ne 0 ]; then
1705        errorAndLog "Error while copying the server files!"
1706        exit 1
1707fi
1708INSTVERSION=$(awk '{print $2}' $INSTALL_TARGET/doc/VERSION.txt)
1709
1710# Instalar base de datos de OpenGnsys Admin.
1711isInArray notinstalled "mysql-server" || isInArray notinstalled "mariadb-server"
1712if [ $? -eq 0 ]; then
1713        # Habilitar gestor de base de datos (MySQL, si falla, MariaDB).
1714        service=$MYSQLSERV
1715        $ENABLESERVICE
1716        if [ $? != 0 ]; then
1717                service=$MARIADBSERV
1718                $ENABLESERVICE
1719        fi
1720        # Activar gestor de base de datos.
1721        $STARTSERVICE
1722        # Asignar clave del usuario "root".
1723        mysqlSetRootPassword "${MYSQL_ROOT_PASSWORD}"
1724else
1725        # Si ya está instalado el gestor de bases de datos, obtener clave de "root",
1726        mysqlGetRootPassword
1727fi
1728
1729mysqlTestConnection "${MYSQL_ROOT_PASSWORD}"
1730if [ $? -ne 0 ]; then
1731        errorAndLog "Error while connection to mysql"
1732        exit 1
1733fi
1734mysqlDbExists ${OPENGNSYS_DATABASE}
1735if [ $? -ne 0 ]; then
1736        echoAndLog "Creating Web Console database"
1737        mysqlCreateDb ${OPENGNSYS_DATABASE}
1738        if [ $? -ne 0 ]; then
1739                errorAndLog "Error while creating Web Console database"
1740                exit 1
1741        fi
1742else
1743        echoAndLog "Web Console database exists, ommiting creation"
1744fi
1745
1746mysqlCheckUserExists ${OPENGNSYS_DB_USER}
1747if [ $? -ne 0 ]; then
1748        echoAndLog "Creating user in database"
1749        mysqlCreateAdminUserToDb ${OPENGNSYS_DATABASE} ${OPENGNSYS_DB_USER} "${OPENGNSYS_DB_PASSWD}"
1750        if [ $? -ne 0 ]; then
1751                errorAndLog "Error while creating database user"
1752                exit 1
1753        fi
1754
1755fi
1756
1757mysqlCheckDbIsEmpty ${OPENGNSYS_DATABASE}
1758if [ $? -eq 0 ]; then
1759        echoAndLog "Creating tables..."
1760        if [ -f $WORKDIR/$OPENGNSYS_DB_CREATION_FILE ]; then
1761                mysqlImportSqlFileToDb ${OPENGNSYS_DATABASE} $WORKDIR/$OPENGNSYS_DB_CREATION_FILE
1762        else
1763                errorAndLog "Unable to locate $WORKDIR/$OPENGNSYS_DB_CREATION_FILE!!"
1764                exit 1
1765        fi
1766else
1767        # Si existe fichero ogBDAdmin-VersLocal-VersRepo.sql; aplicar cambios.
1768        REPOVERSION=$(awk '{print $2}' $WORKDIR/opengnsys/doc/VERSION.txt)
1769        OPENGNSYS_DB_UPDATE_FILE="opengnsys/admin/Database/$OPENGNSYS_DATABASE-$INSTVERSION-$REPOVERSION.sql"
1770        if [ -f $WORKDIR/$OPENGNSYS_DB_UPDATE_FILE ]; then
1771                echoAndLog "Updating tables from version $INSTVERSION to $REPOVERSION"
1772                mysqlImportSqlFileToDb ${OPENGNSYS_DATABASE} $WORKDIR/$OPENGNSYS_DB_UPDATE_FILE
1773        else
1774                echoAndLog "Database unchanged."
1775        fi
1776fi
1777# Eliminar fichero temporal con credenciales de acceso a MySQL.
1778rm -f $TMPMYCNF
1779
1780# Copiando páqinas web.
1781installWebFiles
1782# Descargar/descomprimir archivos descargables.
1783installDownloadableFiles
1784# Generar páqinas web de documentación de la API
1785makeDoxygenFiles
1786
1787# Creando configuración de Apache.
1788installWebConsoleApacheConf $INSTALL_TARGET $APACHECFGDIR
1789if [ $? -ne 0 ]; then
1790        errorAndLog "Error configuring Apache for OpenGnsys Admin"
1791        exit 1
1792fi
1793
1794popd
1795
1796# Crear la estructura de los accesos al servidor desde el cliente (shared)
1797copyClientFiles
1798if [ $? -ne 0 ]; then
1799        errorAndLog "Error creating client structure"
1800fi
1801
1802# Crear la estructura del cliente de OpenGnsys.
1803for i in $OGLIVE; do
1804        if ! clientCreate "$i"; then
1805                errorAndLog "Error creating client $i"
1806                exit 1
1807        fi
1808done
1809
1810# Configuración de servicios de OpenGnsys
1811openGnsysConfigure
1812
1813# Mostrar sumario de la instalación e instrucciones de post-instalación.
1814installationSummary
1815
1816#rm -rf $WORKDIR
1817echoAndLog "OpenGnsys installation finished at $(date)"
1818exit 0
1819
Note: See TracBrowser for help on using the repository browser.