source: installer/opengnsys_installer.sh @ 1452cbd

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 1452cbd was e9722d2, checked in by adv <adv@…>, 14 years ago

version1.0 #368 instalador y actualizador usando cliente 1.0.1

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

  • Property mode set to 100755
File size: 41.4 KB
RevLine 
[a01156a]1#!/bin/bash
2
3#####################################################################
4####### Script instalador OpenGnsys
5####### autor: Luis Guillén <lguillen@unizar.es>
6#####################################################################
7
8
[1e7eaab]9
[8fc9552]10####  AVISO: Editar configuración de acceso por defecto a la Base de Datos.
[4a3cd1f]11MYSQL_ROOT_PASSWORD="passwordroot"      # Clave root de MySQL
12OPENGNSYS_DATABASE="ogAdmBD"            # Nombre de la base datos
13OPENGNSYS_DB_USER="usuog"               # Usuario de acceso
14OPENGNSYS_DB_PASSWD="passusuog"         # Clave del usuario
15
[8fc9552]16####  AVISO: NO EDITAR.
17#### configuración de acceso smb para clientes OG.
18OPENGNSYS_CLIENT_USER="opengnsys"               # Nombre del usuario
19OPENGNSYS_CLIENT_PASSWD="og"            # Clave del usuario opengnsys
20
21
[4a3cd1f]22
[1e7eaab]23# Sólo ejecutable por usuario root
24if [ "$(whoami)" != 'root' ]
25then
26        echo "ERROR: this program must run under root privileges!!"
27        exit 1
28fi
29
[c1e00e4]30# Detectar sistema operativo del servidor (debe soportar LSB).
31OSDISTRIB=$(lsb_release -is 2>/dev/null)
32# Array con las dependencias que deben estar instaladas, según de la distribución detectada.
33case "$OSDISTRIB" in
34        Ubuntu) DEPENDENCIES=( subversion apache2 php5 libapache2-mod-php5 mysql-server php5-mysql nfs-kernel-server dhcp3-server bittorrent tftp-hpa tftpd-hpa syslinux openbsd-inetd update-inetd build-essential g++-multilib libmysqlclient15-dev wget doxygen graphviz bittornado ctorrent samba unzip netpipes debootstrap schroot squashfs-tools )
35                ;;
36        *)      echo "ERROR: Distribution not supported by OpenGnSys."
37                exit 1 ;;
38esac
39
[1e7eaab]40# Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1).
[49c6891]41PROGRAMDIR=$(readlink -e $(dirname "$0"))
[07c3a59]42OPENGNSYS_SERVER="www.opengnsys.es"
[1e7eaab]43if [ -d "$PROGRAMDIR/../installer" ]; then
44    USESVN=0
45else
46    USESVN=1
[07c3a59]47    SVN_URL=http://$OPENGNSYS_SERVER/svn/branches/version1.0
[1e7eaab]48fi
49
[a01156a]50WORKDIR=/tmp/opengnsys_installer
[1e7eaab]51mkdir -p $WORKDIR
52
53INSTALL_TARGET=/opt/opengnsys
[13a01a7]54LOG_FILE=/tmp/opengnsys_installation.log
[a01156a]55
[4a3cd1f]56# Base de datos
[7510561]57OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/ogAdmBD.sql
[3aaf91d]58
[a01156a]59
60#####################################################################
61####### Algunas funciones útiles de propósito general:
62#####################################################################
[13a01a7]63function getDateTime()
[a01156a]64{
65        echo `date +%Y%m%d-%H%M%S`
66}
67
68# Escribe a fichero y muestra por pantalla
[13a01a7]69function echoAndLog()
[a01156a]70{
71        echo $1
72        FECHAHORA=`getDateTime`
73        echo "$FECHAHORA;$SSH_CLIENT;$1" >> $LOG_FILE
74}
75
[13a01a7]76function errorAndLog()
[a01156a]77{
78        echo "ERROR: $1"
79        FECHAHORA=`getDateTime`
80        echo "$FECHAHORA;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE
81}
82
83# comprueba si el elemento pasado en $2 esta en el array $1
[13a01a7]84function isInArray()
[a01156a]85{
86        if [ $# -ne 2 ]; then
[13a01a7]87                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]88                exit 1
89        fi
90
[13a01a7]91        echoAndLog "${FUNCNAME}(): checking if $2 is in $1"
[a01156a]92        local deps
[5c33840]93        eval "deps=( \"\${$1[@]}\" )"
[a01156a]94        elemento=$2
95
96        local is_in_array=1
97        # copia local del array del parametro 1
98        for (( i = 0 ; i < ${#deps[@]} ; i++ ))
99        do
100                if [ "${deps[$i]}" = "${elemento}" ]; then
101                        echoAndLog "isInArray(): $elemento found in array"
102                        is_in_array=0
103                fi
104        done
105
106        if [ $is_in_array -ne 0 ]; then
[13a01a7]107                echoAndLog "${FUNCNAME}(): $elemento NOT found in array"
[a01156a]108        fi
109
110        return $is_in_array
111
112}
113
114#####################################################################
115####### Funciones de manejo de paquetes Debian
116#####################################################################
117
[13a01a7]118function checkPackage()
[a01156a]119{
120        package=$1
121        if [ -z $package ]; then
[73cfa0a]122                errorAndLog "${FUNCNAME}(): parameter required"
[a01156a]123                exit 1
124        fi
[73cfa0a]125        echoAndLog "${FUNCNAME}(): checking if package $package exists"
[da8db11]126        dpkg -s $package &>/dev/null | grep Status | grep -qw install
[a01156a]127        if [ $? -eq 0 ]; then
[73cfa0a]128                echoAndLog "${FUNCNAME}(): package $package exists"
[a01156a]129                return 0
130        else
[73cfa0a]131                echoAndLog "${FUNCNAME}(): package $package doesn't exists"
[a01156a]132                return 1
133        fi
134}
135
136# recibe array con dependencias
137# por referencia deja un array con las dependencias no resueltas
138# devuelve 1 si hay alguna dependencia no resuelta
[13a01a7]139function checkDependencies()
[a01156a]140{
141        if [ $# -ne 2 ]; then
[73cfa0a]142                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]143                exit 1
144        fi
145
[73cfa0a]146        echoAndLog "${FUNCNAME}(): checking dependences"
[a01156a]147        uncompletedeps=0
148
149        # copia local del array del parametro 1
150        local deps
[5c33840]151        eval "deps=( \"\${$1[@]}\" )"
[a01156a]152
153        declare -a local_notinstalled
[5c33840]154
[a01156a]155        for (( i = 0 ; i < ${#deps[@]} ; i++ ))
156        do
157                checkPackage ${deps[$i]}
158                if [ $? -ne 0 ]; then
159                        local_notinstalled[$uncompletedeps]=$package
160                        let uncompletedeps=uncompletedeps+1
161                fi
162        done
163
164        # relleno el array especificado en $2 por referencia
165        for (( i = 0 ; i < ${#local_notinstalled[@]} ; i++ ))
166        do
167                eval "${2}[$i]=${local_notinstalled[$i]}"
168        done
169
170        # retorna el numero de paquetes no resueltos
[73cfa0a]171        echoAndLog "${FUNCNAME}(): dependencies uncompleted: $uncompletedeps"
[a01156a]172        return $uncompletedeps
173}
174
175# Recibe un array con las dependencias y lo instala
[13a01a7]176function installDependencies()
[a01156a]177{
178        if [ $# -ne 1 ]; then
[813f617]179                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]180                exit 1
181        fi
[813f617]182        echoAndLog "${FUNCNAME}(): installing uncompleted dependencies"
[a01156a]183
184        # copia local del array del parametro 1
185        local deps
[5c33840]186        eval "deps=( \"\${$1[@]}\" )"
[a01156a]187
188        local string_deps=""
189        for (( i = 0 ; i < ${#deps[@]} ; i++ ))
190        do
191                string_deps="$string_deps ${deps[$i]}"
192        done
193
194        if [ -z "${string_deps}" ]; then
[813f617]195                errorAndLog "${FUNCNAME}(): array of dependeces is empty"
[a01156a]196                exit 1
197        fi
198
199        OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND
200        export DEBIAN_FRONTEND=noninteractive
201
[813f617]202        echoAndLog "${FUNCNAME}(): now ${string_deps} will be installed"
[a01156a]203        apt-get -y install --force-yes ${string_deps}
204        if [ $? -ne 0 ]; then
[813f617]205                errorAndLog "${FUNCNAME}(): error installing dependencies"
[a01156a]206                return 1
207        fi
208
209        DEBIAN_FRONTEND=$OLD_DEBIAN_FRONTEND
[813f617]210        echoAndLog "${FUNCNAME}(): dependencies installed"
[a01156a]211}
212
[13a01a7]213# Hace un backup del fichero pasado por parámetro
214# deja un -last y uno para el día
215function backupFile()
216{
217        if [ $# -ne 1 ]; then
218                errorAndLog "${FUNCNAME}(): invalid number of parameters"
219                exit 1
220        fi
221
222        local fichero=$1
223        local fecha=`date +%Y%m%d`
224
225        if [ ! -f $fichero ]; then
226                errorAndLog "${FUNCNAME}(): file $fichero doesn't exists"
227                return 1
228        fi
229
230        echoAndLog "${FUNCNAME}(): realizando backup de $fichero"
231
232        # realiza una copia de la última configuración como last
233        cp -p $fichero "${fichero}-LAST"
234
235        # si para el día no hay backup lo hace, sino no
236        if [ ! -f "${fichero}-${fecha}" ]; then
237                cp -p $fichero "${fichero}-${fecha}"
238        fi
239
240        echoAndLog "${FUNCNAME}(): backup realizado"
241}
242
[a01156a]243#####################################################################
244####### Funciones para el manejo de bases de datos
245#####################################################################
246
247# This function set password to root
[13a01a7]248function mysqlSetRootPassword()
[a01156a]249{
250        if [ $# -ne 1 ]; then
[813f617]251                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]252                exit 1
253        fi
254
255        local root_mysql=$1
[813f617]256        echoAndLog "${FUNCNAME}(): setting root password in MySQL server"
[a01156a]257        /usr/bin/mysqladmin -u root password ${root_mysql}
258        if [ $? -ne 0 ]; then
[813f617]259                errorAndLog "${FUNCNAME}(): error while setting root password in MySQL server"
[a01156a]260                return 1
261        fi
[813f617]262        echoAndLog "${FUNCNAME}(): root password saved!"
[a01156a]263        return 0
264}
265
[892606b9]266# Si el servicio mysql esta ya instalado cambia la variable de la clave del root por la ya existente
[13a01a7]267function mysqlGetRootPassword(){
[892606b9]268        local pass_mysql
269        local pass_mysql2
[7c54b49]270        # Comprobar si MySQL está instalado con la clave de root por defecto.
271        if mysql -u root -p"$MYSQL_ROOT_PASSWORD" <<<"quit" 2>/dev/null; then
272                echoAndLog "${FUNCNAME}(): Using default mysql root password."
273        else
274                stty -echo
275                echo "Existe un servicio mysql ya instalado"
276                read -p  "Insertar clave de root de Mysql: " pass_mysql
277                echo ""
278                read -p "Confirmar clave:" pass_mysql2
279                echo ""
280                stty echo
281                if [ "$pass_mysql" == "$pass_mysql2" ] ;then
282                        MYSQL_ROOT_PASSWORD=$pass_mysql
283                        echo "La clave es: ${MYSQL_ROOT_PASSWORD}"
284                        return 0
285                else
286                        echo "Las claves no coinciden no se configura la clave del servidor de base de datos."
287                        echo "las operaciones con la base de datos daran error"
288                        return 1
289                fi
[892606b9]290        fi
291}
292
[a01156a]293# comprueba si puede conectar con mysql con el usuario root
294function mysqlTestConnection()
295{
296        if [ $# -ne 1 ]; then
297                errorAndLog "mysqlTestConnection(): invalid number of parameters"
298                exit 1
299        fi
300
301        local root_password="${1}"
302        echoAndLog "mysqlTestConnection(): checking connection to mysql..."
303        echo "" | mysql -uroot -p"${root_password}"
304        if [ $? -ne 0 ]; then
305                errorAndLog "mysqlTestConnection(): connection to mysql failed, check root password and if daemon is running!"
306                return 1
307        else
308                echoAndLog "mysqlTestConnection(): connection success"
309                return 0
310        fi
311}
312
313# comprueba si la base de datos existe
314function mysqlDbExists()
315{
316        if [ $# -ne 2 ]; then
317                errorAndLog "mysqlDbExists(): invalid number of parameters"
318                exit 1
319        fi
320
321        local root_password="${1}"
322        local database=$2
323        echoAndLog "mysqlDbExists(): checking if $database exists..."
324        echo "show databases" | mysql -uroot -p"${root_password}" | grep "^${database}$"
325        if [ $? -ne 0 ]; then
326                echoAndLog "mysqlDbExists():database $database doesn't exists"
327                return 1
328        else
329                echoAndLog "mysqlDbExists():database $database exists"
330                return 0
331        fi
332}
333
334function mysqlCheckDbIsEmpty()
335{
336        if [ $# -ne 2 ]; then
337                errorAndLog "mysqlCheckDbIsEmpty(): invalid number of parameters"
338                exit 1
339        fi
340
341        local root_password="${1}"
342        local database=$2
343        echoAndLog "mysqlCheckDbIsEmpty(): checking if $database is empty..."
344        num_tablas=`echo "show tables" | mysql -uroot -p"${root_password}" "${database}" | wc -l`
345        if [ $? -ne 0 ]; then
346                errorAndLog "mysqlCheckDbIsEmpty(): error executing query, check database and root password"
347                exit 1
348        fi
349
350        if [ $num_tablas -eq 0 ]; then
351                echoAndLog "mysqlCheckDbIsEmpty():database $database is empty"
352                return 0
353        else
354                echoAndLog "mysqlCheckDbIsEmpty():database $database has tables"
355                return 1
356        fi
357
358}
359
360
361function mysqlImportSqlFileToDb()
362{
363        if [ $# -ne 3 ]; then
[c5ce04c]364                errorAndLog "${FNCNAME}(): invalid number of parameters"
[a01156a]365                exit 1
366        fi
367
[c4321ae]368        local root_password="$1"
369        local database="$2"
370        local sqlfile="$3"
371        local tmpfile=$(mktemp)
372        local status
[a01156a]373
374        if [ ! -f $sqlfile ]; then
[c5ce04c]375                errorAndLog "${FUNCNAME}(): Unable to locate $sqlfile!!"
[a01156a]376                return 1
377        fi
378
[c5ce04c]379        echoAndLog "${FUNCNAME}(): importing sql file to ${database}..."
[c4321ae]380        chmod 600 $tmpfile
381        sed -e "s/SERVERIP/$SERVERIP/g" -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
382            -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" $sqlfile > $tmpfile
383        mysql -uroot -p"${root_password}" --default-character-set=utf8 "${database}" < $tmpfile
384        status=$?
385        rm -f $tmpfile
386        if [ $status -ne 0 ]; then
[c5ce04c]387                errorAndLog "${FUNCNAME}(): error while importing $sqlfile in database $database"
[a01156a]388                return 1
389        fi
[c5ce04c]390        echoAndLog "${FUNCNAME}(): file imported to database $database"
[a01156a]391        return 0
392}
393
394# Crea la base de datos
395function mysqlCreateDb()
396{
397        if [ $# -ne 2 ]; then
[a555f49]398                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]399                exit 1
400        fi
401
402        local root_password="${1}"
403        local database=$2
404
[a555f49]405        echoAndLog "${FUNCNAME}(): creating database..."
[a01156a]406        mysqladmin -u root --password="${root_password}" create $database
407        if [ $? -ne 0 ]; then
[a555f49]408                errorAndLog "${FUNCNAME}(): error while creating database $database"
[a01156a]409                return 1
410        fi
[a555f49]411        echoAndLog "${FUNCNAME}(): database $database created"
[a01156a]412        return 0
413}
414
415
416function mysqlCheckUserExists()
417{
418        if [ $# -ne 2 ]; then
419                errorAndLog "mysqlCheckUserExists(): invalid number of parameters"
420                exit 1
421        fi
422
423        local root_password="${1}"
424        local userdb=$2
425
426        echoAndLog "mysqlCheckUserExists(): checking if $userdb exists..."
427        echo "select user from user where user='${userdb}'\\G" |mysql -uroot -p"${root_password}" mysql | grep user
428        if [ $? -ne 0 ]; then
429                echoAndLog "mysqlCheckUserExists(): user doesn't exists"
430                return 1
431        else
432                echoAndLog "mysqlCheckUserExists(): user already exists"
433                return 0
434        fi
435
436}
437
438# Crea un usuario administrativo para la base de datos
439function mysqlCreateAdminUserToDb()
440{
441        if [ $# -ne 4 ]; then
442                errorAndLog "mysqlCreateAdminUserToDb(): invalid number of parameters"
443                exit 1
444        fi
445
446        local root_password=$1
447        local database=$2
448        local userdb=$3
449        local passdb=$4
450
451        echoAndLog "mysqlCreateAdminUserToDb(): creating admin user ${userdb} to database ${database}"
452
453        cat > $WORKDIR/create_${database}.sql <<EOF
454GRANT USAGE ON *.* TO '${userdb}'@'localhost' IDENTIFIED BY '${passdb}' ;
455GRANT ALL PRIVILEGES ON ${database}.* TO '${userdb}'@'localhost' WITH GRANT OPTION ;
456FLUSH PRIVILEGES ;
457EOF
458        mysql -u root --password=${root_password} < $WORKDIR/create_${database}.sql
459        if [ $? -ne 0 ]; then
460                errorAndLog "mysqlCreateAdminUserToDb(): error while creating user in mysql"
461                rm -f $WORKDIR/create_${database}.sql
462                return 1
463        else
464                echoAndLog "mysqlCreateAdminUserToDb(): user created ok"
465                rm -f $WORKDIR/create_${database}.sql
466                return 0
467        fi
468}
469
470
471#####################################################################
472####### Funciones para el manejo de Subversion
473#####################################################################
474
[13a01a7]475function svnExportCode()
476{
477        if [ $# -ne 1 ]; then
478                errorAndLog "${FUNCNAME}(): invalid number of parameters"
479                exit 1
480        fi
481
[6090a2d]482        local url="$1"
[13a01a7]483
484        echoAndLog "${FUNCNAME}(): downloading subversion code..."
485
[6090a2d]486        svn export --force "$url" opengnsys
[13a01a7]487        if [ $? -ne 0 ]; then
[6090a2d]488                errorAndLog "${FUNCNAME}(): error getting OpenGnSys code from $url"
[13a01a7]489                return 1
490        fi
491        echoAndLog "${FUNCNAME}(): subversion code downloaded"
492        return 0
493}
494
495
[892606b9]496############################################################
[7586ca3]497###  Detectar red
498############################################################
499
[07c3a59]500# Comprobar si existe conexión.
501function checkNetworkConnection()
502{
503        OPENGNSYS_SERVER=${OPENGNSYS_SERVER:-"www.opengnsys.es"}
504        wget --spider -q $OPENGNSYS_SERVER
505}
506
507# Obtener los parámetros de red de la interfaz por defecto.
[7586ca3]508function getNetworkSettings()
509{
510        # Variables globales definidas:
511        # - SERVERIP: IP local del servidor.
512        # - NETIP:    IP de la red.
513        # - NETMASK:  máscara de red.
514        # - NETBROAD: IP de difusión de la red.
515        # - ROUTERIP: IP del router.
516        # - DNSIP:    IP del servidor DNS.
517
[62e3bcf]518        local MAINDEV
519
520        echoAndLog "${FUNCNAME}(): Detecting default network parameters."
521        MAINDEV=$(ip -o link show up | awk '!/loopback/ {d=d$2} END {sub(/:.*/,"",d); print d}')
522        if [ -z "$MAINDEV" ]; then
523                errorAndLog "${FUNCNAME}(): Network device not detected."
524                exit 1
525        fi
526        SERVERIP=$(ip -o addr show dev $MAINDEV | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4)}')
527        NETMASK=$(LANG=C ifconfig $MAINDEV | awk '/Mask/ {sub(/.*:/,"",$4); print $4}')
528        NETBROAD=$(ip -o addr show dev $MAINDEV | awk '$3~/inet$/ {print ($6)}')
[b94a1b2]529        NETIP=$(netstat -nr | grep $MAINDEV | awk '$1!~/0\.0\.0\.0/ {if (n=="") n=$1} END {print n}')
[7586ca3]530        ROUTERIP=$(netstat -nr | awk '$1~/0\.0\.0\.0/ {print $2}')
[a555f49]531        DNSIP=$(awk '/nameserver/ {print $2}' /etc/resolv.conf | head -n1)
[7586ca3]532        if [ -z "$NETIP" -o -z "$NETMASK" ]; then
[62e3bcf]533                errorAndLog "${FUNCNAME}(): Network not detected."
[7586ca3]534                exit 1
535        fi
[cc7eab7]536
537        # Variables de ejecución de Apache
538        # - APACHE_RUN_USER
539        # - APACHE_RUN_GROUP
540        if [ -f /etc/apache2/envvars ]; then
541                source /etc/apache2/envvars
542        fi
543        APACHE_RUN_USER=${APACHE_RUN_USER:-"www-data"}
544        APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"www-data"}
[7586ca3]545}
546
547
548############################################################
[892606b9]549### Esqueleto para el Servicio pxe y contenedor tftpboot ###
550############################################################
551
552function tftpConfigure() {
553        echo "Configurando el servicio tftp"
554        basetftp=/var/lib/tftpboot
555
556        # reiniciamos demonio internet ????? porque ????
557        /etc/init.d/openbsd-inetd start
558
559        # preparacion contenedor tftpboot
560        cp -pr /usr/lib/syslinux/ ${basetftp}/syslinux
561        cp /usr/lib/syslinux/pxelinux.0 ${basetftp}
562        # prepamos el directorio de la configuracion de pxe
563        mkdir -p ${basetftp}/pxelinux.cfg
564        cat > ${basetftp}/pxelinux.cfg/default <<EOF
[8fc9552]565DEFAULT syslinux/vesamenu.c32
566MENU TITLE Aplicacion GNSYS
567 
568LABEL 1
569MENU LABEL 1
570KERNEL syslinux/chain.c32
571APPEND hd0
572 
573PROMPT 0
574TIMEOUT 10
[892606b9]575EOF
576        # comprobamos el servicio tftp
577        sleep 1
578        testPxe
579        ## damos perfimos de lectura a usuario web.
[cc7eab7]580        chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP ${basetftp}
[892606b9]581}
582
583function testPxe () {
584        cd /tmp
585        echo "comprobando servicio pxe ..... Espere"
586        tftp -v localhost -c get pxelinux.0 /tmp/pxelinux.0 && echo "servidor tftp OK" || echo "servidor tftp KO"
587        cd /
588}
589
[8fc9552]590
[892606b9]591########################################################################
[b6906f7]592## Configuracion servicio NFS
[892606b9]593########################################################################
594
[13a01a7]595# ADVERTENCIA: usa variables globales NETIP y NETMASK!
596function nfsConfigure()
[7586ca3]597{
[13a01a7]598        echoAndLog "${FUNCNAME}(): Config nfs server."
599
600        backupFile /etc/exports
601
602        nfsAddExport /opt/opengnsys/client ${NETIP}/${NETMASK}:ro,no_subtree_check,no_root_squash,sync
603        if [ $? -ne 0 ]; then
604                errorAndLog "${FUNCNAME}(): error while adding nfs client config"
605                return 1
606        fi
607
608        nfsAddExport /opt/opengnsys/images ${NETIP}/${NETMASK}:rw,no_subtree_check,no_root_squash,sync,crossmnt
609        if [ $? -ne 0 ]; then
610                errorAndLog "${FUNCNAME}(): error while adding nfs images config"
611                return 1
612        fi
613
614        nfsAddExport /opt/opengnsys/log/clients ${NETIP}/${NETMASK}:rw,no_subtree_check,no_root_squash,sync
615        if [ $? -ne 0 ]; then
616                errorAndLog "${FUNCNAME}(): error while adding logging client config"
617                return 1
618        fi
619
[8fc9552]620        nfsAddExport /var/lib/tftpboot ${NETIP}/${NETMASK}:ro,no_subtree_check,no_root_squash,sync
621        if [ $? -ne 0 ]; then
622                errorAndLog "${FUNCNAME}(): error while adding second filesystem for the pxe ogclient"
623                return 1
624        fi
625
[7586ca3]626        /etc/init.d/nfs-kernel-server restart
[13a01a7]627
[b6906f7]628        exportfs -va
[13a01a7]629        if [ $? -ne 0 ]; then
630                errorAndLog "${FUNCNAME}(): error while configure exports"
631                return 1
632        fi
633
634        echoAndLog "${FUNCNAME}(): Added NFS configuration to file \"/etc/exports\"."
635        return 0
[b6906f7]636}
[892606b9]637
[b6906f7]638
[13a01a7]639# ejemplos:
640#nfsAddExport /opt/opengnsys 192.168.0.0/255.255.255.0:ro,no_subtree_check,no_root_squash,sync
641#nfsAddExport /opt/opengnsys 192.168.0.0/255.255.255.0
642#nfsAddExport /opt/opengnsys 80.20.2.1:ro 192.123.32.2:rw
643function nfsAddExport()
644{
645        if [ $# -lt 2 ]; then
646                errorAndLog "${FUNCNAME}(): invalid number of parameters"
647                exit 1
648        fi
649
650        if [ ! -f /etc/exports ]; then
651                errorAndLog "${FUNCNAME}(): /etc/exports don't exists"
652                return 1
653        fi
654
655        local export="${1}"
656        local contador=0
657        local cadenaexport
658
659        grep "^${export}" /etc/exports > /dev/null
660        if [ $? -eq 0 ]; then
661                echoAndLog "${FUNCNAME}(): $export exists in /etc/exports, omiting"
662                return 0
663        fi
664
665        cadenaexport="${export}"
666        for parametro in $*
667        do
668                if [ $contador -gt 0 ]
669                then
670                        host=`echo $parametro | awk -F: '{print $1}'`
671                        options=`echo $parametro | awk -F: '{print $2}'`
672                        if [ "${host}" == "" ]; then
673                                errorAndLog "${FUNCNAME}(): host can't be empty"
674                                return 1
675                        fi
676                        cadenaexport="${cadenaexport}\t${host}"
677
678                        if [ "${options}" != "" ]; then
679                                cadenaexport="${cadenaexport}(${options})"
680                        fi
681                fi
682                let contador=contador+1
683        done
684
685        echo -en "$cadenaexport\n" >> /etc/exports
686
687        echoAndLog "${FUNCNAME}(): add $export to /etc/exports"
688
689        return 0
690}
691
[8fc9552]692
693########################################################################
[813f617]694## Configuracion servicio Samba
[8fc9552]695########################################################################
696function smbConfigure()
697{
[813f617]698        echoAndLog "${FUNCNAME}(): Configure Samba server."
[8fc9552]699
700        backupFile /etc/samba/smb.conf
701       
[813f617]702        # Copiar plantailla de recursos para OpenGnSys
[c1e00e4]703        sed -e "s/OPENGNSYSDIR/${INSTALL_TARGET//\//\\/}/g" \
[edac247]704                $WORKDIR/opengnsys/server/etc/smb-og.conf.tmpl > /etc/samba/smb-og.conf
[813f617]705        # Configurar y recargar Samba"
[edac247]706        perl -pi -e "s/WORKGROUP/OPENGNSYS/; s/server string \=.*/server string \= OpenGnSys Samba Server/; s/^\; *include \=.*$/   include \= \/etc\/samba\/smb-og.conf/" /etc/samba/smb.conf
[813f617]707        /etc/init.d/smbd restart
[8fc9552]708        if [ $? -ne 0 ]; then
[813f617]709                errorAndLog "${FUNCNAME}(): error while configure Samba"
[8fc9552]710                return 1
711        fi
[813f617]712        # Crear usuario de acceso a los recursos y establecer permisos.
713        useradd $OPENGNSYS_CLIENT_USER 2>/dev/null
714        echo -ne "$OPENGNSYS_CLIENT_PASSWD\n$OPENGNSYS_CLIENT_PASSWD\n" | smbpasswd -a -s $OPENGNSYS_CLIENT_USER
715        chmod -R 775 $INSTALL_TARGET/{log/clients,images,tftpboot/pxelinux.cfg}
716        chown -R :$OPENGNSYS_CLIENT_USER $INSTALL_TARGET/{log/clients,images,tftpboot/pxelinux.cfg}
[8fc9552]717
[813f617]718        echoAndLog "${FUNCNAME}(): Added Samba configuration."
[8fc9552]719        return 0
720}
721
722
[b6906f7]723########################################################################
724## Configuracion servicio DHCP
725########################################################################
726
[7586ca3]727function dhcpConfigure()
728{
[a555f49]729        echoAndLog "${FUNCNAME}(): Sample DHCP Configuration."
730
731        backupFile /etc/dhcp3/dhcpd.conf
732
[7586ca3]733        sed -e "s/SERVERIP/$SERVERIP/g" \
734            -e "s/NETIP/$NETIP/g" \
735            -e "s/NETMASK/$NETMASK/g" \
736            -e "s/NETBROAD/$NETBROAD/g" \
737            -e "s/ROUTERIP/$ROUTERIP/g" \
738            -e "s/DNSIP/$DNSIP/g" \
[813f617]739            $WORKDIR/opengnsys/server/etc/dhcpd.conf.tmpl > /etc/dhcp3/dhcpd.conf
[a555f49]740        if [ $? -ne 0 ]; then
741                errorAndLog "${FUNCNAME}(): error while configuring dhcp server"
742                return 1
743        fi
744
[7586ca3]745        /etc/init.d/dhcp3-server restart
[a555f49]746        echoAndLog "${FUNCNAME}(): Sample DHCP Configured in file \"/etc/dhcp3/dhcpd.conf\"."
747        return 0
[892606b9]748}
749
750
[a01156a]751#####################################################################
752####### Funciones específicas de la instalación de Opengnsys
753#####################################################################
754
[49c6891]755# Copiar ficheros del OpenGnSys Web Console.
[7586ca3]756function installWebFiles()
757{
[dce072b]758        echoAndLog "${FUNCNAME}(): Installing web files..."
[7586ca3]759        cp -ar $WORKDIR/opengnsys/admin/WebConsole/* $INSTALL_TARGET/www   #*/ comentario para doxigen
760        if [ $? != 0 ]; then
[dce072b]761                errorAndLog "${FUNCNAME}(): Error copying web files."
[7586ca3]762                exit 1
763        fi
764        find $INSTALL_TARGET/www -name .svn -type d -exec rm -fr {} \; 2>/dev/null
[813f617]765        # Descomprimir XAJAX.
[edac247]766        unzip $WORKDIR/opengnsys/admin/xajax_0.5_standard.zip -d $INSTALL_TARGET/www/xajax
[7586ca3]767        # Cambiar permisos para ficheros especiales.
[3aaf91d]768        chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/images/iconos
[dce072b]769        echoAndLog "${FUNCNAME}(): Web files installed successfully."
[7586ca3]770}
771
772# Configuración específica de Apache.
[892606b9]773function openGnsysInstallWebConsoleApacheConf()
[a01156a]774{
775        if [ $# -ne 2 ]; then
[dce072b]776                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]777                exit 1
778        fi
779
780        local path_opengnsys_base=$1
781        local path_apache2_confd=$2
[892606b9]782        local path_web_console=${path_opengnsys_base}/www
[a01156a]783
[892606b9]784        if [ ! -d $path_apache2_confd ]; then
[dce072b]785                errorAndLog "${FUNCNAME}(): path to apache2 conf.d can not found, verify your server installation"
[892606b9]786                return 1
787        fi
788
[7586ca3]789        mkdir -p $path_apache2_confd/{sites-available,sites-enabled}
[892606b9]790
[dce072b]791        echoAndLog "${FUNCNAME}(): creating apache2 config file.."
[a01156a]792
[d725a41]793
[a01156a]794        # genera configuración
[892606b9]795        cat > $path_opengnsys_base/etc/apache.conf <<EOF
[49c6891]796# OpenGnSys Web Console configuration for Apache
[a01156a]797
[892606b9]798Alias /opengnsys ${path_web_console}
[a01156a]799
[892606b9]800<Directory ${path_web_console}>
[a01156a]801        Options -Indexes FollowSymLinks
802        DirectoryIndex acceso.php
803</Directory>
804EOF
805
[7586ca3]806        ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/sites-available/opengnsys.conf
807        ln -fs $path_apache2_confd/sites-available/opengnsys.conf $path_apache2_confd/sites-enabled/opengnsys.conf
[a01156a]808        if [ $? -ne 0 ]; then
[dce072b]809                errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation"
[a01156a]810                return 1
811        else
[dce072b]812                echoAndLog "${FUNCNAME}(): config file created and linked, restarting apache daemon"
[077dd7c5]813                /etc/init.d/apache2 restart
[a01156a]814                return 0
815        fi
816}
817
[8fc9552]818
[5d6bf97]819# Crear documentación Doxygen para la consola web.
820function makeDoxygenFiles()
821{
822        echoAndLog "${FUNCNAME}(): Making Doxygen web files..."
823        $WORKDIR/opengnsys/installer/ogGenerateDoc.sh \
824                        $WORKDIR/opengnsys/client/engine $INSTALL_TARGET/www
825        if [ ! -d "$INSTALL_TARGET/www/html" ]; then
826                errorAndLog "${FUNCNAME}(): unable to create Doxygen web files."
[ead38fb]827                return 1
[5d6bf97]828        fi
829        mv "$INSTALL_TARGET/www/html" "$INSTALL_TARGET/www/api"
830        chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/api
831        echoAndLog "${FUNCNAME}(): Doxygen web files created successfully."
832}
833
834
[a01156a]835# Crea la estructura base de la instalación de opengnsys
[318efac]836function openGnsysInstallCreateDirs()
[a01156a]837{
838        if [ $# -ne 1 ]; then
[dce072b]839                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[a01156a]840                exit 1
841        fi
842
843        local path_opengnsys_base=$1
844
[dce072b]845        echoAndLog "${FUNCNAME}(): creating directory paths in $path_opengnsys_base"
[a01156a]846
847        mkdir -p $path_opengnsys_base
848        mkdir -p $path_opengnsys_base/bin
[5c33840]849        mkdir -p $path_opengnsys_base/client
[49c6891]850        mkdir -p $path_opengnsys_base/doc
[5c33840]851        mkdir -p $path_opengnsys_base/etc
[a01156a]852        mkdir -p $path_opengnsys_base/lib
[1cc5697]853        mkdir -p $path_opengnsys_base/log/clients
[7586ca3]854        mkdir -p $path_opengnsys_base/sbin
[a01156a]855        mkdir -p $path_opengnsys_base/www
[5c33840]856        mkdir -p $path_opengnsys_base/images
[b6906f7]857        ln -fs /var/lib/tftpboot $path_opengnsys_base
858        ln -fs $path_opengnsys_base/log /var/log/opengnsys
[5c33840]859
[a01156a]860        if [ $? -ne 0 ]; then
[dce072b]861                errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?"
[a01156a]862                return 1
863        fi
864
[dce072b]865        echoAndLog "${FUNCNAME}(): directory paths created"
[a01156a]866        return 0
867}
868
[463a1d49]869# Copia ficheros de configuración y ejecutables genéricos del servidor.
[318efac]870function openGnsysCopyServerFiles () {
[463a1d49]871        if [ $# -ne 1 ]; then
[879689f]872                errorAndLog "${FUNCNAME}(): invalid number of parameters"
[463a1d49]873                exit 1
874        fi
875
876        local path_opengnsys_base=$1
877
[2338c95f]878        # No se copian los ficheros del cliente antiguo:
879        # - client/boot/initrd-generator ==> /opt/opengnsys/bin
880        # - client/boot/upgrade-clients-udeb.sh ==> /opt/opengnsys/bin
881        # - client/boot/udeblist.conf ==> /opt/opengnsys/etc
882        # - client/boot/udeblist-jaunty.conf ==> /opt/opengnsys/etc
883        # - client/boot/udeblist-karmic.conf ==> /opt/opengnsys/etc
884        # - client/boot/udeblist-lucid.conf ==> /opt/opengnsys/etc
885        # - client/boot/udeblist-maverick.conf ==> /opt/opengnsys/etc
886        local SOURCES=( server/tftpboot/pxelinux.cfg \
[b5aae72]887                        server/bin \
[85b029f]888                        repoman/bin \
[49c6891]889                        doc )
[2338c95f]890        local TARGETS=( tftpboot/pxelinux.cfg \
[b5aae72]891                        bin \
[85b029f]892                        bin \
[49c6891]893                        doc )
[463a1d49]894
895        if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then
[879689f]896                errorAndLog "${FUNCNAME}(): inconsistent number of array items"
[463a1d49]897                exit 1
898        fi
899
[879689f]900        echoAndLog "${FUNCNAME}(): copying files to server directories"
[f2bb433]901
[8457092]902        pushd $WORKDIR/opengnsys
[463a1d49]903        local i
904        for (( i = 0; i < ${#SOURCES[@]}; i++ )); do
905                if [ -f "${SOURCES[$i]}" ]; then
[879689f]906                        echoAndLog "Copying ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
[b5aae72]907                        cp -a "${SOURCES[$i]}" "${path_opengnsys_base}/${TARGETS[$i]}"
[8457092]908                elif [ -d "${SOURCES[$i]}" ]; then
[879689f]909                        echoAndLog "Copying content of ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
[8457092]910                        cp -a "${SOURCES[$i]}"/* "${path_opengnsys_base}/${TARGETS[$i]}"
911        else
912                        echoAndLog "Warning: Unable to copy ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
[463a1d49]913                fi
914        done
[7586ca3]915        popd
[892606b9]916}
917
[7586ca3]918####################################################################
919### Funciones de compilación de códifo fuente de servicios
920####################################################################
921
[b6906f7]922# Compilar los servicios de OpenGNsys
[7586ca3]923function servicesCompilation ()
924{
[13a01a7]925        local hayErrores=0
[0795938]926
[49c6891]927        # Compilar OpenGnSys Server
928        echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Server"
[7b61735]929        pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmServer
[b6906f7]930        make && make install
[13a01a7]931        if [ $? -ne 0 ]; then
[49c6891]932                echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Server"
[13a01a7]933                hayErrores=1
934        fi
[7586ca3]935        popd
[49c6891]936        # Compilar OpenGnSys Repository Manager
937        echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Repository Manager"
[7b61735]938        pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepo
[b6906f7]939        make && make install
[13a01a7]940        if [ $? -ne 0 ]; then
[49c6891]941                echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Repository Manager"
[13a01a7]942                hayErrores=1
943        fi
[8125e7c]944        popd
[4984660]945        # Compilar OpenGnSys Agent
946        echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Agent"
[7b61735]947        pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmAgent
[4984660]948        make && make install
949        if [ $? -ne 0 ]; then
950                echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Agent"
951                hayErrores=1
952        fi
953        popd   
[49c6891]954        # Compilar OpenGnSys Client
955        echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Client"
[7b61735]956        pushd $WORKDIR/opengnsys/admin/Sources/Clients/ogAdmClient
[2338c95f]957        make && mv ogAdmClient ../../../../client/shared/bin
[13a01a7]958        if [ $? -ne 0 ]; then
[49c6891]959                echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Client"
[13a01a7]960                hayErrores=1
961        fi
[318efac]962        popd
[13a01a7]963
964        return $hayErrores
[b6906f7]965}
966
[7b61735]967####################################################################
968### Funciones de copia de la Interface de administración
969####################################################################
970
971# Copiar carpeta de Interface
[c1e00e4]972function copyInterfaceAdm ()
[7b61735]973{
974        local hayErrores=0
975       
[fbd9bcc]976        # Crear carpeta y copiar Interface
[7b61735]977        echoAndLog "${FUNCNAME}(): Copying Administration Interface Folder"
[fbd9bcc]978        cp -ar $WORKDIR/opengnsys/admin/Interface $INSTALL_TARGET/client/interfaceAdm
[7b61735]979        if [ $? -ne 0 ]; then
980                echoAndLog "${FUNCNAME}(): error while copying Administration Interface Folder"
981                hayErrores=1
982        fi
[b6f1726]983        chown $OPENGNSYS_CLIENT_USER:$OPENGNSYS_CLIENT_USER $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso
[f6c1d2b]984        chmod 700 $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso
[7b61735]985
986        return $hayErrores
987}
[b6906f7]988
[892606b9]989####################################################################
990### Funciones instalacion cliente opengnsys
991####################################################################
992
[7cc6687]993function openGnsysCopyClientFiles()
[7586ca3]994{
[a555f49]995        local hayErrores=0
996
[49c6891]997        echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files."
[d47d38d]998        cp -ar $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client
999        if [ $? -ne 0 ]; then
[9ef8920]1000                errorAndLog "${FUNCNAME}(): error while copying client estructure"
1001                hayErrores=1
1002        fi
[d47d38d]1003        find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null
[9ef8920]1004       
[49c6891]1005        echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files."
[d47d38d]1006        mkdir -p $INSTALL_TARGET/client/lib/engine/bin
1007        cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin
[a555f49]1008        if [ $? -ne 0 ]; then
1009                errorAndLog "${FUNCNAME}(): error while copying engine files"
1010                hayErrores=1
1011        fi
[9ef8920]1012       
1013        if [ $hayErrores -eq 0 ]; then
1014                echoAndLog "${FUNCNAME}(): client copy files success."
1015        else
1016                errorAndLog "${FUNCNAME}(): client copy files with errors"
1017        fi
1018
1019        return $hayErrores
1020}
1021
1022
1023
1024
1025# Crear antiguo cliente initrd para OpenGnSys 0.10
1026function openGnsysOldClientCreate()
1027{
1028        local OSCODENAME
1029
1030        local hayErrores=0
1031
[cc7eab7]1032        # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto).
[28c96b3]1033        OSCODENAME=$(lsb_release -cs 2>/dev/null)
[7586ca3]1034        if [ "$OSDISTRIB" = "Ubuntu" -a -n "$OSCODENAME" ]; then
[a555f49]1035                echoAndLog "${FUNCNAME}(): Loading Kernel and Initrd files for $OSDISTRIB $OSCODENAME."
[da8db11]1036                $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot -v $OSCODENAME 2>&1 | tee -a $LOG_FILE
[a555f49]1037                if [ $? -ne 0 ]; then
[49c6891]1038                        errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client"
[a555f49]1039                        hayErrores=1
1040                fi
1041                echoAndLog "${FUNCNAME}(): Loading udeb files for $OSDISTRIB $OSCODENAME."
[da8db11]1042                $INSTALL_TARGET/bin/upgrade-clients-udeb.sh $OSCODENAME 2>&1 | tee -a $LOG_FILE
[a555f49]1043                if [ $? -ne 0 ]; then
[49c6891]1044                        errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client"
[a555f49]1045                        hayErrores=1
1046                fi
[7586ca3]1047        else
[a555f49]1048                echoAndLog "${FUNCNAME}(): Loading default Kernel and Initrd files."
[da8db11]1049                $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot 2>&1 | tee -a $LOG_FILE
[a555f49]1050                if [ $? -ne 0 ]; then
[49c6891]1051                        errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client"
[a555f49]1052                        hayErrores=1
1053                fi
1054                echoAndLog "${FUNCNAME}(): Loading default udeb files."
[da8db11]1055                $INSTALL_TARGET/bin/upgrade-clients-udeb.sh 2>&1 | tee -a $LOG_FILE
[a555f49]1056                if [ $? -ne 0 ]; then
[49c6891]1057                        errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client"
[a555f49]1058                        hayErrores=1
1059                fi
1060        fi
1061
1062        if [ $hayErrores -eq 0 ]; then
[813f617]1063                echoAndLog "${FUNCNAME}(): Old client generation success."
[a555f49]1064        else
[813f617]1065                errorAndLog "${FUNCNAME}(): Old client generation with errors"
[7586ca3]1066        fi
[a555f49]1067
1068        return $hayErrores
[463a1d49]1069}
1070
1071
[813f617]1072# Crear nuevo cliente OpenGnSys 1.0
1073function openGnsysClientCreate()
1074{
1075        local DOWNLOADURL=http://www.opengnsys.es/downloads
[e9722d2]1076        local FILENAME=ogclient-1.0.1-lucid-32bit.tar.gz
[6ef9f23]1077        local TMPFILE=/tmp/$FILENAME
[813f617]1078
1079        echoAndLog "${FUNCNAME}(): Loading Client"
1080        # Descargar y descomprimir cliente ogclient
[6ef9f23]1081        wget $DOWNLOADURL/$FILENAME -O $TMPFILE
1082        if [ ! -s $TMPFILE ]; then
1083                errorAndLog "${FUNCNAME}(): Error loading OpenGnSys Client"
[813f617]1084                return 1
1085        fi
1086        echoAndLog "${FUNCNAME}(): Extranting Client files"
[6ef9f23]1087        tar xzvf $TMPFILE -C $INSTALL_TARGET/tftpboot
1088        rm -f $TMPFILE
[813f617]1089        # Usar la versión más reciente del Kernel y del Initrd para el cliente.
1090        ln $(ls $INSTALL_TARGET/tftpboot/ogclient/vmlinuz-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/ogvmlinuz
1091        ln $(ls $INSTALL_TARGET/tftpboot/ogclient/initrd.img-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/oginitrd.img
1092        # Establecer los permisos.
1093        chmod -R 755 $INSTALL_TARGET/tftpboot/ogclient
1094        chown -R :$OPENGNSYS_CLIENT_USER $INSTALL_TARGET/tftpboot/ogclient
1095        echoAndLog "${FUNCNAME}(): Client generation success"
1096}
1097
1098
[49c6891]1099# Configuración básica de servicios de OpenGnSys
[cc7eab7]1100function openGnsysConfigure()
1101{
[9ee62ad]1102        echoAndLog "${FUNCNAME}(): Copying init files."
[7b61735]1103        cp -p $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys
1104        cp -p $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.default /etc/default/opengnsys
[8fc9552]1105        cp -p $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepoAux /opt/opengnsys/sbin/
[cc7eab7]1106        update-rc.d opengnsys defaults
[9ee62ad]1107        echoAndLog "${FUNCNAME}(): Creating cron files."
1108        echo "* * * * *   root   [ -x $INSTALL_TARGET/bin/torrent-creator ] && $INSTALL_TARGET/bin/torrent-creator" > /etc/cron.d/torrentcreator
[8fc9552]1109        echo "5 * * * *   root   [ -x $INSTALL_TARGET/bin/torrent-tracker ] && $INSTALL_TARGET/bin/torrent-tracker" > /etc/cron.d/torrenttracker
[9ee62ad]1110        echoAndLog "${FUNCNAME}(): Creating OpenGnSys config file in \"$INSTALL_TARGET/etc\"."
[bf41d13]1111        perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DBUSER/$OPENGNSYS_DB_USER/g; s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g; s/DATABASE/$OPENGNSYS_DATABASE/g" $INSTALL_TARGET/etc/ogAdmServer.cfg
[1a22cd2]1112        perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmRepo.cfg
[4a3cd1f]1113        perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DBUSER/$OPENGNSYS_DB_USER/g; s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g; s/DATABASE/$OPENGNSYS_DATABASE/g" $INSTALL_TARGET/etc/ogAdmAgent.cfg
[9de73019]1114        chown root:root $INSTALL_TARGET/etc/{ogAdmServer.cfg,ogAdmAgent.cfg}
1115        chmod 600 $INSTALL_TARGET/etc/{ogAdmServer.cfg,ogAdmAgent.cfg}
[ea7186c]1116        echoAndLog "${FUNCNAME}(): Creating Web Console config file"
1117        OPENGNSYS_CONSOLEURL="http://$SERVERIP/opengnsys"
[bf41d13]1118        perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DBUSER/$OPENGNSYS_DB_USER/g; s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g; s/DATABASE/$OPENGNSYS_DATABASE/g; s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $INSTALL_TARGET/www/controlacceso.php
[9de73019]1119        chown $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/controlacceso.php
1120        chmod 600 $INSTALL_TARGET/www/controlacceso.php
[7b61735]1121        sed -e "s/SERVERIP/$SERVERIP/g" -e "s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $WORKDIR/opengnsys/admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient.cfg
[9ee62ad]1122        echoAndLog "${FUNCNAME}(): Starting OpenGnSys services."
[cc7eab7]1123        /etc/init.d/opengnsys start
1124}
1125
[b6906f7]1126
[a01156a]1127#####################################################################
[180a07dd]1128#######  Función de resumen informativo de la instalación
1129#####################################################################
1130
[813f617]1131function installationSummary()
1132{
[180a07dd]1133        echo
[49c6891]1134        echoAndLog "OpenGnSys Installation Summary"
[180a07dd]1135        echo       "=============================="
[8457092]1136        echoAndLog "Project version:                  $(cat $INSTALL_TARGET/doc/VERSION.txt 2>/dev/null)"
[49c6891]1137        echoAndLog "Installation directory:           $INSTALL_TARGET"
1138        echoAndLog "Repository directory:             $INSTALL_TARGET/images"
[d47d38d]1139        echoAndLog "DHCP configuration file:          /etc/dhcp3/dhcpd.conf"
1140        echoAndLog "TFTP configuration directory:     /var/lib/tftpboot"
1141        echoAndLog "Samba configuration directory:    /etc/samba"
[49c6891]1142        echoAndLog "Web Console URL:                  $OPENGNSYS_CONSOLEURL"
[180a07dd]1143        echoAndLog "Web Console admin user:           $OPENGNSYS_DB_USER"
1144        echoAndLog "Web Console admin password:       $OPENGNSYS_DB_PASSWD"
1145        echo
1146        echoAndLog "Post-Installation Instructions:"
1147        echo       "==============================="
1148        echoAndLog "Review or edit all configuration files."
[c5ce04c]1149        echoAndLog "Insert DHCP configuration data and restart service."
[180a07dd]1150        echoAndLog "Log-in as Web Console admin user."
[85fa51e]1151        echoAndLog " - Review default Organization data and assign default user."
[180a07dd]1152        echoAndLog "Log-in as Web Console organization user."
[85fa51e]1153        echoAndLog " - Insert OpenGnSys data (rooms, computers, menus, etc)."
[180a07dd]1154echo
1155}
1156
1157
1158
1159#####################################################################
[49c6891]1160####### Proceso de instalación de OpenGnSys
[a01156a]1161#####################################################################
1162
[49c6891]1163echoAndLog "OpenGnSys installation begins at $(date)"
[6090a2d]1164pushd $WORKDIR
[cc7eab7]1165
[7c54b49]1166# Detener servicios de OpenGnSys, si están activos previamente.
1167[ -f /etc/init.d/opengnsys ] && /etc/init.d/opengnsys stop
1168
[07c3a59]1169# Comprobar si hay conexión y detectar parámetros de red por defecto.
1170checkNetworkConnection
1171if [ $? -ne 0 ]; then
1172        errorAndLog "Error connecting to server. Causes:"
1173        errorAndLog " - Network is unreachable, review devices parameters."
1174        errorAndLog " - You are inside a private network, configure the proxy service."
1175        errorAndLog " - Server is temporally down, try agian later."
1176        exit 1
1177fi
[7586ca3]1178getNetworkSettings
1179if [ $? -ne 0 ]; then
1180        errorAndLog "Error reading default network settings."
1181        exit 1
1182fi
1183
[318efac]1184# Actualizar repositorios
1185apt-get update
1186
[b6906f7]1187# Instalación de dependencias (paquetes de sistema operativo).
[a01156a]1188declare -a notinstalled
1189checkDependencies DEPENDENCIES notinstalled
1190if [ $? -ne 0 ]; then
1191        installDependencies notinstalled
1192        if [ $? -ne 0 ]; then
1193                echoAndLog "Error while installing some dependeces, please verify your server installation before continue"
1194                exit 1
1195        fi
1196fi
1197
[49c6891]1198# Arbol de directorios de OpenGnSys.
[a01156a]1199openGnsysInstallCreateDirs ${INSTALL_TARGET}
1200if [ $? -ne 0 ]; then
1201        errorAndLog "Error while creating directory paths!"
1202        exit 1
1203fi
[b6906f7]1204
[1e7eaab]1205# Si es necesario, descarga el repositorio de código en directorio temporal
[49c6891]1206if [ $USESVN -eq 1 ]; then
[1e7eaab]1207        svnExportCode $SVN_URL
1208        if [ $? -ne 0 ]; then
1209                errorAndLog "Error while getting code from svn"
1210                exit 1
1211        fi
1212else
1213        ln -fs "$(dirname $PROGRAMDIR)" opengnsys
[a01156a]1214fi
1215
[49c6891]1216# Compilar código fuente de los servicios de OpenGnSys.
[b6906f7]1217servicesCompilation
[13a01a7]1218if [ $? -ne 0 ]; then
1219        errorAndLog "Error while compiling OpenGnsys services"
1220        exit 1
1221fi
[b6906f7]1222
[7b61735]1223# Copiar carpeta Interface entre administración y motor de clonación.
[c1e00e4]1224copyInterfaceAdm
[7b61735]1225if [ $? -ne 0 ]; then
[c1e00e4]1226        errorAndLog "Error while copying Administration Interface"
[7b61735]1227        exit 1
1228fi
1229
[b6906f7]1230# Configurando tftp
[318efac]1231tftpConfigure
[b6906f7]1232
1233# Configuración NFS
[d47d38d]1234#### (descomentar las siguientes líneas para exportar servicios por NFS)
1235#nfsConfigure
1236#if [ $? -ne 0 ]; then
1237#       errorAndLog "Error while configuring nfs server!"
1238#       exit 1
1239#fi
[b6906f7]1240
[c1e00e4]1241# Configuración Samba
[8fc9552]1242smbConfigure
1243if [ $? -ne 0 ]; then
[c1e00e4]1244        errorAndLog "Error while configuring Samba server!"
[8fc9552]1245        exit 1
1246fi
1247
[b6906f7]1248# Configuración ejemplo DHCP
1249dhcpConfigure
[a555f49]1250if [ $? -ne 0 ]; then
1251        errorAndLog "Error while copying your dhcp server files!"
1252        exit 1
1253fi
[b6906f7]1254
[49c6891]1255# Copiar ficheros de servicios OpenGnSys Server.
[463a1d49]1256openGnsysCopyServerFiles ${INSTALL_TARGET}
1257if [ $? -ne 0 ]; then
1258        errorAndLog "Error while copying the server files!"
1259        exit 1
1260fi
1261
[49c6891]1262# Instalar Base de datos de OpenGnSys Admin.
[b6906f7]1263isInArray notinstalled "mysql-server"
1264if [ $? -eq 0 ]; then
1265        mysqlSetRootPassword ${MYSQL_ROOT_PASSWORD}
1266else
1267        mysqlGetRootPassword
1268fi
[463a1d49]1269
[a01156a]1270mysqlTestConnection ${MYSQL_ROOT_PASSWORD}
1271if [ $? -ne 0 ]; then
1272        errorAndLog "Error while connection to mysql"
1273        exit 1
1274fi
[892606b9]1275mysqlDbExists ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE}
[a01156a]1276if [ $? -ne 0 ]; then
[cc7eab7]1277        echoAndLog "Creating Web Console database"
[892606b9]1278        mysqlCreateDb ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE}
[a01156a]1279        if [ $? -ne 0 ]; then
[cc7eab7]1280                errorAndLog "Error while creating Web Console database"
[a01156a]1281                exit 1
1282        fi
1283else
[cc7eab7]1284        echoAndLog "Web Console database exists, ommiting creation"
[a01156a]1285fi
1286
[892606b9]1287mysqlCheckUserExists ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DB_USER}
[a01156a]1288if [ $? -ne 0 ]; then
1289        echoAndLog "Creating user in database"
[892606b9]1290        mysqlCreateAdminUserToDb ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE} ${OPENGNSYS_DB_USER} "${OPENGNSYS_DB_PASSWD}"
[a01156a]1291        if [ $? -ne 0 ]; then
[cc7eab7]1292                errorAndLog "Error while creating database user"
[a01156a]1293                exit 1
1294        fi
1295
1296fi
1297
[892606b9]1298mysqlCheckDbIsEmpty ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE}
[a01156a]1299if [ $? -eq 0 ]; then
1300        echoAndLog "Creating tables..."
[892606b9]1301        if [ -f $WORKDIR/$OPENGNSYS_DB_CREATION_FILE ]; then
1302                mysqlImportSqlFileToDb ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE} $WORKDIR/$OPENGNSYS_DB_CREATION_FILE
[a01156a]1303        else
[892606b9]1304                errorAndLog "Unable to locate $WORKDIR/$OPENGNSYS_DB_CREATION_FILE!!"
[a01156a]1305                exit 1
1306        fi
[bc7dfe7]1307else
1308        # Si existe fichero ogBDAdmin-VersLocal-VersRepo.sql; aplicar cambios.
1309        INSTVERSION=$(awk '{print $2}' $INSTALL_TARGET/doc/VERSION.txt)
1310        REPOVERSION=$(awk '{print $2}' $WORKDIR/opengnsys/doc/VERSION.txt)
[295b4ab]1311        OPENGNSYS_DB_UPDATE_FILE="opengnsys/admin/Database/$OPENGNSYS_DATABASE-$INSTVERSION-$REPOVERSION.sql"
1312        if [ -f $WORKDIR/$OPENGNSYS_DB_UPDATE_FILE ]; then
[bc7dfe7]1313                echoAndLog "Updating tables from version $INSTVERSION to $REPOVERSION"
[295b4ab]1314                mysqlImportSqlFileToDb ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE} $WORKDIR/$OPENGNSYS_DB_UPDATE_FILE
[bc7dfe7]1315        else
1316                echoAndLog "Database unchanged."
1317        fi
[a01156a]1318fi
1319
1320# copiando paqinas web
[7586ca3]1321installWebFiles
[5d6bf97]1322# Generar páqinas web de documentación de la API
1323makeDoxygenFiles
[a01156a]1324
1325# creando configuracion de apache2
[892606b9]1326openGnsysInstallWebConsoleApacheConf $INSTALL_TARGET /etc/apache2
[a01156a]1327if [ $? -ne 0 ]; then
[49c6891]1328        errorAndLog "Error configuring Apache for OpenGnSYS Admin"
[a01156a]1329        exit 1
1330fi
1331
1332popd
[892606b9]1333
[9ef8920]1334
1335# Crear la estructura de los accesos al servidor desde el cliente (shared)
[7cc6687]1336openGnsysCopyClientFiles
[9ef8920]1337if [ $? -ne 0 ]; then
1338        errorAndLog "Error creating client structure"
1339fi
1340
[813f617]1341# Crear la estructura del antiguo cliente initrd de OpenGnSys 0.10
[d47d38d]1342#### (descomentar las siguientes líneas para generar cliente initrd)
[2338c95f]1343#openGnsysOldClientCreate
1344#if [ $? -ne 0 ]; then
1345#       errorAndLog "Warning: cannot create old initrd client"
1346#fi
[9ef8920]1347
[813f617]1348# Crear la estructura del cliente de OpenGnSys 1.0
[892606b9]1349openGnsysClientCreate
[a555f49]1350if [ $? -ne 0 ]; then
[813f617]1351        errorAndLog "Error creating client"
[a555f49]1352        exit 1
1353fi
[892606b9]1354
[65245d1]1355# Configuración de servicios de OpenGnSys
1356openGnsysConfigure
1357
[180a07dd]1358# Mostrar sumario de la instalación e instrucciones de post-instalación.
1359installationSummary
1360
[077dd7c5]1361#rm -rf $WORKDIR
[49c6891]1362echoAndLog "OpenGnSys installation finished at $(date)"
[2308fc7]1363
Note: See TracBrowser for help on using the repository browser.