summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFredy <aluque@soleta.eu>2018-05-21 10:00:10 +0200
committerFredy <aluque@soleta.eu>2018-05-21 10:00:10 +0200
commitec06d91a93e800812e2a9bb69a627f74254755a2 (patch)
tree837f1ab717fec7a7d8fee0a9d10243fb2321a891
parentc870c844e42cbd68b4f277b3f6e686f4c69b8fc4 (diff)
#837 Debian package structure
-rw-r--r--installer/pkg-generator/DEBIAN/changelog7
-rw-r--r--installer/pkg-generator/DEBIAN/conffiles0
-rwxr-xr-xinstaller/pkg-generator/DEBIAN/config28
-rw-r--r--installer/pkg-generator/DEBIAN/control9
-rwxr-xr-xinstaller/pkg-generator/DEBIAN/postinst1432
-rwxr-xr-xinstaller/pkg-generator/DEBIAN/postrm6
-rwxr-xr-xinstaller/pkg-generator/DEBIAN/preinst6
-rwxr-xr-xinstaller/pkg-generator/DEBIAN/prerm4
-rw-r--r--installer/pkg-generator/DEBIAN/templates57
9 files changed, 1549 insertions, 0 deletions
diff --git a/installer/pkg-generator/DEBIAN/changelog b/installer/pkg-generator/DEBIAN/changelog
new file mode 100644
index 00000000..c44f8a36
--- /dev/null
+++ b/installer/pkg-generator/DEBIAN/changelog
@@ -0,0 +1,7 @@
+package (version) distribution; urgency=low
+
+ * change details
+ - more change details
+ * even more change details
+
+-- maintainer Opengnsys <opengnsys-devel@unizar.es> Tue, 08 May 2018 10:26:46 +0200
diff --git a/installer/pkg-generator/DEBIAN/conffiles b/installer/pkg-generator/DEBIAN/conffiles
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/installer/pkg-generator/DEBIAN/conffiles
diff --git a/installer/pkg-generator/DEBIAN/config b/installer/pkg-generator/DEBIAN/config
new file mode 100755
index 00000000..7de55aaf
--- /dev/null
+++ b/installer/pkg-generator/DEBIAN/config
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+# Exit on error
+set -e
+
+# Source debconf library.
+. /usr/share/debconf/confmodule
+
+db_set debconf/frontend Dialog
+
+# Check mysql password if exist.
+db_get mysql-server/root_password || true
+
+if [ "$RET" = "" ]; then
+ # If we can not obtain it we will ask user to input
+ db_input high opengnsys-full/MYSQL_ROOT_PASSWORD || true
+ db_go || true
+else
+ db_set high opengnsys-full/MYSQL_ROOT_PASSWORD "$RET" || true
+ db_go || true
+fi
+
+db_input high opengnsys-full/OPENGNSYS_DB_USER || true
+db_go || true
+db_input high opengnsys-full/OPENGNSYS_DB_PASSWORD || true
+db_go || true
+db_input high opengnsys-full/OPENGNSYS_CLIENT_PASSWORD || true
+db_go || true
diff --git a/installer/pkg-generator/DEBIAN/control b/installer/pkg-generator/DEBIAN/control
new file mode 100644
index 00000000..540384c8
--- /dev/null
+++ b/installer/pkg-generator/DEBIAN/control
@@ -0,0 +1,9 @@
+Package: opengnsys-full
+Priority: optional
+Section: misc
+Maintainer: opengnsys-devel@unizar.es
+Architecture: amd64
+Version: VERSION
+Depends: debconf, subversion, apache2, php, php-ldap, libapache2-mod-php, isc-dhcp-server, bittorrent, tftp-hpa, tftpd-hpa, xinetd, build-essential, g++-multilib, libmysqlclient-dev, wget, curl, doxygen, graphviz, bittornado, ctorrent, samba, rsync, unzip, netpipes, debootstrap, schroot, squashfs-tools, btrfs-tools, procps, arp-scan, realpath, php-curl, gettext ,moreutils, jq, wakeonlan, mysql-server, php-mysql, udpcast, grub-efi-amd64-signed, shim-signed
+Description: Opengnsys Deploy Generator
+Homepage: https://opengnsys.es
diff --git a/installer/pkg-generator/DEBIAN/postinst b/installer/pkg-generator/DEBIAN/postinst
new file mode 100755
index 00000000..9a83c7b4
--- /dev/null
+++ b/installer/pkg-generator/DEBIAN/postinst
@@ -0,0 +1,1432 @@
+#!/bin/bash
+
+########################################################################
+####### Script instalador OpenGnsys
+####### Autor: Alfredo Luque <aluque@soleta.eu>
+####### based on: Luis Guillén <lguillen@unizar.es> opengnsys_installer
+########################################################################
+
+
+# Source debconf library.
+. /usr/share/debconf/confmodule
+
+db_get opengnsys-full/OPENGNSYS_IS_INSTALLED
+OPENGNSYS_IS_INSTALLED="$RET"
+db_get opengnsys-full/MYSQL_ROOT_PASSWORD
+MYSQL_ROOT_PASSWORD="$RET"
+db_get opengnsys-full/OPENGNSYS_DB_USER
+OPENGNSYS_DB_USER="$RET"
+db_get opengnsys-full/OPENGNSYS_DB_PASSWORD
+OPENGNSYS_DB_PASSWD="$RET"
+db_get opengnsys-full/OPENGNSYS_CLIENT_PASSWORD
+OPENGNSYS_CLIENT_PASSWD="$RET"
+
+# Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1).
+PROGRAMDIR=$(readlink -e "$(dirname "$0")")
+PROGRAMNAME=$(basename "$0")
+OPENGNSYS_SERVER="opengnsys.es"
+DOWNLOADURL="https://$OPENGNSYS_SERVER/trac/downloads"
+if [ -d "$PROGRAMDIR/../installer" ]; then
+ USESVN=0
+else
+ USESVN=1
+fi
+SVN_URL="https://$OPENGNSYS_SERVER/svn/branches/version1.1/"
+
+WORKDIR=/tmp/opengnsys_installer
+mkdir -p $WORKDIR
+
+# ogLive Version
+OGLIVE="ogLive-xenial-4.13.0-17-generic-amd64-r5520.iso"
+
+# Directorio destino de OpenGnsys.
+INSTALL_TARGET=/opt/opengnsys
+PATH=$PATH:$INSTALL_TARGET/bin
+
+# Registro de incidencias.
+OGLOGFILE=$INSTALL_TARGET/log/${PROGRAMNAME%.sh}.log
+LOG_FILE=/tmp/$(basename $OGLOGFILE)
+
+# Usuario del cliente para acceso remoto.
+OPENGNSYS_CLIENT_USER="opengnsys"
+
+# Nombre de la base datos y fichero SQL para su creación.
+OPENGNSYS_DATABASE="ogAdmBD"
+OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/${OPENGNSYS_DATABASE}.sql
+
+
+#####################################################################
+####### Funciones de configuración
+#####################################################################
+
+# Generar variables de configuración del instalador
+# Variables globales:
+# - OSDISTRIB, OSVERSION - tipo y versión de la distribución GNU/Linux
+# - DEPENDENCIES - array de dependencias que deben estar instaladas
+# - UPDATEPKGLIST, INSTALLPKGS, CHECKPKGS - comandos para gestión de paquetes
+# - INSTALLEXTRADEPS - instalar dependencias no incluidas en la distribución
+# - STARTSERVICE, ENABLESERVICE - iniciar y habilitar un servicio
+# - STOPSERVICE, DISABLESERVICE - parar y deshabilitar un servicio
+# - APACHESERV, APACHECFGDIR, APACHESITESDIR, APACHEUSER, APACHEGROUP - servicio y configuración de Apache
+# - APACHESSLMOD, APACHEENABLESSL, APACHEMAKECERT - habilitar módulo Apache y certificado SSL
+# - APACHEENABLEOG, APACHEOGSITE, - habilitar sitio web de OpenGnsys
+# - INETDSERV - servicio Inetd
+# - FIREWALLSERV - servicio de cortabuegos IPTables/FirewallD
+# - DHCPSERV, DHCPCFGDIR - servicio y configuración de DHCP
+# - MYSQLSERV, TMPMYCNF - servicio MySQL y fichero temporal con credenciales de acceso
+# - MARIADBSERV - servicio MariaDB (sustituto de MySQL en algunas distribuciones)
+# - RSYNCSERV, RSYNCCFGDIR - servicio y configuración de Rsync
+# - SAMBASERV, SAMBACFGDIR - servicio y configuración de Samba
+# - TFTPSERV, TFTPCFGDIR - servicio y configuración de TFTP/PXE
+function autoConfigure()
+{
+# Detectar sistema operativo del servidor (compatible con fichero os-release y con LSB).
+if [ -f /etc/os-release ]; then
+ source /etc/os-release
+ OSDISTRIB="$ID"
+ OSVERSION="$VERSION_ID"
+else
+ OSDISTRIB=$(lsb_release -is 2>/dev/null)
+ OSVERSION=$(lsb_release -rs 2>/dev/null)
+fi
+# Convertir distribución a minúsculas y obtener solo el 1er número de versión.
+OSDISTRIB="${OSDISTRIB,,}"
+OSVERSION="${OSVERSION%%.*}"
+
+# Configuración según la distribución GNU/Linux (usar minúsculas).
+case "$OSDISTRIB" in
+ ubuntu|debian|linuxmint)
+ DEPENDENCIES=( subversion apache2 php php-ldap libapache2-mod-php mysql-server php-mysql isc-dhcp-server bittorrent tftp-hpa tftpd-hpa xinetd build-essential g++-multilib libmysqlclient-dev wget curl doxygen graphviz bittornado ctorrent samba rsync unzip netpipes debootstrap schroot squashfs-tools btrfs-tools procps arp-scan realpath php-curl gettext moreutils jq wakeonlan )
+ UPDATEPKGLIST="apt-get update"
+ INSTALLPKG="apt-get -y install --force-yes"
+ CHECKPKG="dpkg -s \$package 2>/dev/null | grep Status | grep -qw install"
+ if which service &>/dev/null; then
+ STARTSERVICE="eval service \$service restart"
+ STOPSERVICE="eval service \$service stop"
+ else
+ STARTSERVICE="eval /etc/init.d/\$service restart"
+ STOPSERVICE="eval /etc/init.d/\$service stop"
+ fi
+ ENABLESERVICE="eval update-rc.d \$service defaults"
+ DISABLESERVICE="eval update-rc.d \$service disable"
+ APACHESERV=apache2
+ APACHECFGDIR=/etc/apache2
+ APACHESITESDIR=sites-available
+ APACHEOGSITE=opengnsys
+ APACHEUSER="www-data"
+ APACHEGROUP="www-data"
+ APACHESSLMOD="a2enmod ssl"
+ APACHEREWRITEMOD="a2enmod rewrite"
+ APACHEENABLESSL="a2ensite default-ssl"
+ APACHEENABLEOG="a2ensite $APACHEOGSITE"
+ APACHEMAKECERT="make-ssl-cert generate-default-snakeoil --force-overwrite"
+ DHCPSERV=isc-dhcp-server
+ DHCPCFGDIR=/etc/dhcp
+ INETDSERV=xinetd
+ INETDCFGDIR=/etc/xinetd.d
+ MYSQLSERV=mysql
+ MARIADBSERV=mariadb
+ RSYNCSERV=rsync
+ RSYNCCFGDIR=/etc
+ SAMBASERV=smbd
+ SAMBACFGDIR=/etc/samba
+ TFTPCFGDIR=/var/lib/tftpboot
+ ;;
+ fedora|centos)
+ DEPENDENCIES=( subversion httpd mod_ssl php php-ldap mysql-server mysql-devel mysql-devel.i686 php-mysql dhcp tftp-server tftp xinetd binutils gcc gcc-c++ glibc-devel glibc-devel.i686 glibc-static glibc-static.i686 libstdc++-devel.i686 make wget curl doxygen graphviz ctorrent samba samba-client rsync unzip debootstrap schroot squashfs-tools python-crypto arp-scan procps-ng gettext moreutils jq net-tools http://ftp.altlinux.org/pub/distributions/ALTLinux/5.1/branch/$(arch)/RPMS.classic/netpipes-4.2-alt1.$(arch).rpm )
+ INSTALLEXTRADEPS=( 'pushd /tmp; wget -t3 http://download.bittornado.com/download/BitTornado-0.3.18.tar.gz && tar xvzf BitTornado-0.3.18.tar.gz && cd BitTornado-CVS && python setup.py install && ln -fs btlaunchmany.py /usr/bin/btlaunchmany && ln -fs bttrack.py /usr/bin/bttrack; popd' )
+ INSTALLPKG="yum install -y libstdc++ libstdc++.i686"
+ CHECKPKG="rpm -q --quiet \$package"
+ SYSTEMD=$(which systemctl 2>/dev/null)
+ if [ -n "$SYSTEMD" ]; then
+ STARTSERVICE="eval systemctl start \$service.service"
+ STOPSERVICE="eval systemctl stop \$service.service"
+ ENABLESERVICE="eval systemctl enable \$service.service"
+ DISABLESERVICE="eval systemctl disable \$service.service"
+ else
+ STARTSERVICE="eval service \$service start"
+ STOPSERVICE="eval service \$service stop"
+ ENABLESERVICE="eval chkconfig \$service on"
+ DISABLESERVICE="eval chkconfig \$service off"
+ fi
+ APACHESERV=httpd
+ APACHECFGDIR=/etc/httpd/conf.d
+ APACHEOGSITE=opengnsys.conf
+ APACHEUSER="apache"
+ APACHEGROUP="apache"
+ APACHEREWRITEMOD="sed -i '/rewrite/s/^#//' $APACHECFGDIR/../*.conf"
+ DHCPSERV=dhcpd
+ DHCPCFGDIR=/etc/dhcp
+ if firewall-cmd --state &>/dev/null; then
+ FIREWALLSERV=firewalld
+ else
+ FIREWALLSERV=iptables
+ fi
+ INETDSERV=xinetd
+ INETDCFGDIR=/etc/xinetd.d
+ MYSQLSERV=mysqld
+ MARIADBSERV=mariadb
+ RSYNCSERV=rsync
+ RSYNCCFGDIR=/etc
+ SAMBASERV=smb
+ SAMBACFGDIR=/etc/samba
+ TFTPSERV=tftp
+ TFTPCFGDIR=/var/lib/tftpboot
+ ;;
+ "") echo "ERROR: Unknown Linux distribution, please install \"lsb_release\" command."
+ exit 1 ;;
+ *) echo "ERROR: Distribution not supported by OpenGnsys."
+ exit 1 ;;
+esac
+
+# Symbolic links.
+ln -fs $INSTALL_TARGET/log /var/log/opengnsys
+
+# Fichero de credenciales de acceso a MySQL.
+TMPMYCNF=/tmp/.my.cnf.$$
+}
+
+
+# Modificar variables de configuración tras instalar paquetes del sistema.
+function autoConfigurePost()
+{
+local f
+
+# Configuraciones específicas para Samba y TFTP en Debian 6.
+[ -z "$SYSTEMD" -a ! -e /etc/init.d/$SAMBASERV ] && SAMBASERV=samba
+[ ! -e $TFTPCFGDIR ] && TFTPCFGDIR=/srv/tftp
+
+# Configuraciones específicas para SELinux permisivo en distintas versiones.
+[ -f /selinux/enforce ] && echo 0 > /selinux/enforce
+for f in /etc/sysconfig/selinux /etc/selinux/config; do
+ [ -f $f ] && perl -pi -e 's/SELINUX=enforcing/SELINUX=permissive/g' $f
+done
+selinuxenabled 2>/dev/null && setenforce 0 2>/dev/null
+}
+
+
+# Cargar lista de paquetes del sistema y actualizar algunas variables de configuración
+# dependiendo de la versión instalada.
+function updatePackageList()
+{
+return 0 # Skipped. We will include all deps in .deb
+
+local DHCPVERSION PHP7VERSION
+
+# Si es necesario, actualizar la lista de paquetes disponibles.
+[ -n "$UPDATEPKGLIST" ] && eval $UPDATEPKGLIST
+
+# Configuración personallizada de algunos paquetes.
+case "$OSDISTRIB" in
+ ubuntu|linuxmint) # Postconfiguación personalizada para Ubuntu.
+ # Configuración para DHCP v3.
+ DHCPVERSION=$(apt-cache show $(apt-cache pkgnames|egrep "dhcp.?-server$") | \
+ awk '/Version/ {print substr($2,1,1);}' | \
+ sort -n | tail -1)
+ if [ $DHCPVERSION = 3 ]; then
+ DEPENDENCIES=( ${DEPENDENCIES[@]/isc-dhcp-server/dhcp3-server} )
+ DHCPSERV=dhcp3-server
+ DHCPCFGDIR=/etc/dhcp3
+ fi
+ # Configuración para PHP 7 en Ubuntu.
+ if [ -z "$(apt-cache pkgnames php7)" ]; then
+ eval $INSTALLPKG software-properties-common
+ add-apt-repository -y ppa:ondrej/php
+ eval $UPDATEPKGLIST
+ PHP7VERSION=$(apt-cache pkgnames php7 | sort | head -1)
+ DEPENDENCIES=( ${DEPENDENCIES[@]//php/$PHP7VERSION} )
+ fi
+ # Adaptar dependencias para libmysqlclient.
+ [ -z "$(apt-cache pkgnames libmysqlclient-dev)" ] && [ -n "$(apt-cache pkgnames libmysqlclient15)" ] && DEPENDENCIES=( ${DEPENDENCIES[@]//libmysqlclient-dev/libmysqlclient15} )
+ ;;
+ centos) # Postconfiguación personalizada para CentOS.
+ # Configuración para PHP 7.
+ if ! yum list php7 &>/dev/null; then
+ if [ $OSVERSION -lt 7 ]; then
+ yum install -y https://mirror.webtatic.com/yum/el$OSVERSION/latest.rpm
+ PHP7VERSION=$(yum list -q php7\*w | awk -F. '/^php/ {p=$1} END {print p}')
+ DEPENDENCIES=( ${DEPENDENCIES[@]//php/$PHP5VERSION} )
+ fi
+ fi
+ # Cambios a aplicar a partir de CentOS 7.
+ if [ $OSVERSION -ge 7 ]; then
+ # Sustituir MySQL por MariaDB.
+ DEPENDENCIES=( ${DEPENDENCIES[*]/mysql-/mariadb-} )
+ # Instalar ctorrent de EPEL para CentOS 6 (no disponible en CentOS 7).
+ DEPENDENCIES=( ${DEPENDENCIES[*]/ctorrent/http://dl.fedoraproject.org/pub/epel/6/$(arch)/Packages/c/ctorrent-1.3.4-14.dnh3.3.2.el6.$(arch).rpm} )
+ fi
+ ;;
+ fedora) # Postconfiguación personalizada para Fedora.
+ # Incluir paquetes específicos.
+ DEPENDENCIES=( ${DEPENDENCIES[@]} btrfs-progs )
+ # Sustituir MySQL por MariaDB a partir de Fedora 20.
+ [ $OSVERSION -ge 20 ] && DEPENDENCIES=( ${DEPENDENCIES[*]/mysql-/mariadb-} )
+ ;;
+esac
+}
+
+
+#####################################################################
+####### Algunas funciones útiles de propósito general:
+#####################################################################
+
+function getDateTime()
+{
+ date "+%Y%m%d-%H%M%S"
+}
+
+# Escribe a fichero y muestra por pantalla
+function echoAndLog()
+{
+ local DATETIME=`getDateTime`
+ # echo "$1" #no queremos salidas por pantalla
+ echo "$DATETIME;$SSH_CLIENT;$1" >> $LOG_FILE
+}
+
+# Escribe a fichero y muestra mensaje de error
+function errorAndLog()
+{
+ local DATETIME=`getDateTime`
+ # echo "ERROR: $1" #no queremos salidas por pantalla
+ echo "$DATETIME;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE
+}
+
+# Escribe a fichero y muestra mensaje de aviso
+function warningAndLog()
+{
+ local DATETIME=`getDateTime`
+ # echo "Warning: $1" #no queremos salidas por pantalla
+ echo "$DATETIME;$SSH_CLIENT;Warning: $1" >> $LOG_FILE
+}
+
+# Comprueba si el elemento pasado en $2 está en el array $1
+function isInArray()
+{
+ if [ $# -ne 2 ]; then
+ errorAndLog "${FUNCNAME}(): invalid number of parameters"
+ exit 1
+ fi
+
+ local deps
+ local is_in_array=1
+ local element="$2"
+
+ echoAndLog "${FUNCNAME}(): checking if $2 is in $1"
+ eval "deps=( \"\${$1[@]}\" )"
+
+ # Copia local del array del parámetro 1.
+ for (( i = 0 ; i < ${#deps[@]} ; i++ )); do
+ if [ "${deps[$i]}" = "${element}" ]; then
+ echoAndLog "isInArray(): $element found in array"
+ is_in_array=0
+ fi
+ done
+
+ if [ $is_in_array -ne 0 ]; then
+ echoAndLog "${FUNCNAME}(): $element NOT found in array"
+ fi
+
+ return $is_in_array
+}
+
+
+#####################################################################
+####### Funciones de manejo de paquetes Debian
+#####################################################################
+
+function checkPackage()
+{
+return 0 # Skipped. We will include all deps in .deb
+
+ package=$1
+ if [ -z $package ]; then
+ errorAndLog "${FUNCNAME}(): parameter required"
+ exit 1
+ fi
+ echoAndLog "${FUNCNAME}(): checking if package $package exists"
+ eval $CHECKPKG
+ if [ $? -eq 0 ]; then
+ echoAndLog "${FUNCNAME}(): package $package exists"
+ return 0
+ else
+ echoAndLog "${FUNCNAME}(): package $package doesn't exists"
+ return 1
+ fi
+}
+
+# Recibe array con dependencias
+# por referencia deja un array con las dependencias no resueltas
+# devuelve 1 si hay alguna dependencia no resuelta
+function checkDependencies()
+{
+return 0 # Skipped. We will include all deps in .deb
+
+ if [ $# -ne 2 ]; then
+ errorAndLog "${FUNCNAME}(): invalid number of parameters"
+ exit 1
+ fi
+
+ echoAndLog "${FUNCNAME}(): checking dependences"
+ uncompletedeps=0
+
+ # copia local del array del parametro 1
+ local deps
+ eval "deps=( \"\${$1[@]}\" )"
+
+ declare -a local_notinstalled
+
+ for (( i = 0 ; i < ${#deps[@]} ; i++ ))
+ do
+ checkPackage ${deps[$i]}
+ if [ $? -ne 0 ]; then
+ local_notinstalled[$uncompletedeps]=$package
+ let uncompletedeps=uncompletedeps+1
+ fi
+ done
+
+ # relleno el array especificado en $2 por referencia
+ for (( i = 0 ; i < ${#local_notinstalled[@]} ; i++ ))
+ do
+ eval "${2}[$i]=${local_notinstalled[$i]}"
+ done
+
+ # retorna el numero de paquetes no resueltos
+ echoAndLog "${FUNCNAME}(): dependencies uncompleted: $uncompletedeps"
+ return $uncompletedeps
+}
+
+# Recibe un array con las dependencias y lo instala
+function installDependencies()
+{
+return 0 # Skipped. We will include all deps in .deb
+
+ if [ $# -ne 1 ]; then
+ errorAndLog "${FUNCNAME}(): invalid number of parameters"
+ exit 1
+ fi
+ echoAndLog "${FUNCNAME}(): installing uncompleted dependencies"
+
+ # copia local del array del parametro 1
+ local deps
+ eval "deps=( \"\${$1[@]}\" )"
+
+ local string_deps=""
+ for (( i = 0 ; i < ${#deps[@]} ; i++ ))
+ do
+ string_deps="$string_deps ${deps[$i]}"
+ done
+
+ if [ -z "${string_deps}" ]; then
+ errorAndLog "${FUNCNAME}(): array of dependeces is empty"
+ exit 1
+ fi
+
+ OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND # Debian/Ubuntu
+ export DEBIAN_FRONTEND=noninteractive
+
+ echoAndLog "${FUNCNAME}(): now $string_deps will be installed"
+ eval $INSTALLPKG $string_deps
+ if [ $? -ne 0 ]; then
+ errorAndLog "${FUNCNAME}(): error installing dependencies"
+ return 1
+ fi
+
+ DEBIAN_FRONTEND=$OLD_DEBIAN_FRONTEND # Debian/Ubuntu
+ test grep -q "EPEL temporal" /etc/yum.repos.d/epel.repo 2>/dev/null || mv -f /etc/yum.repos.d/epel.repo.rpmnew /etc/yum.repos.d/epel.repo 2>/dev/null # CentOS/RedHat EPEL
+
+ echoAndLog "${FUNCNAME}(): dependencies installed"
+}
+
+# Hace un backup del fichero pasado por parámetro
+# deja un -last y uno para el día
+function backupFile()
+{
+ if [ $# -ne 1 ]; then
+ errorAndLog "${FUNCNAME}(): invalid number of parameters"
+ exit 1
+ fi
+
+ local file="$1"
+ local dateymd=`date +%Y%m%d`
+
+ if [ ! -f "$file" ]; then
+ warningAndLog "${FUNCNAME}(): file $file doesn't exists"
+ return 1
+ fi
+
+ echoAndLog "${FUNCNAME}(): making $file backup"
+
+ # realiza una copia de la última configuración como last
+ cp -a "$file" "${file}-LAST"
+
+ # si para el día no hay backup lo hace, sino no
+ if [ ! -f "${file}-${dateymd}" ]; then
+ cp -a "$file" "${file}-${dateymd}"
+ fi
+
+ echoAndLog "${FUNCNAME}(): $file backup success"
+}
+
+#####################################################################
+####### Funciones para el manejo de bases de datos
+#####################################################################
+
+# This function set password to root
+function mysqlSetRootPassword()
+{
+return 0 # Skipped.
+ if [ $# -ne 1 ]; then
+ errorAndLog "${FUNCNAME}(): invalid number of parameters"
+ exit 1
+ fi
+
+ local root_mysql="$1"
+ echoAndLog "${FUNCNAME}(): setting root password in MySQL server"
+ mysqladmin -u root password "$root_mysql"
+ if [ $? -ne 0 ]; then
+ errorAndLog "${FUNCNAME}(): error while setting root password in MySQL server"
+ return 1
+ fi
+ echoAndLog "${FUNCNAME}(): root password saved!"
+ return 0
+}
+
+# comprueba si puede conectar con mysql con el usuario root
+function mysqlTestConnection()
+{
+ if [ $# -ne 1 ]; then
+ errorAndLog "${FUNCNAME}(): invalid number of parameters"
+ exit 1
+ fi
+ db_get opengnsys-full/MYSQL_ROOT_PASSWORD
+ MYSQL_ROOT_PASSWORD="$RET"
+ local root_password="$1"
+ if [ "$1" != "$RET" ]; then
+ db_input high opengnsys-full/MYSQL_ROOT_PASSWORD || true
+ db_go || true
+ db_get opengnsys-full/MYSQL_ROOT_PASSWORD
+ root_password="$RET"
+ fi
+
+
+ echoAndLog "${FUNCNAME}(): checking connection to mysql..."
+ # Componer fichero con credenciales de conexión a MySQL.
+ touch $TMPMYCNF
+ chmod 600 $TMPMYCNF
+ cat << EOT > $TMPMYCNF
+[client]
+user=root
+password=$root_password
+EOT
+ # Borrar el fichero temporal si termina el proceso de instalación.
+ trap "rm -f $TMPMYCNF" 0 1 2 3 6 9 15
+ # Comprobar conexión a MySQL.
+ echo "" | mysql --defaults-extra-file=$TMPMYCNF
+ if [ $? -ne 0 ]; then
+ errorAndLog "${FUNCNAME}(): connection to mysql failed, check root password and if daemon is running!"
+ return 1
+ else
+ echoAndLog "${FUNCNAME}(): connection success"
+ return 0
+ fi
+}
+
+# comprueba si la base de datos existe
+function mysqlDbExists()
+{
+ if [ $# -ne 1 ]; then
+ errorAndLog "${FUNCNAME}(): invalid number of parameters"
+ exit 1
+ fi
+
+ local database="$1"
+ echoAndLog "${FUNCNAME}(): checking if $database exists..."
+ echo "show databases" | mysql --defaults-extra-file=$TMPMYCNF | grep "^${database}$"
+ if [ $? -ne 0 ]; then
+ echoAndLog "${FUNCNAME}():database $database doesn't exists"
+ return 1
+ else
+ echoAndLog "${FUNCNAME}():database $database exists"
+ return 0
+ fi
+}
+
+# Comprueba si la base de datos está vacía.
+function mysqlCheckDbIsEmpty()
+{
+ if [ $# -ne 1 ]; then
+ errorAndLog "${FUNCNAME}(): invalid number of parameters"
+ exit 1
+ fi
+
+ local database="$1"
+ echoAndLog "${FUNCNAME}(): checking if $database is empty..."
+ num_tablas=`echo "show tables" | mysql --defaults-extra-file=$TMPMYCNF "${database}" | wc -l`
+ if [ $? -ne 0 ]; then
+ errorAndLog "${FUNCNAME}(): error executing query, check database and root password"
+ exit 1
+ fi
+
+ if [ $num_tablas -eq 0 ]; then
+ echoAndLog "${FUNCNAME}():database $database is empty"
+ return 0
+ else
+ echoAndLog "${FUNCNAME}():database $database has tables"
+ return 1
+ fi
+
+}
+
+# Importa un fichero SQL en la base de datos.
+# Parámetros:
+# - 1: nombre de la BD.
+# - 2: fichero a importar.
+# Nota: el fichero SQL puede contener las siguientes palabras reservadas:
+# - SERVERIP: se sustituye por la dirección IP del servidor.
+# - DBUSER: se sustituye por usuario de conexión a la BD definido en este script.
+# - DBPASSWD: se sustituye por la clave de conexión a la BD definida en este script.
+function mysqlImportSqlFileToDb()
+{
+ if [ $# -ne 2 ]; then
+ errorAndLog "${FNCNAME}(): invalid number of parameters"
+ exit 1
+ fi
+
+ local database="$1"
+ local sqlfile="$2"
+ local tmpfile=$(mktemp)
+ local i=0
+ local dev=""
+ local status
+ # Claves aleatorias para acceso a las APIs REST.
+ local OPENGNSYS_APIKEY=$(php -r 'echo md5(uniqid(rand(), true));')
+ OPENGNSYS_REPOKEY=$(php -r 'echo md5(uniqid(rand(), true));')
+
+ if [ ! -f $sqlfile ]; then
+ errorAndLog "${FUNCNAME}(): Unable to locate $sqlfile!!"
+ return 1
+ fi
+
+ echoAndLog "${FUNCNAME}(): importing SQL file to ${database}..."
+ chmod 600 $tmpfile
+ for dev in ${DEVICE[*]}; do
+ if [ "${DEVICE[i]}" == "$DEFAULTDEV" ]; then
+ sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
+ -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
+ -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" \
+ -e "s/APIKEY/$OPENGNSYS_APIKEY/g" \
+ -e "s/REPOKEY/$OPENGNSYS_REPOKEY/g" \
+ $sqlfile > $tmpfile
+ fi
+ let i++
+ done
+ mysql --defaults-extra-file=$TMPMYCNF --default-character-set=utf8 "${database}" < $tmpfile
+ status=$?
+ rm -f $tmpfile
+ if [ $status -ne 0 ]; then
+ errorAndLog "${FUNCNAME}(): error while importing $sqlfile in database $database"
+ return 1
+ fi
+ echoAndLog "${FUNCNAME}(): file imported to database $database"
+ return 0
+}
+
+# Crea la base de datos
+function mysqlCreateDb()
+{
+ if [ $# -ne 1 ]; then
+ errorAndLog "${FUNCNAME}(): invalid number of parameters"
+ exit 1
+ fi
+
+ local database="$1"
+
+ echoAndLog "${FUNCNAME}(): creating database..."
+ mysqladmin --defaults-extra-file=$TMPMYCNF create $database
+ if [ $? -ne 0 ]; then
+ errorAndLog "${FUNCNAME}(): error while creating database $database"
+ return 1
+ fi
+ # Quitar modo ONLY_FULL_GROUP_BY de MySQL (ticket #730).
+ mysql --defaults-extra-file=$TMPMYCNF -e "SET GLOBAL sql_mode=(SELECT TRIM(BOTH ',' FROM REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')));"
+
+ echoAndLog "${FUNCNAME}(): database $database created"
+ return 0
+}
+
+# Comprueba si ya está definido el usuario de acceso a la BD.
+function mysqlCheckUserExists()
+{
+ if [ $# -ne 1 ]; then
+ errorAndLog "${FUNCNAME}(): invalid number of parameters"
+ exit 1
+ fi
+
+ local userdb="$1"
+
+ echoAndLog "${FUNCNAME}(): checking if $userdb exists..."
+ echo "select user from user where user='${userdb}'\\G" |mysql --defaults-extra-file=$TMPMYCNF mysql | grep user
+ if [ $? -ne 0 ]; then
+ echoAndLog "${FUNCNAME}(): user doesn't exists"
+ return 1
+ else
+ echoAndLog "${FUNCNAME}(): user already exists"
+ return 0
+ fi
+
+}
+
+# Crea un usuario administrativo para la base de datos
+function mysqlCreateAdminUserToDb()
+{
+ if [ $# -ne 3 ]; then
+ errorAndLog "${FUNCNAME}(): invalid number of parameters"
+ exit 1
+ fi
+
+ local database="$1"
+ local userdb="$2"
+ local passdb="$3"
+
+ echoAndLog "${FUNCNAME}(): creating admin user ${userdb} to database ${database}"
+
+ cat > $WORKDIR/create_${database}.sql <<EOF
+GRANT USAGE ON *.* TO '${userdb}'@'localhost' IDENTIFIED BY '${passdb}' ;
+GRANT ALL PRIVILEGES ON ${database}.* TO '${userdb}'@'localhost' WITH GRANT OPTION ;
+FLUSH PRIVILEGES ;
+EOF
+ mysql --defaults-extra-file=$TMPMYCNF < $WORKDIR/create_${database}.sql
+ if [ $? -ne 0 ]; then
+ errorAndLog "${FUNCNAME}(): error while creating user in mysql"
+ rm -f $WORKDIR/create_${database}.sql
+ return 1
+ else
+ echoAndLog "${FUNCNAME}(): user created ok"
+ rm -f $WORKDIR/create_${database}.sql
+ return 0
+ fi
+}
+
+
+#####################################################################
+####### Funciones para el manejo de Subversion
+#####################################################################
+
+# Obtiene el código fuente del proyecto desde el servidor SVN.
+function svnExportCode()
+{
+return 0 # Skipped. We will include all files in .deb
+
+ if [ $# -ne 1 ]; then
+ errorAndLog "${FUNCNAME}(): invalid number of parameters"
+ exit 1
+ fi
+
+ local url="$1"
+
+ echoAndLog "${FUNCNAME}(): downloading subversion code..."
+
+ svn export --force "$url" opengnsys
+ if [ $? -ne 0 ]; then
+ errorAndLog "${FUNCNAME}(): error getting OpenGnsys code from $url"
+ return 1
+ fi
+ echoAndLog "${FUNCNAME}(): subversion code downloaded"
+ return 0
+}
+
+
+############################################################
+### Detectar red
+############################################################
+
+# Comprobar si existe conexión.
+function checkNetworkConnection()
+{
+ echoAndLog "${FUNCNAME}(): Disabling Firewall: $FIREWALLSERV."
+ if [ -n "$FIREWALLSERV" ]; then
+ service=$FIREWALLSERV
+ $STOPSERVICE; $DISABLESERVICE
+ fi
+
+ echoAndLog "${FUNCNAME}(): Checking OpenGnsys server conectivity."
+ OPENGNSYS_SERVER=${OPENGNSYS_SERVER:-"opengnsys.es"}
+ if which wget &>/dev/null; then
+ wget --spider -q $OPENGNSYS_SERVER
+ elif which curl &>/dev/null; then
+ curl --connect-timeout 10 -s $OPENGNSYS_SERVER -o /dev/null
+ else
+ echoAndLog "${FUNCNAME}(): Cannot execute \"wget\" nor \"curl\"."
+ return 1
+ fi
+}
+
+# Convierte nº de bits (notación CIDR) en máscara de red (gracias a FriedZombie en openwrt.org).
+cidr2mask ()
+{
+ # Number of args to shift, 255..255, first non-255 byte, zeroes
+ set -- $[ 5 - ($1 / 8) ] 255 255 255 255 $[ (255 << (8 - ($1 % 8))) & 255 ] 0 0 0
+ [ $1 -gt 1 ] && shift $1 || shift
+ echo ${1-0}.${2-0}.${3-0}.${4-0}
+}
+
+
+# Obtener los parámetros de red de la interfaz por defecto.
+function getNetworkSettings()
+{
+ # Arrays globales definidas:
+ # - DEVICE: nombres de dispositivos de red activos.
+ # - SERVERIP: IPs locales del servidor.
+ # - NETIP: IPs de redes.
+ # - NETMASK: máscaras de red.
+ # - NETBROAD: IPs de difusión de redes.
+ # - ROUTERIP: IPs de routers.
+ # Otras variables globales:
+ # - DEFAULTDEV: dispositivo de red por defecto.
+ # - DNSIP: IP del servidor DNS principal.
+
+ local i=0
+ local dev=""
+
+ echoAndLog "${FUNCNAME}(): Detecting network parameters."
+ DEVICE=( $(ip -o link show up | awk '!/loopback/ {sub(/:.*/,"",$2); print $2}') )
+ if [ -z "$DEVICE" ]; then
+ errorAndLog "${FUNCNAME}(): Network devices not detected."
+ exit 1
+ fi
+ for dev in ${DEVICE[*]}; do
+ SERVERIP[i]=$(ip -o addr show dev "$dev" | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4)}')
+ if [ -n "${SERVERIP[i]}" ]; then
+ NETMASK[i]=$( cidr2mask $(ip -o addr show dev "$dev" | awk '$3~/inet$/ {sub (/.*\//, "", $4); print ($4)}') )
+ NETBROAD[i]=$(ip -o addr show dev "$dev" | awk '$3~/inet$/ {print ($6)}')
+ NETIP[i]=$(ip route | awk -v d="$dev" '$3==d && /src/ {sub (/\/.*/,""); print $1}')
+ ROUTERIP[i]=$(ip route | awk -v d="$dev" '$1=="default" && $5==d {print $3}')
+ DEFAULTDEV=${DEFAULTDEV:-"$dev"}
+ fi
+ let i++
+ done
+ DNSIP=$(awk '/nameserver/ {print $2}' /etc/resolv.conf | head -n1)
+ if [ -z "${NETIP[*]}" -o -z "${NETMASK[*]}" ]; then
+ errorAndLog "${FUNCNAME}(): Network not detected."
+ exit 1
+ fi
+
+ # Variables de ejecución de Apache
+ # - APACHE_RUN_USER
+ # - APACHE_RUN_GROUP
+ if [ -f $APACHECFGDIR/envvars ]; then
+ source $APACHECFGDIR/envvars
+ fi
+ APACHE_RUN_USER=${APACHE_RUN_USER:-"$APACHEUSER"}
+ APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"$APACHEGROUP"}
+
+ echoAndLog "${FUNCNAME}(): Default network device: $DEFAULTDEV."
+}
+
+
+############################################################
+### Esqueleto para el Servicio pxe y contenedor tftpboot ###
+############################################################
+
+function tftpConfigure()
+{
+ echoAndLog "${FUNCNAME}(): Configuring TFTP service."
+ # Copying EFI loader.
+ cp -a /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed $TFTPCFGDIR
+ cp -a /usr/lib/shim/shimx64.efi.signed $TFTPCFGDIR
+ cp -a $WORKDIR/server/tftpboot/* $TFTPCFGDIR
+ ln -fs $TFTPCFGDIR $INSTALL_TARGET
+ # Habilitar TFTP y reiniciar Inetd.
+ if [ -n "$TFTPSERV" ]; then
+ if [ -f $INETDCFGDIR/$TFTPSERV ]; then
+ perl -pi -e 's/disable.*/disable = no/' $INETDCFGDIR/$TFTPSERV
+ else
+ service=$TFTPSERV
+ $ENABLESERVICE; $STARTSERVICE
+ fi
+ fi
+ service=$INETDSERV
+ $ENABLESERVICE; $STARTSERVICE
+
+ # comprobamos el servicio tftp
+ sleep 1
+ testPxe
+}
+
+# Comprueba que haya conexión al servicio TFTP/PXE.
+function testPxe ()
+{
+ echoAndLog "${FUNCNAME}(): Checking TFTP service... please wait."
+ echo "test" >$TFTPCFGDIR/testpxe
+ tftp -v 127.0.0.1 -c get testpxe /tmp/testpxe && echoAndLog "TFTP service is OK." || errorAndLog "TFTP service is down."
+ rm -f $TFTPCFGDIR/testpxe /tmp/testpxe
+}
+
+
+########################################################################
+## Configuración servicio Samba
+########################################################################
+
+# Configurar servicios Samba.
+function smbConfigure()
+{
+ echoAndLog "${FUNCNAME}(): Configuring Samba service."
+
+ backupFile $SAMBACFGDIR/smb.conf
+
+ # Copiar plantailla de recursos para OpenGnsys
+ sed -e "s/OPENGNSYSDIR/${INSTALL_TARGET//\//\\/}/g" \
+ $WORKDIR/opengnsys/server/etc/smb-og.conf.tmpl > $SAMBACFGDIR/smb-og.conf
+ # Configurar y recargar Samba"
+ perl -pi -e "s/WORKGROUP/OPENGNSYS/; s/server string \=.*/server string \= OpenGnsys Samba Server/" $SAMBACFGDIR/smb.conf
+ if ! grep -q "smb-og" $SAMBACFGDIR/smb.conf; then
+ echo "include = $SAMBACFGDIR/smb-og.conf" >> $SAMBACFGDIR/smb.conf
+ fi
+ service=$SAMBASERV
+ $ENABLESERVICE; $STARTSERVICE
+ if [ $? -ne 0 ]; then
+ errorAndLog "${FUNCNAME}(): error while configure Samba"
+ return 1
+ fi
+ # Crear clave para usuario de acceso a los recursos.
+ echo -ne "$OPENGNSYS_CLIENT_PASSWD\n$OPENGNSYS_CLIENT_PASSWD\n" | smbpasswd -a -s $OPENGNSYS_CLIENT_USER
+
+ echoAndLog "${FUNCNAME}(): Added Samba configuration."
+ return 0
+}
+
+
+########################################################################
+## Configuración servicio Rsync
+########################################################################
+
+# Configurar servicio Rsync.
+function rsyncConfigure()
+{
+ echoAndLog "${FUNCNAME}(): Configuring Rsync service."
+
+ backupFile $RSYNCCFGDIR/rsyncd.conf
+
+ # Configurar acceso a Rsync.
+ sed -e "s/CLIENTUSER/$OPENGNSYS_CLIENT_USER/g" \
+ $WORKDIR/opengnsys/repoman/etc/rsyncd.conf.tmpl > $RSYNCCFGDIR/rsyncd.conf
+ sed -e "s/CLIENTUSER/$OPENGNSYS_CLIENT_USER/g" \
+ -e "s/CLIENTPASSWORD/$OPENGNSYS_CLIENT_PASSWD/g" \
+ $WORKDIR/opengnsys/repoman/etc/rsyncd.secrets.tmpl > $RSYNCCFGDIR/rsyncd.secrets
+ chown root.root $RSYNCCFGDIR/rsyncd.secrets
+ chmod 600 $RSYNCCFGDIR/rsyncd.secrets
+
+ # Habilitar Rsync y reiniciar Inetd.
+ if [ -n "$RSYNCSERV" ]; then
+ if [ -f /etc/default/rsync ]; then
+ perl -pi -e 's/RSYNC_ENABLE=.*/RSYNC_ENABLE=inetd/' /etc/default/rsync
+ fi
+ if [ -f $INETDCFGDIR/rsync ]; then
+ perl -pi -e 's/disable.*/disable = no/' $INETDCFGDIR/rsync
+ else
+ cat << EOT > $INETDCFGDIR/rsync
+service rsync
+{
+ disable = no
+ socket_type = stream
+ wait = no
+ user = root
+ server = $(which rsync)
+ server_args = --daemon
+ log_on_failure += USERID
+ flags = IPv6
+}
+EOT
+ fi
+ service=$RSYNCSERV $ENABLESERVICE
+ service=$INETDSERV $STARTSERVICE
+ fi
+
+ echoAndLog "${FUNCNAME}(): Added Rsync configuration."
+ return 0
+}
+
+
+########################################################################
+## Configuración servicio DHCP
+########################################################################
+
+# Configurar servicios DHCP.
+function dhcpConfigure()
+{
+ echoAndLog "${FUNCNAME}(): Sample DHCP configuration."
+
+ local errcode=0
+ local i=0
+ local dev=""
+
+ backupFile $DHCPCFGDIR/dhcpd.conf
+ for dev in ${DEVICE[*]}; do
+ if [ -n "${SERVERIP[i]}" ]; then
+ backupFile $DHCPCFGDIR/dhcpd-$dev.conf
+ sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
+ -e "s/NETIP/${NETIP[i]}/g" \
+ -e "s/NETMASK/${NETMASK[i]}/g" \
+ -e "s/NETBROAD/${NETBROAD[i]}/g" \
+ -e "s/ROUTERIP/${ROUTERIP[i]}/g" \
+ -e "s/DNSIP/$DNSIP/g" \
+ $WORKDIR/opengnsys/server/etc/dhcpd.conf.tmpl > $DHCPCFGDIR/dhcpd-$dev.conf || errcode=1
+ fi
+ let i++
+ done
+ if [ $errcode -ne 0 ]; then
+ errorAndLog "${FUNCNAME}(): error while configuring DHCP server"
+ return 1
+ fi
+ ln -f $DHCPCFGDIR/dhcpd-$DEFAULTDEV.conf $DHCPCFGDIR/dhcpd.conf
+ service=$DHCPSERV
+ $ENABLESERVICE; $STARTSERVICE
+ echoAndLog "${FUNCNAME}(): Sample DHCP configured in \"$DHCPCFGDIR\"."
+ return 0
+}
+
+
+#####################################################################
+####### Funciones específicas de la instalación de Opengnsys
+#####################################################################
+
+# Configuración específica de Apache.
+function installWebConsoleApacheConf()
+{
+ if [ $# -ne 2 ]; then
+ errorAndLog "${FUNCNAME}(): invalid number of parameters"
+ exit 1
+ fi
+
+ local path_opengnsys_base="$1"
+ local path_apache2_confd="$2"
+ local CONSOLEDIR=${path_opengnsys_base}/www
+
+ if [ ! -d $path_apache2_confd ]; then
+ errorAndLog "${FUNCNAME}(): path to apache2 conf.d can not found, verify your server installation"
+ return 1
+ fi
+
+ mkdir -p $path_apache2_confd/{sites-available,sites-enabled}
+
+ echoAndLog "${FUNCNAME}(): creating apache2 config file.."
+
+ # Activar HTTPS.
+ $APACHESSLMOD
+ $APACHEENABLESSL
+ $APACHEMAKECERT
+ # Activar módulo Rewrite.
+ $APACHEREWRITEMOD
+ # Genera configuración de consola web a partir del fichero plantilla.
+ if [ -n "$(apachectl -v | grep "2\.[0-2]")" ]; then
+ # Configuración para versiones anteriores de Apache.
+ sed -e "s,CONSOLEDIR,$CONSOLEDIR,g" \
+ $WORKDIR/opengnsys/server/etc/apache-prev2.4.conf.tmpl > $path_apache2_confd/$APACHESITESDIR/${APACHEOGSITE}
+ else
+ # Configuración específica a partir de Apache 2.4
+ sed -e "s,CONSOLEDIR,$CONSOLEDIR,g" \
+ $WORKDIR/opengnsys/server/etc/apache.conf.tmpl > $path_apache2_confd/$APACHESITESDIR/${APACHEOGSITE}.conf
+ fi
+ $APACHEENABLEOG
+ if [ $? -ne 0 ]; then
+ errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation"
+ return 1
+ fi
+ echoAndLog "${FUNCNAME}(): config file created and linked, restarting apache daemon"
+ service=$APACHESERV
+ $ENABLESERVICE; $STARTSERVICE
+ return 0
+}
+
+function createUser()
+{
+ # Crear usuario ficticio.
+ if id -u $OPENGNSYS_CLIENT_USER &>/dev/null; then
+ echoAndLog "${FUNCNAME}(): user \"$OPENGNSYS_CLIENT_USER\" is already created"
+ else
+ echoAndLog "${FUNCNAME}(): creating OpenGnsys user"
+ useradd $OPENGNSYS_CLIENT_USER 2>/dev/null
+ if [ $? -ne 0 ]; then
+ errorAndLog "${FUNCNAME}(): error creating OpenGnsys user"
+ return 1
+ fi
+ fi
+}
+
+# Crea la estructura base de la instalación de opengnsys
+function createDirs()
+{
+createUser
+return 0 # Skipped. We will include all files in .deb
+}
+
+
+####################################################################
+### Funciones de compilación de código fuente de servicios
+####################################################################
+
+# Compilar los servicios de OpenGnsys
+function servicesCompilation ()
+{
+ local hayErrores=0
+
+ # Compilar OpenGnsys Server
+ echoAndLog "${FUNCNAME}(): Compiling OpenGnsys Admin Server"
+ pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmServer
+ make && mv ogAdmServer $INSTALL_TARGET/sbin
+ if [ $? -ne 0 ]; then
+ echoAndLog "${FUNCNAME}(): error while compiling OpenGnsys Admin Server"
+ hayErrores=1
+ fi
+ popd
+ # Compilar OpenGnsys Repository Manager
+ echoAndLog "${FUNCNAME}(): Compiling OpenGnsys Repository Manager"
+ pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepo
+ make && mv ogAdmRepo $INSTALL_TARGET/sbin
+ if [ $? -ne 0 ]; then
+ echoAndLog "${FUNCNAME}(): error while compiling OpenGnsys Repository Manager"
+ hayErrores=1
+ fi
+ popd
+ # Compilar OpenGnsys Agent
+ echoAndLog "${FUNCNAME}(): Compiling OpenGnsys Agent"
+ pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmAgent
+ make && mv ogAdmAgent $INSTALL_TARGET/sbin
+ if [ $? -ne 0 ]; then
+ echoAndLog "${FUNCNAME}(): error while compiling OpenGnsys Agent"
+ hayErrores=1
+ fi
+ popd
+ # Compilar OpenGnsys Client
+ echoAndLog "${FUNCNAME}(): Compiling OpenGnsys Admin Client"
+ pushd $WORKDIR/opengnsys/admin/Sources/Clients/ogAdmClient
+# DUDA
+# make && mv ogAdmClient ../../../../client/shared/bin
+ if [ $? -ne 0 ]; then
+ echoAndLog "${FUNCNAME}(): error while compiling OpenGnsys Admin Client"
+ hayErrores=1
+ fi
+ popd
+
+ return $hayErrores
+}
+
+function clientCreate()
+{
+ if [ $# -ne 1 ]; then
+ echo "${FUNCNAME}(): invalid number of parameters" >&2
+ exit 1
+ fi
+
+ local FILENAME="$1"
+ local TARGETFILE=$INSTALL_TARGET/lib/$FILENAME
+
+ # Descargar cliente, si es necesario.
+ if [ -s $PROGRAMDIR/$FILENAME ]; then
+ echo "${FUNCNAME}(): Moving $PROGRAMDIR/$FILENAME file to $(dirname $TARGETFILE)"
+ mv $PROGRAMDIR/$FILENAME $TARGETFILE
+ else
+ echo "${FUNCNAME}(): Downloading $FILENAME"
+ oglivecli download $FILENAME
+ fi
+ if [ ! -s $TARGETFILE ]; then
+ echo "${FUNCNAME}(): Error loading $FILENAME" >&2
+ return 1
+ fi
+
+ # Montar imagen, copiar cliente ogclient y desmontar.
+ echo "${FUNCNAME}(): Installing ogLive Client"
+ echo -ne "$OPENGNSYS_CLIENT_PASSWD\n$OPENGNSYS_CLIENT_PASSWD\n" | \
+ oglivecli install $FILENAME
+ # Adaptar permisos.
+ chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/tftpboot/menu.lst
+
+ echo "${FUNCNAME}(): Client generation success"
+}
+
+# Configuración básica de servicios de OpenGnsys
+function openGnsysConfigure()
+{
+ local i=0
+ local dev=""
+ local CONSOLEURL
+
+ echoAndLog "${FUNCNAME}(): Copying init files."
+ cp -a $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys
+ cp -a $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.default /etc/default/opengnsys
+ # Deshabilitar servicios de BitTorrent si no están instalados.
+ if [ ! -e /usr/bin/bttrack ]; then
+ sed -i 's/RUN_BTTRACKER="yes"/RUN_BTTRACKER="no"/; s/RUN_BTSEEDER="yes"/RUN_BTSEEDER="no"/' \
+ /etc/default/opengnsys
+ fi
+ echoAndLog "${FUNCNAME}(): Creating cron files."
+ echo "* * * * * root [ -x $INSTALL_TARGET/bin/opengnsys.cron ] && $INSTALL_TARGET/bin/opengnsys.cron" > /etc/cron.d/opengnsys
+ echo "* * * * * root [ -x $INSTALL_TARGET/bin/torrent-creator ] && $INSTALL_TARGET/bin/torrent-creator" > /etc/cron.d/torrentcreator
+ echo "5 * * * * root [ -x $INSTALL_TARGET/bin/torrent-tracker ] && $INSTALL_TARGET/bin/torrent-tracker" > /etc/cron.d/torrenttracker
+ echo "* * * * * root [ -x $INSTALL_TARGET/bin/deletepreimage ] && $INSTALL_TARGET/bin/deletepreimage" > /etc/cron.d/imagedelete
+ echo "* * * * * root [ -x $INSTALL_TARGET/bin/ogagentqueue.cron ] && $INSTALL_TARGET/bin/ogagentqueue.cron" > /etc/cron.d/ogagentqueue
+
+ echoAndLog "${FUNCNAME}(): Creating logrotate configuration file."
+ sed -e "s/OPENGNSYSDIR/${INSTALL_TARGET//\//\\/}/g" \
+ $WORKDIR/opengnsys/server/etc/logrotate.tmpl > /etc/logrotate.d/opengnsys
+
+ echoAndLog "${FUNCNAME}(): Creating OpenGnsys config files."
+ for dev in ${DEVICE[*]}; do
+ if [ -n "${SERVERIP[i]}" ]; then
+ sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
+ -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
+ -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" \
+ -e "s/DATABASE/$OPENGNSYS_DATABASE/g" \
+ $WORKDIR/opengnsys/admin/Sources/Services/ogAdmServer/ogAdmServer.cfg > $INSTALL_TARGET/etc/ogAdmServer-$dev.cfg
+ sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
+ -e "s/REPOKEY/$OPENGNSYS_REPOKEY/g" \
+ $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepo/ogAdmRepo.cfg > $INSTALL_TARGET/etc/ogAdmRepo-$dev.cfg
+ sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
+ -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
+ -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" \
+ -e "s/DATABASE/$OPENGNSYS_DATABASE/g" \
+ $WORKDIR/opengnsys/admin/Sources/Services/ogAdmAgent/ogAdmAgent.cfg > $INSTALL_TARGET/etc/ogAdmAgent-$dev.cfg
+ CONSOLEURL="https://${SERVERIP[i]}/opengnsys"
+ sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
+ -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
+ -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" \
+ -e "s/DATABASE/$OPENGNSYS_DATABASE/g" \
+ -e "s/OPENGNSYSURL/${CONSOLEURL//\//\\/}/g" \
+ $INSTALL_TARGET/www/controlacceso.php > $INSTALL_TARGET/www/controlacceso-$dev.php
+ sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
+ -e "s/OPENGNSYSURL/${CONSOLEURL//\//\\/}/g" \
+ $WORKDIR/opengnsys/admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient-$dev.cfg
+ if [ "$dev" == "$DEFAULTDEV" ]; then
+ OPENGNSYS_CONSOLEURL="$CONSOLEURL"
+ fi
+ fi
+ let i++
+ done
+ ln -f $INSTALL_TARGET/etc/ogAdmServer-$DEFAULTDEV.cfg $INSTALL_TARGET/etc/ogAdmServer.cfg
+ ln -f $INSTALL_TARGET/etc/ogAdmRepo-$DEFAULTDEV.cfg $INSTALL_TARGET/etc/ogAdmRepo.cfg
+ ln -f $INSTALL_TARGET/etc/ogAdmAgent-$DEFAULTDEV.cfg $INSTALL_TARGET/etc/ogAdmAgent.cfg
+ ln -f $INSTALL_TARGET/client/etc/ogAdmClient-$DEFAULTDEV.cfg $INSTALL_TARGET/client/etc/ogAdmClient.cfg
+ ln -f $INSTALL_TARGET/www/controlacceso-$DEFAULTDEV.php $INSTALL_TARGET/www/controlacceso.php
+ chown root:root $INSTALL_TARGET/etc/{ogAdmServer,ogAdmAgent}*.cfg
+ chmod 600 $INSTALL_TARGET/etc/{ogAdmServer,ogAdmAgent}*.cfg
+ chown $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/controlacceso*.php
+ chmod 600 $INSTALL_TARGET/www/controlacceso*.php
+
+ # Configuración del motor de clonación.
+ # - Zona horaria del servidor.
+ TZ=$(timedatectl status|awk -F"[:()]" '/Time.*zone/ {print $2}')
+ cat << EOT >> $INSTALL_TARGET/client/etc/engine.cfg
+# OpenGnsys Server timezone.
+TZ="${TZ// /}"
+EOT
+
+ # Revisar permisos generales.
+ if [ -x $INSTALL_TARGET/bin/checkperms ]; then
+ echoAndLog "${FUNCNAME}(): Checking permissions."
+ OPENGNSYS_DIR="$INSTALL_TARGET" OPENGNSYS_USER="$OPENGNSYS_CLIENT_USER" APACHE_USER="$APACHE_RUN_USER" APACHE_GROUP="$APACHE_RUN_GROUP" checkperms
+ fi
+
+ # Evitar inicio de duplicado en Ubuntu 14.04 (Upstart y SysV Init).
+ if [ -f /etc/init/${MYSQLSERV}.conf -a -n "$(which initctl 2>/dev/null)" ]; then
+ service=$MYSQLSERV
+ $DISABLESERVICE
+ fi
+
+ echoAndLog "${FUNCNAME}(): Starting OpenGnsys services."
+ service="opengnsys"
+ $ENABLESERVICE; $STARTSERVICE
+}
+
+
+#####################################################################
+####### Función de resumen informativo de la instalación
+#####################################################################
+
+function installationSummary()
+{
+# Show Summary
+db_input high opengnsys-full/OPENGNSYS_SUMMARY || true
+db_go || true
+}
+
+
+
+#####################################################################
+####### Proceso de instalación de OpenGnsys
+#####################################################################
+
+# test if it is already installed
+db_get opengnsys-full/OPENGNSYS_IS_INSTALLED
+if [ "$RET" = "true" ]; then
+ echo "Opengnsys already installed; Updating"
+
+ /tmp/opengnsys_installer/opengnsys_pkg_update.sh
+ echo "Updated!!"
+ exit 0
+fi
+
+echoAndLog "OpenGnsys installation begins at $(date)"
+pushd $WORKDIR
+
+# Detectar datos iniciales de auto-configuración del instalador.
+autoConfigure
+
+# Detectar parámetros de red y comprobar si hay conexión.
+getNetworkSettings
+if [ $? -ne 0 ]; then
+ errorAndLog "Error reading default network settings."
+ exit 1
+fi
+checkNetworkConnection
+if [ $? -ne 0 ]; then
+ errorAndLog "Error connecting to server. Causes:"
+ errorAndLog " - Network is unreachable, review devices parameters."
+ errorAndLog " - You are inside a private network, configure the proxy service."
+ errorAndLog " - Server is temporally down, try agian later."
+ exit 1
+fi
+
+# Detener servicios de OpenGnsys, si están activos previamente.
+[ -f /etc/init.d/opengnsys ] && /etc/init.d/opengnsys stop
+
+
+# Detectar datos de auto-configuración después de instalar paquetes.
+autoConfigurePost
+
+# Arbol de directorios de OpenGnsys.
+createDirs ${INSTALL_TARGET}
+if [ $? -ne 0 ]; then
+ errorAndLog "Error while creating directory paths!"
+ exit 1
+fi
+
+# Si es necesario, descarga el repositorio de código en directorio temporal
+if [ $USESVN -eq 1 ]; then
+ svnExportCode $SVN_URL
+ if [ $? -ne 0 ]; then
+ errorAndLog "Error while getting code from svn"
+ exit 1
+ fi
+else
+ ln -fs "$(dirname $PROGRAMDIR)" opengnsys
+fi
+
+# Compilar código fuente de los servicios de OpenGnsys.
+servicesCompilation
+if [ $? -ne 0 ]; then
+ errorAndLog "Error while compiling OpenGnsys services"
+ exit 1
+fi
+
+# Configuración de TFTP.
+tftpConfigure
+
+# Configuración de Samba.
+smbConfigure
+if [ $? -ne 0 ]; then
+ errorAndLog "Error while configuring Samba server!"
+ exit 1
+fi
+
+# Configuración de Rsync.
+rsyncConfigure
+
+# Configuración ejemplo DHCP.
+dhcpConfigure
+if [ $? -ne 0 ]; then
+ errorAndLog "Error while copying your dhcp server files!"
+ exit 1
+fi
+
+
+INSTVERSION=$(awk '{print $2}' $INSTALL_TARGET/doc/VERSION.txt)
+
+$STARTSERVICE
+
+mysqlTestConnection "${MYSQL_ROOT_PASSWORD}"
+if [ $? -ne 0 ]; then
+ errorAndLog "Error while connection to mysql"
+ exit 1
+fi
+mysqlDbExists ${OPENGNSYS_DATABASE}
+if [ $? -ne 0 ]; then
+ echoAndLog "Creating Web Console database"
+ mysqlCreateDb ${OPENGNSYS_DATABASE}
+ if [ $? -ne 0 ]; then
+ errorAndLog "Error while creating Web Console database"
+ exit 1
+ fi
+else
+ echoAndLog "Web Console database exists, ommiting creation"
+fi
+
+mysqlCheckUserExists ${OPENGNSYS_DB_USER}
+if [ $? -ne 0 ]; then
+ echoAndLog "Creating user in database"
+ mysqlCreateAdminUserToDb ${OPENGNSYS_DATABASE} ${OPENGNSYS_DB_USER} "${OPENGNSYS_DB_PASSWD}"
+ if [ $? -ne 0 ]; then
+ errorAndLog "Error while creating database user"
+ exit 1
+ fi
+
+fi
+
+mysqlCheckDbIsEmpty ${OPENGNSYS_DATABASE}
+if [ $? -eq 0 ]; then
+ echoAndLog "Creating tables..."
+ if [ -f $WORKDIR/$OPENGNSYS_DB_CREATION_FILE ]; then
+ mysqlImportSqlFileToDb ${OPENGNSYS_DATABASE} $WORKDIR/$OPENGNSYS_DB_CREATION_FILE
+ else
+ errorAndLog "Unable to locate $WORKDIR/$OPENGNSYS_DB_CREATION_FILE!!"
+ exit 1
+ fi
+else
+ # Si existe fichero ogBDAdmin-VersLocal-VersRepo.sql; aplicar cambios.
+ REPOVERSION=$(awk '{print $2}' $WORKDIR/opengnsys/doc/VERSION.txt)
+ OPENGNSYS_DB_UPDATE_FILE="opengnsys/admin/Database/$OPENGNSYS_DATABASE-$INSTVERSION-$REPOVERSION.sql"
+ if [ -f $WORKDIR/$OPENGNSYS_DB_UPDATE_FILE ]; then
+ echoAndLog "Updating tables from version $INSTVERSION to $REPOVERSION"
+ mysqlImportSqlFileToDb ${OPENGNSYS_DATABASE} $WORKDIR/$OPENGNSYS_DB_UPDATE_FILE
+ else
+ echoAndLog "Database unchanged."
+ fi
+fi
+# Eliminar fichero temporal con credenciales de acceso a MySQL.
+rm -f $TMPMYCNF
+
+
+# Creando configuración de Apache.
+installWebConsoleApacheConf $INSTALL_TARGET $APACHECFGDIR
+if [ $? -ne 0 ]; then
+ errorAndLog "Error configuring Apache for OpenGnsys Admin"
+ exit 1
+fi
+
+popd
+
+# Crear la estructura del cliente de OpenGnsys.
+for i in $OGLIVE; do
+ if ! clientCreate "$i"; then
+ errorAndLog "Error creating client $i"
+ exit 1
+ fi
+done
+
+# Configuración de servicios de OpenGnsys
+openGnsysConfigure
+
+# Reset dangerous values from db.
+db_set opengnsys-full/MYSQL_ROOT_PASSWORD ""
+db_set opengnsys-full/OPENGNSYS_DB_PASSWORD ""
+db_set opengnsys-full/OPENGNSYS_CLIENT_PASSWORD ""
+# Set the INSTALLED falg On
+db_set opengnsys-full/OPENGNSYS_IS_INSTALLED true || true
+db_fset opengnsys-full/OPENGNSYS_IS_INSTALLED seen true || true
+
+# Mostrar sumario de la instalación e instrucciones de post-instalación.
+installationSummary
+
+#rm -rf $WORKDIR
+echoAndLog "OpenGnsys installation finished at $(date)"
+exit 0
+
diff --git a/installer/pkg-generator/DEBIAN/postrm b/installer/pkg-generator/DEBIAN/postrm
new file mode 100755
index 00000000..db813a15
--- /dev/null
+++ b/installer/pkg-generator/DEBIAN/postrm
@@ -0,0 +1,6 @@
+if [ "" = "purge" -a -e /usr/share/debconf/confmodule ]; then
+ # Source debconf library.
+ . /usr/share/debconf/confmodule
+ # Remove my changes to the db.
+ db_purge
+fi
diff --git a/installer/pkg-generator/DEBIAN/preinst b/installer/pkg-generator/DEBIAN/preinst
new file mode 100755
index 00000000..b739daee
--- /dev/null
+++ b/installer/pkg-generator/DEBIAN/preinst
@@ -0,0 +1,6 @@
+#!/bin/bash
+# This script is executed before the package it belongs to is unpacked
+# from its Debian archive (".deb") file. Many 'preinst' scripts stop
+# services for packages which are being upgraded until their installation
+# or upgrade is completed (following the successful execution of the
+# 'postinst' script).
diff --git a/installer/pkg-generator/DEBIAN/prerm b/installer/pkg-generator/DEBIAN/prerm
new file mode 100755
index 00000000..1a07c5ff
--- /dev/null
+++ b/installer/pkg-generator/DEBIAN/prerm
@@ -0,0 +1,4 @@
+#!/bin/bash
+# This script typically stops any daemons which are associated with a
+# package. It is executed before the removal of files associated with
+# the package.
diff --git a/installer/pkg-generator/DEBIAN/templates b/installer/pkg-generator/DEBIAN/templates
new file mode 100644
index 00000000..b83e7cf6
--- /dev/null
+++ b/installer/pkg-generator/DEBIAN/templates
@@ -0,0 +1,57 @@
+Template: opengnsys-full/MYSQL_ROOT_PASSWORD
+Type: password
+Default: passwordroot
+Description: MySQL root PassWord:
+ .
+ If you are installing Opengnsys in a "clean" system then mysql-server
+ should be installed among the dependencies. So it is problably the 3rd
+ time you are asked to introduce MySQL root password.
+ .
+ If you have MySQL server already installed then, please use your
+ current MySQL root password to allow Opengnsys installation.
+ .
+
+Template: opengnsys-full/OPENGNSYS_IS_INSTALLED
+Type: boolean
+Default: false
+Description: This is a flag used to perform a fresh install or an update
+ .
+
+Template: opengnsys-full/OPENGNSYS_DB_USER
+Type: string
+Default: admin
+Description: Please set USER NAME for Opengnsys Data Base:
+ .
+ Opengnsys uses a Data Base to save its configuration and elements.
+ .
+ Here you are given the chance to select a custom username or let it
+ by default => "admin".
+ .
+
+Template: opengnsys-full/OPENGNSYS_DB_PASSWORD
+Type: password
+Default: admin
+Description: Please set PASSWORD for Opengnsys DATABASE:
+ .
+ By default this password will be => "admin".
+ .
+ You can just press enter safely
+
+Template: opengnsys-full/OPENGNSYS_CLIENT_PASSWORD
+Type: password
+Default: og
+Description: Please set PASSWORD for Opengnsys Control Panel:
+ .
+ By default this password is "og". You can set your own now
+ .
+
+Template: opengnsys-full/OPENGNSYS_SUMMARY
+Type: note
+Description: Opengnsys Installation Summary:
+ .
+ Project version: 1.1.1pre
+ .
+ Web Console URL: "https://[server IP]/opengnsys/"
+ .
+ Web Console Login default data: admin / admin
+ .