diff options
-rw-r--r-- | installer/INSTALL | 13 | ||||
-rw-r--r-- | installer/INSTALL.es.txt | 49 | ||||
-rw-r--r-- | installer/LICENSE.en.txt (renamed from installer/LICENSE) | 0 | ||||
-rwxr-xr-x | installer/opengnsys_update.sh | 433 |
4 files changed, 482 insertions, 13 deletions
diff --git a/installer/INSTALL b/installer/INSTALL deleted file mode 100644 index 8fa3b725..00000000 --- a/installer/INSTALL +++ /dev/null @@ -1,13 +0,0 @@ -Instalación desde un tar.gz - - 1. Cambia el nombre del subdirectorio descomprimido a opengnsys. - 2. Crea el subdirectorio opengnsys_installer en /tmp. - 3. Mover el subdirectorio opengnsys en /tmp/opengnsys_installer. - 4. Ejecutamos como root el script /tmp/opengnsys_installer/opengnsys/installer/opengnsys_installer.sh - -Desinstalando OpenGNSys - - 1. Hacemos copia de datos sql de la base de datos ogBDAdmin opengnsys. - 2. Eliminamos la base de datos ogBDAdmin - 3. Eliminar mysql: sudo aptitude --purge remove mysql-server - 4. Parar los servicios og: /etc/init.d/opengnsys stop
\ No newline at end of file diff --git a/installer/INSTALL.es.txt b/installer/INSTALL.es.txt new file mode 100644 index 00000000..c6e87ba5 --- /dev/null +++ b/installer/INSTALL.es.txt @@ -0,0 +1,49 @@ +Instalación y Actualización de OpenGnSys +======================== + + +Instalación inicial +------------------- + +Descargar una versión completa y desccomprimir el fichero "opengnsys-version.tar.gz": + tar xvzf opengnsys-version.tar.gz + cd opengnsys-version/installer + +O bien, descargar el instalador desde la última reversión del repositorio: + svn export svn://www.informatica.us.es:3690/trunk/installer/opengnsys_installer.sh + +Ejecutar el instalador como root: + sudo ./opengnsys_installer.sh + + +Actaulización de ficheros +------------------------- + +AVISO: es recomendable hacer copia de seguridad del servidor antes de actualizar. + +Descargar el fichero opengnsys-version.tar.gz y descomprimirlo: + tar xvzf opengnsys-version.tar.gz + cd opengnsys-version/installer + +O bien, descargar el actualizador desde la última revisión del repositorio: + svn export svn://www.informatica.us.es:3690/trunk/installer/opengnsys_update.sh + +Ejecutar el programa de actualización como root: + sudo ./opengnsys_installer.sh + +NOTA: el programa de actualización no modifica ficheros de configuración, no actualiza la bases de datos, no modifica ficheros de imágenes, ni recompila los servicios principales de OpenGnSys. + + +Desinstalar OpenGNSys +--------------------- + + 1. Hacemos copia de datos sql de la base de datos ogBDAdmin opengnsys. + 2. Eliminamos la base de datos ogBDAdmin + 3. Eliminar mysql: sudo aptitude --purge remove mysql-server + 4. Parar los servicios og: /etc/init.d/opengnsys stop +Desinstalando OpenGNSys + + 1. Hacemos copia de datos sql de la base de datos ogBDAdmin opengnsys. + 2. Eliminamos la base de datos ogBDAdmin + 3. Eliminar mysql: sudo aptitude --purge remove mysql-server + 4. Parar los servicios og: /etc/init.d/opengnsys stop diff --git a/installer/LICENSE b/installer/LICENSE.en.txt index 94a9ed02..94a9ed02 100644 --- a/installer/LICENSE +++ b/installer/LICENSE.en.txt diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh new file mode 100755 index 00000000..6b52ed11 --- /dev/null +++ b/installer/opengnsys_update.sh @@ -0,0 +1,433 @@ +#!/bin/bash +#/** +#@file opengnsys_update.sh +#@brief Script actualización de OpenGnSys +#@warning No se actualiza BD, ni ficheros de configuración. +#@version 0.9 - basado en opengnsys_installer.sh +#@author Ramón Gómez - ETSII Univ. Sevilla +#@date 2010/01/27 +#*/ + + +# Sólo ejecutable por usuario root +if [ "$(whoami)" != 'root' ] +then + echo "ERROR: this program must run under root privileges!!" + exit 1 +fi + +# Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1). +PROGRAMDIR=$(readlink -e $(dirname "$0")) +DEPS="rsync gcc" +if [ -d "$PROGRAMDIR/../installer" ]; then + USESVN=0 +else + USESVN=1 + SVN_URL=svn://www.informatica.us.es:3690/opengnsys/trunk + DEPS="$DEPS subversion" +fi + +WORKDIR=/tmp/opengnsys_update +mkdir -p $WORKDIR + +INSTALL_TARGET=/opt/opengnsys +LOG_FILE=/tmp/opengnsys_update.log + + + +##################################################################### +####### Algunas funciones útiles de propósito general: +##################################################################### +function getDateTime() +{ + echo `date +%Y%m%d-%H%M%S` +} + +# Escribe a fichero y muestra por pantalla +function echoAndLog() +{ + echo $1 + FECHAHORA=`getDateTime` + echo "$FECHAHORA;$SSH_CLIENT;$1" >> $LOG_FILE +} + +function errorAndLog() +{ + echo "ERROR: $1" + FECHAHORA=`getDateTime` + echo "$FECHAHORA;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE +} + + +##################################################################### +####### Funciones de copia de seguridad y restauración de ficheros +##################################################################### + +# 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 fichero=$1 + local fecha=`date +%Y%m%d` + + if [ ! -f $fichero ]; then + errorAndLog "${FUNCNAME}(): file $fichero doesn't exists" + return 1 + fi + + echoAndLog "${FUNCNAME}(): Making $fichero back-up" + + # realiza una copia de la última configuración como last + cp -p $fichero "${fichero}-LAST" + + # si para el día no hay backup lo hace, sino no + if [ ! -f "${fichero}-${fecha}" ]; then + cp -p $fichero "${fichero}-${fecha}" + fi +} + +# Restaura un fichero desde su copia de seguridad +function restoreFile() +{ + if [ $# -ne 1 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local fichero=$1 + + echoAndLog "${FUNCNAME}(): restoring $fichero file" + if [ -f "${fichero}-LAST" ]; then + cp -p "$fichero-LAST" "$fichero" + fi +} + + +##################################################################### +####### Funciones de instalación de paquetes +##################################################################### + +# Instalar las deependencias necesarias para el actualizador. +function installDependencies () +{ + if [ $# = 0 ]; then + echoAndLog "${FUNCNAME}(): no deps needed." + else + while [ $# -gt 0 ]; do + if ! dpkg -s $1 &>/dev/null; then + INSTALLDEPS="$INSTALLDEPS $1" + fi + shift + done + if [ -n "$INSTALLDEPS" ]; then + apt-get update && apt-get install $INSTALLDEPS + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): cannot install some dependencies: $INSTALLDEPS." + return 1 + fi + fi + fi +} + + +##################################################################### +####### Funciones para el manejo de Subversion +##################################################################### + +function svnExportCode() +{ + if [ $# -ne 1 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local url=$1 + + echoAndLog "${FUNCNAME}(): downloading subversion code..." + + svn export "${url}" opengnsys + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error getting code from ${url}, verify your user and password" + return 1 + fi + echoAndLog "${FUNCNAME}(): subversion code downloaded" + return 0 +} + + +############################################################ +### Detectar red +############################################################ + +function getNetworkSettings() +{ + # Variables globales definidas: + # - SERVERIP: IP local del servidor. + # - NETIP: IP de la red. + # - NETMASK: máscara de red. + # - NETBROAD: IP de difusión de la red. + # - ROUTERIP: IP del router. + # - DNSIP: IP del servidor DNS. + + echoAndLog "getNetworkSettings(): Detecting default network parameters." + SERVERIP=$(LANG=C ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | head -n1 | awk '{print $1}') + NETMASK=$(LANG=C ifconfig | grep 'Mask:'| grep -v '127.0.0.1' | cut -d: -f4 | head -n1 | awk '{print $1}') + NETBROAD=$(LANG=C ifconfig | grep 'Bcast:'| grep -v '127.0.0.1' | cut -d: -f3 | head -n1 | awk '{print $1}') + NETIP=$(netstat -r | grep $NETMASK | head -n1 | awk '{print $1}') + ROUTERIP=$(netstat -nr | awk '$1~/0\.0\.0\.0/ {print $2}') + DNSIP=$(awk '/nameserver/ {print $2}' /etc/resolv.conf | head -n1) + if [ -z "$NETIP" -o -z "$NETMASK" ]; then + errorAndLog "getNetworkSettings(): Network not detected." + exit 1 + fi + + # Variables de ejecución de Apache + # - APACHE_RUN_USER + # - APACHE_RUN_GROUP + if [ -f /etc/apache2/envvars ]; then + source /etc/apache2/envvars + fi + APACHE_RUN_USER=${APACHE_RUN_USER:-"www-data"} + APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"www-data"} +} + + +##################################################################### +####### Funciones específicas de la instalación de Opengnsys +##################################################################### + +# Copiar ficheros del OpenGnSys Web Console. +function updateWebFiles() +{ + echoAndLog "${FUNCNAME}(): Updating web files..." + backupFile $INSTALL_TARGET/www/controlacceso.php + rsync --exclude .svn -irplt $WORKDIR/opengnsys/admin/WebConsole $INSTALL_TARGET/www + if [ $? != 0 ]; then + errorAndLog "${FUNCNAME}(): Error updating web files." + exit 1 + fi + restoreFile $INSTALL_TARGET/www/controlacceso.php + # Cambiar permisos para ficheros especiales. + chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP \ + $INSTALL_TARGET/www/includes \ + $INSTALL_TARGET/www/comandos/gestores/filescripts \ + $INSTALL_TARGET/www/images/iconos + echoAndLog "${FUNCNAME}(): Web files updated successfully." +} + + +# Crea la estructura base de la instalación de opengnsys +function createDirs() +{ + echoAndLog "${FUNCNAME}(): creating directory paths in ${INSTALL_TARGET}" + + mkdir -p ${INSTALL_TARGET} + mkdir -p ${INSTALL_TARGET}/admin/{autoexec,comandos,menus,usuarios} + mkdir -p ${INSTALL_TARGET}/bin + mkdir -p ${INSTALL_TARGET}/client + mkdir -p ${INSTALL_TARGET}/doc + mkdir -p ${INSTALL_TARGET}/etc + mkdir -p ${INSTALL_TARGET}/lib + mkdir -p ${INSTALL_TARGET}/log/clients + mkdir -p ${INSTALL_TARGET}/sbin + mkdir -p ${INSTALL_TARGET}/www + mkdir -p ${INSTALL_TARGET}/images + ln -fs /var/lib/tftpboot ${INSTALL_TARGET} + ln -fs ${INSTALL_TARGET}/log /var/log/opengnsys + + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?" + return 1 + fi + + echoAndLog "${FUNCNAME}(): directory paths created" + return 0 +} + +# Copia ficheros de configuración y ejecutables genéricos del servidor. +function updateServerFiles () { + + local SOURCES=( client/boot/initrd-generator \ + client/boot/upgrade-clients-udeb.sh \ + client/boot/udeblist.conf \ + client/boot/udeblist-jaunty.conf \ + client/boot/udeblist-karmic.conf \ + doc ) + local TARGETS=( bin/initrd-generator \ + bin/upgrade-clients-udeb.sh \ + etc/udeblist.conf \ + etc/udeblist-jaunty.conf \ + etc/udeblist-karmic.conf \ + doc ) + + if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then + errorAndLog "${FUNCNAME}(): inconsistent number of array items" + exit 1 + fi + + echoAndLog "${FUNCNAME}(): updating files in server directories" + pushd $WORKDIR/opengnsys >/dev/null + local i + for (( i = 0; i < ${#SOURCES[@]}; i++ )); do + rsync --exclude .svn -irplt "${SOURCES[$i]}" "${INSTALL_TARGET}/${TARGETS[$i]}" + done + popd >/dev/null + echoAndLog "${FUNCNAME}(): server files updated successfully." +} + +#################################################################### +### Funciones de compilación de código fuente de servicios +#################################################################### + +# Recompilar y actualiza el binario del clinete +function recompileClient () +{ + # Compilar OpenGnSys Client + echoAndLog "${FUNCNAME}(): recompiling OpenGnSys Client" + pushd $WORKDIR/opengnsys/admin/Services/ogAdmClient + make && mv ogAdmClient ../../../client/nfsexport/bin + if [ $? -ne 0 ]; then + echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Client" + hayErrores=1 + fi + popd + + return $hayErrores +} + + +#################################################################### +### Funciones instalacion cliente opengnsys +#################################################################### + +function updateClient() +{ + local OSDISTRIB OSCODENAME + + local hayErrores=0 + + echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files." + rsync --exclude .svn -irplt $WORKDIR/opengnsys/client/nfsexport/* $INSTALL_TARGET/client + echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files." + mkdir -p $INSTALL_TARGET/client/lib/engine/bin + rsync -iplt $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while copying engine files" + hayErrores=1 + fi + + # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto). + OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + if [ "$OSDISTRIB" = "Ubuntu" -a -n "$OSCODENAME" ]; then + echoAndLog "${FUNCNAME}(): Loading Kernel and Initrd files for $OSDISTRIB $OSCODENAME." + $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot -v "$OSCODENAME" + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" + hayErrores=1 + fi + echoAndLog "${FUNCNAME}(): Loading udeb files for $OSDISTRIB $OSCODENAME." + $INSTALL_TARGET/bin/upgrade-clients-udeb.sh "$OSCODENAME" + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" + hayErrores=1 + fi + else + echoAndLog "${FUNCNAME}(): Loading default Kernel and Initrd files." + $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot/ + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" + hayErrores=1 + fi + echoAndLog "${FUNCNAME}(): Loading default udeb files." + $INSTALL_TARGET/bin/upgrade-clients-udeb.sh + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" + hayErrores=1 + fi + fi + + if [ $hayErrores -eq 0 ]; then + echoAndLog "${FUNCNAME}(): Client generation success." + else + errorAndLog "${FUNCNAME}(): Client generation with errors" + fi + + return $hayErrores +} + + + +##################################################################### +####### Proceso de actualizción de OpenGnSys +##################################################################### + + +echoAndLog "OpenGnSys update begins at $(date)" + +# Instalar dependencia. +installDependencies $DEPS +if [ $? -ne 0 ]; then + errorAndLog "Error: you may install all needed dependencies." + exit 1 +fi + +pushd $WORKDIR + +# Detectar parámetros de red por defecto +getNetworkSettings +if [ $? -ne 0 ]; then + errorAndLog "Error reading default network settings." + exit 1 +fi + +# 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 + +# Copiando ficheros complementarios del servidor +updateServerFiles +if [ $? -ne 0 ]; then + errorAndLog "Error updating OpenGnSys Server files" + exit 1 +fi + +# Copiando paqinas web +updateWebFiles +if [ $? -ne 0 ]; then + errorAndLog "Error updating OpenGnSys Web Admin files" + exit 1 +fi + +# Creando la estructura del cliente +recompileClient +updateClient +if [ $? -ne 0 ]; then + errorAndLog "Error updating clients" + exit 1 +fi + +#rm -rf $WORKDIR +echoAndLog "OpenGnSys update finished at $(date)" + +popd + |