#!/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 }