source: installer/opengnsys_installer.sh @ 8182ab14

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 8182ab14 was 140fbd5, checked in by ramon <ramongomez@…>, 8 years ago

#730: Reducir dependencias del instalador.

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

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