source: installer/opengnsys_installer.sh @ 9139a5f

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 9139a5f was dc762088, checked in by albertogp <albertogp@…>, 12 years ago

branches-version1.0
Corrigiendo error en los ficheros de instalación y actualización
en la línea de /etc/cron.d fichero deletepreimage 1369 y 629 respectivamente

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

  • Property mode set to 100755
File size: 51.4 KB
RevLine 
[a01156a]1#!/bin/bash
2
3#####################################################################
[6ef01d9]4####### Script instalador OpenGnSys
[a01156a]5####### autor: Luis Guillén <lguillen@unizar.es>
6#####################################################################
7
8
[1e7eaab]9
[6ef01d9]10####  AVISO: Editar configuración de acceso por defecto.
[a257e67]11####  WARNING: Edit default access configuration.
[4a3cd1f]12MYSQL_ROOT_PASSWORD="passwordroot"      # Clave root de MySQL
[6ef01d9]13OPENGNSYS_DB_USER="usuog"               # Usuario de acceso a la base de datos
14OPENGNSYS_DB_PASSWD="passusuog"         # Clave de acceso a la base de datos
15OPENGNSYS_CLIENT_PASSWD="og"            # Clave de acceso del cliente
16
[4a3cd1f]17
[1e7eaab]18# Sólo ejecutable por usuario root
[6ef01d9]19if [ "$(whoami)" != 'root' ]; then
[1e7eaab]20        echo "ERROR: this program must run under root privileges!!"
21        exit 1
22fi
[a257e67]23# Solo se deben aceptar números y letras en la clave de acceso del cliente.
24if [ -n "${OPENGNSYS_CLIENT_PASSWD//[a-zA-Z0-9]/}" ]; then
25        echo "ERROR: client password must be alphanumeric, edit installer variables."
26        exit 1
27fi
[1e7eaab]28
29# Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1).
[49c6891]30PROGRAMDIR=$(readlink -e $(dirname "$0"))
[35b0ef1]31PROGRAMNAME=$(basename "$0")
[07c3a59]32OPENGNSYS_SERVER="www.opengnsys.es"
[1e7eaab]33if [ -d "$PROGRAMDIR/../installer" ]; then
[6ef01d9]34        USESVN=0
[1e7eaab]35else
[6ef01d9]36        USESVN=1
[1e7eaab]37fi
[eb9424f]38SVN_URL="http://$OPENGNSYS_SERVER/svn/branches/version1.0/"
[1e7eaab]39
[a01156a]40WORKDIR=/tmp/opengnsys_installer
[1e7eaab]41mkdir -p $WORKDIR
42
[42a0e41]43# Directorio destino de OpenGnSys.
[1e7eaab]44INSTALL_TARGET=/opt/opengnsys
[42a0e41]45
46# Registro de incidencias.
47OGLOGFILE=$INSTALL_TARGET/log/${PROGRAMNAME%.sh}.log
[acfb07d]48LOG_FILE=/tmp/$(basename $OGLOGFILE)
[a01156a]49
[fd021b0]50# Usuario del cliente para acceso remoto.
51OPENGNSYS_CLIENT_USER="opengnsys"
52
53# Nombre de la base datos y fichero SQL para su creación.
54OPENGNSYS_DATABASE="ogAdmBD"
55OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/${OPENGNSYS_DATABASE}.sql
[3aaf91d]56
[a01156a]57
58#####################################################################
[d168a46]59####### Funciones de configuración
60#####################################################################
61
62# Generar variables de configuración del instalador
63# Variables globales:
64# - OSDISTRIB, OSCODENAME - datos de la distribución Linux
65# - DEPENDENCIES - array de dependencias que deben estar instaladas
66# - UPDATEPKGLIST, INSTALLPKGS, CHECKPKGS - comandos para gestión de paquetes
[109e8b2]67# - INSTALLEXTRADEPS - instalar dependencias no incluidas en la distribución
[53fba30]68# - STARTSERVICE, ENABLESERVICE - iniciar y habilitar un servicio
[109e8b2]69# - STOPSERVICE, DISABLESERVICE - parar y deshabilitar un servicio
[53fba30]70# - APACHESERV, APACHECFGDIR, APACHESITESDIR, APACHEUSER, APACHEGROUP - servicio y configuración de Apache
[7825e9e]71# - APACHESSLMOD, APACHEENABLESSL, APACHEMAKECERT - habilitar módulo Apache y certificado SSL
[53fba30]72# - APACHEENABLEOG, APACHEOGSITE, - habilitar sitio web de OpenGnSys
73# - INETDSERV - servicio Inetd
[109e8b2]74# - IPTABLESSERV - servicio IPTables
[53fba30]75# - DHCPSERV, DHCPCFGDIR - servicio y configuración de DHCP
[09bf701]76# - MYSQLSERV, TMPMYCNF - servicio MySQL y fichero temporal con credenciales de acceso.
[e70925a]77# - RSYNCSERV, RSYNCCFGDIR - servicio y configuración de Rsync
[53fba30]78# - SAMBASERV, SAMBACFGDIR - servicio y configuración de Samba
[297df16]79# - TFTPSERV, TFTPCFGDIR, SYSLINUXDIR - servicio y configuración de TFTP/PXE
[d168a46]80function autoConfigure()
81{
82# Detectar sistema operativo del servidor (debe soportar LSB).
83OSDISTRIB=$(lsb_release -is 2>/dev/null)
84OSCODENAME=$(lsb_release -cs 2>/dev/null)
85
[684b3e6]86# Configuración según la distribución GNU/Linux.
[d168a46]87case "$OSDISTRIB" in
[0fe2488]88        Ubuntu|Debian|LinuxMint)
[11b812d]89                DEPENDENCIES=( subversion apache2 php5 php5-ldap libapache2-mod-php5 mysql-server php5-mysql isc-dhcp-server bittorrent tftp-hpa tftpd-hpa syslinux xinetd build-essential g++-multilib libmysqlclient15-dev wget doxygen graphviz bittornado ctorrent samba rsync unzip netpipes debootstrap schroot squashfs-tools btrfs-tools )
[d168a46]90                UPDATEPKGLIST="apt-get update"
91                INSTALLPKG="apt-get -y install --force-yes"
92                CHECKPKG="dpkg -s \$package 2>/dev/null | grep Status | grep -qw install"
[53fba30]93                if which service &>/dev/null; then
[7ba85a4]94                        STARTSERVICE="eval service \$service restart"
[109e8b2]95                        STOPSERVICE="eval service \$service stop"
[53fba30]96                else
[7ba85a4]97                        STARTSERVICE="eval /etc/init.d/\$service restart"
[109e8b2]98                        STOPSERVICE="eval /etc/init.d/\$service stop"
[53fba30]99                fi
[7ba85a4]100                ENABLESERVICE="eval update-rc.d \$service defaults"
[109e8b2]101                DISABLESERVICE="eval update-rc.d \$service disable"
[53fba30]102                APACHESERV=apache2
[d168a46]103                APACHECFGDIR=/etc/apache2
[643ca8c]104                APACHESITESDIR=sites-available
[53fba30]105                APACHEOGSITE=opengnsys
[d168a46]106                APACHEUSER="www-data"
107                APACHEGROUP="www-data"
[7ba85a4]108                APACHESSLMOD="a2enmod ssl"
109                APACHEENABLESSL="a2ensite default-ssl"
[53fba30]110                APACHEENABLEOG="a2ensite $APACHEOGSITE"
[643ca8c]111                APACHEMAKECERT="make-ssl-cert generate-default-snakeoil --force-overwrite"
[53fba30]112                DHCPSERV=isc-dhcp-server
[83518d5]113                DHCPCFGDIR=/etc/dhcp
[f243a47]114                INETDSERV=xinetd
115                INETDCFGDIR=/etc/xinetd.d
[53fba30]116                MYSQLSERV=mysql
[e70925a]117                RSYNCSERV=rsync
118                RSYNCCFGDIR=/etc
[53fba30]119                SAMBASERV=smbd
[d168a46]120                SAMBACFGDIR=/etc/samba
[297df16]121                SYSLINUXDIR=/usr/lib/syslinux
[d168a46]122                TFTPCFGDIR=/var/lib/tftpboot
123                ;;
[5fcf180]124        Fedora|CentOS)
[11b812d]125                DEPENDENCIES=( subversion httpd mod_ssl php php-ldap mysql-server mysql-devel mysql-devel.i686 php-mysql dhcp tftp-server tftp syslinux xinetd binutils gcc gcc-c++ glibc-devel glibc-devel.i686 glibc-static glibc-static.i686 libstdc++ libstdc++.i686 libstdc++-static.i686 libstdc++-devel.i686 make wget doxygen graphviz ctorrent samba rsync unzip debootstrap schroot squashfs-tools btrfs-progs )
[109e8b2]126                INSTALLEXTRADEPS=( 'rpm -Uv ftp://ftp.altlinux.org/pub/distributions/ALTLinux/5.1/branch/files/i586/RPMS/netpipes-4.2-alt1.i586.rpm'
[03cfd6e]127                                   'pushd /tmp; wget 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' )
128                if [ "$OSDISTRIB" == "CentOS" ]; then
129                        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'
130                fi
[d168a46]131                INSTALLPKG="yum install -y"
[c79a2b3]132                CHECKPKG="rpm -q --quiet \$package"
[03cfd6e]133                SYSTEMD=$(which systemctl 2>/dev/null)
134                if [ -n "$SYSTEMD" ]; then
135                        STARTSERVICE="eval systemctl start \$service.service"
136                        STOPSERVICE="eval systemctl stop \$service.service"
137                        ENABLESERVICE="eval systemctl enable \$service.service"
138                        DISABLESERVICE="eval systemctl disable \$service.service"
139                else
140                        STARTSERVICE="eval service \$service start"
141                        STOPSERVICE="eval service \$service stop"
142                        ENABLESERVICE="eval chkconfig \$service on"
143                        DISABLESERVICE="eval chkconfig \$service off"
144                fi
[53fba30]145                APACHESERV=httpd
[d168a46]146                APACHECFGDIR=/etc/httpd/conf.d
[53fba30]147                APACHEOGSITE=opengnsys.conf
[d168a46]148                APACHEUSER="apache"
149                APACHEGROUP="apache"
[53fba30]150                DHCPSERV=dhcpd
[d168a46]151                DHCPCFGDIR=/etc/dhcp
[53fba30]152                INETDSERV=xinetd
[f243a47]153                INETDCFGDIR=/etc/xinetd.d
[b83843c]154                IPTABLESSERV=iptables
[53fba30]155                MYSQLSERV=mysqld
[e70925a]156                RSYNCSERV=rsync
157                RSYNCCFGDIR=/etc
[53fba30]158                SAMBASERV=smb
[d168a46]159                SAMBACFGDIR=/etc/samba
[297df16]160                SYSLINUXDIR=/usr/share/syslinux
[53fba30]161                TFTPSERV=tftp
[d168a46]162                TFTPCFGDIR=/var/lib/tftpboot
163                ;;
164        "")     echo "ERROR: Unknown Linux distribution, please install \"lsb_release\" command."
165                exit 1 ;;
166        *)      echo "ERROR: Distribution not supported by OpenGnSys."
167                exit 1 ;;
168esac
[09bf701]169
170# Fichero de credenciales de acceso a MySQL.
171TMPMYCNF=/tmp/.my.cnf.$$
[d168a46]172}
173
[ff6c349]174# Modificar variables de configuración tras instalar paquetes del sistema.
175function autoConfigurePost()
176{
[03cfd6e]177[ -z "$SYSTEMD" -a ! -e /etc/init.d/$SAMBASERV ] && SAMBASERV=samba     # Debian 6
178[ ! -e $TFTPCFGDIR ] && TFTPCFGDIR=/srv/tftp            # Debian 6
[ea60f41]179[ -f /selinux/enforce ] && echo 0 > /selinux/enforce    # SELinux permisivo
[c972d5aa]180selinuxenabled && setenforce 0 2>/dev/null              # SELinux permisivo (Fedora 17)
[ff6c349]181}
182
183
[83518d5]184# Cargar lista de paquetes del sistema y actualizar algunas variables de configuración
185# dependiendo de la versión instalada.
186function updatePackageList()
187{
188local DHCPVERSION
189
190# Si es necesario, actualizar la lista de paquetes disponibles.
191[ -n "$UPDATEPKGLIST" ] && eval $UPDATEPKGLIST
192
193# Configuración personallizada de algunos paquetes.
194case "$OSDISTRIB" in
[109e8b2]195        Ubuntu|LinuxMint)       # Postconfiguación personalizada para Ubuntu.
[83518d5]196                # Configuración para DHCP v3.
[e4b1572]197                DHCPVERSION=$(apt-cache show $(apt-cache pkgnames|egrep "dhcp.?-server$") | \
[83518d5]198                              awk '/Version/ {print substr($2,1,1);}' | \
199                              sort -n | tail -1)
200                if [ $DHCPVERSION = 3 ]; then
[e4b1572]201                        DEPENDENCIES=( ${DEPENDENCIES[@]/isc-dhcp-server/dhcp3-server} )
[53fba30]202                        DHCPSERV=dhcp3-server
[83518d5]203                        DHCPCFGDIR=/etc/dhcp3
204                fi
205                ;;
[109e8b2]206        CentOS) # Postconfiguación personalizada para CentOS.
207                # Incluir repositorio de paquetes EPEL.
[c79a2b3]208                DEPENDENCIES=( ${DEPENDENCIES[@]} epel-release )
209                ;;
[83518d5]210esac
211}
212
[d168a46]213
214#####################################################################
[a01156a]215####### Algunas funciones útiles de propósito general:
216#####################################################################
[d168a46]217
[13a01a7]218function getDateTime()
[a01156a]219{
[d168a46]220        date "+%Y%m%d-%H%M%S"
[a01156a]221}
222
223# Escribe a fichero y muestra por pantalla
[13a01a7]224function echoAndLog()
[a01156a]225{
[d168a46]226        local DATETIME=`getDateTime`
[87c7b02]227        echo "$1"
[d168a46]228        echo "$DATETIME;$SSH_CLIENT;$1" >> $LOG_FILE
[a01156a]229}
230
[87c7b02]231# Escribe a fichero y muestra mensaje de error
[13a01a7]232function errorAndLog()
[a01156a]233{
[d168a46]234        local DATETIME=`getDateTime`
[87c7b02]235        echo "ERROR: $1"
[d168a46]236        echo "$DATETIME;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE
[a01156a]237}
238
[87c7b02]239# Comprueba si el elemento pasado en $2 está en el array $1
[13a01a7]240function isInArray()
[a01156a]241{
242        if [ $# -ne 2 ]; then
[13a01a7]243                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]244                exit 1
245        fi
246
247        local deps
[87c7b02]248        local is_in_array=1
249        local element="$2"
250
251        echoAndLog "${FUNCNAME}(): checking if $2 is in $1"
[5c33840]252        eval "deps=( \"\${$1[@]}\" )"
[a01156a]253
[87c7b02]254        # Copia local del array del parámetro 1.
255        for (( i = 0 ; i < ${#deps[@]} ; i++ )); do
256                if [ "${deps[$i]}" = "${element}" ]; then
257                        echoAndLog "isInArray(): $element found in array"
[a01156a]258                        is_in_array=0
259                fi
260        done
261
262        if [ $is_in_array -ne 0 ]; then
[87c7b02]263                echoAndLog "${FUNCNAME}(): $element NOT found in array"
[a01156a]264        fi
265
266        return $is_in_array
267}
268
[87c7b02]269
[a01156a]270#####################################################################
271####### Funciones de manejo de paquetes Debian
272#####################################################################
273
[13a01a7]274function checkPackage()
[a01156a]275{
276        package=$1
277        if [ -z $package ]; then
[73cfa0a]278                errorAndLog "${FUNCNAME}(): parameter required"
[a01156a]279                exit 1
280        fi
[73cfa0a]281        echoAndLog "${FUNCNAME}(): checking if package $package exists"
[d168a46]282        eval $CHECKPKG
[a01156a]283        if [ $? -eq 0 ]; then
[73cfa0a]284                echoAndLog "${FUNCNAME}(): package $package exists"
[a01156a]285                return 0
286        else
[73cfa0a]287                echoAndLog "${FUNCNAME}(): package $package doesn't exists"
[a01156a]288                return 1
289        fi
290}
291
[87c7b02]292# Recibe array con dependencias
[a01156a]293# por referencia deja un array con las dependencias no resueltas
294# devuelve 1 si hay alguna dependencia no resuelta
[13a01a7]295function checkDependencies()
[a01156a]296{
297        if [ $# -ne 2 ]; then
[73cfa0a]298                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]299                exit 1
300        fi
301
[73cfa0a]302        echoAndLog "${FUNCNAME}(): checking dependences"
[a01156a]303        uncompletedeps=0
304
305        # copia local del array del parametro 1
306        local deps
[5c33840]307        eval "deps=( \"\${$1[@]}\" )"
[a01156a]308
309        declare -a local_notinstalled
[5c33840]310
[a01156a]311        for (( i = 0 ; i < ${#deps[@]} ; i++ ))
312        do
313                checkPackage ${deps[$i]}
314                if [ $? -ne 0 ]; then
315                        local_notinstalled[$uncompletedeps]=$package
316                        let uncompletedeps=uncompletedeps+1
317                fi
318        done
319
320        # relleno el array especificado en $2 por referencia
321        for (( i = 0 ; i < ${#local_notinstalled[@]} ; i++ ))
322        do
323                eval "${2}[$i]=${local_notinstalled[$i]}"
324        done
325
326        # retorna el numero de paquetes no resueltos
[73cfa0a]327        echoAndLog "${FUNCNAME}(): dependencies uncompleted: $uncompletedeps"
[a01156a]328        return $uncompletedeps
329}
330
331# Recibe un array con las dependencias y lo instala
[13a01a7]332function installDependencies()
[a01156a]333{
334        if [ $# -ne 1 ]; then
[813f617]335                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]336                exit 1
337        fi
[813f617]338        echoAndLog "${FUNCNAME}(): installing uncompleted dependencies"
[a01156a]339
340        # copia local del array del parametro 1
341        local deps
[5c33840]342        eval "deps=( \"\${$1[@]}\" )"
[a01156a]343
344        local string_deps=""
345        for (( i = 0 ; i < ${#deps[@]} ; i++ ))
346        do
347                string_deps="$string_deps ${deps[$i]}"
348        done
349
350        if [ -z "${string_deps}" ]; then
[813f617]351                errorAndLog "${FUNCNAME}(): array of dependeces is empty"
[a01156a]352                exit 1
353        fi
354
[c79a2b3]355        OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND            # Debian/Ubuntu
[a01156a]356        export DEBIAN_FRONTEND=noninteractive
357
[d168a46]358        echoAndLog "${FUNCNAME}(): now $string_deps will be installed"
359        eval $INSTALLPKG $string_deps
[a01156a]360        if [ $? -ne 0 ]; then
[813f617]361                errorAndLog "${FUNCNAME}(): error installing dependencies"
[a01156a]362                return 1
363        fi
364
[c79a2b3]365        DEBIAN_FRONTEND=$OLD_DEBIAN_FRONTEND            # Debian/Ubuntu
[8244351]366        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
[c79a2b3]367
[813f617]368        echoAndLog "${FUNCNAME}(): dependencies installed"
[a01156a]369}
370
[13a01a7]371# Hace un backup del fichero pasado por parámetro
372# deja un -last y uno para el día
373function backupFile()
374{
375        if [ $# -ne 1 ]; then
376                errorAndLog "${FUNCNAME}(): invalid number of parameters"
377                exit 1
378        fi
379
[d168a46]380        local file="$1"
381        local dateymd=`date +%Y%m%d`
[13a01a7]382
[d168a46]383        if [ ! -f "$file" ]; then
384                errorAndLog "${FUNCNAME}(): file $file doesn't exists"
[13a01a7]385                return 1
386        fi
387
[d168a46]388        echoAndLog "${FUNCNAME}(): making $file backup"
[13a01a7]389
390        # realiza una copia de la última configuración como last
[d168a46]391        cp -a "$file" "${file}-LAST"
[13a01a7]392
393        # si para el día no hay backup lo hace, sino no
[d168a46]394        if [ ! -f "${file}-${dateymd}" ]; then
395                cp -a "$file" "${file}-${dateymd}"
[13a01a7]396        fi
397
[d168a46]398        echoAndLog "${FUNCNAME}(): $file backup success"
[13a01a7]399}
400
[a01156a]401#####################################################################
402####### Funciones para el manejo de bases de datos
403#####################################################################
404
405# This function set password to root
[13a01a7]406function mysqlSetRootPassword()
[a01156a]407{
408        if [ $# -ne 1 ]; then
[813f617]409                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]410                exit 1
411        fi
412
[e0edc14]413        local root_mysql="$1"
[813f617]414        echoAndLog "${FUNCNAME}(): setting root password in MySQL server"
[e0edc14]415        mysqladmin -u root password "$root_mysql"
[a01156a]416        if [ $? -ne 0 ]; then
[813f617]417                errorAndLog "${FUNCNAME}(): error while setting root password in MySQL server"
[a01156a]418                return 1
419        fi
[813f617]420        echoAndLog "${FUNCNAME}(): root password saved!"
[a01156a]421        return 0
422}
423
[892606b9]424# Si el servicio mysql esta ya instalado cambia la variable de la clave del root por la ya existente
[e0edc14]425function mysqlGetRootPassword()
426{
[892606b9]427        local pass_mysql
428        local pass_mysql2
[7c54b49]429        # Comprobar si MySQL está instalado con la clave de root por defecto.
430        if mysql -u root -p"$MYSQL_ROOT_PASSWORD" <<<"quit" 2>/dev/null; then
431                echoAndLog "${FUNCNAME}(): Using default mysql root password."
432        else
433                stty -echo
[e0edc14]434                echo "There is a MySQL service already installed."
435                read -p "Enter MySQL root password: " pass_mysql
[7c54b49]436                echo ""
[e0edc14]437                read -p "Confrim password:" pass_mysql2
[7c54b49]438                echo ""
439                stty echo
440                if [ "$pass_mysql" == "$pass_mysql2" ] ;then
[e0edc14]441                        MYSQL_ROOT_PASSWORD="$pass_mysql"
[7c54b49]442                        return 0
443                else
[e0edc14]444                        echo "The keys don't match. Do not configure the server's key,"
445                        echo "transactions in the database will give error."
[7c54b49]446                        return 1
447                fi
[892606b9]448        fi
449}
450
[a01156a]451# comprueba si puede conectar con mysql con el usuario root
452function mysqlTestConnection()
453{
454        if [ $# -ne 1 ]; then
[e0edc14]455                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]456                exit 1
457        fi
458
[09bf701]459        local root_password="$1"
[e0edc14]460        echoAndLog "${FUNCNAME}(): checking connection to mysql..."
[09bf701]461        # Componer fichero con credenciales de conexión a MySQL.
462        touch $TMPMYCNF
463        chmod 600 $TMPMYCNF
464        cat << EOT > $TMPMYCNF
[c073224]465[client]
[09bf701]466user=root
467password=$root_password
468EOT
469        # Borrar el fichero temporal si termina el proceso de instalación.
470        trap "rm -f $TMPMYCNF" 0 1 2 3 6 9 15
471        # Comprobar conexión a MySQL.
472        echo "" | mysql --defaults-extra-file=$TMPMYCNF
[a01156a]473        if [ $? -ne 0 ]; then
[e0edc14]474                errorAndLog "${FUNCNAME}(): connection to mysql failed, check root password and if daemon is running!"
[a01156a]475                return 1
476        else
[e0edc14]477                echoAndLog "${FUNCNAME}(): connection success"
[a01156a]478                return 0
479        fi
480}
481
482# comprueba si la base de datos existe
483function mysqlDbExists()
484{
[09bf701]485        if [ $# -ne 1 ]; then
[e0edc14]486                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]487                exit 1
488        fi
489
[09bf701]490        local database="$1"
[e0edc14]491        echoAndLog "${FUNCNAME}(): checking if $database exists..."
[09bf701]492        echo "show databases" | mysql --defaults-extra-file=$TMPMYCNF | grep "^${database}$"
[a01156a]493        if [ $? -ne 0 ]; then
[e0edc14]494                echoAndLog "${FUNCNAME}():database $database doesn't exists"
[a01156a]495                return 1
496        else
[e0edc14]497                echoAndLog "${FUNCNAME}():database $database exists"
[a01156a]498                return 0
499        fi
500}
501
502function mysqlCheckDbIsEmpty()
503{
[09bf701]504        if [ $# -ne 1 ]; then
[e0edc14]505                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]506                exit 1
507        fi
508
[09bf701]509        local database="$1"
[e0edc14]510        echoAndLog "${FUNCNAME}(): checking if $database is empty..."
[09bf701]511        num_tablas=`echo "show tables" | mysql --defaults-extra-file=$TMPMYCNF "${database}" | wc -l`
[a01156a]512        if [ $? -ne 0 ]; then
[e0edc14]513                errorAndLog "${FUNCNAME}(): error executing query, check database and root password"
[a01156a]514                exit 1
515        fi
516
517        if [ $num_tablas -eq 0 ]; then
[e0edc14]518                echoAndLog "${FUNCNAME}():database $database is empty"
[a01156a]519                return 0
520        else
[e0edc14]521                echoAndLog "${FUNCNAME}():database $database has tables"
[a01156a]522                return 1
523        fi
524
525}
526
527
528function mysqlImportSqlFileToDb()
529{
[09bf701]530        if [ $# -ne 2 ]; then
[c5ce04c]531                errorAndLog "${FNCNAME}(): invalid number of parameters"
[a01156a]532                exit 1
533        fi
534
[09bf701]535        local database="$1"
536        local sqlfile="$2"
[c4321ae]537        local tmpfile=$(mktemp)
[d168a46]538        local i=0
539        local dev=""
[c4321ae]540        local status
[a01156a]541
542        if [ ! -f $sqlfile ]; then
[c5ce04c]543                errorAndLog "${FUNCNAME}(): Unable to locate $sqlfile!!"
[a01156a]544                return 1
545        fi
546
[d168a46]547        echoAndLog "${FUNCNAME}(): importing SQL file to ${database}..."
[c4321ae]548        chmod 600 $tmpfile
[d168a46]549        for dev in ${DEVICE[*]}; do
[73a1bd6]550                if [ "${DEVICE[i]}" == "$DEFAULTDEV" ]; then
[d168a46]551                        sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
552                            -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
553                            -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" \
554                                $sqlfile > $tmpfile
555                fi
556                let i++
557        done
[09bf701]558        mysql --defaults-extra-file=$TMPMYCNF --default-character-set=utf8 "${database}" < $tmpfile
[c4321ae]559        status=$?
560        rm -f $tmpfile
561        if [ $status -ne 0 ]; then
[c5ce04c]562                errorAndLog "${FUNCNAME}(): error while importing $sqlfile in database $database"
[a01156a]563                return 1
564        fi
[c5ce04c]565        echoAndLog "${FUNCNAME}(): file imported to database $database"
[a01156a]566        return 0
567}
568
569# Crea la base de datos
570function mysqlCreateDb()
571{
[09bf701]572        if [ $# -ne 1 ]; then
[a555f49]573                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]574                exit 1
575        fi
576
[09bf701]577        local database="$1"
[a01156a]578
[a555f49]579        echoAndLog "${FUNCNAME}(): creating database..."
[09bf701]580        mysqladmin --defaults-extra-file=$TMPMYCNF create $database
[a01156a]581        if [ $? -ne 0 ]; then
[a555f49]582                errorAndLog "${FUNCNAME}(): error while creating database $database"
[a01156a]583                return 1
584        fi
[a555f49]585        echoAndLog "${FUNCNAME}(): database $database created"
[a01156a]586        return 0
587}
588
589
590function mysqlCheckUserExists()
591{
[09bf701]592        if [ $# -ne 1 ]; then
[e0edc14]593                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]594                exit 1
595        fi
596
[09bf701]597        local userdb="$1"
[a01156a]598
[e0edc14]599        echoAndLog "${FUNCNAME}(): checking if $userdb exists..."
[09bf701]600        echo "select user from user where user='${userdb}'\\G" |mysql --defaults-extra-file=$TMPMYCNF mysql | grep user
[a01156a]601        if [ $? -ne 0 ]; then
[e0edc14]602                echoAndLog "${FUNCNAME}(): user doesn't exists"
[a01156a]603                return 1
604        else
[e0edc14]605                echoAndLog "${FUNCNAME}(): user already exists"
[a01156a]606                return 0
607        fi
608
609}
610
611# Crea un usuario administrativo para la base de datos
612function mysqlCreateAdminUserToDb()
613{
[09bf701]614        if [ $# -ne 3 ]; then
[e0edc14]615                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]616                exit 1
617        fi
618
[09bf701]619        local database="$1"
620        local userdb="$2"
621        local passdb="$3"
[a01156a]622
[e0edc14]623        echoAndLog "${FUNCNAME}(): creating admin user ${userdb} to database ${database}"
[a01156a]624
625        cat > $WORKDIR/create_${database}.sql <<EOF
626GRANT USAGE ON *.* TO '${userdb}'@'localhost' IDENTIFIED BY '${passdb}' ;
627GRANT ALL PRIVILEGES ON ${database}.* TO '${userdb}'@'localhost' WITH GRANT OPTION ;
628FLUSH PRIVILEGES ;
629EOF
[09bf701]630        mysql --defaults-extra-file=$TMPMYCNF < $WORKDIR/create_${database}.sql
[a01156a]631        if [ $? -ne 0 ]; then
[e0edc14]632                errorAndLog "${FUNCNAME}(): error while creating user in mysql"
[a01156a]633                rm -f $WORKDIR/create_${database}.sql
634                return 1
635        else
[e0edc14]636                echoAndLog "${FUNCNAME}(): user created ok"
[a01156a]637                rm -f $WORKDIR/create_${database}.sql
638                return 0
639        fi
640}
641
642
643#####################################################################
644####### Funciones para el manejo de Subversion
645#####################################################################
646
[13a01a7]647function svnExportCode()
648{
649        if [ $# -ne 1 ]; then
650                errorAndLog "${FUNCNAME}(): invalid number of parameters"
651                exit 1
652        fi
653
[6090a2d]654        local url="$1"
[13a01a7]655
656        echoAndLog "${FUNCNAME}(): downloading subversion code..."
657
[6090a2d]658        svn export --force "$url" opengnsys
[13a01a7]659        if [ $? -ne 0 ]; then
[6090a2d]660                errorAndLog "${FUNCNAME}(): error getting OpenGnSys code from $url"
[13a01a7]661                return 1
662        fi
663        echoAndLog "${FUNCNAME}(): subversion code downloaded"
664        return 0
665}
666
667
[892606b9]668############################################################
[7586ca3]669###  Detectar red
670############################################################
671
[07c3a59]672# Comprobar si existe conexión.
673function checkNetworkConnection()
674{
[109e8b2]675        echoAndLog "${FUNCNAME}(): Disabling IPTables."
[8244351]676        if [ -n "$IPTABLESSERV" ]; then
677                service=$IPTABLESSERV
[b83843c]678                $STOPSERVICE; $DISABLESERVICE
679        fi
[109e8b2]680
681        echoAndLog "${FUNCNAME}(): Checking OpenGnSys server conectivity."
[07c3a59]682        OPENGNSYS_SERVER=${OPENGNSYS_SERVER:-"www.opengnsys.es"}
683        wget --spider -q $OPENGNSYS_SERVER
684}
685
686# Obtener los parámetros de red de la interfaz por defecto.
[7586ca3]687function getNetworkSettings()
688{
[d168a46]689        # Arrays globales definidas:
690        # - DEVICE:     nombres de dispositivos de red activos.
691        # - SERVERIP:   IPs locales del servidor.
692        # - NETIP:      IPs de redes.
693        # - NETMASK:    máscaras de red.
694        # - NETBROAD:   IPs de difusión de redes.
695        # - ROUTERIP:   IPs de routers.
696        # Otras variables globales:
697        # - DEFAULTDEV: dispositivo de red por defecto.
698        # - DNSIP:      IP del servidor DNS principal.
699
700        local i=0
701        local dev=""
702
[109e8b2]703        echoAndLog "${FUNCNAME}(): Detecting network parameters."
[d168a46]704        DEVICE=( $(ip -o link show up | awk '!/loopback/ {sub(/:.*/,"",$2); print $2}') )
705        if [ -z "$DEVICE" ]; then
706                errorAndLog "${FUNCNAME}(): Network devices not detected."
[62e3bcf]707                exit 1
708        fi
[d168a46]709        for dev in ${DEVICE[*]}; do
710                SERVERIP[i]=$(ip -o addr show dev $dev | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4)}')
711                if [ -n "${SERVERIP[i]}" ]; then
[03cfd6e]712                        NETMASK[i]=$(LANG=C ifconfig $dev | \
713                                                awk '/Mask/ {sub(/.*:/,"",$4); print $4}
714                                                     /netmask/ {print $4}')
[d168a46]715                        NETBROAD[i]=$(ip -o addr show dev $dev | awk '$3~/inet$/ {print ($6)}')
716                        NETIP[i]=$(netstat -nr | awk -v d="$dev" '$1!~/0\.0\.0\.0/&&$8==d {if (n=="") n=$1} END {print n}')
717                        ROUTERIP[i]=$(netstat -nr | awk -v d="$dev" '$1~/0\.0\.0\.0/&&$8==d {print $2}')
718                        DEFAULTDEV=${DEFAULTDEV:-"$dev"}
719                fi
[ce85ae8]720                let i++
[d168a46]721        done
[a555f49]722        DNSIP=$(awk '/nameserver/ {print $2}' /etc/resolv.conf | head -n1)
[03cfd6e]723        if [ -z "${NETIP[*]}" -o -z "${NETMASK[*]}" ]; then
[62e3bcf]724                errorAndLog "${FUNCNAME}(): Network not detected."
[7586ca3]725                exit 1
726        fi
[cc7eab7]727
728        # Variables de ejecución de Apache
729        # - APACHE_RUN_USER
730        # - APACHE_RUN_GROUP
[d168a46]731        if [ -f $APACHECFGDIR/envvars ]; then
732                source $APACHECFGDIR/envvars
[cc7eab7]733        fi
[d168a46]734        APACHE_RUN_USER=${APACHE_RUN_USER:-"$APACHEUSER"}
735        APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"$APACHEGROUP"}
[73a1bd6]736
737        echoAndLog "${FUNCNAME}(): Default network device: $DEFAULTDEV."
[7586ca3]738}
739
740
741############################################################
[892606b9]742### Esqueleto para el Servicio pxe y contenedor tftpboot ###
743############################################################
744
[e0edc14]745function tftpConfigure()
746{
[109e8b2]747        echoAndLog "${FUNCNAME}(): Configuring TFTP service."
748        # Habilitar TFTP y reiniciar Inetd.
[8244351]749        if [ -n "$TFTPSERV" ]; then
750                service=$TFTPSERV
751                $ENABLESERVICE
752        fi
[53fba30]753        service=$INETDSERV
754        $ENABLESERVICE; $STARTSERVICE
[892606b9]755
[297df16]756        # preparacion contenedor tftpboot
757        cp -a $SYSLINUXDIR $TFTPCFGDIR/syslinux
758        cp -a $SYSLINUXDIR/pxelinux.0 $TFTPCFGDIR
759        # prepamos el directorio de la configuracion de pxe
760        mkdir -p $TFTPCFGDIR/pxelinux.cfg
761        cat > $TFTPCFGDIR/pxelinux.cfg/default <<EOF
[8fc9552]762DEFAULT syslinux/vesamenu.c32
763MENU TITLE Aplicacion GNSYS
764 
765LABEL 1
766MENU LABEL 1
767KERNEL syslinux/chain.c32
768APPEND hd0
769 
770PROMPT 0
771TIMEOUT 10
[892606b9]772EOF
[297df16]773        # comprobamos el servicio tftp
774        sleep 1
775        testPxe
[892606b9]776}
777
[e0edc14]778function testPxe ()
779{
[297df16]780        echoAndLog "${FUNCNAME}(): Checking TFTP service... please wait."
781        pushd /tmp
782        tftp -v localhost -c get pxelinux.0 /tmp/pxelinux.0 && echoAndLog "TFTP service is OK." || errorAndLog "TFTP service is down."
783        popd
[892606b9]784}
785
[8fc9552]786
[892606b9]787########################################################################
[e4b1572]788## Configuracion servicio NFS
789########################################################################
790
791# Configurar servicio NFS.
792# ADVERTENCIA: usa variables globales NETIP y NETMASK!
793function nfsConfigure()
794{
795        echoAndLog "${FUNCNAME}(): Config nfs server."
796        backupFile /etc/exports
797
798        nfsAddExport $INSTALL_TARGET/client ${NETIP}/${NETMASK}:ro,no_subtree_check,no_root_squash,sync
799        if [ $? -ne 0 ]; then
800                errorAndLog "${FUNCNAME}(): error while adding NFS client config"
801                return 1
802        fi
803
804        nfsAddExport $INSTALL_TARGET/images ${NETIP}/${NETMASK}:rw,no_subtree_check,no_root_squash,sync,crossmnt
805        if [ $? -ne 0 ]; then
806                errorAndLog "${FUNCNAME}(): error while adding NFS images config"
807                return 1
808        fi
809
810        nfsAddExport $INSTALL_TARGET/log/clients ${NETIP}/${NETMASK}:rw,no_subtree_check,no_root_squash,sync
811        if [ $? -ne 0 ]; then
812                errorAndLog "${FUNCNAME}(): error while adding logging client config"
813                return 1
814        fi
815
816        nfsAddExport $INSTALL_TARGET/tftpboot ${NETIP}/${NETMASK}:ro,no_subtree_check,no_root_squash,sync
817        if [ $? -ne 0 ]; then
818                errorAndLog "${FUNCNAME}(): error while adding second filesystem for the PXE ogclient"
819                return 1
820        fi
821
822        /etc/init.d/nfs-kernel-server restart
823        exportfs -va
824        if [ $? -ne 0 ]; then
825                errorAndLog "${FUNCNAME}(): error while configure exports"
826                return 1
827        fi
828
829        echoAndLog "${FUNCNAME}(): Added NFS configuration to file \"/etc/exports\"."
830        return 0
831}
832
833
834# Añadir entrada en fichero de configuración del servidor NFS.
835# Ejemplos:
836#nfsAddExport /opt/opengnsys 192.168.0.0/255.255.255.0:ro,no_subtree_check,no_root_squash,sync
837#nfsAddExport /opt/opengnsys 192.168.0.0/255.255.255.0
838#nfsAddExport /opt/opengnsys 80.20.2.1:ro 192.123.32.2:rw
839function nfsAddExport()
840{
841        if [ $# -lt 2 ]; then
842                errorAndLog "${FUNCNAME}(): invalid number of parameters"
843                exit 1
844        fi
845        if [ ! -f /etc/exports ]; then
846                errorAndLog "${FUNCNAME}(): /etc/exports don't exists"
847                return 1
848        fi
849
850        local export="$1"
851        local contador=0
852        local cadenaexport
853
854        grep "^$export" /etc/exports > /dev/null
855        if [ $? -eq 0 ]; then
856                echoAndLog "${FUNCNAME}(): $export exists in /etc/exports, omiting"
857                return 0
858        fi
859
860        cadenaexport="${export}"
861        for parametro in $*; do
862                if [ $contador -gt 0 ]; then
863                        host=`echo $parametro | awk -F: '{print $1}'`
864                        options=`echo $parametro | awk -F: '{print $2}'`
865                        if [ "${host}" == "" ]; then
866                                errorAndLog "${FUNCNAME}(): host can't be empty"
867                                return 1
868                        fi
869                        cadenaexport="${cadenaexport}\t${host}"
870
871                        if [ "${options}" != "" ]; then
872                                cadenaexport="${cadenaexport}(${options})"
873                        fi
874                fi
875                let contador=contador+1
876        done
877
878        echo -en "$cadenaexport\n" >> /etc/exports
879
880        echoAndLog "${FUNCNAME}(): add $export to /etc/exports"
881        return 0
882}
883
884
885########################################################################
[813f617]886## Configuracion servicio Samba
[8fc9552]887########################################################################
[e4b1572]888
889# Configurar servicios Samba.
[8fc9552]890function smbConfigure()
891{
[e0edc14]892        echoAndLog "${FUNCNAME}(): Configuring Samba service."
[8fc9552]893
[d168a46]894        backupFile $SAMBACFGDIR/smb.conf
[8fc9552]895       
[813f617]896        # Copiar plantailla de recursos para OpenGnSys
[c1e00e4]897        sed -e "s/OPENGNSYSDIR/${INSTALL_TARGET//\//\\/}/g" \
[d168a46]898                $WORKDIR/opengnsys/server/etc/smb-og.conf.tmpl > $SAMBACFGDIR/smb-og.conf
[813f617]899        # Configurar y recargar Samba"
[6addf73]900        perl -pi -e "s/WORKGROUP/OPENGNSYS/; s/server string \=.*/server string \= OpenGnSys Samba Server/" $SAMBACFGDIR/smb.conf
[03cfd6e]901        if ! grep -q "smb-og" $SAMBACFGDIR/smb.conf; then
902                echo "include = $SAMBACFGDIR/smb-og.conf" >> $SAMBACFGDIR/smb.conf
903        fi
[53fba30]904        service=$SAMBASERV
905        $ENABLESERVICE; $STARTSERVICE
[8fc9552]906        if [ $? -ne 0 ]; then
[813f617]907                errorAndLog "${FUNCNAME}(): error while configure Samba"
[8fc9552]908                return 1
909        fi
[eb9424f]910        # Crear clave para usuario de acceso a los recursos.
[813f617]911        echo -ne "$OPENGNSYS_CLIENT_PASSWD\n$OPENGNSYS_CLIENT_PASSWD\n" | smbpasswd -a -s $OPENGNSYS_CLIENT_USER
[8fc9552]912
[813f617]913        echoAndLog "${FUNCNAME}(): Added Samba configuration."
[8fc9552]914        return 0
915}
916
917
[b6906f7]918########################################################################
[e70925a]919## Configuracion servicio Rsync
920########################################################################
921
922# Configurar servicio Rsync.
923function rsyncConfigure()
924{
925        echoAndLog "${FUNCNAME}(): Configuring Rsync service."
926
927        backupFile $RSYNCCFGDIR/rsyncd.conf
928
929        # Configurar acceso a Rsync.
930        sed -e "s/CLIENTUSER/$OPENGNSYS_CLIENT_USER/g" \
931                $WORKDIR/opengnsys/repoman/etc/rsyncd.conf.tmpl > $RSYNCCFGDIR/rsyncd.conf
932        sed -e "s/CLIENTUSER/$OPENGNSYS_CLIENT_USER/g" \
933            -e "s/CLIENTPASSWORD/$OPENGNSYS_CLIENT_PASSWD/g" \
934                $WORKDIR/opengnsys/repoman/etc/rsyncd.secrets.tmpl > $RSYNCCFGDIR/rsyncd.secrets
935        chown root.root $RSYNCCFGDIR/rsyncd.secrets
936        chmod 600 $RSYNCCFGDIR/rsyncd.secrets
937
938        # Habilitar Rsync y reiniciar Inetd.
939        if [ -n "$RSYNCSERV" ]; then
[4666588]940                if [ -f /etc/default/rsync ]; then
941                        perl -pi -e 's/RSYNC_ENABLE=.*/RSYNC_ENABLE=inetd/' /etc/default/rsync
942                fi
[f243a47]943                if [ -f $INETDCFGDIR/rsync ]; then
944                        perl -pi -e 's/disable.*/disable = no/' $INETDCFGDIR/rsync
945                else
946                        cat << EOT > $INETDCFGDIR/rsync
947service rsync
948{
949        disable = no
950        socket_type = stream
951        wait = no
952        user = root
953        server = $(which rsync)
954        server_args = --daemon
955        log_on_failure += USERID
956        flags = IPv6
957}
958EOT
959                fi
[e70925a]960                service=$RSYNCSERV $ENABLESERVICE
961                service=$INETDSERV $STARTSERVICE
962        fi
963
964        echoAndLog "${FUNCNAME}(): Added Rsync configuration."
965        return 0
966}
967
968       
969########################################################################
[b6906f7]970## Configuracion servicio DHCP
971########################################################################
972
[e4b1572]973# Configurar servicios DHCP.
[7586ca3]974function dhcpConfigure()
975{
[836a7597]976        echoAndLog "${FUNCNAME}(): Sample DHCP configuration."
[a555f49]977
[d168a46]978        local errcode=0
979        local i=0
980        local dev=""
981
982        backupFile $DHCPCFGDIR/dhcpd.conf
983        for dev in ${DEVICE[*]}; do
[01a9904]984                if [ -n "${SERVERIP[i]}" ]; then
[d168a46]985                        backupFile $DHCPCFGDIR/dhcpd-$dev.conf
[e4b1572]986                        sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
987                            -e "s/NETIP/${NETIP[i]}/g" \
988                            -e "s/NETMASK/${NETMASK[i]}/g" \
989                            -e "s/NETBROAD/${NETBROAD[i]}/g" \
990                            -e "s/ROUTERIP/${ROUTERIP[i]}/g" \
[d168a46]991                            -e "s/DNSIP/$DNSIP/g" \
992                            $WORKDIR/opengnsys/server/etc/dhcpd.conf.tmpl > $DHCPCFGDIR/dhcpd-$dev.conf || errcode=1
993                fi
994                let i++
995        done
996        if [ $errcode -ne 0 ]; then
[b25fc47]997                errorAndLog "${FUNCNAME}(): error while configuring DHCP server"
[a555f49]998                return 1
999        fi
[d168a46]1000        ln -f $DHCPCFGDIR/dhcpd-$DEFAULTDEV.conf $DHCPCFGDIR/dhcpd.conf
[53fba30]1001        service=$DHCPSERV
1002        $ENABLESERVICE; $STARTSERVICE
[d168a46]1003        echoAndLog "${FUNCNAME}(): Sample DHCP configured in \"$DHCPCFGDIR\"."
[a555f49]1004        return 0
[892606b9]1005}
1006
1007
[a01156a]1008#####################################################################
1009####### Funciones específicas de la instalación de Opengnsys
1010#####################################################################
1011
[49c6891]1012# Copiar ficheros del OpenGnSys Web Console.
[7586ca3]1013function installWebFiles()
1014{
[dce072b]1015        echoAndLog "${FUNCNAME}(): Installing web files..."
[e4b1572]1016        cp -a $WORKDIR/opengnsys/admin/WebConsole/* $INSTALL_TARGET/www   #*/ comentario para doxigen
[7586ca3]1017        if [ $? != 0 ]; then
[dce072b]1018                errorAndLog "${FUNCNAME}(): Error copying web files."
[7586ca3]1019                exit 1
1020        fi
1021        find $INSTALL_TARGET/www -name .svn -type d -exec rm -fr {} \; 2>/dev/null
[813f617]1022        # Descomprimir XAJAX.
[b83843c]1023        unzip -o $WORKDIR/opengnsys/admin/xajax_0.5_standard.zip -d $INSTALL_TARGET/www/xajax
[7586ca3]1024        # Cambiar permisos para ficheros especiales.
[e6d22c6]1025        chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/images/{fotos,iconos}
[b7bd0df]1026        chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/tmp/
[dce072b]1027        echoAndLog "${FUNCNAME}(): Web files installed successfully."
[7586ca3]1028}
1029
1030# Configuración específica de Apache.
[73a1bd6]1031function installWebConsoleApacheConf()
[a01156a]1032{
1033        if [ $# -ne 2 ]; then
[dce072b]1034                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]1035                exit 1
1036        fi
1037
1038        local path_opengnsys_base=$1
1039        local path_apache2_confd=$2
[30837bb]1040        local CONSOLEDIR=${path_opengnsys_base}/www
[a01156a]1041
[892606b9]1042        if [ ! -d $path_apache2_confd ]; then
[dce072b]1043                errorAndLog "${FUNCNAME}(): path to apache2 conf.d can not found, verify your server installation"
[892606b9]1044                return 1
1045        fi
1046
[7586ca3]1047        mkdir -p $path_apache2_confd/{sites-available,sites-enabled}
[892606b9]1048
[dce072b]1049        echoAndLog "${FUNCNAME}(): creating apache2 config file.."
[a01156a]1050
[3ce53a7]1051        # Activar HTTPS.
[7825e9e]1052        $APACHESSLMOD
[643ca8c]1053        $APACHEENABLESSL
1054        $APACHEMAKECERT
[d725a41]1055
[30837bb]1056        # Genera configuración de consola web a partir del fichero plantilla.
1057        sed -e "s/CONSOLEDIR/${CONSOLEDIR//\//\\/}/g" \
1058                $WORKDIR/opengnsys/server/etc/apache.conf.tmpl > $path_opengnsys_base/etc/apache.conf
[a01156a]1059
[53fba30]1060        ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/$APACHESITESDIR/$APACHEOGSITE
[643ca8c]1061        $APACHEENABLEOG
[a01156a]1062        if [ $? -ne 0 ]; then
[dce072b]1063                errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation"
[a01156a]1064                return 1
1065        else
[dce072b]1066                echoAndLog "${FUNCNAME}(): config file created and linked, restarting apache daemon"
[53fba30]1067                service=$APACHESERV
1068                $ENABLESERVICE; $STARTSERVICE
[a01156a]1069                return 0
1070        fi
1071}
1072
[8fc9552]1073
[5d6bf97]1074# Crear documentación Doxygen para la consola web.
1075function makeDoxygenFiles()
1076{
1077        echoAndLog "${FUNCNAME}(): Making Doxygen web files..."
1078        $WORKDIR/opengnsys/installer/ogGenerateDoc.sh \
1079                        $WORKDIR/opengnsys/client/engine $INSTALL_TARGET/www
1080        if [ ! -d "$INSTALL_TARGET/www/html" ]; then
1081                errorAndLog "${FUNCNAME}(): unable to create Doxygen web files."
[ead38fb]1082                return 1
[5d6bf97]1083        fi
1084        mv "$INSTALL_TARGET/www/html" "$INSTALL_TARGET/www/api"
1085        chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/api
1086        echoAndLog "${FUNCNAME}(): Doxygen web files created successfully."
1087}
1088
1089
[a01156a]1090# Crea la estructura base de la instalación de opengnsys
[eb9424f]1091function createDirs()
[a01156a]1092{
1093        if [ $# -ne 1 ]; then
[dce072b]1094                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]1095                exit 1
1096        fi
1097
[eb9424f]1098        local path_opengnsys_base="$1"
[a01156a]1099
[eb9424f]1100        # Crear estructura de directorios.
[dce072b]1101        echoAndLog "${FUNCNAME}(): creating directory paths in $path_opengnsys_base"
[a01156a]1102        mkdir -p $path_opengnsys_base
1103        mkdir -p $path_opengnsys_base/bin
[5c33840]1104        mkdir -p $path_opengnsys_base/client
[49c6891]1105        mkdir -p $path_opengnsys_base/doc
[5c33840]1106        mkdir -p $path_opengnsys_base/etc
[a01156a]1107        mkdir -p $path_opengnsys_base/lib
[1cc5697]1108        mkdir -p $path_opengnsys_base/log/clients
[eb9424f]1109        ln -fs $path_opengnsys_base/log /var/log/opengnsys
[7586ca3]1110        mkdir -p $path_opengnsys_base/sbin
[a01156a]1111        mkdir -p $path_opengnsys_base/www
[5c33840]1112        mkdir -p $path_opengnsys_base/images
[87c7b02]1113        mkdir -p $TFTPCFGDIR
[63fd1ba]1114        ln -fs $TFTPCFGDIR $path_opengnsys_base/tftpboot
[eb9424f]1115        mkdir -p $path_opengnsys_base/tftpboot/pxelinux.cfg
[cfad47b]1116        mkdir -p $path_opengnsys_base/tftpboot/menu.lst
[a01156a]1117        if [ $? -ne 0 ]; then
[dce072b]1118                errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?"
[a01156a]1119                return 1
1120        fi
1121
[eb9424f]1122        # Crear usuario ficticio.
1123        if id -u $OPENGNSYS_CLIENT_USER &>/dev/null; then
1124                echoAndLog "${FUNCNAME}(): user \"$OPENGNSYS_CLIENT_USER\" is already created"
1125        else
1126                echoAndLog "${FUNCNAME}(): creating OpenGnSys user"
1127                useradd $OPENGNSYS_CLIENT_USER 2>/dev/null
1128                if [ $? -ne 0 ]; then
1129                        errorAndLog "${FUNCNAME}(): error creating OpenGnSys user"
1130                        return 1
1131                fi
1132        fi
1133
1134        # Establecer los permisos básicos.
1135        echoAndLog "${FUNCNAME}(): setting directory permissions"
[5eb61a6]1136        chmod -R 775 $path_opengnsys_base/{log/clients,images}
1137        chown -R :$OPENGNSYS_CLIENT_USER $path_opengnsys_base/{log/clients,images}
[eb9424f]1138        if [ $? -ne 0 ]; then
1139                errorAndLog "${FUNCNAME}(): error while setting permissions"
1140                return 1
1141        fi
1142
[7669bca]1143        # Mover el fichero de registro de instalación al directorio de logs.
[acfb07d]1144        echoAndLog "${FUNCNAME}(): moving installation log file"
1145        mv $LOG_FILE $OGLOGFILE && LOG_FILE=$OGLOGFILE
[7669bca]1146        chmod 600 $LOG_FILE
[acfb07d]1147
[dce072b]1148        echoAndLog "${FUNCNAME}(): directory paths created"
[a01156a]1149        return 0
1150}
1151
[463a1d49]1152# Copia ficheros de configuración y ejecutables genéricos del servidor.
[73a1bd6]1153function copyServerFiles ()
[e0edc14]1154{
[463a1d49]1155        if [ $# -ne 1 ]; then
[879689f]1156                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[463a1d49]1157                exit 1
1158        fi
1159
[7caf5a7c]1160        local path_opengnsys_base="$1"
[463a1d49]1161
[cfad47b]1162        local SOURCES=( server/tftpboot \
[7caf5a7c]1163                        server/bin \
1164                        repoman/bin \
[42a0e41]1165                        admin/Sources/Services/ogAdmServerAux
1166                        admin/Sources/Services/ogAdmRepoAux
[7caf5a7c]1167                        installer/opengnsys_uninstall.sh \
1168                        installer/opengnsys_update.sh \
[79c26a8]1169                        installer/install_ticket_wolunicast.sh \
[7caf5a7c]1170                        doc )
[cfad47b]1171        local TARGETS=( tftpboot \
[7caf5a7c]1172                        bin \
1173                        bin \
[42a0e41]1174                        sbin \
1175                        sbin \
[7caf5a7c]1176                        lib \
1177                        lib \
[4f38050]1178                        lib \
[7caf5a7c]1179                        doc )
[463a1d49]1180
1181        if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then
[879689f]1182                errorAndLog "${FUNCNAME}(): inconsistent number of array items"
[463a1d49]1183                exit 1
1184        fi
1185
[879689f]1186        echoAndLog "${FUNCNAME}(): copying files to server directories"
[f2bb433]1187
[8457092]1188        pushd $WORKDIR/opengnsys
[463a1d49]1189        local i
1190        for (( i = 0; i < ${#SOURCES[@]}; i++ )); do
1191                if [ -f "${SOURCES[$i]}" ]; then
[879689f]1192                        echoAndLog "Copying ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
[b5aae72]1193                        cp -a "${SOURCES[$i]}" "${path_opengnsys_base}/${TARGETS[$i]}"
[8457092]1194                elif [ -d "${SOURCES[$i]}" ]; then
[879689f]1195                        echoAndLog "Copying content of ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
[8457092]1196                        cp -a "${SOURCES[$i]}"/* "${path_opengnsys_base}/${TARGETS[$i]}"
1197        else
1198                        echoAndLog "Warning: Unable to copy ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
[463a1d49]1199                fi
1200        done
[7586ca3]1201        popd
[892606b9]1202}
1203
[7586ca3]1204####################################################################
[5eb61a6]1205### Funciones de compilación de código fuente de servicios
[7586ca3]1206####################################################################
1207
[5eb61a6]1208# Compilar los servicios de OpenGnSys
[7586ca3]1209function servicesCompilation ()
1210{
[13a01a7]1211        local hayErrores=0
[0795938]1212
[49c6891]1213        # Compilar OpenGnSys Server
1214        echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Server"
[7b61735]1215        pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmServer
[d168a46]1216        make && mv ogAdmServer $INSTALL_TARGET/sbin
[13a01a7]1217        if [ $? -ne 0 ]; then
[49c6891]1218                echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Server"
[13a01a7]1219                hayErrores=1
1220        fi
[7586ca3]1221        popd
[49c6891]1222        # Compilar OpenGnSys Repository Manager
1223        echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Repository Manager"
[7b61735]1224        pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepo
[d168a46]1225        make && mv ogAdmRepo $INSTALL_TARGET/sbin
[13a01a7]1226        if [ $? -ne 0 ]; then
[49c6891]1227                echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Repository Manager"
[13a01a7]1228                hayErrores=1
1229        fi
[8125e7c]1230        popd
[4984660]1231        # Compilar OpenGnSys Agent
1232        echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Agent"
[7b61735]1233        pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmAgent
[d168a46]1234        make && mv ogAdmAgent $INSTALL_TARGET/sbin
[4984660]1235        if [ $? -ne 0 ]; then
1236                echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Agent"
1237                hayErrores=1
1238        fi
1239        popd   
[49c6891]1240        # Compilar OpenGnSys Client
1241        echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Client"
[7b61735]1242        pushd $WORKDIR/opengnsys/admin/Sources/Clients/ogAdmClient
[2338c95f]1243        make && mv ogAdmClient ../../../../client/shared/bin
[13a01a7]1244        if [ $? -ne 0 ]; then
[49c6891]1245                echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Client"
[13a01a7]1246                hayErrores=1
1247        fi
[318efac]1248        popd
[13a01a7]1249
1250        return $hayErrores
[b6906f7]1251}
1252
[7b61735]1253####################################################################
1254### Funciones de copia de la Interface de administración
1255####################################################################
1256
1257# Copiar carpeta de Interface
[c1e00e4]1258function copyInterfaceAdm ()
[7b61735]1259{
1260        local hayErrores=0
1261       
[fbd9bcc]1262        # Crear carpeta y copiar Interface
[7b61735]1263        echoAndLog "${FUNCNAME}(): Copying Administration Interface Folder"
[fbd9bcc]1264        cp -ar $WORKDIR/opengnsys/admin/Interface $INSTALL_TARGET/client/interfaceAdm
[7b61735]1265        if [ $? -ne 0 ]; then
1266                echoAndLog "${FUNCNAME}(): error while copying Administration Interface Folder"
1267                hayErrores=1
1268        fi
[b6f1726]1269        chown $OPENGNSYS_CLIENT_USER:$OPENGNSYS_CLIENT_USER $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso
[f6c1d2b]1270        chmod 700 $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso
[7b61735]1271
1272        return $hayErrores
1273}
[b6906f7]1274
[892606b9]1275####################################################################
1276### Funciones instalacion cliente opengnsys
1277####################################################################
1278
[73a1bd6]1279function copyClientFiles()
[7586ca3]1280{
[d168a46]1281        local errstatus=0
[a555f49]1282
[49c6891]1283        echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files."
[73a1bd6]1284        cp -a $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client
[d47d38d]1285        if [ $? -ne 0 ]; then
[9ef8920]1286                errorAndLog "${FUNCNAME}(): error while copying client estructure"
[d168a46]1287                errstatus=1
[9ef8920]1288        fi
[d47d38d]1289        find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null
[9ef8920]1290       
[49c6891]1291        echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files."
[d47d38d]1292        mkdir -p $INSTALL_TARGET/client/lib/engine/bin
[73a1bd6]1293        cp -a $WORKDIR/opengnsys/client/engine/*.lib* $INSTALL_TARGET/client/lib/engine/bin
[a555f49]1294        if [ $? -ne 0 ]; then
1295                errorAndLog "${FUNCNAME}(): error while copying engine files"
[d168a46]1296                errstatus=1
[a555f49]1297        fi
[9ef8920]1298       
[d168a46]1299        if [ $errstatus -eq 0 ]; then
[9ef8920]1300                echoAndLog "${FUNCNAME}(): client copy files success."
1301        else
1302                errorAndLog "${FUNCNAME}(): client copy files with errors"
1303        fi
1304
[d168a46]1305        return $errstatus
[463a1d49]1306}
1307
1308
[e70925a]1309# Crear cliente OpenGnSys 1.0.2 y posteriores.
[5ad5dcc]1310function clientCreate()
[813f617]1311{
[89179ff]1312        local DOWNLOADURL="http://$OPENGNSYS_SERVER/downloads"
[4b96166]1313        local FILENAME=ogLive-raring-3.8.0-22-generic-r3836.iso         # 1.0.5-rc3
[0b85cc93]1314        local TARGETFILE=$INSTALL_TARGET/lib/$FILENAME
1315        local TMPDIR=/tmp/${FILENAME%.iso}
[d168a46]1316 
[79c26a8]1317        # Descargar cliente, si es necesario.
1318        if [ -s $PROGRAMDIR/$FILENAME ]; then
1319                echoAndLog "${FUNCNAME}(): Moving $PROGRAMDIR/$FILENAME file to $(dirname $TARGETFILE)"
1320                mv $PROGRAMDIR/$FILENAME $TARGETFILE
1321        else
1322                echoAndLog "${FUNCNAME}(): Loading Client"
1323                wget $DOWNLOADURL/$FILENAME -O $TARGETFILE
1324        fi
[0b85cc93]1325        if [ ! -s $TARGETFILE ]; then
[6ef9f23]1326                errorAndLog "${FUNCNAME}(): Error loading OpenGnSys Client"
[813f617]1327                return 1
1328        fi
[79c26a8]1329        # Montar imagen, copiar cliente ogclient y desmontar.
[5ad5dcc]1330        echoAndLog "${FUNCNAME}(): Copying Client files"
[d168a46]1331        mkdir -p $TMPDIR
[0b85cc93]1332        mount -o loop,ro $TARGETFILE $TMPDIR
[73a1bd6]1333        cp -av $TMPDIR/ogclient $INSTALL_TARGET/tftpboot
[5ad5dcc]1334        umount $TMPDIR
1335        rmdir $TMPDIR
[6ef01d9]1336        # Asignar la clave cliente para acceso a Samba.
1337        echoAndLog "${FUNCNAME}(): Set client access key"
1338        echo -ne "$OPENGNSYS_CLIENT_PASSWD\n$OPENGNSYS_CLIENT_PASSWD\n" | \
1339                        $INSTALL_TARGET/bin/setsmbpass
[0b85cc93]1340
[813f617]1341        # Establecer los permisos.
[19fdf38]1342        find -L $INSTALL_TARGET/tftpboot -type d -exec chmod 755 {} \;
1343        find -L $INSTALL_TARGET/tftpboot -type f -exec chmod 644 {} \;
[813f617]1344        chown -R :$OPENGNSYS_CLIENT_USER $INSTALL_TARGET/tftpboot/ogclient
[5eb61a6]1345        chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/tftpboot/{menu.lst,pxelinux.cfg}
[6ef01d9]1346
[e8963d0]1347        # Ofrecer md5 del kernel y vmlinuz para ogupdateinitrd en cache
[73a1bd6]1348        cp -av $INSTALL_TARGET/tftpboot/ogclient/ogvmlinuz* $INSTALL_TARGET/tftpboot
1349        cp -av $INSTALL_TARGET/tftpboot/ogclient/oginitrd.img* $INSTALL_TARGET/tftpboot
[6ef01d9]1350
[813f617]1351        echoAndLog "${FUNCNAME}(): Client generation success"
1352}
1353
1354
[49c6891]1355# Configuración básica de servicios de OpenGnSys
[cc7eab7]1356function openGnsysConfigure()
1357{
[d168a46]1358        local i=0
1359        local dev=""
[7d4ce64]1360        local CONSOLEURL
[d168a46]1361
[9ee62ad]1362        echoAndLog "${FUNCNAME}(): Copying init files."
[42a0e41]1363        cp -a $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys
1364        cp -a $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.default /etc/default/opengnsys
[9ee62ad]1365        echoAndLog "${FUNCNAME}(): Creating cron files."
[57cf15b]1366        echo "* * * * *   root   [ -x $INSTALL_TARGET/bin/opengnsys.cron ] && $INSTALL_TARGET/bin/opengnsys.cron" > /etc/cron.d/opengnsys
[9ee62ad]1367        echo "* * * * *   root   [ -x $INSTALL_TARGET/bin/torrent-creator ] && $INSTALL_TARGET/bin/torrent-creator" > /etc/cron.d/torrentcreator
[8fc9552]1368        echo "5 * * * *   root   [ -x $INSTALL_TARGET/bin/torrent-tracker ] && $INSTALL_TARGET/bin/torrent-tracker" > /etc/cron.d/torrenttracker
[dc762088]1369        echo "* * * * *   root   [ -x $INSTALL_TARGET/bin/deletepreimage ] && $INSTALL_TARGET/bin/deletepreimage" > /etc/cron.d/imagedelete
[d168a46]1370
[700299b]1371        echoAndLog "${FUNCNAME}(): Creating logrotate configuration file."
1372        sed -e "s/OPENGNSYSDIR/${INSTALL_TARGET//\//\\/}/g" \
1373                $WORKDIR/opengnsys/server/etc/logrotate.tmpl > /etc/logrotate.d/opengnsys
1374
[d168a46]1375        echoAndLog "${FUNCNAME}(): Creating OpenGnSys config files."
1376        for dev in ${DEVICE[*]}; do
1377                if [ -n "${SERVERIP[i]}" ]; then
1378                        sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
1379                            -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
1380                            -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" \
1381                            -e "s/DATABASE/$OPENGNSYS_DATABASE/g" \
1382                                $WORKDIR/opengnsys/admin/Sources/Services/ogAdmServer/ogAdmServer.cfg > $INSTALL_TARGET/etc/ogAdmServer-$dev.cfg
1383                        sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
1384                                $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepo/ogAdmRepo.cfg > $INSTALL_TARGET/etc/ogAdmRepo-$dev.cfg
1385                        sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
1386                            -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
1387                            -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" \
1388                            -e "s/DATABASE/$OPENGNSYS_DATABASE/g" \
1389                                $WORKDIR/opengnsys/admin/Sources/Services/ogAdmAgent/ogAdmAgent.cfg > $INSTALL_TARGET/etc/ogAdmAgent-$dev.cfg
[7d4ce64]1390                        CONSOLEURL="http://${SERVERIP[i]}/opengnsys"
[d168a46]1391                        sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
1392                            -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
1393                            -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" \
1394                            -e "s/DATABASE/$OPENGNSYS_DATABASE/g" \
[b22305e]1395                            -e "s/OPENGNSYSURL/${CONSOLEURL//\//\\/}/g" \
[d168a46]1396                                $INSTALL_TARGET/www/controlacceso.php > $INSTALL_TARGET/www/controlacceso-$dev.php
1397                        sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
[d7f8305]1398                            -e "s/OPENGNSYSURL/${CONSOLEURL//\//\\/}/g" \
[d168a46]1399                                $WORKDIR/opengnsys/admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient-$dev.cfg
[7d4ce64]1400                        if [ "$dev" == "$DEFAULTDEV" ]; then
[03cfd6e]1401                                OPENGNSYS_CONSOLEURL="${CONSOLEURL/http:/https:}"
[7d4ce64]1402                        fi
[d168a46]1403                fi
1404                let i++
1405        done
1406        ln -f $INSTALL_TARGET/etc/ogAdmServer-$DEFAULTDEV.cfg $INSTALL_TARGET/etc/ogAdmServer.cfg
1407        ln -f $INSTALL_TARGET/etc/ogAdmRepo-$DEFAULTDEV.cfg $INSTALL_TARGET/etc/ogAdmRepo.cfg
1408        ln -f $INSTALL_TARGET/etc/ogAdmAgent-$DEFAULTDEV.cfg $INSTALL_TARGET/etc/ogAdmAgent.cfg
1409        ln -f $INSTALL_TARGET/client/etc/ogAdmClient-$DEFAULTDEV.cfg $INSTALL_TARGET/client/etc/ogAdmClient.cfg
1410        ln -f $INSTALL_TARGET/www/controlacceso-$DEFAULTDEV.php $INSTALL_TARGET/www/controlacceso.php
1411        chown root:root $INSTALL_TARGET/etc/{ogAdmServer,ogAdmAgent}*.cfg
1412        chmod 600 $INSTALL_TARGET/etc/{ogAdmServer,ogAdmAgent}*.cfg
1413        chown $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/controlacceso*.php
1414        chmod 600 $INSTALL_TARGET/www/controlacceso*.php
[9ee62ad]1415        echoAndLog "${FUNCNAME}(): Starting OpenGnSys services."
[53fba30]1416        service="opengnsys"
1417        $ENABLESERVICE; $STARTSERVICE
[cc7eab7]1418}
1419
[b6906f7]1420
[a01156a]1421#####################################################################
[180a07dd]1422#######  Función de resumen informativo de la instalación
1423#####################################################################
1424
[813f617]1425function installationSummary()
1426{
[eb9424f]1427        # Crear fichero de versión y revisión, si no existe.
1428        local VERSIONFILE="$INSTALL_TARGET/doc/VERSION.txt"
[0b85cc93]1429        local REVISION=$(LANG=C svn info $SVN_URL|awk '/Rev:/ {print "r"$4}')
[eb9424f]1430        [ -f $VERSIONFILE ] || echo "OpenGnSys" >$VERSIONFILE
1431        perl -pi -e "s/($| r[0-9]*)/ $REVISION/" $VERSIONFILE
1432
1433        # Mostrar información.
[180a07dd]1434        echo
[49c6891]1435        echoAndLog "OpenGnSys Installation Summary"
[180a07dd]1436        echo       "=============================="
[eb9424f]1437        echoAndLog "Project version:                  $(cat $VERSIONFILE 2>/dev/null)"
[49c6891]1438        echoAndLog "Installation directory:           $INSTALL_TARGET"
[acfb07d]1439        echoAndLog "Installation log file:            $LOG_FILE"
[49c6891]1440        echoAndLog "Repository directory:             $INSTALL_TARGET/images"
[d168a46]1441        echoAndLog "DHCP configuration directory:     $DHCPCFGDIR"
[87c7b02]1442        echoAndLog "TFTP configuration directory:     $TFTPCFGDIR"
1443        echoAndLog "Samba configuration directory:    $SAMBACFGDIR"
[49c6891]1444        echoAndLog "Web Console URL:                  $OPENGNSYS_CONSOLEURL"
[35b0ef1]1445        echoAndLog "Web Console access data:          specified in installer script"
[180a07dd]1446        echo
1447        echoAndLog "Post-Installation Instructions:"
1448        echo       "==============================="
[0ad88eb]1449        echoAndLog "Change IPTables and SELinux system configuration, if needed."
[180a07dd]1450        echoAndLog "Review or edit all configuration files."
[c5ce04c]1451        echoAndLog "Insert DHCP configuration data and restart service."
[af5efd6]1452        echoAndLog "Optional: Log-in as Web Console admin user."
1453        echoAndLog " - Review default Organization data and assign access to users."
[180a07dd]1454        echoAndLog "Log-in as Web Console organization user."
[e4b1572]1455        echoAndLog " - Insert OpenGnSys data (labs, computers, menus, etc)."
[180a07dd]1456echo
1457}
1458
1459
1460
1461#####################################################################
[49c6891]1462####### Proceso de instalación de OpenGnSys
[a01156a]1463#####################################################################
1464
[49c6891]1465echoAndLog "OpenGnSys installation begins at $(date)"
[6090a2d]1466pushd $WORKDIR
[cc7eab7]1467
[af5efd6]1468# Detectar datos iniciales de auto-configuración del instalador.
[d168a46]1469autoConfigure
1470
1471# Detectar parámetros de red y comprobar si hay conexión.
1472getNetworkSettings
1473if [ $? -ne 0 ]; then
1474        errorAndLog "Error reading default network settings."
1475        exit 1
1476fi
[07c3a59]1477checkNetworkConnection
1478if [ $? -ne 0 ]; then
1479        errorAndLog "Error connecting to server. Causes:"
1480        errorAndLog " - Network is unreachable, review devices parameters."
1481        errorAndLog " - You are inside a private network, configure the proxy service."
1482        errorAndLog " - Server is temporally down, try agian later."
1483        exit 1
1484fi
[7586ca3]1485
[e0edc14]1486# Detener servicios de OpenGnSys, si están activos previamente.
1487[ -f /etc/init.d/opengnsys ] && /etc/init.d/opengnsys stop
1488
[318efac]1489# Actualizar repositorios
[83518d5]1490updatePackageList
[318efac]1491
[b6906f7]1492# Instalación de dependencias (paquetes de sistema operativo).
[a01156a]1493declare -a notinstalled
1494checkDependencies DEPENDENCIES notinstalled
1495if [ $? -ne 0 ]; then
1496        installDependencies notinstalled
1497        if [ $? -ne 0 ]; then
1498                echoAndLog "Error while installing some dependeces, please verify your server installation before continue"
1499                exit 1
1500        fi
1501fi
[109e8b2]1502if [ -n "$INSTALLEXTRADEPS" ]; then
1503        echoAndLog "Installing extra dependencies"
1504        for (( i=0; i<${#INSTALLEXTRADEPS[*]}; i++ )); do
1505                eval ${INSTALLEXTRADEPS[i]}
1506        done
1507fi     
[a01156a]1508
[ff6c349]1509# Detectar datos de auto-configuración después de instalar paquetes.
1510autoConfigurePost
1511
[49c6891]1512# Arbol de directorios de OpenGnSys.
[eb9424f]1513createDirs ${INSTALL_TARGET}
[a01156a]1514if [ $? -ne 0 ]; then
1515        errorAndLog "Error while creating directory paths!"
1516        exit 1
1517fi
[b6906f7]1518
[1e7eaab]1519# Si es necesario, descarga el repositorio de código en directorio temporal
[49c6891]1520if [ $USESVN -eq 1 ]; then
[1e7eaab]1521        svnExportCode $SVN_URL
1522        if [ $? -ne 0 ]; then
1523                errorAndLog "Error while getting code from svn"
1524                exit 1
1525        fi
1526else
1527        ln -fs "$(dirname $PROGRAMDIR)" opengnsys
[a01156a]1528fi
1529
[49c6891]1530# Compilar código fuente de los servicios de OpenGnSys.
[b6906f7]1531servicesCompilation
[13a01a7]1532if [ $? -ne 0 ]; then
1533        errorAndLog "Error while compiling OpenGnsys services"
1534        exit 1
1535fi
[b6906f7]1536
[7b61735]1537# Copiar carpeta Interface entre administración y motor de clonación.
[c1e00e4]1538copyInterfaceAdm
[7b61735]1539if [ $? -ne 0 ]; then
[c1e00e4]1540        errorAndLog "Error while copying Administration Interface"
[7b61735]1541        exit 1
1542fi
1543
[e70925a]1544# Configuración de TFTP.
[318efac]1545tftpConfigure
[b6906f7]1546
[e70925a]1547# Configuración de Samba.
[8fc9552]1548smbConfigure
1549if [ $? -ne 0 ]; then
[c1e00e4]1550        errorAndLog "Error while configuring Samba server!"
[8fc9552]1551        exit 1
1552fi
1553
[e70925a]1554# Configuración de Rsync.
1555rsyncConfigure
1556
1557# Configuración ejemplo DHCP.
[b6906f7]1558dhcpConfigure
[a555f49]1559if [ $? -ne 0 ]; then
1560        errorAndLog "Error while copying your dhcp server files!"
1561        exit 1
1562fi
[b6906f7]1563
[49c6891]1564# Copiar ficheros de servicios OpenGnSys Server.
[73a1bd6]1565copyServerFiles ${INSTALL_TARGET}
[463a1d49]1566if [ $? -ne 0 ]; then
1567        errorAndLog "Error while copying the server files!"
1568        exit 1
1569fi
1570
[49c6891]1571# Instalar Base de datos de OpenGnSys Admin.
[b6906f7]1572isInArray notinstalled "mysql-server"
1573if [ $? -eq 0 ]; then
[53fba30]1574        service=$MYSQLSERV
1575        $ENABLESERVICE; $STARTSERVICE
[09bf701]1576        mysqlSetRootPassword "${MYSQL_ROOT_PASSWORD}"
[b6906f7]1577else
1578        mysqlGetRootPassword
1579fi
[463a1d49]1580
[09bf701]1581mysqlTestConnection "${MYSQL_ROOT_PASSWORD}"
[a01156a]1582if [ $? -ne 0 ]; then
1583        errorAndLog "Error while connection to mysql"
1584        exit 1
1585fi
[09bf701]1586mysqlDbExists ${OPENGNSYS_DATABASE}
[a01156a]1587if [ $? -ne 0 ]; then
[cc7eab7]1588        echoAndLog "Creating Web Console database"
[09bf701]1589        mysqlCreateDb ${OPENGNSYS_DATABASE}
[a01156a]1590        if [ $? -ne 0 ]; then
[cc7eab7]1591                errorAndLog "Error while creating Web Console database"
[a01156a]1592                exit 1
1593        fi
1594else
[cc7eab7]1595        echoAndLog "Web Console database exists, ommiting creation"
[a01156a]1596fi
1597
[09bf701]1598mysqlCheckUserExists ${OPENGNSYS_DB_USER}
[a01156a]1599if [ $? -ne 0 ]; then
1600        echoAndLog "Creating user in database"
[09bf701]1601        mysqlCreateAdminUserToDb ${OPENGNSYS_DATABASE} ${OPENGNSYS_DB_USER} "${OPENGNSYS_DB_PASSWD}"
[a01156a]1602        if [ $? -ne 0 ]; then
[cc7eab7]1603                errorAndLog "Error while creating database user"
[a01156a]1604                exit 1
1605        fi
1606
1607fi
1608
[09bf701]1609mysqlCheckDbIsEmpty ${OPENGNSYS_DATABASE}
[a01156a]1610if [ $? -eq 0 ]; then
1611        echoAndLog "Creating tables..."
[892606b9]1612        if [ -f $WORKDIR/$OPENGNSYS_DB_CREATION_FILE ]; then
[09bf701]1613                mysqlImportSqlFileToDb ${OPENGNSYS_DATABASE} $WORKDIR/$OPENGNSYS_DB_CREATION_FILE
[a01156a]1614        else
[892606b9]1615                errorAndLog "Unable to locate $WORKDIR/$OPENGNSYS_DB_CREATION_FILE!!"
[a01156a]1616                exit 1
1617        fi
[bc7dfe7]1618else
1619        # Si existe fichero ogBDAdmin-VersLocal-VersRepo.sql; aplicar cambios.
1620        INSTVERSION=$(awk '{print $2}' $INSTALL_TARGET/doc/VERSION.txt)
1621        REPOVERSION=$(awk '{print $2}' $WORKDIR/opengnsys/doc/VERSION.txt)
[295b4ab]1622        OPENGNSYS_DB_UPDATE_FILE="opengnsys/admin/Database/$OPENGNSYS_DATABASE-$INSTVERSION-$REPOVERSION.sql"
1623        if [ -f $WORKDIR/$OPENGNSYS_DB_UPDATE_FILE ]; then
[bc7dfe7]1624                echoAndLog "Updating tables from version $INSTVERSION to $REPOVERSION"
[09bf701]1625                mysqlImportSqlFileToDb ${OPENGNSYS_DATABASE} $WORKDIR/$OPENGNSYS_DB_UPDATE_FILE
[bc7dfe7]1626        else
1627                echoAndLog "Database unchanged."
1628        fi
[a01156a]1629fi
[09bf701]1630# Eliminar fichero temporal con credenciales de acceso a MySQL.
1631rm -f $TMPMYCNF
[a01156a]1632
1633# copiando paqinas web
[7586ca3]1634installWebFiles
[5d6bf97]1635# Generar páqinas web de documentación de la API
1636makeDoxygenFiles
[a01156a]1637
1638# creando configuracion de apache2
[5fcf180]1639installWebConsoleApacheConf $INSTALL_TARGET $APACHECFGDIR
[a01156a]1640if [ $? -ne 0 ]; then
[87c7b02]1641        errorAndLog "Error configuring Apache for OpenGnSys Admin"
[a01156a]1642        exit 1
1643fi
1644
1645popd
[892606b9]1646
[9ef8920]1647# Crear la estructura de los accesos al servidor desde el cliente (shared)
[73a1bd6]1648copyClientFiles
[9ef8920]1649if [ $? -ne 0 ]; then
1650        errorAndLog "Error creating client structure"
1651fi
1652
[d168a46]1653# Crear la estructura del cliente de OpenGnSys
[5ad5dcc]1654clientCreate
[a555f49]1655if [ $? -ne 0 ]; then
[813f617]1656        errorAndLog "Error creating client"
[a555f49]1657        exit 1
1658fi
[892606b9]1659
[65245d1]1660# Configuración de servicios de OpenGnSys
1661openGnsysConfigure
1662
[180a07dd]1663# Mostrar sumario de la instalación e instrucciones de post-instalación.
1664installationSummary
1665
[077dd7c5]1666#rm -rf $WORKDIR
[49c6891]1667echoAndLog "OpenGnSys installation finished at $(date)"
[05d2e03]1668exit 0
[2308fc7]1669
Note: See TracBrowser for help on using the repository browser.