summaryrefslogtreecommitdiffstats
path: root/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
diff options
context:
space:
mode:
Diffstat (limited to 'client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions')
-rw-r--r--client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions840
1 files changed, 0 insertions, 840 deletions
diff --git a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
deleted file mode 100644
index 4d96f7eb..00000000
--- a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
+++ /dev/null
@@ -1,840 +0,0 @@
-#/**
-#@file ogfunctions.lib
-#@brief Librería o clase para la gestion del sistema operativo de los clientes OpenGnsys.
-#@class client
-#@version 1.1.0
-#@warning License: GNU GPLv3+
-#*/ ##
-
-
-#/**
-# ogGetNetworkDevice
-#@brief Devuelve el nombre de dispositivo de red correpondiente al índice indicado.
-#@param int_devindex índice de dispositivo de red.
-#@return str_devname nombre de dispositivo de red.
-#@note Índice 0 debe corresponder a interfaz "lo" y a partir de 1 para las reales.
-#@version 1.1.0 - Primera versión de la función.
-#@author Ramón Gómez, ETSII Universidad de Sevilla
-#@date 2016/04/20
-#*/ ##
-ogGetNetworkDevice ()
-{
-# Mantener retrocompatibilidad con interfaces antiguas tipo eth.
-case "$1" in
- eth0) ind=1 ;;
- eth1) ind=2 ;;
- eth2) ind=3 ;;
- *) ind="$1" ;;
-esac
-# Buscar el dispositivo del índice.
-dev=""
-for f in /sys/class/net/*/uevent; do
- source $f
- let aux=$IFINDEX-1
- [ "$ind" = "$INTERFACE" -o "$ind" = $aux ] && dev="$INTERFACE"
-done
-[ -n "$dev" ] && echo "$dev"
-}
-
-
-#/**
-# ogExportKernelParameters
-#@brief Exporta los parametros pasados al kernel
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 0.7 - Primera versión de la función.
-#@author Antonio J. Doblas. Universidad de Malaga.
-#@date 2010/05/24
-#@version 1.1.0 - Sustituir índice de interfaz de red por su dispositivo.
-#@author Ramón Gómez, ETSII Universidad de Sevilla
-#@date 2016/04/20
-#*/ ##
-ogExportKernelParameters ()
-{
- GLOBAL="cat /proc/cmdline"
- for i in `${GLOBAL}`
- do
- echo $i | grep "=" > /dev/null && export $i
- done
- # Sustituir índice de interfaz de red por su dispositivo.
- DEVIND=$(echo "$ip" | cut -f6 -d:)
- if [ -n "$DEVIND" ]; then
- PRE=$(echo "$ip" | cut -f1-5 -d:)
- POST=$(echo "$ip" | cut -f7- -d:)
- DEVICE=$(ogGetNetworkDevice $DEVIND)
- [ -n "$DEVICE" ] && export ip="$PRE:$DEVICE:${POST:-none}"
- fi
- return 0
-}
-
-
-#/**
-# ogChangeVideoResolution
-#@brief Cambia la resolución de vídeo utilizando el parámetro "video" del Kernel
-# (sustituye al parámetro "vga").
-#@note Formato del parámetro vídeo: video=DRIVER:RESXxRESY-BITS
-#@note El valor por defecto es: video=uvesafb:640x480-16
-#@todo Control de errores en el foramto de la variable "video".
-#@version 1.0.5 - Primera versión de la función.
-#@author Ramón Gómez, ETSII Universidad de Sevilla
-#@date 2013/02/18
-#*/ ##
-ogChangeVideoResolution ()
-{
-# Variables locales.
-local DRIVER MODE
-# Mostrar resolución y driver por defecto si solo hay una opción disponible.
-if [ $(grep -c "" /sys/class/graphics/fb0/modes) -eq 1 ]; then
- echo "Default screen mode: $(cat /sys/class/graphics/fb0/modes),$(cat /sys/class/graphics/fb0/bits_per_pixel)bpp$(lsmod|awk '$1=="video" && $3>0 {printf " (%s)",$4}')."
-else
- # Obtener driver y resolución.
- DRIVER="$(echo $video|cut -f1 -d:)"
- MODE="$(echo $video|cut -f2 -d:)"
- case "$DRIVER" in
- # Cambiar resolución para driver "uvesafb".
- uvesafb)
- # Obtener modo por defecto si parámetro "video=uvesafb:D".
- [ "$MODE" == "D" ] && MODE=$(awk -F: '$1=="D" {print $2; nextfile}' /sys/class/graphics/fb0/modes)
- # Cambiar resolución según valor del parámetro "video".
- grep ":$(echo ${MODE/p/}|cut -f1 -d-)p" /sys/class/graphics/fb0/modes | head -1 > /sys/class/graphics/fb0/mode 2>&1
- echo "$(echo $MODE|cut -f2 -d-)" > /sys/class/graphics/fb0/bits_per_pixel 2>&1
- echo "Screen mode: $(cat /sys/class/graphics/fb0/mode),$(cat /sys/class/graphics/fb0/bits_per_pixel)bpp."
- ;;
- # Resolución por defecto para el resto de casos.
- *) echo "Unknown video driver, using default mode."
- ;;
- esac
-fi
-}
-
-
-#/**
-# ogExportVarEnvironment
-#@brief Exporta las variables usadas en el proceso de inicio OpenGnsys y las almacena en /tmp
-#@param
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 0.9
-#@author Antonio J. Doblas. Universidad de Malaga.
-#@date 2011/05/24
-#*/ ##
-ogExportVarEnvironment ()
-{
- export CFGINITRD="/tmp/initrd.cfg"
- OGPROTOCOL="${ogprotocol:-smb}"
- [ "$ogunit" != "" ] && OGUNIT="/$ogunit"
- # OPTIONS Para samba y local (a nfs no le afecta)
- export OPTIONS=" -o user=opengnsys,pass=og"
- DEFOGLIVE="ogclient"
- export OGLIVEDIR="${oglivedir:-$DEFOGLIVE}" && echo "OGLIVEDIR=$OGLIVEDIR" >> $CFGINITRD
- case "$OGPROTOCOL" in
- nfs|NFS)
- export SRCOGLIVE="/var/lib/tftpboot" && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD
- export SRCOGSHARE="/opt/opengnsys/client" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD
- export SRCOGLOG="/opt/opengnsys/log/clients" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD
- export SRCOGIMAGES="/opt/opengnsys/images$OGUNIT" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD
- ;;
- smb|SMB|cifs|CIFS|samba|SAMBA)
- export SRCOGLIVE="tftpboot" && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD
- export SRCOGSHARE="ogclient" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD
- export SRCOGLOG="oglog" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD
- export SRCOGIMAGES="ogimages$OGUNIT" && 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
- export DSTOGLIVE="/opt/oglive/tftpboot"
- #punto de montaje para unionfs
- export OGLIVERAMFS="/opt/oglive/ramfs" && echo "OGLIVERAMFS=$OGLIVERAMFS" >> $CFGINITRD
- #punto de montaje donde se accede al 2nd FS mediante loop
- export OGLIVEROOTFS="/opt/oglive/rootfs" && echo "OGLIVEROOTFS=$OGLIVEROOTFS" >> $CFGINITRD
- #punto de union entre LOCALROOTIMG y LOCALROOTRAM
- export OGLIVEUNIONFS="/opt/oglive/unionfs" && echo "OGLIVEUNIONFS=$OGLIVEUNIONFS" >> $CFGINITRD
- #etiquta para los dispositivos offline
- export OGLIVELABEL="ogClient"
-
- #echo "puntos de montajes para los demas accesos"
- #echo "acceso al client, engine, scritps, interfaz"
- export DSTOGSHARE="/opt/opengnsys" && echo "DSTOGSHARE=$DSTOGSHARE" >> $CFGINITRD
- export DSTOGLOG="/opt/opengnsys/log" && echo "DSTOGLOG=$DSTOGLOG" >> $CFGINITRD
- export DSTOGIMAGES="/opt/opengnsys/images" && echo "DSTOGIMAGES=$DSTOGIMAGES" >> $CFGINITRD
-
- ##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES ogConfigureNetwork.
- #DEVICE
- #IPV4DDR
- #IPV4BROADCAST
- #IPV4NETMASK
- #IPV4GATEWAY
- #HOSTNAME
- #INFORMACION de otras variasbles obteneidas desde ogGetROOTSERVER
- #ROOTSERVER si ip=dhcp -> ROOTSERVER=NEXT-SERVER; si ip=host:rootserver:gw:mask:hostname:interfaz -> ROOTSERVER=rootserver
- #BOOTIF -> si el gestor remoto es pxelinux.0 y se añade una linea más tipo "IPAPPEND 2" esta variable tendrá la mac de la interfaz.
- #$OGSERVERLIVE
- #$OGSERVERSHARE
- #$OGSERVERLOG
- #$OGSERVERIMAGES
- return 0
-}
-
-
-#/**
-# ogConfigureRamfs
-#@brief Configura el initrd para adaptarlo al sistema raiz.
-#@param
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 0.9
-#@author Antonio J. Doblas. Universidad de Malaga.
-#@date 2010/05/24
-#*/ ##
-ogConfigureRamfs ()
-{
- mkdir -p $DSTOGLIVE
- mkdir -p $OGLIVERAMFS
- mkdir -p $OGLIVEROOTFS
- mkdir -p $OGLIVEUNIONFS
-
- touch /etc/fstab
-}
-
-
-#/**
-# ogLoadNetModule
-#@brief Carga en un demerminado modulo de red, requiere compilación previo del modulo
-#@param
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 0.9
-#@author Antonio J. Doblas. Universidad de Malaga.
-#@date 2010/05/24
-#*/ ##
-ogLoadNetModule ()
-{
- if [ -n "$ognetmodule" ]
- then
- echo "Cargando modulo de red $ognetmodule"
- modprobe ${ognetmodule}
- fi
-}
-
-
-#/**
-# ogPostConfigureFS
-#@brief Configura el sistema raiz, para independizarlo entre los clientes.
-#@param
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 0.9
-#@author Antonio J. Doblas. Universidad de Malaga.
-#@date 2010/05/24
-#*/ ##
-ogPostConfigureFS()
-{
- # configuramos el /etc/hostname.
- echo $HOSTNAME > /etc/hostname
-
- #configuramos el /etc/hosts
- echo "127.0.0.1 localhost" > /etc/hosts
- echo "$IPV4ADDR $HOSTNAME" >> /etc/hosts
-
- #configuramos el host.conf
- echo "order hosts,bind" > /etc/host.conf
- echo "multi on" >> /etc/host.conf
-
- #configuramos el dns anterior ubuntu 12.04 (parámetro del Kernel "ogdns=IP_DNS")
- if [ -n "$ogdns" ]; then
- mkdir -p /run/resolvconf
- echo "nameserver $ogdns" > /run/resolvconf/resolv.conf
- fi
-
- #configuramos el uso del servicio http proxy (parámetro del Kernel "ogproxy=URL_Proxy")
- if [ -n "${ogproxy}" ]; then
- export http_proxy="$ogproxy"
- export https_proxy="$ogproxy"
- export ftp_proxy="$ogproxy"
- export ftps_proxy="$ogproxy"
- fi
-
- # configuramos el /etc/networks
- #read -e NETIP NETDEFAULT <<<$(route -n | grep eth0 | awk -F" " '{print $1}')
- NETIP=$(route -n | grep eth0 | awk -F" " '{print $1}') && NETIP=$(echo $NETIP | cut -f1 -d" ")
- echo "default 0.0.0.0" > /etc/networks
- echo "loopback 127.0.0.0" >> /etc/networks
- echo "link-local 169.254.0.0" >> /etc/networks
- echo "localnet $NETIP" >> /etc/networks
- #route
-
- #echo "ogLive1.0.2" > /etc/debian_chroot
-
- #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/
- 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 permitir instalacion de softare desde el comando apt-get (parametor kernel "ogtmpfs=50" valor en megas
- ogtmpfs="${ogtmpfs:-15}"
- mount tmpfs /var/cache/apt/archives -t tmpfs -o size=${ogtmpfs}M
- mkdir -p /var/cache/apt/archives/partial
-}
-
-
-#/**
-# ogGetROOTSERVER
-#@brief Determina los puntos de accesos a los distintos recursos.
-#Requiere ogConfigureNetworking.
-#Exporta ROOTSERVER
-# si la red ha sido configurada con dhcp el valor de ROOTSERVER será el valor de next-server del dhcp
-# si la red ha sido configurada con el parametro de kernel ip, será el segundo valor.
-## ip=iphost:ipnext-server:ipgateway:netmask:hostname:iface:none
-## ip=172.17.36.21:62.36.225.150:172.17.36.254:255.255.255.0:prueba1:eth0:none
-#@param
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 0.9
-#@author Antonio J. Doblas. Universidad de Malaga.
-#@date 2010/05/24
-#*/ ##
-ogGetROOTSERVER ()
-{
- # get nfs root from dhcp
- if [ "x${NFSROOT}" = "xauto" ]; then
- # check if server ip is part of dhcp root-path
- if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then
- NFSROOT=${ROOTSERVER}:${ROOTPATH}
- else
- NFSROOT=${ROOTPATH}
- fi
-
- # nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
- elif [ -n "${NFSROOT}" ]; then
- # nfs options are an optional arg
- if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then
- NFSOPTS="-o ${NFSROOT#*,}"
- fi
- NFSROOT=${NFSROOT%%,*}
- if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then
- NFSROOT=${ROOTSERVER}:${NFSROOT}
- fi
- fi
- export ROOTSERVER
- echo "ROOTSERVER=$ROOTSERVER" >> $CFGINITRD
-
- #si oglive no oglive=R
- export OGSERVERIMAGES="${ogrepo:-$ROOTSERVER}" && echo "OGSERVERIMAGES=$OGSERVERIMAGES" >> $CFGINITRD
- export OGSERVERSHARE="${ogshare:-$ROOTSERVER}" && echo "OGSERVERSHARE=$OGSERVERSHARE" >> $CFGINITRD
- export OGSERVERLOG="${oglog:-$ROOTSERVER}" && echo "OGSERVERLOG=$OGSERVERLOG" >> $CFGINITRD
- export OGSERVERLIVE="${oglive:-$OGSERVERIMAGES}" && echo "OGSERVERLIVE=$OGSERVERLIVE" >> $CFGINITRD
-
- return 0
-}
-
-
-
-# ogUpdateInitrd
-#@brief Actualiza el initrd de la cache desde el servidor. Si el arranque ha sido desde cache, comprueba desde el servidor nueva version del initird.
-#@param1
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 0.9
-#@author Antonio J. Doblas. Universidad de Malaga.
-#@date 2011/05/24
-#@version 1.1.0 - Permite varios ogLive dentro de subdirectorios
-#@author Irina Gómez. ETSII Universidad de Sevilla
-#@date 2017/04/27
-#@version 1.1.0 - Se permite varios ogLives en la CACHE
-#@author Antonio J. Doblas Viso. Universidad de Malaga
-#@date 2017/05/31
-#*/ ##
-
-ogUpdateInitrd ()
-{
- local OGLIVEDIR
- OGLIVEDIR=${oglivedir:-"ogclient"}
- cd /tmp
- mkdir /tmp/cache
- TYPE=$(blkid -po export $(blkid -L CACHE) 2>/dev/null | awk -F= '$1=="TYPE" { print $2}')
- # Salir si no se detecta caché.
- [ -z "$TYPE" ] && return
- mount -t $TYPE LABEL=CACHE /tmp/cache || return
- mkdir -p /tmp/cache/boot/$OGLIVEDIR
-
-
- # comparamos los del server
- busybox tftp -g -r $OGLIVEDIR/ogvmlinuz.sum $ROOTSERVER
- busybox tftp -g -r $OGLIVEDIR/oginitrd.img.sum $ROOTSERVER
- SERVERVMLINUZ=`cat ogvmlinuz.sum`
- SERVERINITRD=`cat oginitrd.img.sum`
-
-
- #comparamos los de la cache
- CACHEVMLINUZ=`cat /tmp/cache/boot/$OGLIVEDIR/ogvmlinuz.sum`
- CACHEINITRD=`cat /tmp/cache/boot/$OGLIVEDIR/oginitrd.img.sum`
-
- echo "MD5 on SERVER: $SERVERVMLINUZ $SERVERINITRD"
- echo "MD5 on CACHE: $CACHEVMLINUZ $CACHEINITRD"
-
- cd /tmp/cache/boot/$OGLIVEDIR || mkdir -p /tmp/cache/boot/$OGLIVEDIR
-
- if [ "$CACHEVMLINUZ" != "$SERVERVMLINUZ" ]
- then
- echo "ogvmlinuz updating"
- busybox tftp -g -r $OGLIVEDIR/ogvmlinuz $ROOTSERVER
- busybox tftp -g -r $OGLIVEDIR/ogvmlinuz.sum $ROOTSERVER
- DOREBOOT=true
- fi
- if [ "$CACHEINITRD" != "$SERVERINITRD" ]
- then
- echo "oginitrd updating"
- busybox tftp -g -r $OGLIVEDIR/oginitrd.img $ROOTSERVER
- busybox tftp -g -r $OGLIVEDIR/oginitrd.img.sum $ROOTSERVER
- DOREBOOT=true
- fi
-
- cd /; umount /tmp/cache
-
- [ "$DOREBOOT" == "true" ] && reboot -f
-
-}
-
-#/**
-# ogConnect
-#@brief Conecta con los recursos necesarios para opengnsys
-#@param1 ip del servidor TODO:dns
-#@param2 protocolo
-#@param3 punto de acceso remoto
-#@param4 punto de montaje local
-#@param5 acceso de lectura tipo ",ro"
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 0.9
-#@author Antonio J. Doblas. Universidad de Malaga.
-#@date 2011/05/24
-#*/ ##
-
-ogConnect ()
-{
- SERVER=$1
- PROTOCOL=$2
- SRC=$3
- DST=$4
- READONLY=$5
-
- case "$PROTOCOL" in
- nfs)
- nfsmount ${SERVER}:${SRC} ${DST} -o nolock${READONLY} 2> /dev/null || mount.nfs ${SERVER}:${SRC} ${DST} -o nolock${READONLY}
- ;;
- 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
- ;;
- *)
- return 1
- ;;
- esac
- return $?
-}
-
-
-#/**
-# ogConnectOgLive
-#@brief Conecta con el recurso para usar el sistema raiz externo, remoto o local
-#@param1
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 0.9
-#@author Antonio J. Doblas. Universidad de Malaga.
-#@date 2011/05/24
-ogConnectOgLive ()
-{
-# Si ogprotocol=local, la funcion ogExportVar => SRCOGLIVE=local
- if [ "$SRCOGLIVE" == "local" ]
- then
- echo "Montar imagen del sistema root desde dispositivo local"
- for i in $(blkid /dev/s* | grep $OGLIVELABEL | awk -F: '{print $2}' | tr -d \"); do export $i; done
- # si local usb| cd con partcion es identificada como label $OGLIVELABEL
- mount -t $TYPE LABEL=$OGLIVELABEL $DSTOGLIVE
- if [ $? != 0 ]
- then
- # Si local es particion CACHE es identificada como CACHE
- mount LABEL=CACHE $DSTOGLIVE
- #export LOCALMEDIA=CACHE
- fi
- else
- # 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
-}
-
-
-#/**
-# ogMergeLive
-#@brief Metafuncion para fusionar el initrd con el sistema raiz.
-#@param1
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 0.9
-#@author Antonio J. Doblas. Universidad de Malaga.
-#@date 2011/05/24
-ogMergeLive()
-{
-#Si existe en el punto de acceso del del oglive el fichero ogclient.sqfs
-if [ ! -d $DSTOGLIVE/$OGLIVEDIR ]; then
- echo "Usando ogLive por defecto."
- export OGLIVEDIR=$DEFOGLIVE
-fi
-if [ -f $DSTOGLIVE/$OGLIVEDIR/ogclient.sqfs ]
-then
- cat /proc/mounts > /tmp/mtab.preunion
- if [ "$og2nd" == "img" ]
- then
- #Montamos el ROOTFS tipo img, para desarrolladores
- #TODO: comprobar que se tiene acceso de escritura
- losetup /dev/loop0 $DSTOGLIVE/$OGLIVEDIR/ogclient.img -o 32256
- mount /dev/loop0 $OGLIVEROOTFS
- else
- ## Montamos el ROOTFS tipo squashfs
- mount $DSTOGLIVE/$OGLIVEDIR/ogclient.sqfs $OGLIVEROOTFS -t squashfs -o loop
- fi
-# Realizamos la union entre el ogliveram(initrd) y el ogliverootfs(ogclient.sqfs)
-# Nota: el orden es muy importante para evitar errores de montaje.
- [ -d $OGLIVEROOTFS/lib32 ] && LIBS=lib32
- for i in bin sbin lib $LIBS etc var usr root boot; do
- ogUnionLiveDir $i
- done
- [ -L /etc/mtab ] || cat /tmp/mtab.preunion > /etc/mtab
-else
- echo "Fichero imagen del cliente no encontrado"
- return 1
-fi
-}
-
-
-
-#/**
-# ogUnionLiveDir
-#@brief fusiona dos directorios con unionfs
-#@param1
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 0.9
-#@author Antonio J. Doblas. Universidad de Malaga.
-#@date 2011/05/24
-ogUnionLiveDir()
-{
- TMPDIR=/$1 #dir
- FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid"
- UNION_OPT="-o cow -o noinitgroups"
- UBIN="unionfs-fuse"
-
- mkdir -p $OGLIVERAMFS$TMPDIR
- U1STDIR="${OGLIVERAMFS}${TMPDIR}=RW"
- U2NDDIR="${OGLIVEROOTFS}${TMPDIR}=RO"
- UNIONDIR=${OGLIVEUNIONFS}${TMPDIR}
- mkdir -p $UNIONDIR $TMPDIR
- $UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR
- mount --bind $UNIONDIR $TMPDIR
-}
-
-
-
-#/**
-# ogConfigureLoopback
-#@brief Configura la interfaz loopback para cliente torrent
-#@param
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 0.9 Usando funciones generales de ubuntu
-#@author Antonio J. Doblas. Universidad de Malaga.
-#@date 2010/05/24
-#@version 1.0.1 Deteccion automatica de interfaz con enlace activo.
-#@author Antonio J. Doblas. Universidad de Malaga.
-#@date 2011/05/24
-#*/ ##
-ogConfigureLoopback()
-{
- # for the portmapper we need localhost
- ifconfig lo 127.0.0.1
- #/etc/init.d/portmap start
-}
-
-#/**
-# ogConfigureNetworking
-#@brief Configura la interfaz de red usada en el pxe
-#@param
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 0.9
-#@author Antonio J. Doblas. Universidad de Malaga.
-#@date 2010/05/24
-#*/ ##
-ogConfigureNetworking()
-{
-#echo "ogConfigureNetworking: Buscando interfaz a configurar DEVICE"
-if [ -n "${BOOTIF}" ]
-then
- #echo " variable BOOTIF exportada con pxelinux.0 con valor $BOOTIF"
- IP=$IPOPTS
- temp_mac=${BOOTIF#*-}
- # convert to typical mac address format by replacing "-" with ":"
- bootif_mac=""
- IFS='-'
- for x in $temp_mac ; do
- if [ -z "$bootif_mac" ]; then
- bootif_mac="$x"
- else
- bootif_mac="$x:$bootif_mac"
- fi
- done
- unset IFS
- # look for devices with matching mac address, and set DEVICE to
- # appropriate value if match is found.
- for device in /sys/class/net/* ; do
- if [ -f "$device/address" ]; then
- current_mac=$(cat "$device/address")
- if [ "$bootif_mac" = "$current_mac" ]; then
- DEVICE=${device##*/}
- break
- fi
- fi
- done
-else
- #echo "variable BOOTIF no exportada, intentamos detectar que interfaz se ha iniciado"
- IP=$ip
- #TODO Detectar que interfaz se ha iniciado
- case "$IP" in
- none|off)
- return 0
- ;;
- ""|on|any)
- # Bring up device
- DEVICE=1
- ;;
- dhcp|bootp|rarp|both)
- DEVICE=1
- ;;
- *)
- DEVICE=`echo $IP | cut -f6 -d:`
- ;;
- esac
-fi
-DEVICE=$(ogGetNetworkDevice $DEVICE)
-if [ -z "${DEVICE}" ]; then
- echo "variable DEVICE con valor $DEVICE no encontrada, llamamos de nuevo a ogconfigure_networking"
- ogConfigureNetworking
-fi
-
-[ -n "${DEVICE}" ] && [ -e /run/net-"${DEVICE}".conf ] && return 0
-#if [ -n "${DEVICE}" ] && [ -e /run/net-"${DEVICE}".conf ]; then
-# echo "variable DEVICE con valor $DEVICE y fichero /run/net-$DEVICE encontrados"
-# return 0
-#else
-# echo "variable DEVICE con valor $DEVICE encontrada, procedemos a configurala y a crear el fichero /run/net-$DEVICE"
-#fi
-
-# Activamos la interfaz antes de configurar.
-ip address flush $DEVICE
-ip link set dev $DEVICE up
-# Si no se detecta señal portadora volver a configurar.
-sleep 1
-CARRIER=$(cat /sys/class/net/${DEVICE}/carrier)
-if [ "$CARRIER" != "1" ]
-then
- ogConfigureNetworking
-fi
-
-# support ip options see linux sources
-# Documentation/filesystems/nfsroot.txt
-# Documentation/frv/booting.txt
-for ROUNDTTT in 2 3 4 6 9 16 25 36 64 100; do
- # The NIC is to be configured if this file does not exist.
- # Ip-Config tries to create this file and when it succeds
- # creating the file, ipconfig is not run again.
- if [ -e /run/net-"${DEVICE}".conf ]; then
- break;
- fi
- case "$IP" in
- none|off)
- return 0
- ;;
- ""|on|any)
- # Bring up device
- echo "Setting $DEVICE with option:on|any and Variable IP= $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} "
- ipconfig -t ${ROUNDTTT} ${DEVICE}
- ;;
- dhcp|bootp|rarp|both)
- echo "Setting $DEVICE with option:dhcp|bootp|rarp|both and Variable IP= $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} "
- ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE}
- ;;
- *)
- echo "Setting $DEVICE with option * and Variable IP= $IP: ipconfig -t ${ROUNDTTT} -d $IP "
- ipconfig -t ${ROUNDTTT} -d $IP
- # grab device entry from ip option
- NEW_DEVICE=${IP#*:*:*:*:*:*}
- if [ "${NEW_DEVICE}" != "${IP}" ]; then
- NEW_DEVICE=${NEW_DEVICE%:*}
- else
- # wrong parse, possibly only a partial string
- NEW_DEVICE=
- fi
- if [ -n "${NEW_DEVICE}" ]; then
- DEVICE="${NEW_DEVICE}"
- fi
- ;;
- esac
-done
-
-# source ipconfig output
-if [ -n "${DEVICE}" ]; then
- export DEVICE
- export DEVICECFG="/run/net-${DEVICE}.conf"
- # En algunos casos, el fichero de configuración está en /tmp.
- [ ! -f $DEVICECFG -a -f ${DEVICECFG/run/tmp} ] && mv ${DEVICECFG/run/tmp} $DEVICECFG
- source $DEVICECFG
- echo "DEVICE=$DEVICE" >> $CFGINITRD
- echo "DEVICECFG=$DEVICECFG" >> $CFGINITRD
- echo "exportando variable DEVICE con valor = $DEVICE y DEVICECFG con valor $DEVICECFG"
- # Compatibilidad con versiones anteriores.
- ln -fs $DEVICECFG /tmp
-else
- # source any interface as not exaclty specified
- source /run/net-*.conf
-fi
-}
-
-
-#/**
-# ogYesNo
-#@brief Gestion de peticiones de usuario en modo ogdebug=true
-#@param1 OPTIONS --timeout N --default ANSWER
-#@param1 Questions
-#@return 1=yes 0=no
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 0.9
-#@author:
-#@date 2010/05/24
-#*/ ##
-ogYesNo()
-{
- local ans
- local ok=0
- local timeout=0
- local default
- local t
-
- while [[ "$1" ]]
- do
- case "$1" in
- --default)
- shift
- default=$1
- if [[ ! "$default" ]]; then error "Missing default value"; fi
- t=$(echo $default | tr '[:upper:]' '[:lower:]')
-
- if [[ "$t" != 'y' && "$t" != 'yes' && "$t" != 'n' && "$t" != 'no' ]]; then
- error "Illegal default answer: $default"
- fi
- default=$t
- shift
- ;;
-
- --timeout)
- shift
- timeout=$1
- if [[ ! "$timeout" ]]; then error "Missing timeout value"; fi
- #if [[ ! "$timeout" =~ ^[0-9][0-9]*$ ]]; then error "Illegal timeout value: $timeout"; fi
- shift
- ;;
-
- -*)
- error "Unrecognized option: $1"
- ;;
-
- *)
- break
- ;;
- esac
- done
-
- if [[ $timeout -ne 0 && ! "$default" ]]; then
- error "Non-zero timeout requires a default answer"
- fi
-
- if [[ ! "$*" ]]; then error "Missing question"; fi
-
- while [[ $ok -eq 0 ]]
- do
- if [[ $timeout -ne 0 ]]; then
- if ! read -t $timeout -p "$*" ans; then
- ans=$default
- else
- # Turn off timeout if answer entered.
- timeout=0
- if [[ ! "$ans" ]]; then ans=$default; fi
- fi
- else
- read -p "$*" ans
- if [[ ! "$ans" ]]; then
- ans=$default
- else
- ans=$(echo $ans | tr '[:upper:]' '[:lower:]')
- fi
- fi
-
- if [[ "$ans" == 'y' || "$ans" == 'yes' || "$ans" == 'n' || "$ans" == 'no' ]]; then
- ok=1
- fi
-
- if [[ $ok -eq 0 ]]; then warning "Valid answers are: yes y no n"; fi
- done
- [[ "$ans" = "y" || "$ans" == "yes" ]]
-}
-