source: installer/opengnsys_installer.sh @ 72a7666

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 72a7666 was 5952632, checked in by ramon <ramongomez@…>, 15 years ago

Pequeña corrección en instalador.

git-svn-id: https://opengnsys.es/svn/trunk@806 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100755
File size: 33.4 KB
Line 
1#!/bin/bash
2
3#####################################################################
4####### Script instalador OpenGnsys
5####### autor: Luis Guillén <lguillen@unizar.es>
6#####################################################################
7
8
9
10# Sólo ejecutable por usuario root
11if [ "$(whoami)" != 'root' ]
12then
13        echo "ERROR: this program must run under root privileges!!"
14        exit 1
15fi
16
17# Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1).
18PROGRAMDIR=$(readlink -e $(dirname "$0"))
19if [ -d "$PROGRAMDIR/../installer" ]; then
20    USESVN=0
21else
22    USESVN=1
23    SVN_URL=svn://www.informatica.us.es:3690/opengnsys/trunk
24fi
25
26WORKDIR=/tmp/opengnsys_installer
27mkdir -p $WORKDIR
28pushd $WORKDIR
29
30INSTALL_TARGET=/opt/opengnsys
31LOG_FILE=/tmp/opengnsys_installation.log
32
33# Array con las dependencias
34DEPENDENCIES=( subversion apache2 php5 mysql-server php5-mysql nfs-kernel-server dhcp3-server udpcast bittorrent tftp-hpa tftpd-hpa syslinux openbsd-inetd update-inetd build-essential libmysqlclient15-dev wget doxygen graphviz bittornado )
35
36MYSQL_ROOT_PASSWORD="passwordroot"
37
38# Datos de base de datos
39OPENGNSYS_DATABASE=ogBDAdmin
40OPENGNSYS_DB_USER=usuog
41OPENGNSYS_DB_PASSWD=passusuog
42OPENGNSYS_DB_DEFAULTUSER=opengnsys
43OPENGNSYS_DB_DEFAULTPASSWD=opengnsys
44OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/ogBDAdmin.sql
45
46
47
48#####################################################################
49####### Algunas funciones útiles de propósito general:
50#####################################################################
51function getDateTime()
52{
53        echo `date +%Y%m%d-%H%M%S`
54}
55
56# Escribe a fichero y muestra por pantalla
57function echoAndLog()
58{
59        echo $1
60        FECHAHORA=`getDateTime`
61        echo "$FECHAHORA;$SSH_CLIENT;$1" >> $LOG_FILE
62}
63
64function errorAndLog()
65{
66        echo "ERROR: $1"
67        FECHAHORA=`getDateTime`
68        echo "$FECHAHORA;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE
69}
70
71# comprueba si el elemento pasado en $2 esta en el array $1
72function isInArray()
73{
74        if [ $# -ne 2 ]; then
75                errorAndLog "${FUNCNAME}(): invalid number of parameters"
76                exit 1
77        fi
78
79        echoAndLog "${FUNCNAME}(): checking if $2 is in $1"
80        local deps
81        eval "deps=( \"\${$1[@]}\" )"
82        elemento=$2
83
84        local is_in_array=1
85        # copia local del array del parametro 1
86        for (( i = 0 ; i < ${#deps[@]} ; i++ ))
87        do
88                if [ "${deps[$i]}" = "${elemento}" ]; then
89                        echoAndLog "isInArray(): $elemento found in array"
90                        is_in_array=0
91                fi
92        done
93
94        if [ $is_in_array -ne 0 ]; then
95                echoAndLog "${FUNCNAME}(): $elemento NOT found in array"
96        fi
97
98        return $is_in_array
99
100}
101
102#####################################################################
103####### Funciones de manejo de paquetes Debian
104#####################################################################
105
106function checkPackage()
107{
108        package=$1
109        if [ -z $package ]; then
110                errorAndLog "checkPackage(): parameter required"
111                exit 1
112        fi
113        echoAndLog "checkPackage(): checking if package $package exists"
114        dpkg -L $package &>/dev/null
115        if [ $? -eq 0 ]; then
116                echoAndLog "checkPackage(): package $package exists"
117                return 0
118        else
119                echoAndLog "checkPackage(): package $package doesn't exists"
120                return 1
121        fi
122}
123
124# recibe array con dependencias
125# por referencia deja un array con las dependencias no resueltas
126# devuelve 1 si hay alguna dependencia no resuelta
127function checkDependencies()
128{
129        if [ $# -ne 2 ]; then
130                errorAndLog "checkDependencies(): invalid number of parameters"
131                exit 1
132        fi
133
134        echoAndLog "checkDependencies(): checking dependences"
135        uncompletedeps=0
136
137        # copia local del array del parametro 1
138        local deps
139        eval "deps=( \"\${$1[@]}\" )"
140
141        declare -a local_notinstalled
142
143        for (( i = 0 ; i < ${#deps[@]} ; i++ ))
144        do
145                checkPackage ${deps[$i]}
146                if [ $? -ne 0 ]; then
147                        local_notinstalled[$uncompletedeps]=$package
148                        let uncompletedeps=uncompletedeps+1
149                fi
150        done
151
152        # relleno el array especificado en $2 por referencia
153        for (( i = 0 ; i < ${#local_notinstalled[@]} ; i++ ))
154        do
155                eval "${2}[$i]=${local_notinstalled[$i]}"
156        done
157
158        # retorna el numero de paquetes no resueltos
159        echoAndLog "checkDependencies(): dependencies uncompleted: $uncompletedeps"
160        return $uncompletedeps
161}
162
163# Recibe un array con las dependencias y lo instala
164function installDependencies()
165{
166        if [ $# -ne 1 ]; then
167                errorAndLog "installDependencies(): invalid number of parameters"
168                exit 1
169        fi
170        echoAndLog "installDependencies(): installing uncompleted dependencies"
171
172        # copia local del array del parametro 1
173        local deps
174        eval "deps=( \"\${$1[@]}\" )"
175
176        local string_deps=""
177        for (( i = 0 ; i < ${#deps[@]} ; i++ ))
178        do
179                string_deps="$string_deps ${deps[$i]}"
180        done
181
182        if [ -z "${string_deps}" ]; then
183                errorAndLog "installDependencies(): array of dependeces is empty"
184                exit 1
185        fi
186
187        OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND
188        export DEBIAN_FRONTEND=noninteractive
189
190        echoAndLog "installDependencies(): now ${string_deps} will be installed"
191        apt-get -y install --force-yes ${string_deps}
192        if [ $? -ne 0 ]; then
193                errorAndLog "installDependencies(): error installing dependencies"
194                return 1
195        fi
196
197        DEBIAN_FRONTEND=$OLD_DEBIAN_FRONTEND
198        echoAndLog "installDependencies(): dependencies installed"
199}
200
201# Hace un backup del fichero pasado por parámetro
202# deja un -last y uno para el día
203function backupFile()
204{
205        if [ $# -ne 1 ]; then
206                errorAndLog "${FUNCNAME}(): invalid number of parameters"
207                exit 1
208        fi
209
210        local fichero=$1
211        local fecha=`date +%Y%m%d`
212
213        if [ ! -f $fichero ]; then
214                errorAndLog "${FUNCNAME}(): file $fichero doesn't exists"
215                return 1
216        fi
217
218        echoAndLog "${FUNCNAME}(): realizando backup de $fichero"
219
220        # realiza una copia de la última configuración como last
221        cp -p $fichero "${fichero}-LAST"
222
223        # si para el día no hay backup lo hace, sino no
224        if [ ! -f "${fichero}-${fecha}" ]; then
225                cp -p $fichero "${fichero}-${fecha}"
226        fi
227
228        echoAndLog "${FUNCNAME}(): backup realizado"
229}
230
231#####################################################################
232####### Funciones para el manejo de bases de datos
233#####################################################################
234
235# This function set password to root
236function mysqlSetRootPassword()
237{
238        if [ $# -ne 1 ]; then
239                errorAndLog "mysqlSetRootPassword(): invalid number of parameters"
240                exit 1
241        fi
242
243        local root_mysql=$1
244        echoAndLog "mysqlSetRootPassword(): setting root password in MySQL server"
245        /usr/bin/mysqladmin -u root password ${root_mysql}
246        if [ $? -ne 0 ]; then
247                errorAndLog "mysqlSetRootPassword(): error while setting root password in MySQL server"
248                return 1
249        fi
250        echoAndLog "mysqlSetRootPassword(): root password saved!"
251        return 0
252}
253
254# Si el servicio mysql esta ya instalado cambia la variable de la clave del root por la ya existente
255function mysqlGetRootPassword(){
256        local pass_mysql
257        local pass_mysql2
258        stty -echo
259        echo "Existe un servicio mysql ya instalado"
260        read -p  "Insertar clave de root de Mysql: " pass_mysql
261        echo ""
262        read -p "Confirmar clave:" pass_mysql2
263        echo ""
264        stty echo
265        if [ "$pass_mysql" == "$pass_mysql2" ] ;then
266                MYSQL_ROOT_PASSWORD=$pass_mysql
267                echo "La clave es: ${MYSQL_ROOT_PASSWORD}"
268                return 0
269        else
270                echo "Las claves no coinciden no se configura la clave del servidor de base de datos."
271                echo "las operaciones con la base de datos daran error"
272                return 1
273        fi
274
275
276}
277
278# comprueba si puede conectar con mysql con el usuario root
279function mysqlTestConnection()
280{
281        if [ $# -ne 1 ]; then
282                errorAndLog "mysqlTestConnection(): invalid number of parameters"
283                exit 1
284        fi
285
286        local root_password="${1}"
287        echoAndLog "mysqlTestConnection(): checking connection to mysql..."
288        echo "" | mysql -uroot -p"${root_password}"
289        if [ $? -ne 0 ]; then
290                errorAndLog "mysqlTestConnection(): connection to mysql failed, check root password and if daemon is running!"
291                return 1
292        else
293                echoAndLog "mysqlTestConnection(): connection success"
294                return 0
295        fi
296}
297
298# comprueba si la base de datos existe
299function mysqlDbExists()
300{
301        if [ $# -ne 2 ]; then
302                errorAndLog "mysqlDbExists(): invalid number of parameters"
303                exit 1
304        fi
305
306        local root_password="${1}"
307        local database=$2
308        echoAndLog "mysqlDbExists(): checking if $database exists..."
309        echo "show databases" | mysql -uroot -p"${root_password}" | grep "^${database}$"
310        if [ $? -ne 0 ]; then
311                echoAndLog "mysqlDbExists():database $database doesn't exists"
312                return 1
313        else
314                echoAndLog "mysqlDbExists():database $database exists"
315                return 0
316        fi
317}
318
319function mysqlCheckDbIsEmpty()
320{
321        if [ $# -ne 2 ]; then
322                errorAndLog "mysqlCheckDbIsEmpty(): invalid number of parameters"
323                exit 1
324        fi
325
326        local root_password="${1}"
327        local database=$2
328        echoAndLog "mysqlCheckDbIsEmpty(): checking if $database is empty..."
329        num_tablas=`echo "show tables" | mysql -uroot -p"${root_password}" "${database}" | wc -l`
330        if [ $? -ne 0 ]; then
331                errorAndLog "mysqlCheckDbIsEmpty(): error executing query, check database and root password"
332                exit 1
333        fi
334
335        if [ $num_tablas -eq 0 ]; then
336                echoAndLog "mysqlCheckDbIsEmpty():database $database is empty"
337                return 0
338        else
339                echoAndLog "mysqlCheckDbIsEmpty():database $database has tables"
340                return 1
341        fi
342
343}
344
345
346function mysqlImportSqlFileToDb()
347{
348        if [ $# -ne 3 ]; then
349                errorAndLog "${FNCNAME}(): invalid number of parameters"
350                exit 1
351        fi
352
353        local root_password="${1}"
354        local database=$2
355        local sqlfile=$3
356
357        if [ ! -f $sqlfile ]; then
358                errorAndLog "${FUNCNAME}(): Unable to locate $sqlfile!!"
359                return 1
360        fi
361
362        echoAndLog "${FUNCNAME}(): importing sql file to ${database}..."
363        perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DEFAULTUSER/$OPENGNSYS_DB_DEFAULTUSER/g; s/DEFAULTPASSWD/$OPENGNSYS_DB_DEFAULTPASSWD/g" $sqlfile
364        mysql -uroot -p"${root_password}" "${database}" < $sqlfile
365        if [ $? -ne 0 ]; then
366                errorAndLog "${FUNCNAME}(): error while importing $sqlfile in database $database"
367                return 1
368        fi
369        echoAndLog "${FUNCNAME}(): file imported to database $database"
370        return 0
371}
372
373# Crea la base de datos
374function mysqlCreateDb()
375{
376        if [ $# -ne 2 ]; then
377                errorAndLog "${FUNCNAME}(): invalid number of parameters"
378                exit 1
379        fi
380
381        local root_password="${1}"
382        local database=$2
383
384        echoAndLog "${FUNCNAME}(): creating database..."
385        mysqladmin -u root --password="${root_password}" create $database
386        if [ $? -ne 0 ]; then
387                errorAndLog "${FUNCNAME}(): error while creating database $database"
388                return 1
389        fi
390        echoAndLog "${FUNCNAME}(): database $database created"
391        return 0
392}
393
394
395function mysqlCheckUserExists()
396{
397        if [ $# -ne 2 ]; then
398                errorAndLog "mysqlCheckUserExists(): invalid number of parameters"
399                exit 1
400        fi
401
402        local root_password="${1}"
403        local userdb=$2
404
405        echoAndLog "mysqlCheckUserExists(): checking if $userdb exists..."
406        echo "select user from user where user='${userdb}'\\G" |mysql -uroot -p"${root_password}" mysql | grep user
407        if [ $? -ne 0 ]; then
408                echoAndLog "mysqlCheckUserExists(): user doesn't exists"
409                return 1
410        else
411                echoAndLog "mysqlCheckUserExists(): user already exists"
412                return 0
413        fi
414
415}
416
417# Crea un usuario administrativo para la base de datos
418function mysqlCreateAdminUserToDb()
419{
420        if [ $# -ne 4 ]; then
421                errorAndLog "mysqlCreateAdminUserToDb(): invalid number of parameters"
422                exit 1
423        fi
424
425        local root_password=$1
426        local database=$2
427        local userdb=$3
428        local passdb=$4
429
430        echoAndLog "mysqlCreateAdminUserToDb(): creating admin user ${userdb} to database ${database}"
431
432        cat > $WORKDIR/create_${database}.sql <<EOF
433GRANT USAGE ON *.* TO '${userdb}'@'localhost' IDENTIFIED BY '${passdb}' ;
434GRANT ALL PRIVILEGES ON ${database}.* TO '${userdb}'@'localhost' WITH GRANT OPTION ;
435FLUSH PRIVILEGES ;
436EOF
437        mysql -u root --password=${root_password} < $WORKDIR/create_${database}.sql
438        if [ $? -ne 0 ]; then
439                errorAndLog "mysqlCreateAdminUserToDb(): error while creating user in mysql"
440                rm -f $WORKDIR/create_${database}.sql
441                return 1
442        else
443                echoAndLog "mysqlCreateAdminUserToDb(): user created ok"
444                rm -f $WORKDIR/create_${database}.sql
445                return 0
446        fi
447}
448
449
450#####################################################################
451####### Funciones para el manejo de Subversion
452#####################################################################
453
454function svnExportCode()
455{
456        if [ $# -ne 1 ]; then
457                errorAndLog "${FUNCNAME}(): invalid number of parameters"
458                exit 1
459        fi
460
461        local url=$1
462
463        echoAndLog "${FUNCNAME}(): downloading subversion code..."
464
465        svn export "${url}" opengnsys
466        if [ $? -ne 0 ]; then
467                errorAndLog "${FUNCNAME}(): error getting code from ${url}, verify your user and password"
468                return 1
469        fi
470        echoAndLog "${FUNCNAME}(): subversion code downloaded"
471        return 0
472}
473
474
475############################################################
476###  Detectar red
477############################################################
478
479function getNetworkSettings()
480{
481        # Variables globales definidas:
482        # - SERVERIP: IP local del servidor.
483        # - NETIP:    IP de la red.
484        # - NETMASK:  máscara de red.
485        # - NETBROAD: IP de difusión de la red.
486        # - ROUTERIP: IP del router.
487        # - DNSIP:    IP del servidor DNS.
488
489        local MAINDEV
490
491        echoAndLog "${FUNCNAME}(): Detecting default network parameters."
492        MAINDEV=$(ip -o link show up | awk '!/loopback/ {d=d$2} END {sub(/:.*/,"",d); print d}')
493        if [ -z "$MAINDEV" ]; then
494                errorAndLog "${FUNCNAME}(): Network device not detected."
495                exit 1
496        fi
497        SERVERIP=$(ip -o addr show dev $MAINDEV | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4)}')
498        NETMASK=$(LANG=C ifconfig $MAINDEV | awk '/Mask/ {sub(/.*:/,"",$4); print $4}')
499        NETBROAD=$(ip -o addr show dev $MAINDEV | awk '$3~/inet$/ {print ($6)}')
500        NETIP=$(netstat -nr | grep $MAINDEV | awk '$1!~/0\.0\.0\.0/ {print $1}')
501        NETIP=${NETIP%% *}
502        ROUTERIP=$(netstat -nr | awk '$1~/0\.0\.0\.0/ {print $2}')
503        DNSIP=$(awk '/nameserver/ {print $2}' /etc/resolv.conf | head -n1)
504        if [ -z "$NETIP" -o -z "$NETMASK" ]; then
505                errorAndLog "${FUNCNAME}(): Network not detected."
506                exit 1
507        fi
508
509        # Variables de ejecución de Apache
510        # - APACHE_RUN_USER
511        # - APACHE_RUN_GROUP
512        if [ -f /etc/apache2/envvars ]; then
513                source /etc/apache2/envvars
514        fi
515        APACHE_RUN_USER=${APACHE_RUN_USER:-"www-data"}
516        APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"www-data"}
517}
518
519
520############################################################
521### Esqueleto para el Servicio pxe y contenedor tftpboot ###
522############################################################
523
524function tftpConfigure() {
525        echo "Configurando el servicio tftp"
526        basetftp=/var/lib/tftpboot
527
528        # reiniciamos demonio internet ????? porque ????
529        /etc/init.d/openbsd-inetd start
530
531        # preparacion contenedor tftpboot
532        cp -pr /usr/lib/syslinux/ ${basetftp}/syslinux
533        cp /usr/lib/syslinux/pxelinux.0 ${basetftp}
534        # prepamos el directorio de la configuracion de pxe
535        mkdir -p ${basetftp}/pxelinux.cfg
536        cat > ${basetftp}/pxelinux.cfg/default <<EOF
537DEFAULT pxe
538
539LABEL pxe
540KERNEL linux
541APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on
542EOF
543        # comprobamos el servicio tftp
544        sleep 1
545        testPxe
546        ## damos perfimos de lectura a usuario web.
547        chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP ${basetftp}
548}
549
550function testPxe () {
551        cd /tmp
552        echo "comprobando servicio pxe ..... Espere"
553        tftp -v localhost -c get pxelinux.0 /tmp/pxelinux.0 && echo "servidor tftp OK" || echo "servidor tftp KO"
554        cd /
555}
556
557########################################################################
558## Configuracion servicio NFS
559########################################################################
560
561# ADVERTENCIA: usa variables globales NETIP y NETMASK!
562function nfsConfigure()
563{
564        echoAndLog "${FUNCNAME}(): Config nfs server."
565
566        backupFile /etc/exports
567
568        nfsAddExport /opt/opengnsys/client ${NETIP}/${NETMASK}:ro,no_subtree_check,no_root_squash,sync
569        if [ $? -ne 0 ]; then
570                errorAndLog "${FUNCNAME}(): error while adding nfs client config"
571                return 1
572        fi
573
574        nfsAddExport /opt/opengnsys/images ${NETIP}/${NETMASK}:rw,no_subtree_check,no_root_squash,sync,crossmnt
575        if [ $? -ne 0 ]; then
576                errorAndLog "${FUNCNAME}(): error while adding nfs images config"
577                return 1
578        fi
579
580        nfsAddExport /opt/opengnsys/log/clients ${NETIP}/${NETMASK}:rw,no_subtree_check,no_root_squash,sync
581        if [ $? -ne 0 ]; then
582                errorAndLog "${FUNCNAME}(): error while adding logging client config"
583                return 1
584        fi
585
586        /etc/init.d/nfs-kernel-server restart
587
588        exportfs -va
589        if [ $? -ne 0 ]; then
590                errorAndLog "${FUNCNAME}(): error while configure exports"
591                return 1
592        fi
593
594        echoAndLog "${FUNCNAME}(): Added NFS configuration to file \"/etc/exports\"."
595        return 0
596}
597
598
599# ejemplos:
600#nfsAddExport /opt/opengnsys 192.168.0.0/255.255.255.0:ro,no_subtree_check,no_root_squash,sync
601#nfsAddExport /opt/opengnsys 192.168.0.0/255.255.255.0
602#nfsAddExport /opt/opengnsys 80.20.2.1:ro 192.123.32.2:rw
603function nfsAddExport()
604{
605        if [ $# -lt 2 ]; then
606                errorAndLog "${FUNCNAME}(): invalid number of parameters"
607                exit 1
608        fi
609
610        if [ ! -f /etc/exports ]; then
611                errorAndLog "${FUNCNAME}(): /etc/exports don't exists"
612                return 1
613        fi
614
615        local export="${1}"
616        local contador=0
617        local cadenaexport
618
619        grep "^${export}" /etc/exports > /dev/null
620        if [ $? -eq 0 ]; then
621                echoAndLog "${FUNCNAME}(): $export exists in /etc/exports, omiting"
622                return 0
623        fi
624
625        cadenaexport="${export}"
626        for parametro in $*
627        do
628                if [ $contador -gt 0 ]
629                then
630                        host=`echo $parametro | awk -F: '{print $1}'`
631                        options=`echo $parametro | awk -F: '{print $2}'`
632                        if [ "${host}" == "" ]; then
633                                errorAndLog "${FUNCNAME}(): host can't be empty"
634                                return 1
635                        fi
636                        cadenaexport="${cadenaexport}\t${host}"
637
638                        if [ "${options}" != "" ]; then
639                                cadenaexport="${cadenaexport}(${options})"
640                        fi
641                fi
642                let contador=contador+1
643        done
644
645        echo -en "$cadenaexport\n" >> /etc/exports
646
647        echoAndLog "${FUNCNAME}(): add $export to /etc/exports"
648
649        return 0
650}
651
652########################################################################
653## Configuracion servicio DHCP
654########################################################################
655
656function dhcpConfigure()
657{
658        echoAndLog "${FUNCNAME}(): Sample DHCP Configuration."
659
660        backupFile /etc/dhcp3/dhcpd.conf
661
662        sed -e "s/SERVERIP/$SERVERIP/g" \
663            -e "s/NETIP/$NETIP/g" \
664            -e "s/NETMASK/$NETMASK/g" \
665            -e "s/NETBROAD/$NETBROAD/g" \
666            -e "s/ROUTERIP/$ROUTERIP/g" \
667            -e "s/DNSIP/$DNSIP/g" \
668            $WORKDIR/opengnsys/server/DHCP/dhcpd.conf > /etc/dhcp3/dhcpd.conf
669        if [ $? -ne 0 ]; then
670                errorAndLog "${FUNCNAME}(): error while configuring dhcp server"
671                return 1
672        fi
673
674        /etc/init.d/dhcp3-server restart
675        echoAndLog "${FUNCNAME}(): Sample DHCP Configured in file \"/etc/dhcp3/dhcpd.conf\"."
676        return 0
677}
678
679
680#####################################################################
681####### Funciones específicas de la instalación de Opengnsys
682#####################################################################
683
684# Copiar ficheros del OpenGnSys Web Console.
685function installWebFiles()
686{
687        echoAndLog "${FUNCNAME}(): Installing web files..."
688        cp -ar $WORKDIR/opengnsys/admin/WebConsole/* $INSTALL_TARGET/www   #*/ comentario para doxigen
689        if [ $? != 0 ]; then
690                errorAndLog "${FUNCNAME}(): Error copying web files."
691                exit 1
692        fi
693        find $INSTALL_TARGET/www -name .svn -type d -exec rm -fr {} \; 2>/dev/null
694        # Cambiar permisos para ficheros especiales.
695        chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP \
696                        $INSTALL_TARGET/www/includes \
697                        $INSTALL_TARGET/www/comandos/gestores/filescripts \
698                        $INSTALL_TARGET/www/images/iconos
699        echoAndLog "${FUNCNAME}(): Web files installed successfully."
700}
701
702# Configuración específica de Apache.
703function openGnsysInstallWebConsoleApacheConf()
704{
705        if [ $# -ne 2 ]; then
706                errorAndLog "${FUNCNAME}(): invalid number of parameters"
707                exit 1
708        fi
709
710        local path_opengnsys_base=$1
711        local path_apache2_confd=$2
712        local path_web_console=${path_opengnsys_base}/www
713
714        if [ ! -d $path_apache2_confd ]; then
715                errorAndLog "${FUNCNAME}(): path to apache2 conf.d can not found, verify your server installation"
716                return 1
717        fi
718
719        mkdir -p $path_apache2_confd/{sites-available,sites-enabled}
720
721        echoAndLog "${FUNCNAME}(): creating apache2 config file.."
722
723
724        # genera configuración
725        cat > $path_opengnsys_base/etc/apache.conf <<EOF
726# OpenGnSys Web Console configuration for Apache
727
728Alias /opengnsys ${path_web_console}
729
730<Directory ${path_web_console}>
731        Options -Indexes FollowSymLinks
732        DirectoryIndex acceso.php
733</Directory>
734EOF
735
736        ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/sites-available/opengnsys.conf
737        ln -fs $path_apache2_confd/sites-available/opengnsys.conf $path_apache2_confd/sites-enabled/opengnsys.conf
738        if [ $? -ne 0 ]; then
739                errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation"
740                return 1
741        else
742                echoAndLog "${FUNCNAME}(): config file created and linked, restarting apache daemon"
743                /etc/init.d/apache2 restart
744                return 0
745        fi
746}
747
748# Crear documentación Doxygen para la consola web.
749function makeDoxygenFiles()
750{
751        echoAndLog "${FUNCNAME}(): Making Doxygen web files..."
752        $WORKDIR/opengnsys/installer/ogGenerateDoc.sh \
753                        $WORKDIR/opengnsys/client/engine $INSTALL_TARGET/www
754        if [ ! -d "$INSTALL_TARGET/www/html" ]; then
755                errorAndLog "${FUNCNAME}(): unable to create Doxygen web files."
756        return 1
757        fi
758        mv "$INSTALL_TARGET/www/html" "$INSTALL_TARGET/www/api"
759        chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/api
760        echoAndLog "${FUNCNAME}(): Doxygen web files created successfully."
761}
762
763
764# Crea la estructura base de la instalación de opengnsys
765function openGnsysInstallCreateDirs()
766{
767        if [ $# -ne 1 ]; then
768                errorAndLog "${FUNCNAME}(): invalid number of parameters"
769                exit 1
770        fi
771
772        local path_opengnsys_base=$1
773
774        echoAndLog "${FUNCNAME}(): creating directory paths in $path_opengnsys_base"
775
776        mkdir -p $path_opengnsys_base
777        mkdir -p $path_opengnsys_base/admin/{autoexec,comandos,menus,usuarios}
778        mkdir -p $path_opengnsys_base/bin
779        mkdir -p $path_opengnsys_base/client
780        mkdir -p $path_opengnsys_base/doc
781        mkdir -p $path_opengnsys_base/etc
782        mkdir -p $path_opengnsys_base/lib
783        mkdir -p $path_opengnsys_base/log/clients
784        mkdir -p $path_opengnsys_base/sbin
785        mkdir -p $path_opengnsys_base/www
786        mkdir -p $path_opengnsys_base/images
787        ln -fs /var/lib/tftpboot $path_opengnsys_base
788        ln -fs $path_opengnsys_base/log /var/log/opengnsys
789
790        if [ $? -ne 0 ]; then
791                errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?"
792                return 1
793        fi
794
795        echoAndLog "${FUNCNAME}(): directory paths created"
796        return 0
797}
798
799# Copia ficheros de configuración y ejecutables genéricos del servidor.
800function openGnsysCopyServerFiles () {
801        if [ $# -ne 1 ]; then
802                errorAndLog "${FUNCNAME}(): invalid number of parameters"
803                exit 1
804        fi
805
806        local path_opengnsys_base=$1
807
808        local SOURCES=( client/boot/initrd-generator \
809                        client/boot/upgrade-clients-udeb.sh \
810                        client/boot/udeblist.conf  \
811                        client/boot/udeblist-jaunty.conf  \
812                        client/boot/udeblist-karmic.conf \
813                        server/PXE/pxelinux.cfg/default \
814                        doc )
815        local TARGETS=( bin/initrd-generator \
816                        bin/upgrade-clients-udeb.sh \
817                        etc/udeblist.conf \
818                        etc/udeblist-jaunty.conf  \
819                        etc/udeblist-karmic.conf \
820                        tftpboot/pxelinux.cfg/default \
821                        doc )
822
823        if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then
824                errorAndLog "${FUNCNAME}(): inconsistent number of array items"
825                exit 1
826        fi
827
828        echoAndLog "${FUNCNAME}(): copying files to server directories"
829
830        pushd $WORKDIR/opengnsys
831        local i
832        for (( i = 0; i < ${#SOURCES[@]}; i++ )); do
833                if [ -f "${SOURCES[$i]}" ]; then
834                        echoAndLog "Copying ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
835                        cp -p "${SOURCES[$i]}" "${path_opengnsys_base}/${TARGETS[$i]}"
836                elif [ -d "${SOURCES[$i]}" ]; then
837                        echoAndLog "Copying content of ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
838                        cp -a "${SOURCES[$i]}"/* "${path_opengnsys_base}/${TARGETS[$i]}"
839        else
840                        echoAndLog "Warning: Unable to copy ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
841                fi
842        done
843        popd
844}
845
846####################################################################
847### Funciones de compilación de códifo fuente de servicios
848####################################################################
849
850# Compilar los servicios de OpenGNsys
851function servicesCompilation ()
852{
853        local hayErrores=0
854
855        # Compilar OpenGnSys Server
856        echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Server"
857        pushd $WORKDIR/opengnsys/admin/Services/ogAdmServer
858        make && make install
859        if [ $? -ne 0 ]; then
860                echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Server"
861                hayErrores=1
862        fi
863        popd
864        # Compilar OpenGnSys Repository Manager
865        echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Repository Manager"
866        pushd $WORKDIR/opengnsys/admin/Services/ogAdmRepo
867        make && make install
868        if [ $? -ne 0 ]; then
869                echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Repository Manager"
870                hayErrores=1
871        fi
872        popd
873        # Compilar OpenGnSys Client
874        echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Client"
875        pushd $WORKDIR/opengnsys/admin/Services/ogAdmClient
876        make && mv ogAdmClient ../../../client/nfsexport/bin
877        if [ $? -ne 0 ]; then
878                echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Client"
879                hayErrores=1
880        fi
881        popd
882
883        return $hayErrores
884}
885
886
887####################################################################
888### Funciones instalacion cliente opengnsys
889####################################################################
890
891function openGnsysClientCreate()
892{
893        local OSDISTRIB OSCODENAME
894
895        local hayErrores=0
896
897        echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files."
898        cp -ar $WORKDIR/opengnsys/client/nfsexport/* $INSTALL_TARGET/client
899        find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null
900        echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files."
901        mkdir -p $INSTALL_TARGET/client/lib/engine/bin
902        cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin
903        if [ $? -ne 0 ]; then
904                errorAndLog "${FUNCNAME}(): error while copying engine files"
905                hayErrores=1
906        fi
907
908        # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto).
909        OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null
910        OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null
911        if [ "$OSDISTRIB" = "Ubuntu" -a -n "$OSCODENAME" ]; then
912                echoAndLog "${FUNCNAME}(): Loading Kernel and Initrd files for $OSDISTRIB $OSCODENAME."
913                $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot -v "$OSCODENAME"
914                if [ $? -ne 0 ]; then
915                        errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client"
916                        hayErrores=1
917                fi
918                echoAndLog "${FUNCNAME}(): Loading udeb files for $OSDISTRIB $OSCODENAME."
919                $INSTALL_TARGET/bin/upgrade-clients-udeb.sh "$OSCODENAME"
920                if [ $? -ne 0 ]; then
921                        errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client"
922                        hayErrores=1
923                fi
924        else
925                echoAndLog "${FUNCNAME}(): Loading default Kernel and Initrd files."
926                $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot/
927                if [ $? -ne 0 ]; then
928                        errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client"
929                        hayErrores=1
930                fi
931                echoAndLog "${FUNCNAME}(): Loading default udeb files."
932                $INSTALL_TARGET/bin/upgrade-clients-udeb.sh
933                if [ $? -ne 0 ]; then
934                        errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client"
935                        hayErrores=1
936                fi
937        fi
938
939        if [ $hayErrores -eq 0 ]; then
940                echoAndLog "${FUNCNAME}(): Client generation success."
941        else
942                errorAndLog "${FUNCNAME}(): Client generation with errors"
943        fi
944
945        return $hayErrores
946}
947
948
949# Configuración básica de servicios de OpenGnSys
950function openGnsysConfigure()
951{
952        echoAndLog "openGnsysConfigure(): Copying init files."
953        cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.init /etc/init.d/opengnsys
954        cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.default /etc/default/opengnsys
955        update-rc.d opengnsys defaults
956        echoAndLog "openGnsysConfigure(): Creating OpenGnSys config file in \"$INSTALL_TARGET/etc\"."
957        perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmServer.cfg
958        perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmRepo.cfg
959        echoAndLog "${FUNCNAME}(): Creating Web Console config file"
960        OPENGNSYS_CONSOLEURL="http://$SERVERIP/opengnsys"
961        perl -pi -e "s/SERVERIP/$SERVERIP/g; s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $INSTALL_TARGET/www/controlacceso.php
962        sed -e "s/SERVERIP/$SERVERIP/g" -e "s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $WORKDIR/opengnsys/admin/Services/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient.cfg
963        echoAndLog "openGnsysConfiguration(): Starting OpenGnSys services."
964        /etc/init.d/opengnsys start
965}
966
967
968#####################################################################
969#######  Función de resumen informativo de la instalación
970#####################################################################
971
972function installationSummary(){
973        echo
974        echoAndLog "OpenGnSys Installation Summary"
975        echo       "=============================="
976        echoAndLog "Project version:                  $(cat $INSTALL_TARGET/doc/VERSION.txt 2>/dev/null)"
977        echoAndLog "Installation directory:           $INSTALL_TARGET"
978        echoAndLog "Repository directory:             $INSTALL_TARGET/images"
979        echoAndLog "TFTP configuracion directory:     /var/lib/tftpboot"
980        echoAndLog "DHCP configuracion file:          /etc/dhcp3/dhcpd.conf"
981        echoAndLog "NFS configuracion file:           /etc/exports"
982        echoAndLog "Web Console URL:                  $OPENGNSYS_CONSOLEURL"
983        echoAndLog "Web Console admin user:           $OPENGNSYS_DB_USER"
984        echoAndLog "Web Console admin password:       $OPENGNSYS_DB_PASSWD"
985        echoAndLog "Web Console default user:         $OPENGNSYS_DB_DEFAULTUSER"
986        echoAndLog "Web Console default password:     $OPENGNSYS_DB_DEFAULTPASSWD"
987        echo
988        echoAndLog "Post-Installation Instructions:"
989        echo       "==============================="
990        echoAndLog "Review or edit all configuration files."
991        echoAndLog "Insert DHCP configuration data and restart service."
992        echoAndLog "Log-in as Web Console admin user."
993        echoAndLog " - Review default Organization data and default user."
994        echoAndLog "Log-in as Web Console organization user."
995        echoAndLog " - Insert OpenGnSys data (rooms, computers, etc)."
996echo
997}
998
999
1000
1001#####################################################################
1002####### Proceso de instalación de OpenGnSys
1003#####################################################################
1004
1005
1006echoAndLog "OpenGnSys installation begins at $(date)"
1007
1008# Detectar parámetros de red por defecto
1009getNetworkSettings
1010if [ $? -ne 0 ]; then
1011        errorAndLog "Error reading default network settings."
1012        exit 1
1013fi
1014
1015# Actualizar repositorios
1016apt-get update
1017
1018# Instalación de dependencias (paquetes de sistema operativo).
1019declare -a notinstalled
1020checkDependencies DEPENDENCIES notinstalled
1021if [ $? -ne 0 ]; then
1022        installDependencies notinstalled
1023        if [ $? -ne 0 ]; then
1024                echoAndLog "Error while installing some dependeces, please verify your server installation before continue"
1025                exit 1
1026        fi
1027fi
1028
1029# Arbol de directorios de OpenGnSys.
1030openGnsysInstallCreateDirs ${INSTALL_TARGET}
1031if [ $? -ne 0 ]; then
1032        errorAndLog "Error while creating directory paths!"
1033        exit 1
1034fi
1035
1036# Si es necesario, descarga el repositorio de código en directorio temporal
1037if [ $USESVN -eq 1 ]; then
1038        svnExportCode $SVN_URL
1039        if [ $? -ne 0 ]; then
1040                errorAndLog "Error while getting code from svn"
1041                exit 1
1042        fi
1043else
1044        ln -fs "$(dirname $PROGRAMDIR)" opengnsys
1045fi
1046
1047# Compilar código fuente de los servicios de OpenGnSys.
1048servicesCompilation
1049if [ $? -ne 0 ]; then
1050        errorAndLog "Error while compiling OpenGnsys services"
1051        exit 1
1052fi
1053
1054# Configurando tftp
1055tftpConfigure
1056
1057# Configuración NFS
1058nfsConfigure
1059if [ $? -ne 0 ]; then
1060        errorAndLog "Error while configuring nfs server!"
1061        exit 1
1062fi
1063
1064# Configuración ejemplo DHCP
1065dhcpConfigure
1066if [ $? -ne 0 ]; then
1067        errorAndLog "Error while copying your dhcp server files!"
1068        exit 1
1069fi
1070
1071# Copiar ficheros de servicios OpenGnSys Server.
1072openGnsysCopyServerFiles ${INSTALL_TARGET}
1073if [ $? -ne 0 ]; then
1074        errorAndLog "Error while copying the server files!"
1075        exit 1
1076fi
1077
1078# Instalar Base de datos de OpenGnSys Admin.
1079isInArray notinstalled "mysql-server"
1080if [ $? -eq 0 ]; then
1081        mysqlSetRootPassword ${MYSQL_ROOT_PASSWORD}
1082else
1083        mysqlGetRootPassword
1084
1085fi
1086
1087mysqlTestConnection ${MYSQL_ROOT_PASSWORD}
1088if [ $? -ne 0 ]; then
1089        errorAndLog "Error while connection to mysql"
1090        exit 1
1091fi
1092mysqlDbExists ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE}
1093if [ $? -ne 0 ]; then
1094        echoAndLog "Creating Web Console database"
1095        mysqlCreateDb ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE}
1096        if [ $? -ne 0 ]; then
1097                errorAndLog "Error while creating Web Console database"
1098                exit 1
1099        fi
1100else
1101        echoAndLog "Web Console database exists, ommiting creation"
1102fi
1103
1104mysqlCheckUserExists ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DB_USER}
1105if [ $? -ne 0 ]; then
1106        echoAndLog "Creating user in database"
1107        mysqlCreateAdminUserToDb ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE} ${OPENGNSYS_DB_USER} "${OPENGNSYS_DB_PASSWD}"
1108        if [ $? -ne 0 ]; then
1109                errorAndLog "Error while creating database user"
1110                exit 1
1111        fi
1112
1113fi
1114
1115mysqlCheckDbIsEmpty ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE}
1116if [ $? -eq 0 ]; then
1117        echoAndLog "Creating tables..."
1118        if [ -f $WORKDIR/$OPENGNSYS_DB_CREATION_FILE ]; then
1119                mysqlImportSqlFileToDb ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE} $WORKDIR/$OPENGNSYS_DB_CREATION_FILE
1120        else
1121                errorAndLog "Unable to locate $WORKDIR/$OPENGNSYS_DB_CREATION_FILE!!"
1122                exit 1
1123        fi
1124fi
1125
1126# copiando paqinas web
1127installWebFiles
1128# Generar páqinas web de documentación de la API
1129makeDoxygenFiles
1130
1131# creando configuracion de apache2
1132openGnsysInstallWebConsoleApacheConf $INSTALL_TARGET /etc/apache2
1133if [ $? -ne 0 ]; then
1134        errorAndLog "Error configuring Apache for OpenGnSYS Admin"
1135        exit 1
1136fi
1137
1138popd
1139
1140# Creando la estructura del cliente
1141openGnsysClientCreate
1142if [ $? -ne 0 ]; then
1143        errorAndLog "Error creating clients"
1144        exit 1
1145fi
1146
1147# Configuración de servicios de OpenGnSys
1148openGnsysConfigure
1149
1150# Mostrar sumario de la instalación e instrucciones de post-instalación.
1151installationSummary
1152
1153#rm -rf $WORKDIR
1154echoAndLog "OpenGnSys installation finished at $(date)"
1155
Note: See TracBrowser for help on using the repository browser.