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/ogfunctions171
1 files changed, 124 insertions, 47 deletions
diff --git a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
index 991ec890..d46ab875 100644
--- a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
+++ b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
@@ -1,21 +1,52 @@
#/**
#@file ogfunctions.lib
-#@brief Librería o clase para la gestion del sistema operativo de los clientes OpenGnSys.
+#@brief Librería o clase para la gestion del sistema operativo de los clientes OpenGnsys.
#@class client
-#@version 1.0.5
+#@version 1.1.0
#@warning License: GNU GPLv3+
#*/ ##
#/**
-# ogExportKernelParameters
+# 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
-#@param
-#@return
#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 0.7 -
-#@author Antonio J. Doblas. Universidad de Malaga.
+#@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 ()
{
@@ -24,6 +55,14 @@ ogExportKernelParameters ()
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
}
@@ -43,20 +82,28 @@ ogChangeVideoResolution ()
{
# Variables locales.
local DRIVER MODE
-# 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)
- grep ":$(echo $MODE|cut -f1 -d-)p" /sys/class/graphics/fb0/modes | head -1 > /sys/class/graphics/fb0/mode 2>&1 || MODE="640x480-16"
- 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
+# 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
}
@@ -74,20 +121,23 @@ 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" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $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" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD
+ export SRCOGIMAGES="ogimages$OGUNIT" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD
;;
local|LOCAL)
# Ponemos variables SRC compatibles con smb y nfs.
@@ -203,7 +253,12 @@ ogPostConfigureFS()
fi
#configuramos el uso del servicio http proxy (parámetro del Kernel "ogproxy=URL_Proxy")
- [ -n "${ogproxy}" ] && export http_proxy="$ogproxy"
+ 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}')
@@ -253,9 +308,10 @@ ogPostConfigureFS()
fi
fi
- #Montamos un directorio temporal para el apt-get
- mount tmpfs /var/cache/apt/archives -t tmpfs -o size=15M
- mkdir -p /var/cache/apt/archives/partial
+ #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
}
@@ -312,52 +368,62 @@ ogGetROOTSERVER ()
# ogUpdateInitrd
-#@brief Actualiza el intird de la cache desde el servidor. Si el arranque ha disdo desde cache, compueba desde el servidor nueva version del initird.
+#@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 | grep CACHE | awk -F"TYPE=" '{print $2}' | tr -d \")
+ 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 /tmp/cache/boot
+ mkdir -p /tmp/cache/boot/$OGLIVEDIR
# comparamos los del server
- busybox tftp -g -r ogvmlinuz.sum $ROOTSERVER
- busybox tftp -g -r oginitrd.img.sum $ROOTSERVER
+ 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/ogvmlinuz.sum`
- CACHEINITRD=`cat /tmp/cache/boot/oginitrd.img.sum`
+ 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"
+ echo "MD5 on CACHE: $CACHEVMLINUZ $CACHEINITRD"
- cd /tmp/cache/boot
+ cd /tmp/cache/boot/$OGLIVEDIR || mkdir -p /tmp/cache/boot/$OGLIVEDIR
if [ "$CACHEVMLINUZ" != "$SERVERVMLINUZ" ]
then
echo "ogvmlinuz updating"
- busybox tftp -g -r ogvmlinuz $ROOTSERVER
- busybox tftp -g -r ogvmlinuz.sum $ROOTSERVER
+ 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 oginitrd.img $ROOTSERVER
- busybox tftp -g -r oginitrd.img.sum $ROOTSERVER
+ busybox tftp -g -r $OGLIVEDIR/oginitrd.img $ROOTSERVER
+ busybox tftp -g -r $OGLIVEDIR/oginitrd.img.sum $ROOTSERVER
DOREBOOT=true
fi
@@ -408,7 +474,11 @@ ogConnect ()
# TODO: buscar condicion para NFS
fi
;;
+ *)
+ return 1
+ ;;
esac
+ return $?
}
@@ -457,21 +527,27 @@ ogConnectOgLive ()
ogMergeLive()
{
#Si existe en el punto de acceso del del oglive el fichero ogclient.sqfs
-if [ -f $DSTOGLIVE/ogclient/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/ogclient/ogclient.img -o 32256
+ losetup /dev/loop0 $DSTOGLIVE/$OGLIVEDIR/ogclient.img -o 32256
mount /dev/loop0 $OGLIVEROOTFS
else
## Montamos el ROOTFS tipo squashfs
- mount $DSTOGLIVE/ogclient/ogclient.sqfs $OGLIVEROOTFS -t squashfs -o loop
+ mount $DSTOGLIVE/$OGLIVEDIR/ogclient.sqfs $OGLIVEROOTFS -t squashfs -o loop
fi
# Realizamos la union entre el ogliveram(initrd) y el ogliverootfs(ogclient.sqfs)
- for i in etc var lib bin sbin usr root boot; do
+# Nota: el orden es muy importante para evitar errores de montaje.
+ [ -d $DSTOGLIVE/lib32 ] && LIBS=lib32
+ for i in bin sbin lib $LIBS etc var usr root boot; do
ogUnionLiveDir $i
done
cat /tmp/mtab.preunion > /etc/mtab
@@ -503,7 +579,7 @@ ogUnionLiveDir()
U1STDIR="${OGLIVERAMFS}${TMPDIR}=RW"
U2NDDIR="${OGLIVEROOTFS}${TMPDIR}=RO"
UNIONDIR=${OGLIVEUNIONFS}${TMPDIR}
- mkdir -p $UNIONDIR
+ mkdir -p $UNIONDIR $TMPDIR
$UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR
mount --bind $UNIONDIR $TMPDIR
}
@@ -580,16 +656,17 @@ else
;;
""|on|any)
# Bring up device
- DEVICE=eth0
+ DEVICE=1
;;
dhcp|bootp|rarp|both)
- DEVICE=eth0
+ 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