diff options
Diffstat (limited to 'installer/opengnsys_installer.sh')
-rwxr-xr-x | installer/opengnsys_installer.sh | 571 |
1 files changed, 268 insertions, 303 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" |