#!/bin/bash ##################################################################### ####### Script instalador Ogclient ####### Autor: Luis Gerardo Romero ##################################################################### function globalSetup () { PROGRAMDIR=$(readlink -e "$(dirname "$0")") PROGRAMNAME=$(basename "$0") # Comprobar si se ha descargado el paquete comprimido (REMOTE=0) o sólo el instalador (REMOTE=1). OPENGNSYS_SERVER="opengnsys.es" if [ -d "$PROGRAMDIR/../installer" ]; then echo REMOTE=0 REMOTE=0 else echo REMOTE=1 REMOTE=1 fi BRANCH=$1 if [[ -z $BRANCH ]]; then BRANCH="main" fi GIT_REPO="ssh://git@ognproject.evlt.uma.es:21987/opengnsys/ogdhcp.git" # Directorios de instalación y destino de OpenGnsys. WORKDIR=/tmp/ogclient_installer INSTALL_TARGET=/opt/ogclient PATH=$PATH:$INSTALL_TARGET/bin # Registro de incidencias. OGLOGFILE=$INSTALL_TARGET/log/${PROGRAMNAME%.sh}.log LOG_FILE=/tmp/$(basename $OGLOGFILE) } # Función para instalar los paquetes necesarios para KEA-DHCP install_kea() { sudo apt-get install -y kea-dhcp4-server kea-dhcp6-server } # Función para instalar PHP y las extensiones necesarias para Symfony install_php() { sudo apt-get install -y php php-cli php-fpm php-json php-pdo php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmath } # Función para instalar Composer install_composer() { curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer } # Función para instalar Symfony install_symfony() { composer global require symfony echo 'export PATH="$PATH:$HOME/.composer/vendor/bin"' >> ~/.bashrc source ~/.bashrc } # Función para instalar Swagger UI install_swagger() { sudo apt-get install -y unzip wget https://github.com/swagger-api/swagger-ui/archive/master.zip unzip master.zip -d /var/www/html/ sudo mv /var/www/html/swagger-ui-master /var/www/html/swagger-ui } # Función para instalar el componente ogdhcp install_ogdhcp() { git clone sudo mv ogdhcp /opt/ cd /opt/ogdhcp composer install } # Obtiene el código fuente del proyecto desde el repositorio de GitHub. function downloadCode() { if [ $# -ne 1 ]; then errorAndLog "${FUNCNAME}(): invalid number of parameters" exit 1 fi local url="$1" echoAndLog "${FUNCNAME}(): downloading code from '$url'..." GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=accept-new" git archive --remote=$url --format zip --output opengnsys.zip --prefix=opengnsys/ $BRANCH && unzip opengnsys.zip if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error getting OpenGnsys code from $url" return 1 fi rm -f opengnsys.zip echoAndLog "${FUNCNAME}(): code was downloaded" return 0 } # Crea la estructura base de la instalación de opengnsys function createDirs() { if [ $# -ne 1 ]; then errorAndLog "${FUNCNAME}(): invalid number of parameters" exit 1 fi local path_opengnsys_base="$1" # Crear estructura de directorios. echoAndLog "${FUNCNAME}(): creating directory paths in $path_opengnsys_base" mkdir -p $path_opengnsys_base mkdir -p $path_opengnsys_base/bin mkdir -p $path_opengnsys_base/config mkdir -p $path_opengnsys_base/docs # Swagger documentation mkdir -p $path_opengnsys_base/public mkdir -p $path_opengnsys_base/src mkdir -p $path_opengnsys_base/templates mkdir -p $path_opengnsys_base/var/{cache,log} mkdir -p $path_opengnsys_base/vendor if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?" return 1 fi # 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 # Mover el fichero de registro de instalación al directorio de logs. echoAndLog "${FUNCNAME}(): moving installation log file" mv $LOG_FILE $path_opengnsys_base/var/log && LOG_FILE=$path_opengnsys_base/var/log chmod 600 $LOG_FILE echoAndLog "${FUNCNAME}(): directory paths created" return 0 } ##################################################################### ####### 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" echo "$DATETIME;$SSH_CLIENT;$1" >> $LOG_FILE } # Escribe a fichero y muestra mensaje de error function errorAndLog() { local DATETIME=`getDateTime` echo "ERROR: $1" echo "$DATETIME;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE } # Escribe a fichero y muestra mensaje de aviso function warningAndLog() { local DATETIME=`getDateTime` echo "Warning: $1" echo "$DATETIME;$SSH_CLIENT;Warning: $1" >> $LOG_FILE } ########################################################################## ################################main###################################### # Sólo ejecutable por usuario root if [ "$(whoami)" != 'root' ]; then echo "ERROR: this program must run under root privileges!!" exit 1 fi # Si es necesario, descarga el repositorio de código en directorio temporal if [ $REMOTE -eq 1 ]; then downloadCode $GIT_REPO if [ $? -ne 0 ]; then errorAndLog "Error while getting code from the repository" exit 1 fi else ln -fs "$(dirname $PROGRAMDIR)" opengnsys fi globalSetup # Arbol de directorios de OpenGnsys. createDirs ${INSTALL_TARGET} if [ $? -ne 0 ]; then errorAndLog "Error while creating directory paths!" exit 1 fi sudo apt-get update # install_kea # install_php # install_composer # install_symfony # install_swagger # Ahora puedes clonar e instalar el componente ogDhcp # git clone # cd # composer install