diff options
Diffstat (limited to 'installer')
-rwxr-xr-x | installer/opengnsys_installer.sh | 571 | ||||
-rwxr-xr-x | installer/opengnsys_uninstall.sh | 8 | ||||
-rwxr-xr-x | installer/opengnsys_update.sh | 142 |
3 files changed, 368 insertions, 353 deletions
diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index f910dab1..c6aa77c5 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -1,49 +1,38 @@ #!/bin/bash ##################################################################### -####### Script instalador OpenGnsys +####### Script instalador OpenGnSys ####### autor: Luis Guillén <lguillen@unizar.es> ##################################################################### -#### AVISO: Editar configuración de acceso por defecto a la Base de Datos. +#### AVISO: Editar configuración de acceso por defecto. MYSQL_ROOT_PASSWORD="passwordroot" # Clave root de MySQL -OPENGNSYS_DATABASE="ogAdmBD" # Nombre de la base datos -OPENGNSYS_DB_USER="usuog" # Usuario de acceso -OPENGNSYS_DB_PASSWD="passusuog" # Clave del usuario +OPENGNSYS_DB_USER="usuog" # Usuario de acceso a la base de datos +OPENGNSYS_DB_PASSWD="passusuog" # Clave de acceso a la base de datos +OPENGNSYS_CLIENT_PASSWD="og" # Clave de acceso del cliente + #### AVISO: NO EDITAR. -#### configuración de acceso smb para clientes OG. -OPENGNSYS_CLIENT_USER="opengnsys" # Nombre del usuario -OPENGNSYS_CLIENT_PASSWD="og" # Clave del usuario opengnsys +OPENGNSYS_DATABASE="ogAdmBD" # Nombre de la base datos +OPENGNSYS_CLIENT_USER="opengnsys" # Usuario del cliente para acceso remoto # Sólo ejecutable por usuario root -if [ "$(whoami)" != 'root' ] -then +if [ "$(whoami)" != 'root' ]; then echo "ERROR: this program must run under root privileges!!" exit 1 fi -# Detectar sistema operativo del servidor (debe soportar LSB). -OSDISTRIB=$(lsb_release -is 2>/dev/null) -# Array con las dependencias que deben estar instaladas, según de la distribución detectada. -case "$OSDISTRIB" in - Ubuntu) DEPENDENCIES=( subversion apache2 php5 libapache2-mod-php5 mysql-server php5-mysql nfs-kernel-server dhcp3-server bittorrent tftp-hpa tftpd-hpa syslinux openbsd-inetd update-inetd build-essential g++-multilib libmysqlclient15-dev wget doxygen graphviz bittornado ctorrent samba unzip netpipes debootstrap schroot squashfs-tools ) - ;; - *) echo "ERROR: Distribution not supported by OpenGnSys." - exit 1 ;; -esac - # Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1). PROGRAMDIR=$(readlink -e $(dirname "$0")) OPENGNSYS_SERVER="www.opengnsys.es" if [ -d "$PROGRAMDIR/../installer" ]; then - USESVN=0 + USESVN=0 else - USESVN=1 + USESVN=1 fi SVN_URL="http://$OPENGNSYS_SERVER/svn/trunk/" @@ -58,26 +47,98 @@ OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/ogAdmBD.sql ##################################################################### +####### Funciones de configuración +##################################################################### + +# Generar variables de configuración del instalador +# Variables globales: +# - OSDISTRIB, OSCODENAME - datos de la distribución Linux +# - DEPENDENCIES - array de dependencias que deben estar instaladas +# - UPDATEPKGLIST, INSTALLPKGS, CHECKPKGS - comandos para gestión de paquetes +# - APACHEINIT, APACHECFGDIR, APACHEUSER, APACHEGROUP - arranque y configuración de Apache +# - ENABLEMOD, ENABLESITE - habilitar módulo Apache y sitio web +# - DHCPINIT, DHCPCFGDIR - arranque y configuración de DHCP +# - SAMBAINIT, SAMBACFGDIR - arranque y configuración de Samba +# - TFTPCFGDIR - configuración de TFTP +function autoConfigure() +{ +# Detectar sistema operativo del servidor (debe soportar LSB). +OSDISTRIB=$(lsb_release -is 2>/dev/null) +OSCODENAME=$(lsb_release -cs 2>/dev/null) + +# Configuración según la distribución de Linux. +case "$OSDISTRIB" in + Ubuntu) DEPENDENCIES=( subversion apache2 php5 libapache2-mod-php5 mysql-server php5-mysql isc-dhcp-server bittorrent tftp-hpa tftpd-hpa syslinux openbsd-inetd update-inetd build-essential g++-multilib libmysqlclient15-dev wget doxygen graphviz bittornado ctorrent samba unzip netpipes debootstrap schroot squashfs-tools ) + UPDATEPKGLIST="apt-get update" + INSTALLPKG="apt-get -y install --force-yes" + CHECKPKG="dpkg -s \$package 2>/dev/null | grep Status | grep -qw install" + APACHEINIT=/etc/init.d/apache2 + APACHECFGDIR=/etc/apache2 + APACHEUSER="www-data" + APACHEGROUP="www-data" + ENABLEMOD="a2enmod" + ENABLESITE="a2ensite" + DHCPINIT=/etc/init.d/isc-dhcp-server + DHCPCFGDIR=/etc/dhcp + SAMBAINIT=/etc/init.d/smbd + SAMBACFGDIR=/etc/samba + 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 +} + +# Cargar lista de paquetes del sistema y actualizar algunas variables de configuración +# dependiendo de la versión instalada. +function updatePackageList() +{ +local DHCPVERSION + +# Si es necesario, actualizar la lista de paquetes disponibles. +[ -n "$UPDATEPKGLIST" ] && eval $UPDATEPKGLIST + +# Configuración personallizada de algunos paquetes. +case "$OSDISTRIB" in + Ubuntu) # Postconfiguación personalizada para Ubuntu. + # Configuración para DHCP v3. + DHCPVERSION=$(apt-cache show dhcp.?-server$ | \ + awk '/Version/ {print substr($2,1,1);}' | \ + sort -n | tail -1) + if [ $DHCPVERSION = 3 ]; then + DEPENDENCIES=${DEPENDENCIES[@]/isc-dhcp-server/dhcp3-server} + DHCPINIT=/etc/init.d/dhcp3-server + DHCPCFGDIR=/etc/dhcp3 + fi + ;; +esac +} + + +##################################################################### ####### Algunas funciones útiles de propósito general: ##################################################################### + function getDateTime() { - date "+%Y%m%d-%H%M%S" + 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 + echo "$1" + local DATETIME=`getDateTime` + echo "$DATETIME;$SSH_CLIENT;$1" >> $LOG_FILE } function errorAndLog() { - echo "ERROR: $1" - FECHAHORA=`getDateTime` - echo "$FECHAHORA;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE + echo "ERROR: $1" + local DATETIME=`getDateTime` + echo "$DATETIME;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE } # comprueba si el elemento pasado en $2 esta en el array $1 @@ -123,7 +184,7 @@ function checkPackage() exit 1 fi echoAndLog "${FUNCNAME}(): checking if package $package exists" - dpkg -s $package &>/dev/null | grep Status | grep -qw install + eval $CHECKPKG if [ $? -eq 0 ]; then echoAndLog "${FUNCNAME}(): package $package exists" return 0 @@ -199,8 +260,8 @@ function installDependencies() OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND export DEBIAN_FRONTEND=noninteractive - echoAndLog "${FUNCNAME}(): now ${string_deps} will be installed" - apt-get -y install --force-yes ${string_deps} + echoAndLog "${FUNCNAME}(): now $string_deps will be installed" + eval $INSTALLPKG $string_deps if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error installing dependencies" return 1 @@ -219,25 +280,25 @@ function backupFile() exit 1 fi - local fichero=$1 - local fecha=`date +%Y%m%d` + local file="$1" + local dateymd=`date +%Y%m%d` - if [ ! -f $fichero ]; then - errorAndLog "${FUNCNAME}(): file $fichero doesn't exists" + if [ ! -f "$file" ]; then + errorAndLog "${FUNCNAME}(): file $file doesn't exists" return 1 fi - echoAndLog "${FUNCNAME}(): realizando backup de $fichero" + echoAndLog "${FUNCNAME}(): making $file backup" # realiza una copia de la última configuración como last - cp -p $fichero "${fichero}-LAST" + cp -a "$file" "${file}-LAST" # si para el día no hay backup lo hace, sino no - if [ ! -f "${fichero}-${fecha}" ]; then - cp -p $fichero "${fichero}-${fecha}" + if [ ! -f "${file}-${dateymd}" ]; then + cp -a "$file" "${file}-${dateymd}" fi - echoAndLog "${FUNCNAME}(): backup realizado" + echoAndLog "${FUNCNAME}(): $file backup success" } ##################################################################### @@ -369,6 +430,8 @@ function mysqlImportSqlFileToDb() local database="$2" local sqlfile="$3" local tmpfile=$(mktemp) + local i=0 + local dev="" local status if [ ! -f $sqlfile ]; then @@ -376,10 +439,17 @@ function mysqlImportSqlFileToDb() return 1 fi - echoAndLog "${FUNCNAME}(): importing sql file to ${database}..." + echoAndLog "${FUNCNAME}(): importing SQL file to ${database}..." chmod 600 $tmpfile - sed -e "s/SERVERIP/$SERVERIP/g" -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \ - -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" $sqlfile > $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" \ + $sqlfile > $tmpfile + fi + let i++ + done mysql -uroot -p"${root_password}" --default-character-set=utf8 "${database}" < $tmpfile status=$? rm -f $tmpfile @@ -507,29 +577,39 @@ function checkNetworkConnection() # Obtener los parámetros de red de la interfaz por defecto. 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. - - local MAINDEV - - echoAndLog "${FUNCNAME}(): Detecting default network parameters." - MAINDEV=$(ip -o link show up | awk '!/loopback/ {d=d$2} END {sub(/:.*/,"",d); print d}') - if [ -z "$MAINDEV" ]; then - errorAndLog "${FUNCNAME}(): Network device not detected." + # 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 - SERVERIP=$(ip -o addr show dev $MAINDEV | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4)}') - NETMASK=$(LANG=C ifconfig $MAINDEV | awk '/Mask/ {sub(/.*:/,"",$4); print $4}') - NETBROAD=$(ip -o addr show dev $MAINDEV | awk '$3~/inet$/ {print ($6)}') - NETIP=$(netstat -nr | grep $MAINDEV | awk '$1!~/0\.0\.0\.0/ {if (n=="") n=$1} END {print n}') - ROUTERIP=$(netstat -nr | awk '$1~/0\.0\.0\.0/ {print $2}') + 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]=$(LANG=C ifconfig $dev | awk '/Mask/ {sub(/.*:/,"",$4); print $4}') + NETBROAD[i]=$(ip -o addr show dev $dev | awk '$3~/inet$/ {print ($6)}') + NETIP[i]=$(netstat -nr | awk -v d="$dev" '$1!~/0\.0\.0\.0/&&$8==d {if (n=="") n=$1} END {print n}') + ROUTERIP[i]=$(netstat -nr | awk -v d="$dev" '$1~/0\.0\.0\.0/&&$8==d {print $2}') + DEFAULTDEV=${DEFAULTDEV:-"$dev"} + let i++ + fi + done DNSIP=$(awk '/nameserver/ {print $2}' /etc/resolv.conf | head -n1) - if [ -z "$NETIP" -o -z "$NETMASK" ]; then + if [ -z "${NETIP}[*]" -o -z "${NETMASK[*]}" ]; then errorAndLog "${FUNCNAME}(): Network not detected." exit 1 fi @@ -537,11 +617,11 @@ function getNetworkSettings() # Variables de ejecución de Apache # - APACHE_RUN_USER # - APACHE_RUN_GROUP - if [ -f /etc/apache2/envvars ]; then - source /etc/apache2/envvars + if [ -f $APACHECFGDIR/envvars ]; then + source $APACHECFGDIR/envvars fi - APACHE_RUN_USER=${APACHE_RUN_USER:-"www-data"} - APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"www-data"} + APACHE_RUN_USER=${APACHE_RUN_USER:-"$APACHEUSER"} + APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"$APACHEGROUP"} } @@ -551,18 +631,16 @@ function getNetworkSettings() function tftpConfigure() { - local basetftp=/var/lib/tftpboot - echoAndLog "${FUNCNAME}(): Configuring TFTP service." # reiniciamos demonio internet ????? porque ???? /etc/init.d/openbsd-inetd start # preparacion contenedor tftpboot - cp -ar /usr/lib/syslinux/ ${basetftp}/syslinux - cp -a /usr/lib/syslinux/pxelinux.0 ${basetftp} + cp -ar /usr/lib/syslinux/ $TFTPCFGDIR/syslinux + cp -a /usr/lib/syslinux/pxelinux.0 $TFTPCFGDIR # prepamos el directorio de la configuracion de pxe - mkdir -p ${basetftp}/pxelinux.cfg - cat > ${basetftp}/pxelinux.cfg/default <<EOF + mkdir -p $TFTPCFGDIR/pxelinux.cfg + cat > $TFTPCFGDIR/pxelinux.cfg/default <<EOF DEFAULT syslinux/vesamenu.c32 MENU TITLE Aplicacion GNSYS @@ -589,122 +667,20 @@ function testPxe () ######################################################################## -## Configuracion servicio NFS -######################################################################## - -# ADVERTENCIA: usa variables globales NETIP y NETMASK! -function nfsConfigure() -{ - echoAndLog "${FUNCNAME}(): Config nfs server." - - backupFile /etc/exports - - nfsAddExport /opt/opengnsys/client ${NETIP}/${NETMASK}:ro,no_subtree_check,no_root_squash,sync - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while adding nfs client config" - return 1 - fi - - nfsAddExport /opt/opengnsys/images ${NETIP}/${NETMASK}:rw,no_subtree_check,no_root_squash,sync,crossmnt - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while adding nfs images config" - return 1 - fi - - nfsAddExport /opt/opengnsys/log/clients ${NETIP}/${NETMASK}:rw,no_subtree_check,no_root_squash,sync - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while adding logging client config" - return 1 - fi - - nfsAddExport /var/lib/tftpboot ${NETIP}/${NETMASK}:ro,no_subtree_check,no_root_squash,sync - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while adding second filesystem for the pxe ogclient" - return 1 - fi - - /etc/init.d/nfs-kernel-server restart - - exportfs -va - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while configure exports" - return 1 - fi - - echoAndLog "${FUNCNAME}(): Added NFS configuration to file \"/etc/exports\"." - return 0 -} - - -# ejemplos: -#nfsAddExport /opt/opengnsys 192.168.0.0/255.255.255.0:ro,no_subtree_check,no_root_squash,sync -#nfsAddExport /opt/opengnsys 192.168.0.0/255.255.255.0 -#nfsAddExport /opt/opengnsys 80.20.2.1:ro 192.123.32.2:rw -function nfsAddExport() -{ - if [ $# -lt 2 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - if [ ! -f /etc/exports ]; then - errorAndLog "${FUNCNAME}(): /etc/exports don't exists" - return 1 - fi - - local export="${1}" - local contador=0 - local cadenaexport - - grep "^${export}" /etc/exports > /dev/null - if [ $? -eq 0 ]; then - echoAndLog "${FUNCNAME}(): $export exists in /etc/exports, omiting" - return 0 - fi - - cadenaexport="${export}" - for parametro in $* - do - if [ $contador -gt 0 ] - then - host=`echo $parametro | awk -F: '{print $1}'` - options=`echo $parametro | awk -F: '{print $2}'` - if [ "${host}" == "" ]; then - errorAndLog "${FUNCNAME}(): host can't be empty" - return 1 - fi - cadenaexport="${cadenaexport}\t${host}" - - if [ "${options}" != "" ]; then - cadenaexport="${cadenaexport}(${options})" - fi - fi - let contador=contador+1 - done - - echo -en "$cadenaexport\n" >> /etc/exports - - echoAndLog "${FUNCNAME}(): add $export to /etc/exports" - - return 0 -} - - -######################################################################## ## Configuracion servicio Samba ######################################################################## function smbConfigure() { echoAndLog "${FUNCNAME}(): Configuring Samba service." - backupFile /etc/samba/smb.conf + 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 > /etc/samba/smb-og.conf + $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/; s/^\; *include \=.*$/ include \= \/etc\/samba\/smb-og.conf/" /etc/samba/smb.conf - /etc/init.d/smbd restart + perl -pi -e "s/WORKGROUP/OPENGNSYS/; s/server string \=.*/server string \= OpenGnSys Samba Server/; s/^\; *include \=.*$/ include \= \/etc\/samba\/smb-og.conf/" $SAMBACFGDIR/smb.conf + $SAMBAINIT restart if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while configure Samba" return 1 @@ -725,28 +701,31 @@ function dhcpConfigure() { echoAndLog "${FUNCNAME}(): Sample DHCP configuration." - local DHCPSERVER=/etc/init.d/isc-dhcp-server - DHCPCONFIG=/etc/dhcp/dhcpd.conf - if [ ! -x $DHCPSERVER ]; then - DHCPSERVER=/etc/init.d/dhcp3-server - DHCPCONFIG=/etc/dhcp3/dhcpd.conf - fi - backupFile $DHCPCONFIG - - sed -e "s/SERVERIP/$SERVERIP/g" \ - -e "s/NETIP/$NETIP/g" \ - -e "s/NETMASK/$NETMASK/g" \ - -e "s/NETBROAD/$NETBROAD/g" \ - -e "s/ROUTERIP/$ROUTERIP/g" \ - -e "s/DNSIP/$DNSIP/g" \ - $WORKDIR/opengnsys/server/etc/dhcpd.conf.tmpl > $DHCPCONFIG - if [ $? -ne 0 ]; then + 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 - - $DHCPSERVER restart - echoAndLog "${FUNCNAME}(): Sample DHCP configured in file \"$DHCPCONFIG\"." + ln -f $DHCPCFGDIR/dhcpd-$DEFAULTDEV.conf $DHCPCFGDIR/dhcpd.conf + $DHCPINIT restart + echoAndLog "${FUNCNAME}(): Sample DHCP configured in \"$DHCPCFGDIR\"." return 0 } @@ -793,8 +772,12 @@ function openGnsysInstallWebConsoleApacheConf() echoAndLog "${FUNCNAME}(): creating apache2 config file.." + # Activar HTTPS. + $ENABLESITE default-ssl + $ENABLEMOD ssl + make-ssl-cert generate-default-snakeoil --force-overwrite - # genera configuración + # Genera configuración de consola web. cat > $path_opengnsys_base/etc/apache.conf <<EOF # OpenGnSys Web Console configuration for Apache @@ -806,14 +789,14 @@ Alias /opengnsys ${path_web_console} </Directory> EOF - ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/sites-available/opengnsys.conf - ln -fs $path_apache2_confd/sites-available/opengnsys.conf $path_apache2_confd/sites-enabled/opengnsys.conf + ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/sites-available/opengnsys + $ENABLESITE opengnsys if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation" return 1 else echoAndLog "${FUNCNAME}(): config file created and linked, restarting apache daemon" - /etc/init.d/apache2 restart + $APACHEINIT restart return 0 fi } @@ -880,7 +863,7 @@ function createDirs() # Establecer los permisos básicos. echoAndLog "${FUNCNAME}(): setting directory permissions" - chmod -R 775 $path_opengnsys_base/{log/clients,images,tftpboot} + chmod -R 775 $path_opengnsys_base/{log/clients,images} chown -R :$OPENGNSYS_CLIENT_USER $path_opengnsys_base/{log/clients,images} if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while setting permissions" @@ -949,7 +932,7 @@ function servicesCompilation () # Compilar OpenGnSys Server echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Server" pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmServer - make && make install + make && mv ogAdmServer $INSTALL_TARGET/sbin if [ $? -ne 0 ]; then echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Server" hayErrores=1 @@ -958,7 +941,7 @@ function servicesCompilation () # Compilar OpenGnSys Repository Manager echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Repository Manager" pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepo - make && make install + make && mv ogAdmRepo $INSTALL_TARGET/sbin if [ $? -ne 0 ]; then echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Repository Manager" hayErrores=1 @@ -967,7 +950,7 @@ function servicesCompilation () # Compilar OpenGnSys Agent echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Agent" pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmAgent - make && make install + make && mv ogAdmAgent $INSTALL_TARGET/sbin if [ $? -ne 0 ]; then echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Agent" hayErrores=1 @@ -1014,13 +997,13 @@ function copyInterfaceAdm () function openGnsysCopyClientFiles() { - local hayErrores=0 + local errstatus=0 echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files." cp -ar $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while copying client estructure" - hayErrores=1 + errstatus=1 fi find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null @@ -1029,76 +1012,27 @@ function openGnsysCopyClientFiles() cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while copying engine files" - hayErrores=1 + errstatus=1 fi - if [ $hayErrores -eq 0 ]; then + if [ $errstatus -eq 0 ]; then echoAndLog "${FUNCNAME}(): client copy files success." else errorAndLog "${FUNCNAME}(): client copy files with errors" fi - return $hayErrores + return $errstatus } - - -# Crear antiguo cliente initrd para OpenGnSys 0.10 -function openGnsysOldClientCreate() -{ - local OSCODENAME - - local hayErrores=0 - - # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto). - OSCODENAME=$(lsb_release -cs 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 2>&1 | tee -a $LOG_FILE - 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 2>&1 | tee -a $LOG_FILE - 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 2>&1 | tee -a $LOG_FILE - 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 2>&1 | tee -a $LOG_FILE - 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}(): Old client generation success." - else - errorAndLog "${FUNCNAME}(): Old client generation with errors" - fi - - return $hayErrores -} - - -# Crear cliente OpenGnSys 1.0.1 +# Crear cliente OpenGnSys 1.0.2 function clientCreate() { - local DOWNLOADURL="http://www.opengnsys.es/downloads" - local FILENAME=ogclient-1.0.2-natty-32bit-beta00-rev2046.iso + local DOWNLOADURL="http://$OPENGNSYS_SERVER/downloads" + local FILENAME=ogLive-natty-2.6.38-8-generic-pae-r2303.iso local TARGETFILE=$INSTALL_TARGET/lib/$FILENAME local TMPDIR=/tmp/${FILENAME%.iso} - + echoAndLog "${FUNCNAME}(): Loading Client" # Descargar, montar imagen, copiar cliente ogclient y desmontar. wget $DOWNLOADURL/$FILENAME -O $TARGETFILE @@ -1109,15 +1043,24 @@ function clientCreate() echoAndLog "${FUNCNAME}(): Copying Client files" mkdir -p $TMPDIR mount -o loop,ro $TARGETFILE $TMPDIR - cp -vr $TMPDIR/ogclient $INSTALL_TARGET/tftpboot + cp -avr $TMPDIR/ogclient $INSTALL_TARGET/tftpboot umount $TMPDIR rmdir $TMPDIR + # Asignar la clave cliente para acceso a Samba. + echoAndLog "${FUNCNAME}(): Set client access key" + echo -ne "$OPENGNSYS_CLIENT_PASSWD\n$OPENGNSYS_CLIENT_PASSWD\n" | \ + $INSTALL_TARGET/bin/setsmbpass # Establecer los permisos. find -L $INSTALL_TARGET/tftpboot -type d -exec chmod 755 {} \; find -L $INSTALL_TARGET/tftpboot -type f -exec chmod 644 {} \; chown -R :$OPENGNSYS_CLIENT_USER $INSTALL_TARGET/tftpboot/ogclient chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/tftpboot/{menu.lst,pxelinux.cfg} + + # Ofrecer md5 del kernel y vmlinuz para ogupdateinitrd en cache + cp -arv $INSTALL_TARGET/tftpboot/ogclient/ogvmlinuz* $INSTALL_TARGET/tftpboot + cp -arv $INSTALL_TARGET/tftpboot/ogclient/oginitrd.img* $INSTALL_TARGET/tftpboot + echoAndLog "${FUNCNAME}(): Client generation success" } @@ -1125,26 +1068,60 @@ function clientCreate() # Configuración básica de servicios de OpenGnSys function openGnsysConfigure() { + local i=0 + local dev="" + echoAndLog "${FUNCNAME}(): Copying init files." cp -p $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys cp -p $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.default /etc/default/opengnsys - cp -p $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepoAux /opt/opengnsys/sbin/ + cp -p $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepoAux $INSTALL_TARGET/sbin update-rc.d opengnsys defaults 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 - echoAndLog "${FUNCNAME}(): Creating OpenGnSys config file in \"$INSTALL_TARGET/etc\"." - perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DBUSER/$OPENGNSYS_DB_USER/g; s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g; s/DATABASE/$OPENGNSYS_DATABASE/g" $INSTALL_TARGET/etc/ogAdmServer.cfg - perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmRepo.cfg - perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DBUSER/$OPENGNSYS_DB_USER/g; s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g; s/DATABASE/$OPENGNSYS_DATABASE/g" $INSTALL_TARGET/etc/ogAdmAgent.cfg - chown root:root $INSTALL_TARGET/etc/{ogAdmServer.cfg,ogAdmAgent.cfg} - chmod 600 $INSTALL_TARGET/etc/{ogAdmServer.cfg,ogAdmAgent.cfg} - echoAndLog "${FUNCNAME}(): Creating Web Console config file" - OPENGNSYS_CONSOLEURL="http://$SERVERIP/opengnsys" - perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DBUSER/$OPENGNSYS_DB_USER/g; s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g; s/DATABASE/$OPENGNSYS_DATABASE/g; s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $INSTALL_TARGET/www/controlacceso.php - chown $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/controlacceso.php - chmod 600 $INSTALL_TARGET/www/controlacceso.php - sed -e "s/SERVERIP/$SERVERIP/g" -e "s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $WORKDIR/opengnsys/admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient.cfg + + 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" \ + $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 + OPENGNSYS_CONSOLEURL="http://${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/${OPENGNSYS_CONSOLEURL//\//\\/}/g" \ + $INSTALL_TARGET/www/controlacceso.php > $INSTALL_TARGET/www/controlacceso-$dev.php + sed -e "s/SERVERIP/${SERVERIP[i]}/g" \ + -e "s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" \ + $WORKDIR/opengnsys/admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient-$dev.cfg + 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 echoAndLog "${FUNCNAME}(): Starting OpenGnSys services." /etc/init.d/opengnsys start } @@ -1169,7 +1146,7 @@ function installationSummary() echoAndLog "Project version: $(cat $VERSIONFILE 2>/dev/null)" echoAndLog "Installation directory: $INSTALL_TARGET" echoAndLog "Repository directory: $INSTALL_TARGET/images" - echoAndLog "DHCP configuration file: $DHCPCONFIG" + echoAndLog "DHCP configuration directory: $DHCPCFGDIR" echoAndLog "TFTP configuration directory: /var/lib/tftpboot" echoAndLog "Samba configuration directory: /etc/samba" echoAndLog "Web Console URL: $OPENGNSYS_CONSOLEURL" @@ -1196,7 +1173,15 @@ echo echoAndLog "OpenGnSys installation begins at $(date)" pushd $WORKDIR -# Comprobar si hay conexión y detectar parámetros de red por defecto. +# Detectar datos 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:" @@ -1205,17 +1190,12 @@ if [ $? -ne 0 ]; then errorAndLog " - Server is temporally down, try agian later." exit 1 fi -getNetworkSettings -if [ $? -ne 0 ]; then - errorAndLog "Error reading default network settings." - exit 1 -fi # Detener servicios de OpenGnSys, si están activos previamente. [ -f /etc/init.d/opengnsys ] && /etc/init.d/opengnsys stop # Actualizar repositorios -apt-get update +updatePackageList # Instalación de dependencias (paquetes de sistema operativo). declare -a notinstalled @@ -1263,14 +1243,6 @@ fi # Configurando tftp tftpConfigure -# Configuración NFS -#### (descomentar las siguientes líneas para exportar servicios por NFS) -#nfsConfigure -#if [ $? -ne 0 ]; then -# errorAndLog "Error while configuring nfs server!" -# exit 1 -#fi - # Configuración Samba smbConfigure if [ $? -ne 0 ]; then @@ -1371,14 +1343,7 @@ if [ $? -ne 0 ]; then errorAndLog "Error creating client structure" fi -# Crear la estructura del antiguo cliente initrd de OpenGnSys 0.10 -#### (descomentar las siguientes líneas para generar cliente initrd) -#openGnsysOldClientCreate -#if [ $? -ne 0 ]; then -# errorAndLog "Warning: cannot create old initrd client" -#fi - -# Crear la estructura del cliente de OpenGnSys 1.0 +# Crear la estructura del cliente de OpenGnSys clientCreate if [ $? -ne 0 ]; then errorAndLog "Error creating client" diff --git a/installer/opengnsys_uninstall.sh b/installer/opengnsys_uninstall.sh index 0ee3b947..f9b5ce0e 100755 --- a/installer/opengnsys_uninstall.sh +++ b/installer/opengnsys_uninstall.sh @@ -11,6 +11,7 @@ DBUSER="usuog" # Usuario de acceso a la base de datos # Variables. OPENGNSYS="/opt/opengnsys" # Directorio de OpenGnSys OGIMG="images" # Directorio de imágenes del repositorio +CLIENTUSER="opengnsys" # Usuario de acceso del cliente # Parar servicio. echo "Uninstalling OpenGnSys services." @@ -37,6 +38,10 @@ if test $DROP; then mysql -u root -p"$MYSQLROOT" <<<"DROP USER '$DBUSER';" 2>/dev/null mysql -u root -p"$MYSQLROOT" <<<"DROP USER '$DBUSER'@'localhost';" 2>/dev/null fi +# Quitar configuración específica de Apache. +a2dissite opengnsys +rm -f /etc/apache2/{sites-available,sites-enabled}/opengnsys* +/etc/init.d/apache2 reload # Eliminar ficheros. echo "Deleting OpenGnSys files." for dir in $OPENGNSYS/*; do @@ -48,6 +53,9 @@ rm -f /etc/init.d/opengnsys /etc/default/opengnsys /var/log/opengnsys # Comentar recursos de OpenGnSys en Samba. perl -pi -e "s/^ *include \= \/etc\/samba\/smb-og.conf/\; include \= \/etc\/samba\/smb-og.conf/" /etc/samba/smb.conf /etc/init.d/smbd restart +# Eliminar usuario de OpenGnSys. +smbpasswd -x $CLIENTUSER +userdel $CLIENTUSER # Tareas manuales a realizar después de desinstalar. echo "Manual tasks:" echo "- You may stop or uninstall manually all other services" diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh index 3c46ce57..ad376290 100755 --- a/installer/opengnsys_update.sh +++ b/installer/opengnsys_update.sh @@ -25,8 +25,7 @@ OPENGNSYS_CLIENTUSER="opengnsys" # Usuario Samba # Sólo ejecutable por usuario root -if [ "$(whoami)" != 'root' ] -then +if [ "$(whoami)" != 'root' ]; then echo "ERROR: this program must run under root privileges!!" exit 1 fi @@ -43,12 +42,12 @@ PROGRAMNAME=$(basename "$0") DEPS="build-essential g++-multilib rsync ctorrent samba unzip netpipes debootstrap schroot squashfs-tools" OPENGNSYS_SERVER="www.opengnsys.es" if [ -d "$PROGRAMDIR/../installer" ]; then - USESVN=0 + USESVN=0 else - USESVN=1 - DEPS="$DEPS subversion" + USESVN=1 + DEPS="$DEPS subversion" fi -SVN_URL="http://$OPENGNSYS_SERVER/svn/trunk/" +SVN_URL="http://$OPENGNSYS_SERVER/svn/branches/version1.0/" WORKDIR=/tmp/opengnsys_update mkdir -p $WORKDIR @@ -131,11 +130,11 @@ function backupFile() echoAndLog "${FUNCNAME}(): Making $fichero back-up" # realiza una copia de la última configuración como last - cp -p $fichero "${fichero}-LAST" + cp -a $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}" + cp -a $fichero "${fichero}-${fecha}" fi } @@ -151,7 +150,7 @@ function restoreFile() echoAndLog "${FUNCNAME}(): restoring file $fichero" if [ -f "${fichero}-LAST" ]; then - cp -p "$fichero-LAST" "$fichero" + cp -a "$fichero-LAST" "$fichero" fi } @@ -265,18 +264,6 @@ function checkNetworkConnection() ####### Funciones específicas de la instalación de Opengnsys ##################################################################### -# Copiar ficheros de arranque de los servicios del sistema de OpenGnSys -function updateServicesStart() -{ - echoAndLog "${FUNCNAME}(): Updating OpenGnSys init file ..." - cp -p $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys - if [ $? != 0 ]; then - errorAndLog "${FUNCNAME}(): Error updating /etc/init.d/opengnsys" - exit 1 - fi - echoAndLog "${FUNCNAME}(): init file updated successfully." -} - # Actualizar cliente OpenGnSys function updateClientFiles() { @@ -289,7 +276,7 @@ function updateClientFiles() find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null echoAndLog "${FUNCNAME}(): Updating OpenGnSys Cloning Engine files." - rsync --exclude .svn -irplt $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin + rsync --exclude .svn -irplt $WORKDIR/opengnsys/client/engine/*.lib* $INSTALL_TARGET/client/lib/engine/bin if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while updating engine files" exit 1 @@ -298,14 +285,27 @@ function updateClientFiles() echoAndLog "${FUNCNAME}(): client files update success." } -# Exportar nombre de usuario y grupo del servicio Apache. -function getApacheUser() +# Configurar HTTPS y exportar usuario y grupo del servicio Apache. +function apacheConfiguration () { - # Variables de ejecución de Apache + local APACHECONF=/etc/apache2 + + # Activar HTTPS, si es necesario. + if [ -e $APACHECONF/sites-available/opengnsys.conf ]; then + echoAndLog "${FUNCNAME}(): Configuring HTTPS access..." + mv $APACHECONF/sites-available/opengnsys.conf $APACHECONF/sites-available/opengnsys + a2ensite default-ssl + a2enmod ssl + a2dissite opengnsys.conf + a2ensite opengnsys + /etc/init.d/apache2 restart + fi + + # Variables de ejecución de Apache. # - APACHE_RUN_USER # - APACHE_RUN_GROUP - if [ -f /etc/apache2/envvars ]; then - source /etc/apache2/envvars + if [ -f $APACHECONF/envvars ]; then + source $APACHECONF/envvars fi APACHE_RUN_USER=${APACHE_RUN_USER:-"www-data"} APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"www-data"} @@ -443,7 +443,29 @@ function updateServerFiles() fi done popd >/dev/null + NEWFILES="" # Ficheros de configuración que han cambiado de formato. + if grep -q 'pxelinux.0' /etc/dhcp*/dhcpd*.conf; then + echoAndLog "${FUNCNAME}(): updating DHCP files" + perl -pi -e 's/pxelinux.0/grldr/' /etc/dhcp*/dhcpd*.conf + for i in isc-dhcp-server dhcpd3-server dhcpd; do + [ -f /etc/init.d/$i ] && /etc/init.d/$i restart + done + NEWFILES="/etc/dhcp*/dhcpd*.conf" + fi + if ! diff --quiet $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys 2>/dev/null; then + echoAndLog "${FUNCNAME}(): updating new init file" + backupFile /etc/init.d/opengnsys + cp -a $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys + NEWFILES="$NEWFILES /etc/init.d/opengnsys" + fi + if grep -q "UrlMsg=.*msgbrowser.php" $INSTALL_TARGET/client/etc/ogAdmClient.cfg 2>/dev/null; then + echoAndLog "${FUNCNAME}(): updating new client config file" + backupFile $INSTALL_TARGET/client/etc/ogAdmClient.cfg + perl -pi -e 's!UrlMsg=.*msgbrowser\.php!UrlMsg=http://localhost/cgi-bin/httpd-log\.sh!g' $INSTALL_TARGET/client/etc/ogAdmClient.cfg + NEWFILES="$NEWFILES $INSTALL_TARGET/client/etc/ogAdmClient.cfg" + fi echoAndLog "${FUNCNAME}(): updating 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 echoAndLog "${FUNCNAME}(): server files updated successfully." } @@ -506,17 +528,20 @@ function compileServices() # Actualizar nuevo cliente para OpenGnSys 1.0 function updateClient() { - local DOWNLOADURL="http://www.opengnsys.es/downloads" - local FILENAME=ogclient-1.0.2-natty-32bit-beta00-rev2046.iso + local DOWNLOADURL="http://$OPENGNSYS_SERVER/downloads" + local FILENAME=ogLive-natty-2.6.38-8-generic-pae-r2303.iso local SOURCEFILE=$DOWNLOADURL/$FILENAME local TARGETFILE=$INSTALL_TARGET/lib/$FILENAME local SOURCELENGTH local TARGETLENGTH local TMPDIR=/tmp/${FILENAME%.iso} + local OGINITRD=$INSTALL_TARGET/tftpboot/ogclient/oginitrd.img + local SAMBAPASS # Comprobar si debe actualizarse el cliente. SOURCELENGTH=$(LANG=C wget --spider $SOURCEFILE 2>&1 | awk '/Length:/ {print $2}') TARGETLENGTH=$(ls -l $TARGETFILE 2>/dev/null | awk '{print $5}') + [ -z $TARGETLENGTH ] && TARGETLENGTH=0 if [ "$SOURCELENGTH" != "$TARGETLENGTH" ]; then echoAndLog "${FUNCNAME}(): Loading Client" wget $DOWNLOADURL/$FILENAME -O $TARGETFILE @@ -524,23 +549,40 @@ function updateClient() errorAndLog "${FUNCNAME}(): Error loading OpenGnSys Client" return 1 fi + # Obtener la clave actual de acceso a Samba para restaurarla. + if [ -f $OGINITRD ]; then + SAMBAPASS=$(gzip -dc $OGINITRD | \ + cpio -i --to-stdout scripts/ogfunctions 2>&1 | \ + grep "^[ ]*OPTIONS=" | \ + sed 's/\(.*\)pass=\(\w*\)\(.*\)/\2/') + fi + # Montar la imagen ISO del ogclient, actualizar ficheros y desmontar. + echoAndLog "${FUNCNAME}(): Updatting ogclient files" + mkdir -p $TMPDIR + mount -o loop,ro $TARGETFILE $TMPDIR + rsync -irlt $TMPDIR/ogclient $INSTALL_TARGET/tftpboot + umount $TMPDIR + rmdir $TMPDIR + # Recuperar la clave de acceso a Samba. + if [ -n "$SAMBAPASS" ]; then + echoAndLog "${FUNCNAME}(): Restoring client access key" + echo -ne "$SAMBAPASS\n$SAMBAPASS\n" | \ + $INSTALL_TARGET/bin/setsmbpass + fi + # Establecer los permisos. + find -L $INSTALL_TARGET/tftpboot -type d -exec chmod 755 {} \; + find -L $INSTALL_TARGET/tftpboot -type f -exec chmod 644 {} \; + chown -R :$OPENGNSYS_CLIENTUSER $INSTALL_TARGET/tftpboot/ogclient + chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/tftpboot/{menu.lst,pxelinux.cfg} + + # Ofrecer md5 del kernel y vmlinuz para ogupdateinitrd en cache + cp -arv $INSTALL_TARGET/tftpboot/ogclient/ogvmlinuz* $INSTALL_TARGET/tftpboot + cp -arv $INSTALL_TARGET/tftpboot/ogclient/oginitrd.img* $INSTALL_TARGET/tftpboot + + echoAndLog "${FUNCNAME}(): Client update successfully" else - echoAndLog "${FUNCNAME}(): Client is already loaded" + echoAndLog "${FUNCNAME}(): Client is already updated" fi - # Montar la imagen ISO del ogclient, actualizar ficheros y desmontar. - echoAndLog "${FUNCNAME}(): Updating ogclient files" - mkdir -p $TMPDIR - mount -o loop,ro $TARGETFILE $TMPDIR - rsync -irlt $TMPDIR/ogclient $INSTALL_TARGET/tftpboot - umount $TMPDIR - rmdir $TMPDIR - - # Establecer los permisos. - find -L $INSTALL_TARGET/tftpboot -type d -exec chmod 755 {} \; - find -L $INSTALL_TARGET/tftpboot -type f -exec chmod 644 {} \; - chown -R :$OPENGNSYS_CLIENTUSER $INSTALL_TARGET/tftpboot/ogclient - chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/tftpboot/{menu.lst,pxelinux.cfg} - echoAndLog "${FUNCNAME}(): Client update successfully" } # Resumen de actualización. @@ -555,8 +597,11 @@ function updateSummary() echo echoAndLog "OpenGnSys Update Summary" - echo "========================" - echoAndLog "Project version: $(cat $VERSIONFILE)" + echo "========================" + echoAndLog "Project version: $(cat $VERSIONFILE)" + if [ -n "$NEWFILES" ]; then + echoAndLog "Check the new config files: $(echo $NEWFILES)" + fi echo } @@ -639,7 +684,7 @@ updateClientFiles updateInterfaceAdm # Actualizar páqinas web -getApacheUser +apacheConfiguration updateWebFiles if [ $? -ne 0 ]; then errorAndLog "Error updating OpenGnSys Web Admin files" @@ -658,9 +703,6 @@ if [ $? -ne 0 ]; then exit 1 fi -# Actualizamos el fichero que arranca los servicios de OpenGnSys -updateServicesStart - # Eliminamos el fichero de estado del tracker porque es incompatible entre los distintos paquetes if [ -f /tmp/dstate ]; then rm -f /tmp/dstate |