ogdhcp/installer/ogclient_installer.sh

229 lines
6.1 KiB
Bash

#!/bin/bash
#####################################################################
####### Script instalador Ogclient
####### Autor: Luis Gerardo Romero <lguillen@unizar.es>
#####################################################################
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 <URL del repositorio de ogdhcp>
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 <URL del repositorio de ogDhcp>
# cd <directorio de ogDhcp>
# composer install