oglive-builder/old/ogClientGenerator.sh

307 lines
8.6 KiB
Bash

#!/bin/bash
#@file ogClientGenerator.sh
#@brief Script generación del cliente OpenGnSys
#@warning
#@version 0.9 -
#@author Antonio J. Doblas Viso.
#@date 2010/05/24
#*/
if [ $# -ne 1 ]; then
echo ": invalid number of parameters"
echo " host | lucid | karmic | jaunty | lenny | squeeze "
exit 1
fi
# Soo 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"))
if [ -d "$PROGRAMDIR/../installer" ]; then
USESVN=0
else
USESVN=1
SVN_URL=svn://www.informatica.us.es:3690/opengnsys/branches/ogClient
#directorio donde se almacenará el codigo temporalmente.
SVN_DIR="./opengnsys/installer/ogClient"
fi
WORKDIR=/tmp/opengnsys_installer
mkdir -p $WORKDIR
INSTALL_TARGET=/opt/opengnsys
LOG_FILE=/tmp/opengnsys_installation.log
###############################################
pushd $WORKDIR
source `dirname $0`/ogInstaller.lib
if [ "$1" == "host" ]
then
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
OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}')
OGRELEASE=$(uname -a | awk '{print $3}')
else
OSCODENAME=`echo $1`
OGRELEASE=`ogClientGetRelease $OSCODENAME`
fi
OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/
OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img
OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount
OGLIB=/opt/opengnsys/client/lib
echoAndLog "OpenGnSys CLIENT installation begins at $(date)"
# Datos para la generación del cliente.
DEPENDENCIES=( debootstrap subversion schroot)
## Actualizar repositorios
apt-get update
# Instalación de dependencias (paquetes de sistema operativo).
declare -a notinstalled
checkDependencies DEPENDENCIES notinstalled
if [ $? -ne 0 ]; then
installDependencies notinstalled
if [ $? -ne 0 ]; then
echoAndLog "Error while installing some dependeces, please verify your server installation before continue"
exit 1
fi
fi
# Si es necesario, descarga el repositorio especifico de la instalación del cliente
if [ $USESVN -eq 1 ]; then
#svnExportCode $SVN_URL
echo svn export "$SVN_URL" $SVN_DIR
#svn export "$SVN_URL" $SVN_DIR
#####debug boorrar el cp
#mkdir -p $SVN_DIR
#cp -prv /home/administrador/workspace/opengnsys/branches/ogClient/* $SVN_DIR
find $SVN_DIR/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null
###TODO si ya esta descargado da error ???
###if [ $? -ne 0 ]; then
### errorAndLog "Error while getting code from svn"
### exit 1
###fi
else
ln -fs "$(dirname $PROGRAMDIR)" opengnsys
fi
#### Parseo de ficheros descargados del svn.
# parseamos del apt.source
if [ "$1" == host ]
then
cp /etc/apt/sources.list ${SVN_DIR}/clientstructure/etc/apt/sources.list
else
sed -e "s/OGVERSION/$OGVERSION/g" ${SVN_DIR}/clientstructure/etc/apt/sources.list.generic > ${SVN_DIR}/clientstructure/etc/apt/sources.list
#rm ${SVN_DIR}/clientstructure/etc/apt/sources.list.generic
fi
if [ $? -ne 0 ]; then
errorAndLog "parseando el fichero apt.source: ERROR"
else
echoAndLog "parseando el fichero apt.source: OK"
fi
#parseamos el scripts de generación del initrd.
sed -e "s/OGRELEASE/$OGRELEASE/g" ${SVN_DIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVN_DIR}/clientstructure/root/GenerateInitrd.sh
#rm ${SVN_DIR}/clientstructure/root/GenerateInitrd.generic.sh
if [ $? -ne 0 ]; then
errorAndLog "parseando el fichero de cliente GenerateInitrd: ERROR"
else
echoAndLog "parseando el fichero de cliente GenerateInitrd: OK"
fi
#damos permiso al directorio de scripts
chmod 775 ${SVN_DIR}/clientstructure/root/*
if [ $? -ne 0 ]; then
errorAndLog "Dando permisos de escritura al directorio de scrips para el cliente: ERROR"
else
echoAndLog "Dando permisos de escritura al directorio de scrips para el cliente: OK"
fi
#####PASO 1. Generamos el 2º sistema de archivos.
echo "generamos el sistema base con debootstrap"
if [ "$1" == host ]
then
echo ogClientGeneratorDebootstrap $OSCODENAME $OGRELEASE 2>&1 | tee -a $LOG_FILE
# ogClientGeneratorDebootstrap $OSCODENAME $OGRELEASE 2>&1 | tee -a $LOG_FILE
else
echo ogClientGeneratorDebootstrap $OSCODENAME $(ogClientGetRelease $OGVERSION) 2>&1 | tee -a $LOG_FILE
ogClientGeneratorDebootstrap $OSCODENAME $(ogClientGetRelease $OGVERSION) 2>&1 | tee -a $LOG_FILE
fi
if [ $? -ne 0 ]; then
errorAndLog "Generando 2nd FileSystem: ERROR"
else
echoAndLog "Generando 2nd FileSystem: OK"
fi
##########################################
cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime`
cat << EOF > /etc/schroot/schroot.conf
[IMGogclient]
type=loopback
file=/var/lib/tftpboot/ogclient/ogclient.img
description=ogclient ubuntu luc IMGi
priority=1
users=root
groups=root
root-groups=root
mount-options=-o offset=32256
root-users=root
[DIRogclient]
type=directory
directory=/var/lib/tftpboot/ogclient/ogclientmount
description=ogclient ubuntu lucid DIR
priority=2
users=root
groups=root
root-groups=root
root-users=root
EOF
####PASO 2 Insertamos datos en el 2º sistema de archivos
#2.1 montamos para insertar los ficheros necesarios.
mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
if [ $? -ne 0 ]; then
errorAndLog "Montando 2nd FileSystem Para Añadir elementos OG: ERROR"
exit 1
else
echoAndLog "Montando 2nd FileSystem Para Añadir elementos OG: OK"
fi
#2.2 copiamos la estrucutra descargada al fichero imagen.
echo "cp -prv ${SVN_DIR}/clientstructure/* $OGCLIENTMOUNT "
cp -prv ${SVN_DIR}/clientstructure/* $OGCLIENTMOUNT
if [ $? -ne 0 ]; then
errorAndLog "Copiando los elementos del cliente svn: ERROR"
exit 1
else
echoAndLog "Copiando los elementos del cliente svn: OK"
fi
#2.3 Copiamos algunas cosas del actual sistema - ver de que manera integrar los lib
# copiamos algunas cosas del nfsexport
echo "Linking fonts for browser1 $OGLIB"
mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/
cp -pr $OGLIB/fonts $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts
echo "Linking fonts for browser2 $OGLIB"
mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/
cp -pr $OGLIB/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts
echo "Coping pci.ids"
cp -pr $OGLIB/pci.ids $OGCLIENTMOUNT/etc
#copiamos el browser y el ogADMcline al bin
cp /opt/opengnsys/client/bin/browser $OGCLIENTMOUNT/bin
cp /opt/opengnsys/client/bin/ogAdmClient $OGCLIENTMOUNT/bin
if [ $? -ne 0 ]; then
errorAndLog "Copiando qt pci.ids fonts: ERROR"
exit 1
else
echoAndLog "Copiando qt pci.ids fonts: OK"
fi
## final desmontamos.
mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
if [ $? -ne 0 ]; then
errorAndLog "Desmontando cliente : ERROR"
exit 1
else
echoAndLog "desmontando cliente: OK"
fi
################## Fin paso 2
popd
######## instalamos software adicional.
#ogClientMount /root/InstallSoftware.sh 2>&1 | tee -a `echo $LOG_FILE`
cd /
schroot -c IMGogclient -- /root/InstallSoftware.sh 2>&1 | tee -a `echo $LOG_FILE`
if [ $? -ne 0 ]; then
errorAndLog "Instalando sofware adicional OG : ERROR"
#exit 1
else
echoAndLog "Instalando sofware adicional OG: OK"
fi
cd -
#cd /
#schroot -c IMGogclient -- /root/CompileSoftware.sh
#cd -
### configuracion hostname passroot securety
cd /
schroot -c IMGogclient -- /root/ConfFS.sh
cd -
##2.4 claves ssh
sshkeys()
{
##montamos
mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
##comprobamos clave rsa en el host,.
if [ ! -f /root/.ssh/id_rsa.pub ]
then
ssh-keygen -q -f /root/.ssh/id_rsa -N ""
fi
## copiamos ssh rsa del host al guest como authorized-key2
rm ${OGCLIENTMOUNT}/root/.ssh/authorized-key2
cat /root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2
#cat ${OGCLIENTMOUNT}/root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2
mount | grep $OGCLIENTMOUNT || umount $OGCLIENTMOUNT
}
### Generamos el 1er sistema de archivos.
cd /
schroot -c IMGogclient -- /root/GenerateInitrd.sh
cp /tmp/*-${OGRELEASE} $OGCLIENTBASEDIR
cd -
################## DEJAMOS FICHERO DE EJEMPLOS PARA:
#default
cat << FIN >> /var/lib/tftpboot/pxelinux.cfg/defaultNEWClient
LABEL pxe-${OGRELEASE}
KERNEL ogclient/vmlinuz-$OGRELEASE
APPEND initrd=ogclient/initrd.img-$OGRELEASE ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver=
FIN
#/etc/hosts
echo "/var/lib/tftpboot *(ro,no_subtree_check,no_root_squash,sync)" > /etc/exportsNEWClient
/etc/init.d/nfs-kernel-server restart
#####################################################################
# Mostrar sumario de la instalación e instrucciones de post-instalación.
installationSummary
#rm -rf $WORKDIR
echoAndLog "OpenGnSys installation finished at $(date)"