| 1 | #!/bin/bash | 
|---|
| 2 | #/** | 
|---|
| 3 | #@file     Net.lib | 
|---|
| 4 | #@brief    Librería o clase Net | 
|---|
| 5 | #@class    Net | 
|---|
| 6 | #@brief    Funciones básicas de red. | 
|---|
| 7 | #@version  1.0.2 | 
|---|
| 8 | #@warning  License: GNU GPLv3+ | 
|---|
| 9 | #*/ | 
|---|
| 10 |  | 
|---|
| 11 |  | 
|---|
| 12 | #/** | 
|---|
| 13 | #         ogGetGroupDir [ str_repo ] | 
|---|
| 14 | #@brief   Devuelve el cmaino del directorio para el grupo del cliente. | 
|---|
| 15 | #@param   str_repo     repositorio de imágenes (opcional) | 
|---|
| 16 | #@return  path_dir  -  Camino al directorio del grupo. | 
|---|
| 17 | #@note    repo = { REPO, CACHE }     REPO por defecto | 
|---|
| 18 | #@exception OG_ERR_FORMAT    formato incorrecto. | 
|---|
| 19 | #@version 1.0.2 - Primera versión para OpenGnSys. | 
|---|
| 20 | #@author  Ramon Gomez, ETSII Universidad de Sevilla | 
|---|
| 21 | #@date    2011-10-03 | 
|---|
| 22 | #*/ | 
|---|
| 23 | function ogGetGroupDir () | 
|---|
| 24 | { | 
|---|
| 25 | local REPO DIR GROUP | 
|---|
| 26 | if [ "$*" == "help" ]; then | 
|---|
| 27 | ogHelp "$FUNCNAME" "$FUNCNAME str_repo" \ | 
|---|
| 28 | "$FUNCNAME REPO  ==>  /opt/opengnsys/images/groups/Grupo1" | 
|---|
| 29 | return | 
|---|
| 30 | fi | 
|---|
| 31 | # Error si se recibe más de 1 parámetro. | 
|---|
| 32 | case $# in | 
|---|
| 33 | 0)  REPO="REPO" ;; | 
|---|
| 34 | 1)  REPO="$1" ;; | 
|---|
| 35 | *)  ogRaiseError $OG_ERR_FORMAT "$*" | 
|---|
| 36 | return $? ;; | 
|---|
| 37 | esac | 
|---|
| 38 |  | 
|---|
| 39 | GROUP="$(ogGetGroupName)" | 
|---|
| 40 | if [ -n "$GROUP" ]; then | 
|---|
| 41 | DIR=$(ogGetPath "$REPO" "/groups/$GROUP" 2>/dev/null) | 
|---|
| 42 | [ -d "$DIR" ] && echo "$DIR" | 
|---|
| 43 | fi | 
|---|
| 44 | } | 
|---|
| 45 |  | 
|---|
| 46 |  | 
|---|
| 47 | #/** | 
|---|
| 48 | #         ogGetGroupName | 
|---|
| 49 | #@brief   Devuelve el nombre del grupo al que pertenece el cliente. | 
|---|
| 50 | #@return  str_group - Nombre de grupo. | 
|---|
| 51 | #@version 1.0.2 - Primera versión para OpenGnSys. | 
|---|
| 52 | #@author  Ramon Gomez, ETSII Universidad de Sevilla | 
|---|
| 53 | #@date    2011-10-03 | 
|---|
| 54 | #*/ | 
|---|
| 55 | function ogGetGroupName () | 
|---|
| 56 | { | 
|---|
| 57 | if [ "$*" == "help" ]; then | 
|---|
| 58 | ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME  =>  Grupo1" | 
|---|
| 59 | return | 
|---|
| 60 | fi | 
|---|
| 61 | [ -n "$group" ] && echo "$group" | 
|---|
| 62 | } | 
|---|
| 63 |  | 
|---|
| 64 |  | 
|---|
| 65 | #/** | 
|---|
| 66 | #         ogGetHostname | 
|---|
| 67 | #@brief   Muestra el nombre del cliente. | 
|---|
| 68 | #@return  str_host - nombre de máquina | 
|---|
| 69 | #@version 0.10 - Integración en OpenGnSys 0.10 | 
|---|
| 70 | #@author  Ramon Gomez, ETSII Universidad de Sevilla | 
|---|
| 71 | #@date    2010-02-11 | 
|---|
| 72 | #*/ ## | 
|---|
| 73 | function ogGetHostname () | 
|---|
| 74 | { | 
|---|
| 75 | local HOST | 
|---|
| 76 | if [ "$*" == "help" ]; then | 
|---|
| 77 | ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME  =>  pc1" | 
|---|
| 78 | return | 
|---|
| 79 | fi | 
|---|
| 80 | # Tomar nombre de la variable HOSTNAME | 
|---|
| 81 | HOST="$HOSTNAME" | 
|---|
| 82 | # Si no, tomar del DHCP, opción host-name       /* (comentario para Doxygen) | 
|---|
| 83 | [ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} | 
|---|
| 84 | END {print host} | 
|---|
| 85 | ' /var/lib/dhcp3/dhclient.leases) | 
|---|
| 86 | # Si no, leer el parámetro del kernel hostname  (comentario para Doxygen) */ | 
|---|
| 87 | [ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} | 
|---|
| 88 | $1~/hostname/ {print $2}' /proc/cmdline) | 
|---|
| 89 | [ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" | 
|---|
| 90 | [ -n "$HOST" ] && echo $HOST | 
|---|
| 91 | } | 
|---|
| 92 |  | 
|---|
| 93 |  | 
|---|
| 94 | #/** | 
|---|
| 95 | #         ogGetIpAddress | 
|---|
| 96 | #@brief   Muestra la dirección IP del sistema | 
|---|
| 97 | #@return  str_ip - Dirección IP | 
|---|
| 98 | #@version 0.10 - Integración en OpenGnSys 0.10 | 
|---|
| 99 | #@author  Ramon Gomez, ETSII Universidad de Sevilla | 
|---|
| 100 | #@date    2010-02-11 | 
|---|
| 101 | #@version 1.0 - Integración OpenGnSys 0.10 Opengnsys 0.10-testing | 
|---|
| 102 | #@note    Usa las variables utilizadas por el initrd "/etc/net-ethX.conf | 
|---|
| 103 | #@author  Antonio J. Doblas Viso. Universidad de Malaga. | 
|---|
| 104 | #@date    2011-02-24 | 
|---|
| 105 | #@version 1.0.2 - Soporte para varias tarjetas de red | 
|---|
| 106 | #@author  Ramon Gomez, ETSII Universidad de Sevilla | 
|---|
| 107 | #@date    2011-06-17 | 
|---|
| 108 | #*/ ## | 
|---|
| 109 | function ogGetIpAddress () | 
|---|
| 110 | { | 
|---|
| 111 | local IP | 
|---|
| 112 | if [ "$*" == "help" ]; then | 
|---|
| 113 | ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME  =>  192.168.0.10" | 
|---|
| 114 | return | 
|---|
| 115 | fi | 
|---|
| 116 | if [ -n "$IPV4ADDR" ]; then | 
|---|
| 117 | IP="$IPV4ADDR" | 
|---|
| 118 | else | 
|---|
| 119 | # Obtener direcciones IP. | 
|---|
| 120 | if [ -n "$DEVICE" ]; then | 
|---|
| 121 | IP=$(ip -o address show up dev "$DEVICE" 2>/dev/null | awk '{if ($3~/inet$/) {printf ("%s ", $4)}}') | 
|---|
| 122 | else | 
|---|
| 123 | IP=$(ip -o address show up | awk '$2!~/lo/ {if ($3~/inet$/) {printf ("%s ", $4)}}') | 
|---|
| 124 | fi | 
|---|
| 125 | fi | 
|---|
| 126 | # Mostrar solo la primera. | 
|---|
| 127 | echo "${IP%%/*}"       # (comentario para Doxygen) */ | 
|---|
| 128 | } | 
|---|
| 129 |  | 
|---|
| 130 |  | 
|---|
| 131 | #/** | 
|---|
| 132 | #         ogGetMacAddress | 
|---|
| 133 | #@brief   Muestra la dirección Ethernet del cliente. | 
|---|
| 134 | #@return  str_ether - Dirección Ethernet | 
|---|
| 135 | #@version 0.10 - Integración en OpenGnSys 0.10 | 
|---|
| 136 | #@author  Ramon Gomez, ETSII Universidad de Sevilla | 
|---|
| 137 | #@date    2010-02-11 | 
|---|
| 138 | #@version 1.0.2 - Soporte para varias tarjetas de red | 
|---|
| 139 | #@author  Ramon Gomez, ETSII Universidad de Sevilla | 
|---|
| 140 | #@date    2011-06-17 | 
|---|
| 141 | #*/ ## | 
|---|
| 142 | function ogGetMacAddress () | 
|---|
| 143 | { | 
|---|
| 144 | local MAC | 
|---|
| 145 | if [ "$*" == "help" ]; then | 
|---|
| 146 | ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME  =>  00:11:22:33:44:55" | 
|---|
| 147 | return | 
|---|
| 148 | fi | 
|---|
| 149 | # Obtener direcciones Ethernet. | 
|---|
| 150 | if [ -n "$DEVICE" ]; then | 
|---|
| 151 | MAC=$(ip -o link show up dev "$DEVICE" 2>/dev/null | awk '{sub (/.*\\/, ""); if ($1~/ether/) printf ("%s ", toupper($2));}') | 
|---|
| 152 | else | 
|---|
| 153 | MAC=$(ip -o link show up | awk '$2!~/lo/ {sub (/.*\\/, ""); if ($1~/ether/) printf ("%s ", toupper($2));}') | 
|---|
| 154 | fi | 
|---|
| 155 | # Mostrar sólo la primera. | 
|---|
| 156 | echo ${MAC%% *} | 
|---|
| 157 | } | 
|---|
| 158 |  | 
|---|
| 159 |  | 
|---|
| 160 | #/** | 
|---|
| 161 | #         ogGetNetInterface | 
|---|
| 162 | #@brief   Muestra la interfaz de red del sistema | 
|---|
| 163 | #@return  str_interface - interfaz de red | 
|---|
| 164 | #@version 1.0 - Integración OpenGnSys 0.10 Opengnsys 0.10-testing | 
|---|
| 165 | #@note    Usa las variables utilizadas por el initrd "/etc/net-ethX.conf | 
|---|
| 166 | #@author  Antonio J. Doblas Viso. Universidad de Malaga. | 
|---|
| 167 | #@date    2011-02-24 | 
|---|
| 168 | #*/ ## | 
|---|
| 169 | function ogGetNetInterface () | 
|---|
| 170 | { | 
|---|
| 171 | if [ "$*" == "help" ]; then | 
|---|
| 172 | ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME  =>  eth0" | 
|---|
| 173 | return | 
|---|
| 174 | fi | 
|---|
| 175 | [ -n "$DEVICE" ] && echo "$DEVICE" | 
|---|
| 176 | } | 
|---|
| 177 |  | 
|---|
| 178 |  | 
|---|
| 179 | #/** | 
|---|
| 180 | #         ogGetRepoIp | 
|---|
| 181 | #@brief   Muestra la dirección IP del repositorio de datos. | 
|---|
| 182 | #@return  str_ip - Dirección IP | 
|---|
| 183 | #@version 0.10 - Integración en OpenGnSys 0.10 | 
|---|
| 184 | #@author  Ramon Gomez, ETSII Universidad de Sevilla | 
|---|
| 185 | #@date    2011-01-13 | 
|---|
| 186 | #@version 1.0 - Integración OpenGnSys 0.10 Opengnsys 0.10-testing | 
|---|
| 187 | #@note   Comprobacion segun protocolo de conexion al Repo | 
|---|
| 188 | #@author  Antonio J. Doblas Viso. Universidad de Malaga. | 
|---|
| 189 | #@date    2011-02-24 | 
|---|
| 190 | #*/ ## | 
|---|
| 191 | function ogGetRepoIp () | 
|---|
| 192 | { | 
|---|
| 193 | if [ "$*" == "help" ]; then | 
|---|
| 194 | ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME  =>  192.168.0.2" | 
|---|
| 195 | return | 
|---|
| 196 | fi | 
|---|
| 197 | # Obtener direcciones IP, segun el protocolo de montaje | 
|---|
| 198 | if [ -n "$OGIMG" ]; then | 
|---|
| 199 | case "$ogprotocol" in | 
|---|
| 200 | nfs)  mount | grep " on $OGIMG " | cut -f1 -d: ;; | 
|---|
| 201 | smb)  mount | grep " on $OGIMG " | cut -f3 -d/ ;; | 
|---|
| 202 | esac | 
|---|
| 203 | fi | 
|---|
| 204 | } | 
|---|
| 205 |  | 
|---|
| 206 |  | 
|---|
| 207 | #/** | 
|---|
| 208 | #         ogGetServerIp | 
|---|
| 209 | #@brief   Muestra la dirección IP del Servidor de OpenGnSys. | 
|---|
| 210 | #@return  str_ip - Dirección IP | 
|---|
| 211 | #@version 0.10 - Integración en OpenGnSys 0.10 | 
|---|
| 212 | #@author  Ramon Gomez, ETSII Universidad de Sevilla | 
|---|
| 213 | #@date    2011-01-13 | 
|---|
| 214 | #@version 1.0 - Integración OpenGnSys 0.10 Opengnsys 0.10-testing | 
|---|
| 215 | #@note   Comprobacion segun protocolo de conexion al Repo | 
|---|
| 216 | #@author  Antonio J. Doblas Viso. Universidad de Malaga. | 
|---|
| 217 | #@date    2011-02-24 | 
|---|
| 218 | #*/ ## | 
|---|
| 219 | function ogGetServerIp () | 
|---|
| 220 | { | 
|---|
| 221 | if [ "$*" == "help" ]; then | 
|---|
| 222 | ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME  =>  192.168.0.2" | 
|---|
| 223 | return | 
|---|
| 224 | fi | 
|---|
| 225 | # Obtener direcciones IP. | 
|---|
| 226 | if [ -n "$OPENGNSYS" ]; then | 
|---|
| 227 | case "$ogprotocol" in | 
|---|
| 228 | nfs)  mount | grep " on $OPENGNSYS " | cut -f1 -d: ;; | 
|---|
| 229 | smb)  mount | grep " on $OPENGNSYS " | cut -f3 -d/ ;; | 
|---|
| 230 | esac | 
|---|
| 231 | fi | 
|---|
| 232 | } | 
|---|
| 233 |  | 
|---|
| 234 |  | 
|---|
| 235 | #/** | 
|---|
| 236 | #         ogMakeGroupDir [ str_repo ] | 
|---|
| 237 | #@brief   Crea el directorio para el grupo del cliente. | 
|---|
| 238 | #@param   str_repo     repositorio de imágenes (opcional) | 
|---|
| 239 | #@return  (nada) | 
|---|
| 240 | #@note    repo = { REPO, CACHE }     REPO por defecto | 
|---|
| 241 | #@exception OG_ERR_FORMAT    formato incorrecto. | 
|---|
| 242 | #@version 1.0.5 - Primera versión para OpenGnSys. | 
|---|
| 243 | #@author  Ramon Gomez, ETSII Universidad de Sevilla | 
|---|
| 244 | #@date    2013-09-26 | 
|---|
| 245 | #*/ | 
|---|
| 246 | function ogMakeGroupDir () | 
|---|
| 247 | { | 
|---|
| 248 | local REPO DIR GROUP | 
|---|
| 249 | if [ "$*" == "help" ]; then | 
|---|
| 250 | ogHelp "$FUNCNAME" "$FUNCNAME str_repo" \ | 
|---|
| 251 | "$FUNCNAME" "$FUNCNAME REPO" | 
|---|
| 252 | return | 
|---|
| 253 | fi | 
|---|
| 254 | # Error si se recibe más de 1 parámetro. | 
|---|
| 255 | case $# in | 
|---|
| 256 | 0)  REPO="REPO" ;; | 
|---|
| 257 | 1)  REPO="$1" ;; | 
|---|
| 258 | *)  ogRaiseError $OG_ERR_FORMAT "$*" | 
|---|
| 259 | return $? ;; | 
|---|
| 260 | esac | 
|---|
| 261 | # Comprobar tipo de repositorio. | 
|---|
| 262 | DIR=$(ogGetPath "$REPO" / 2>/dev/null) | 
|---|
| 263 | [ -n "$DIR" ] || ogRaiseError $OG_ERR_FORMAT "$1" | 
|---|
| 264 | GROUP="$(ogGetGroupName)" | 
|---|
| 265 | if [ -n "$GROUP" ]; then | 
|---|
| 266 | mkdir -p "$DIR/groups/$GROUP" 2>/dev/null | 
|---|
| 267 | fi | 
|---|
| 268 | } | 
|---|
| 269 |  | 
|---|