diff options
Diffstat (limited to 'client/boot-tools')
-rw-r--r-- | client/boot-tools/INSTALL.es.txt | 2 | ||||
-rwxr-xr-x | client/boot-tools/boottoolsfunctions.lib | 2 | ||||
-rw-r--r-- | client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions | 59 | ||||
-rwxr-xr-x | client/boot-tools/ogclientImg2Sqfs | 55 | ||||
-rwxr-xr-x | client/boot-tools/ogclientSqfs2Img | 120 |
5 files changed, 230 insertions, 8 deletions
diff --git a/client/boot-tools/INSTALL.es.txt b/client/boot-tools/INSTALL.es.txt index 3b7cd89d..afbf1de8 100644 --- a/client/boot-tools/INSTALL.es.txt +++ b/client/boot-tools/INSTALL.es.txt @@ -23,7 +23,7 @@ mv /opt/opengnsys/tftpboot/ogclient /opt/opengnsys/tftpboot/ogclient-old; #1. Descargar del Subversion las herramientas del cliente apt-get install subversion wget -svn checkout http://www.opengnsys.es/svn/branches/version1.0/client /tmp/opengnsys_installer/opengnsys/client/; +svn checkout http://www.opengnsys.es/svn/branches/version1.1/client /tmp/opengnsys_installer/opengnsys/client/; find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null; #2. Ejecutar el instalador: diff --git a/client/boot-tools/boottoolsfunctions.lib b/client/boot-tools/boottoolsfunctions.lib index 936b02a7..5027c650 100755 --- a/client/boot-tools/boottoolsfunctions.lib +++ b/client/boot-tools/boottoolsfunctions.lib @@ -92,7 +92,7 @@ case "${1,,}" in export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" ;; esac -SVNURL="http://opengnsys.es/svn/branches/version1.0/client" +SVNURL="http://opengnsys.es/svn/branches/version1.1/client" VERSIONSVN=$(LANG=C svn info $SVNURL | awk '/Rev:/ {print "r"$4}') NAMEISOCLIENT="$VERSIONBOOTTOOLS-$OSCODENAME-$OSRELEASE-$VERSIONSVN" NAMEHOSTCLIENT="$VERSIONBOOTTOOLS-$OSCODENAME-$VERSIONSVN" diff --git a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions index 56b5187e..991ec890 100644 --- a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions +++ b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions @@ -74,6 +74,8 @@ ogExportVarEnvironment () { export CFGINITRD="/tmp/initrd.cfg" OGPROTOCOL="${ogprotocol:-smb}" + # OPTIONS Para samba y local (a nfs no le afecta) + export OPTIONS=" -o user=opengnsys,pass=og" case "$OGPROTOCOL" in nfs|NFS) export SRCOGLIVE="/var/lib/tftpboot" && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD @@ -82,14 +84,17 @@ ogExportVarEnvironment () export SRCOGIMAGES="/opt/opengnsys/images" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD ;; smb|SMB|cifs|CIFS|samba|SAMBA) - export OPTIONS=" -o user=opengnsys,pass=og" export SRCOGLIVE="tftpboot" && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD export SRCOGSHARE="ogclient" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD export SRCOGLOG="oglog" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD export SRCOGIMAGES="ogimages" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD ;; local|LOCAL) + # Ponemos variables SRC compatibles con smb y nfs. export SRCOGLIVE="local" + export SRCOGSHARE="client" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD + export SRCOGLOG="log" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD + export SRCOGIMAGES="images" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD ;; esac #punto de acceso al boot-tools live @@ -214,8 +219,39 @@ ogPostConfigureFS() #enlace si iniciamos desde ogprotocolo=local { cdrom, usb, cache } . # monta el raiz del dispositivo local en /opt/og2fs/tftpboot - acceso al fichero .sqfs # y monta el sistema root sqfs en /opt/og2fs/2ndfs - [ "$LOCALMEDIA" == "CACHE" ] && ln -s $DSTOGLIVE /opt/opengnsys/cache - [ "$ogprotocol" == "local" ] && ln -s ${OGLIVEROOTFS}/opt/opengnsys/* /opt/opengnsys/ + #[ "$LOCALMEDIA" == "CACHE" ] && ln -s $DSTOGLIVE /opt/opengnsys/cache + #[ "$ogprotocol" == "local" ] && ln -s ${OGLIVEROOTFS}/opt/opengnsys/* /opt/opengnsys/ + if [ "$ogprotocol" == "local" ]; then + # Creamos los subdirectorios de /opt/opengnsys/ + [ "$ogstatus" == "offline" ] && ln -s ${OGLIVEROOTFS}/opt/opengnsys/* /opt/opengnsys/ + # Montamos CACHE + # Si existe particion identificada como CACHE se monta. + DEVICECACHE=$(blkid -L "CACHE") + if [ "$DEVICECACHE" != "" ]; then + # Se monta diferente segun el dispositivo de cache igual o no al de ogclient. + DEVICEOGLIVE=$(df |grep $DSTOGLIVE|awk '{print $1}') + if [[ "$DEVICECACHE" == "*$DEVICEOGLIVE*" ]];then + mount --bind $DSTOGLIVE /opt/opengnsys/cache + else + mount $DEVICECACHE /opt/opengnsys/cache + fi + if [ "$ogstatus" == "offline" ]; then + [ -d /opt/opengnsys/cache/log ] || mkdir /opt/opengnsys/cache/log + mount --bind /opt/opengnsys/cache/log /opt/opengnsys/log + fi + fi + # Montamos REPO + if [ "$ogstatus" == "offline" ]; then + # Si estatus distinto de online buscamos un dispositivo con etiqueta repo + # y si no existe montamos la cache como repo (si existe). + TYPE=$(blkid | grep REPO | awk -F"TYPE=" '{print $2}' | tr -d \") + if [ "$TYPE" == "" ]; then + [ -d "/opt/opengnsys/cache$DSTOGIMAGES" ] && mount --bind /opt/opengnsys/cache$DSTOGIMAGES $DSTOGIMAGES + else + mount -t $TYPE LABEL=REPO $DSTOGIMAGES &>/dev/null + fi + fi + fi #Montamos un directorio temporal para el apt-get mount tmpfs /var/cache/apt/archives -t tmpfs -o size=15M @@ -361,6 +397,17 @@ ogConnect () smb) mount.cifs //${SERVER}/${SRC} ${DST} ${OPTIONS}${READONLY} ;; + local) + # Comprobamos que estatus sea online y que la variable del server no esta vacia. + if [ "$ogstatus" != "offline" -a "$SERVER" != "" -a "$SRC" != "" ]; then + # Comprobamos que existe un servicio de samba. + smbclient -L $SERVER -N &>/dev/null + if [ $? -eq 0 ]; then + mount.cifs //${SERVER}/og${SRC} ${DST} ${OPTIONS}${READONLY} + fi + # TODO: buscar condicion para NFS + fi + ;; esac } @@ -387,11 +434,11 @@ ogConnectOgLive () then # Si local es particion CACHE es identificada como CACHE mount LABEL=CACHE $DSTOGLIVE - export LOCALMEDIA=CACHE + #export LOCALMEDIA=CACHE fi else -# Si ogprotocol es remoto. TODO en smb rw y en nfs ro?? - ogConnect $OGSERVERLIVE $OGPROTOCOL $SRCOGLIVE $DSTOGLIVE + # Si ogprotocol es remoto. TODO en smb rw y en nfs ro?? + ogConnect $OGSERVERLIVE $OGPROTOCOL $SRCOGLIVE $DSTOGLIVE fi # Si el montaje ha sido correcto, tanto en local como en remoto. Procedemos con la union ogMergeLive diff --git a/client/boot-tools/ogclientImg2Sqfs b/client/boot-tools/ogclientImg2Sqfs new file mode 100755 index 00000000..5dfb2b00 --- /dev/null +++ b/client/boot-tools/ogclientImg2Sqfs @@ -0,0 +1,55 @@ +#!/bin/bash +#/** +#@brief Comprime el fichero ogclient.img en ogclient.sqfs. +#@param none +#@exeption 1 No es usuario root +#@exeption 2 No existe el fichero ogclient.img +#@date 2013-11.27 +#*/ +PROG="$(basename $0)" +# Mostrar ayuda: Si se solicita, si faltan parametros o $3 no es SYNC1 o SYNC2. +if [ "$*" == "help" ]; then + echo -e "$PROG: Comprime el fichero ogclient.img en ogclient.sqfs. \n" + " Uso: $PROG (sin parametros)" + exit 0 +fi + +if [ "$USER" != "root" ]; then + echo "$PROG: Error: solo ejecutable por root" >&2 + exit 1 +fi + + +DATE=$(date +%y-%m-%d) +OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} +OGCLIENTBASEDIR=$OPENGNSYS/tftpboot/ogclient/; +OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img; +OGCLIENTSQFS=${OGCLIENTBASEDIR}ogclient.sqfs +OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount; +OGCLIENTSIZEMB=1900; +OGCLIENTLABEL=ogClient; + +# Comprobamos que existe el cliente .sqfs +! [ -f $OGCLIENTFILE -a -d $OGCLIENTMOUNT ] && echo "No existe $OGCLIENTFILE o $OGCLIENTMOUNT" && exit 3 +# Montamos ogclient.img. +echo "Montamos ogclient.img." +mkdir -p $OGCLIENTMOUNT; +mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256; + +# Si existe ogclient.sqfs hacemos copia de seguridad. +echo "Si existe ogclient.sqfs hacemos copia de seguridad." +[ -f ${OGCLIENTSQFS} ] && mv ${OGCLIENTSQFS} ${OGCLIENTSQFS}.$DATE + +# Comprimimos el cliente. +echo "Comprimimos el cliente." +echo "mksquashfs $OGCLIENTMOUNT ${OGCLIENTSQFS}" +mksquashfs $OGCLIENTMOUNT ${OGCLIENTSQFS} + +# Desmontamos el ogclient.img +echo "Desmontamos el ogclient.img" +umount $OGCLIENTMOUNT + +# Generamos nuevo archivo de suma de comprobación. +echo "Generamos nuevo archivo de suma de comprobacion." +mv ${OGCLIENTSQFS}.sum ${OGCLIENTSQFS}.sum.$DATE +md5sum ${OGCLIENTSQFS} |awk '{print $1}' >${OGCLIENTSQFS}.sum diff --git a/client/boot-tools/ogclientSqfs2Img b/client/boot-tools/ogclientSqfs2Img new file mode 100755 index 00000000..4f8447da --- /dev/null +++ b/client/boot-tools/ogclientSqfs2Img @@ -0,0 +1,120 @@ +#!/bin/bash +#/** +#@brief Descomprime el fichero ogclient.sqfs en ogclient.img con un formato donde podemos escribir. +#@param none +#@note Copiado del wiki: http://opengnsys.es/wiki/ClienteInitrdDSGenerarlo +#@note para "entrar" en ogclient: schroot -c ogclient.img o mount ogclient.img ogclientmount -o loop,offset=32256 +#@exeption 1 No es usuario root +#@exeption 2 No existe el fichero ogclient.sqfs +#@date 2013-11.27 +#*/ +PROG="$(basename $0)" +# Mostrar ayuda si se solicita. +if [ "$*" == "help" ]; then + echo -e "$PROG: Descomprime el fichero ogclient.sqfs en ogclient.img con un formato donde podemos escribir. \n" \ + " Uso: $PROG (sin parametros)" + exit 0 +fi + +if [ "$USER" != "root" ]; then + echo "$PROG: Error: solo ejecutable por root" >&2 + exit 1 +fi + + + +DATE=$(date +%y-%m-%d) +OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} +OGCLIENTBASEDIR=$OPENGNSYS/tftpboot/ogclient/; +OGCLIENTSQFS=${OGCLIENTBASEDIR}ogclient.sqfs +OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img; +OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount; +OGCLIENTSIZEMB=1900; +OGCLIENTLABEL=ogClient; + +# Comprobamos que existe el cliente .sqfs +! [ -f $OGCLIENTSQFS ] && echo "No existe $OGCLIENTSQFS" && exit 3 + +# instalamos los paquetes necesarios. +echo "Si no existen, instalamos los paquetes necesarios: squashfs-tools schroot." +if ! which schroot unsquashfs 2>&1 >/dev/null; then + apt-get update + apt-get -y install squashfs-tools schroot +fi + +# Creamos el archivo. +echo -e "\nCreamos el archivo." +echo dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB; +dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB; +DISKLOOP=$(losetup -f); +losetup $DISKLOOP $OGCLIENTFILE; +echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk $DISKLOOP; +losetup -d $DISKLOOP ; + +# Creamos el sistema de ficheros. +echo "Creamos el sistema de ficheros." +echo "mkfs.ext4 -b 4096 -L $OGCLIENTLABEL $PARTLOOP" +PARTLOOP=$(losetup -f); +losetup -o 32256 $PARTLOOP $OGCLIENTFILE && mkfs.ext4 -b 4096 -L $OGCLIENTLABEL $PARTLOOP; +losetup -d $PARTLOOP ; + +# Descomprimimos el ogclient.sqfs en el sistema de ficheros. +mkdir -p $OGCLIENTMOUNT; +echo "Descomprimimos el ogclient.sqfs en el sistema de ficheros." +mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256; +echo "unsquashfs -d ${OGCLIENTMOUNT}/ -f $OGCLIENTSQFS" +unsquashfs -d ${OGCLIENTMOUNT}/ -f $OGCLIENTSQFS +umount $OGCLIENTMOUNT; + +# Creamos los archivos de configuracion de schroot. +echo "Creamos los archivos de configuracion de schroot." +cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.$DATE +cat << EOF > /etc/schroot/schroot.conf +[ogclient.img] +type=loopback +file=${OGCLIENTBASEDIR}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=${OGCLIENTBASEDIR}ogclientmount +#description=ogclient ubuntu lucid DIR +#priority=2 +#users=root +#groups=root +#root-groups=root +#root-users=root +EOF + +cp /etc/schroot/mount-defaults /etc/schroot/mount-defaults.$DATE +cat << EOF > /etc/schroot/mount-defaults +# mount.defaults: static file system information for chroots. +# Note that the mount point will be prefixed by the chroot path +# (CHROOT_PATH) +# +# <file system> <mount point> <type> <options> <dump> <pass> +proc /proc proc defaults 0 0 +#procbususb /proc/bus/usb usbfs defaults 0 0 +/dev /dev none rw,bind 0 0 +/dev/pts /dev/pts none rw,bind 0 0 +/dev/shm /dev/shm none rw,bind 0 0 +#/home /home none rw,bind 0 0 +/tmp /tmp none rw,bind 0 0 +EOF + +# Si existen dispositivos loop los eliminamos. +echo "Si existen dispositivos loop los eliminamos." +LOOPDEVICES=$(losetup -a|grep $OGCLIENTFILE |cut -d: -f1) +for DEVICE in $LOOPDEVICES +do + echo "losetup -d $DEVICE" + losetup -d $DEVICE +done + +echo -e "Para \"entrar\" en ogclient: \n \t schroot -c ogclient.img o \n \t mount ogclient.img ogclientmount -o loop,offset=32256" +echo "El servicio schroot montará el cliente automaticamente, si no queremos que pase hay que apagarlo." |