346 lines
9.7 KiB
Bash
346 lines
9.7 KiB
Bash
#!/bin/bash
|
|
#/**
|
|
#@file Net.lib
|
|
#@brief Librería o clase Net
|
|
#@class Net
|
|
#@brief Funciones básicas de red.
|
|
#@version 1.0.6
|
|
#@warning License: GNU GPLv3+
|
|
#*/
|
|
|
|
|
|
#/**
|
|
# ogChangeRepo IPREPO [ OgUnit ]
|
|
#@brief Cambia el repositorio para el recurso remoto images.
|
|
#@param 1 Ip Repositorio
|
|
#@param 2 Abreviatura Unidad Organizativa
|
|
#@return Cambio recurso remoto en OGIMG.
|
|
#@version 1.1 - Primera versión para OpenGnSys.
|
|
#@author Irina Gomez, ETSII Universidad de Sevilla
|
|
#@date 2015-06-16
|
|
#*/
|
|
function ogChangeRepo ()
|
|
{
|
|
local SRCIMG NEWREPO REPO OGUNIT
|
|
|
|
if [ "$*" == "help" ]; then
|
|
ogHelp "$FUNCNAME" "$FUNCNAME IPREPO [ OgUnit ]" \
|
|
"$FUNCNAME 10.1.120.3" \
|
|
"$FUNCNAME 10.1.120.3 cdc"
|
|
return
|
|
fi
|
|
|
|
|
|
if [ $# -lt 1 ]; then
|
|
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME IPREPO [ OgUnit ]"
|
|
return $?
|
|
fi
|
|
|
|
|
|
# Opciones de montaje: lectura o escritura
|
|
mount |grep "ogimages.*rw," &>/dev/null && RW=",rw" || RW=",ro"
|
|
|
|
# Si REPO tomamos el repositorio y la unidad organizativa actual
|
|
REPO=$(ogGetRepoIp)
|
|
OGUNIT="$(df | awk -F " " '/ogimages/ {sub("//.*/ogimages","",$1); sub("/","",$1); print $1}')"
|
|
|
|
# Parametros de entrada. Si $1 = "REPO" dejo el repositorio actual
|
|
[ "${1^^}" == "REPO" ] && NEWREPO="$REPO" || NEWREPO="${1}"
|
|
|
|
# Si $1 y $2 son el repositorio y la OU actual me salgo
|
|
[ "$NEWREPO" == "$REPO" ] && [ "$2" == "$OGUNIT" ] && return 0
|
|
|
|
source /scripts/functions
|
|
source /scripts/ogfunctions
|
|
umount $OGIMG
|
|
[ "$2" == "" ] && SRCIMG="ogimages" || SRCIMG="ogimages/$2"
|
|
eval $(grep "OPTIONS=" /scripts/ogfunctions)
|
|
|
|
ogEcho session log "$MSG_HELP_ogChangeRepo $NEWREPO ${2%/}"
|
|
ogConnect $NEWREPO $ogprotocol $SRCIMG $OGIMG $RW
|
|
|
|
# Si da error volvemos a montar el inicial
|
|
if [ $? -ne 0 ]; then
|
|
ogConnect $REPO $ogprotocol $SRCIMG $OGIMG $RW
|
|
ogRaiseError session $OG_ERR_REPO "$NEWREPO"
|
|
return $?
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
#/**
|
|
# ogGetGroupDir [ str_repo ]
|
|
#@brief Devuelve el camino del directorio para el grupo del cliente.
|
|
#@param str_repo repositorio de imágenes (opcional)
|
|
#@return path_dir - Camino al directorio del grupo.
|
|
#@note repo = { REPO, CACHE } REPO por defecto
|
|
#@exception OG_ERR_FORMAT formato incorrecto.
|
|
#@version 1.0.2 - Primera versión para OpenGnSys.
|
|
#@author Ramon Gomez, ETSII Universidad de Sevilla
|
|
#@date 2011-10-03
|
|
#*/
|
|
function ogGetGroupDir ()
|
|
{
|
|
local REPO DIR GROUP
|
|
if [ "$*" == "help" ]; then
|
|
ogHelp "$FUNCNAME" "$FUNCNAME str_repo" \
|
|
"$FUNCNAME REPO ==> /opt/opengnsys/images/groups/Grupo1"
|
|
return
|
|
fi
|
|
# Error si se recibe más de 1 parámetro.
|
|
case $# in
|
|
0) REPO="REPO" ;;
|
|
1) REPO="$1" ;;
|
|
*) ogRaiseError $OG_ERR_FORMAT "$*"
|
|
return $? ;;
|
|
esac
|
|
|
|
GROUP="$(ogGetGroupName)"
|
|
if [ -n "$GROUP" ]; then
|
|
DIR=$(ogGetPath "$REPO" "/groups/$GROUP" 2>/dev/null)
|
|
[ -d "$DIR" ] && echo "$DIR"
|
|
fi
|
|
# Para que no haya error al fallar la condición anterior
|
|
return 0
|
|
}
|
|
|
|
|
|
#/**
|
|
# ogGetGroupName
|
|
#@brief Devuelve el nombre del grupo al que pertenece el cliente.
|
|
#@return str_group - Nombre de grupo.
|
|
#@version 1.0.2 - Primera versión para OpenGnSys.
|
|
#@author Ramon Gomez, ETSII Universidad de Sevilla
|
|
#@date 2011-10-03
|
|
#*/
|
|
function ogGetGroupName ()
|
|
{
|
|
if [ "$*" == "help" ]; then
|
|
ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => Grupo1"
|
|
return
|
|
fi
|
|
[ -n "$group" ] && echo "$group"
|
|
}
|
|
|
|
|
|
#/**
|
|
# ogGetHostname
|
|
#@brief Muestra el nombre del cliente.
|
|
#@return str_host - nombre de máquina
|
|
#@version 0.10 - Integración en OpenGnSys 0.10
|
|
#@author Ramon Gomez, ETSII Universidad de Sevilla
|
|
#@date 2010-02-11
|
|
#*/ ##
|
|
function ogGetHostname ()
|
|
{
|
|
local HOST
|
|
if [ "$*" == "help" ]; then
|
|
ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => pc1"
|
|
return
|
|
fi
|
|
# Tomar nombre de la variable HOSTNAME
|
|
HOST="$HOSTNAME"
|
|
# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen)
|
|
[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2}
|
|
END {print host}
|
|
' /var/lib/dhcp3/dhclient.leases)
|
|
# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */
|
|
[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="}
|
|
$1~/hostname/ {print $2}' /proc/cmdline)
|
|
[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST"
|
|
[ -n "$HOST" ] && echo $HOST
|
|
}
|
|
|
|
|
|
#/**
|
|
# ogGetIpAddress
|
|
#@brief Muestra la dirección IP del sistema
|
|
#@return str_ip - Dirección IP
|
|
#@version 0.10 - Integración en OpenGnSys 0.10
|
|
#@author Ramon Gomez, ETSII Universidad de Sevilla
|
|
#@date 2010-02-11
|
|
#@version 1.0 - Integración OpenGnSys 0.10 Opengnsys 0.10-testing
|
|
#@note Usa las variables utilizadas por el initrd "/etc/net-ethX.conf
|
|
#@author Antonio J. Doblas Viso. Universidad de Malaga.
|
|
#@date 2011-02-24
|
|
#@version 1.0.2 - Soporte para varias tarjetas de red
|
|
#@author Ramon Gomez, ETSII Universidad de Sevilla
|
|
#@date 2011-06-17
|
|
#*/ ##
|
|
function ogGetIpAddress ()
|
|
{
|
|
local IP
|
|
if [ "$*" == "help" ]; then
|
|
ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 192.168.0.10"
|
|
return
|
|
fi
|
|
if [ -n "$IPV4ADDR" ]; then
|
|
IP="$IPV4ADDR"
|
|
else
|
|
# Obtener direcciones IP.
|
|
if [ -n "$DEVICE" ]; then
|
|
IP=$(ip -o address show up dev "$DEVICE" 2>/dev/null | awk '{if ($3~/inet$/) {printf ("%s ", $4)}}')
|
|
else
|
|
IP=$(ip -o address show up | awk '$2!~/lo/ {if ($3~/inet$/) {printf ("%s ", $4)}}')
|
|
fi
|
|
fi
|
|
# Mostrar solo la primera.
|
|
echo "${IP%%/*}" # (comentario para Doxygen) */
|
|
}
|
|
|
|
|
|
#/**
|
|
# ogGetMacAddress
|
|
#@brief Muestra la dirección Ethernet del cliente.
|
|
#@return str_ether - Dirección Ethernet
|
|
#@version 0.10 - Integración en OpenGnSys 0.10
|
|
#@author Ramon Gomez, ETSII Universidad de Sevilla
|
|
#@date 2010-02-11
|
|
#@version 1.0.2 - Soporte para varias tarjetas de red
|
|
#@author Ramon Gomez, ETSII Universidad de Sevilla
|
|
#@date 2011-06-17
|
|
#*/ ##
|
|
function ogGetMacAddress ()
|
|
{
|
|
local MAC
|
|
if [ "$*" == "help" ]; then
|
|
ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 00:11:22:33:44:55"
|
|
return
|
|
fi
|
|
# Obtener direcciones Ethernet.
|
|
if [ -n "$DEVICE" ]; then
|
|
MAC=$(ip -o link show up dev "$DEVICE" 2>/dev/null | awk '{sub (/.*\\/, ""); if ($1~/ether/) printf ("%s ", toupper($2));}')
|
|
else
|
|
MAC=$(ip -o link show up | awk '$2!~/lo/ {sub (/.*\\/, ""); if ($1~/ether/) printf ("%s ", toupper($2));}')
|
|
fi
|
|
# Mostrar sólo la primera.
|
|
echo ${MAC%% *}
|
|
}
|
|
|
|
|
|
#/**
|
|
# ogGetNetInterface
|
|
#@brief Muestra la interfaz de red del sistema
|
|
#@return str_interface - interfaz de red
|
|
#@version 1.0 - Integración OpenGnSys 0.10 Opengnsys 0.10-testing
|
|
#@note Usa las variables utilizadas por el initrd "/etc/net-ethX.conf
|
|
#@author Antonio J. Doblas Viso. Universidad de Malaga.
|
|
#@date 2011-02-24
|
|
#*/ ##
|
|
function ogGetNetInterface ()
|
|
{
|
|
if [ "$*" == "help" ]; then
|
|
ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => eth0"
|
|
return
|
|
fi
|
|
[ -n "$DEVICE" ] && echo "$DEVICE"
|
|
}
|
|
|
|
|
|
#/**
|
|
# ogGetRepoIp
|
|
#@brief Muestra la dirección IP del repositorio de datos.
|
|
#@return str_ip - Dirección IP
|
|
#@version 0.10 - Integración en OpenGnSys 0.10
|
|
#@author Ramon Gomez, ETSII Universidad de Sevilla
|
|
#@date 2011-01-13
|
|
#@version 1.0 - Integración OpenGnSys 0.10 Opengnsys 0.10-testing
|
|
#@note Comprobacion segun protocolo de conexion al Repo
|
|
#@author Antonio J. Doblas Viso. Universidad de Malaga.
|
|
#@date 2011-02-24
|
|
#@version 1.0.6 - Obtener datos del punto de montaje, evitando fallo si $ogprotocol está vacía.
|
|
#@author Ramon Gomez, ETSII Universidad de Sevilla
|
|
#@date 2014-08-27
|
|
#*/ ##
|
|
function ogGetRepoIp ()
|
|
{
|
|
# Variables locales.
|
|
local SOURCE FSTYPE
|
|
|
|
# Mostrar ayuda.
|
|
if [ "$*" == "help" ]; then
|
|
ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 192.168.0.2"
|
|
return
|
|
fi
|
|
|
|
# Obtener direcciones IP, según el tipo de montaje.
|
|
eval $(findmnt -P -o SOURCE,FSTYPE $OGIMG)
|
|
case "$FSTYPE" in
|
|
nfs) echo "$SOURCE" | cut -f1 -d: ;;
|
|
cifs) echo "$SOURCE" | cut -f3 -d/ ;;
|
|
esac
|
|
}
|
|
|
|
|
|
#/**
|
|
# ogGetServerIp
|
|
#@brief Muestra la dirección IP del Servidor de OpenGnSys.
|
|
#@return str_ip - Dirección IP
|
|
#@version 0.10 - Integración en OpenGnSys 0.10
|
|
#@author Ramon Gomez, ETSII Universidad de Sevilla
|
|
#@date 2011-01-13
|
|
#@version 1.0 - Integración OpenGnSys 0.10 Opengnsys 0.10-testing
|
|
#@note Comprobacion segun protocolo de conexion al Repo
|
|
#@author Antonio J. Doblas Viso. Universidad de Malaga.
|
|
#@date 2011-02-24
|
|
#@version 1.0.6 - Obtener datos del punto de montaje, evitando fallo si $ogprotocol está vacía.
|
|
#@author Ramon Gomez, ETSII Universidad de Sevilla
|
|
#@date 2014-08-27
|
|
#*/ ##
|
|
function ogGetServerIp ()
|
|
{
|
|
# Variables locales.
|
|
local SOURCE FSTYPE
|
|
|
|
# Mostrar ayuda.
|
|
if [ "$*" == "help" ]; then
|
|
ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 192.168.0.2"
|
|
return
|
|
fi
|
|
|
|
# Obtener direcciones IP, según el tipo de montaje.
|
|
eval $(findmnt -P -o SOURCE,FSTYPE $OPENGNSYS)
|
|
case "$FSTYPE" in
|
|
nfs) echo "$SOURCE" | cut -f1 -d: ;;
|
|
cifs) echo "$SOURCE" | cut -f3 -d/ ;;
|
|
esac
|
|
}
|
|
|
|
|
|
#/**
|
|
# ogMakeGroupDir [ str_repo ]
|
|
#@brief Crea el directorio para el grupo del cliente.
|
|
#@param str_repo repositorio de imágenes (opcional)
|
|
#@return (nada)
|
|
#@note repo = { REPO, CACHE } REPO por defecto
|
|
#@exception OG_ERR_FORMAT formato incorrecto.
|
|
#@version 1.0.5 - Primera versión para OpenGnSys.
|
|
#@author Ramon Gomez, ETSII Universidad de Sevilla
|
|
#@date 2013-09-26
|
|
#*/
|
|
function ogMakeGroupDir ()
|
|
{
|
|
local REPO DIR GROUP
|
|
if [ "$*" == "help" ]; then
|
|
ogHelp "$FUNCNAME" "$FUNCNAME str_repo" \
|
|
"$FUNCNAME" "$FUNCNAME REPO"
|
|
return
|
|
fi
|
|
# Error si se recibe más de 1 parámetro.
|
|
case $# in
|
|
0) REPO="REPO" ;;
|
|
1) REPO="$1" ;;
|
|
*) ogRaiseError $OG_ERR_FORMAT "$*"
|
|
return $? ;;
|
|
esac
|
|
# Comprobar tipo de repositorio.
|
|
DIR=$(ogGetPath "$REPO" / 2>/dev/null)
|
|
[ -n "$DIR" ] || ogRaiseError $OG_ERR_FORMAT "$1"
|
|
GROUP="$(ogGetGroupName)"
|
|
if [ -n "$GROUP" ]; then
|
|
mkdir -p "$DIR/groups/$GROUP" 2>/dev/null
|
|
fi
|
|
}
|
|
|