diff options
author | Fredy <aluque@soleta.eu> | 2018-05-21 10:00:10 +0200 |
---|---|---|
committer | Fredy <aluque@soleta.eu> | 2018-05-21 10:00:10 +0200 |
commit | ec06d91a93e800812e2a9bb69a627f74254755a2 (patch) | |
tree | 837f1ab717fec7a7d8fee0a9d10243fb2321a891 | |
parent | c870c844e42cbd68b4f277b3f6e686f4c69b8fc4 (diff) |
#837 Debian package structure
-rw-r--r-- | installer/pkg-generator/DEBIAN/changelog | 7 | ||||
-rw-r--r-- | installer/pkg-generator/DEBIAN/conffiles | 0 | ||||
-rwxr-xr-x | installer/pkg-generator/DEBIAN/config | 28 | ||||
-rw-r--r-- | installer/pkg-generator/DEBIAN/control | 9 | ||||
-rwxr-xr-x | installer/pkg-generator/DEBIAN/postinst | 1432 | ||||
-rwxr-xr-x | installer/pkg-generator/DEBIAN/postrm | 6 | ||||
-rwxr-xr-x | installer/pkg-generator/DEBIAN/preinst | 6 | ||||
-rwxr-xr-x | installer/pkg-generator/DEBIAN/prerm | 4 | ||||
-rw-r--r-- | installer/pkg-generator/DEBIAN/templates | 57 |
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 + . |