summaryrefslogtreecommitdiffstats
path: root/client/boot-tools
diff options
context:
space:
mode:
Diffstat (limited to 'client/boot-tools')
-rw-r--r--client/boot-tools/INSTALL.es.txt2
-rwxr-xr-xclient/boot-tools/boottoolsfunctions.lib2
-rw-r--r--client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions59
-rwxr-xr-xclient/boot-tools/ogclientImg2Sqfs55
-rwxr-xr-xclient/boot-tools/ogclientSqfs2Img120
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."