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.6 |
---|
8 | #@warning License: GNU GPLv3+ |
---|
9 | #*/ |
---|
10 | |
---|
11 | |
---|
12 | #/** |
---|
13 | # ogChangeRepo IPREPO [ OgUnit ] |
---|
14 | #@brief Cambia el repositorio para el recurso remoto images. |
---|
15 | #@param 1 Ip Repositorio |
---|
16 | #@param 2 Abreviatura Unidad Organizativa |
---|
17 | #@return Cambio recurso remoto en OGIMG. |
---|
18 | #@version 1.1 - Primera versión para OpenGnSys. |
---|
19 | #@author Irina Gomez, ETSII Universidad de Sevilla |
---|
20 | #@date 2015-06-16 |
---|
21 | #*/ |
---|
22 | function ogChangeRepo () |
---|
23 | { |
---|
24 | local SRCIMG NEWREPO REPO OGUNIT |
---|
25 | |
---|
26 | if [ "$*" == "help" ]; then |
---|
27 | ogHelp "$FUNCNAME" "$FUNCNAME IPREPO [ OgUnit ]" \ |
---|
28 | "$FUNCNAME 10.1.120.3" \ |
---|
29 | "$FUNCNAME 10.1.120.3 cdc" |
---|
30 | return |
---|
31 | fi |
---|
32 | |
---|
33 | |
---|
34 | if [ $# -lt 1 ]; then |
---|
35 | ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME IPREPO [ OgUnit ]" |
---|
36 | return $? |
---|
37 | fi |
---|
38 | |
---|
39 | |
---|
40 | # Si REPO tomamos el repositorio y la unidad organizativa actual |
---|
41 | REPO=$(ogGetRepoIp) |
---|
42 | OGUNIT="$(df | awk -F " " '/ogimages/ {sub("//.*/ogimages","",$1); sub("/","",$1); print $1}')" |
---|
43 | |
---|
44 | # Parametros de entrada. Si $1 = "REPO" dejo el repositorio actual |
---|
45 | [ "${1^^}" == "REPO" ] && NEWREPO="$REPO" || NEWREPO="${1}" |
---|
46 | |
---|
47 | # Si $1 y $2 son el repositorio y la OU actual me salgo |
---|
48 | [ "$NEWREPO" == "$REPO" ] && [ "$2" == "$OGUNIT" ] && return 0 |
---|
49 | |
---|
50 | source /scripts/functions |
---|
51 | source /scripts/ogfunctions |
---|
52 | umount $OGIMG |
---|
53 | [ "$2" == "" ] && SRCIMG="ogimages" || SRCIMG="ogimages/$2" |
---|
54 | eval $(grep "OPTIONS=" /scripts/ogfunctions) |
---|
55 | |
---|
56 | # Opciones de montaje: lectura o escritura |
---|
57 | mount |grep "ogimages.*rw," &>/dev/null && RW=",rw" || RW=",ro" |
---|
58 | |
---|
59 | ogEcho session log "$MSG_HELP_ogChangeRepo $NEWREPO ${2%/}" |
---|
60 | ogConnect $NEWREPO $ogprotocol $SRCIMG $OGIMG $RW |
---|
61 | |
---|
62 | # Si da error volvemos a montar el inicial |
---|
63 | if [ $? -ne 0 ]; then |
---|
64 | ogConnect $REPO $ogprotocol $SRCIMG $OGIMG $RW |
---|
65 | ogRaiseError session $OG_ERR_REPO "$NEWREPO" |
---|
66 | return $? |
---|
67 | fi |
---|
68 | |
---|
69 | } |
---|
70 | |
---|
71 | |
---|
72 | #/** |
---|
73 | # ogGetGroupDir [ str_repo ] |
---|
74 | #@brief Devuelve el camino del directorio para el grupo del cliente. |
---|
75 | #@param str_repo repositorio de imágenes (opcional) |
---|
76 | #@return path_dir - Camino al directorio del grupo. |
---|
77 | #@note repo = { REPO, CACHE } REPO por defecto |
---|
78 | #@exception OG_ERR_FORMAT formato incorrecto. |
---|
79 | #@version 1.0.2 - Primera versión para OpenGnSys. |
---|
80 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
81 | #@date 2011-10-03 |
---|
82 | #*/ |
---|
83 | function ogGetGroupDir () |
---|
84 | { |
---|
85 | local REPO DIR GROUP |
---|
86 | if [ "$*" == "help" ]; then |
---|
87 | ogHelp "$FUNCNAME" "$FUNCNAME str_repo" \ |
---|
88 | "$FUNCNAME REPO ==> /opt/opengnsys/images/groups/Grupo1" |
---|
89 | return |
---|
90 | fi |
---|
91 | # Error si se recibe más de 1 parámetro. |
---|
92 | case $# in |
---|
93 | 0) REPO="REPO" ;; |
---|
94 | 1) REPO="$1" ;; |
---|
95 | *) ogRaiseError $OG_ERR_FORMAT "$*" |
---|
96 | return $? ;; |
---|
97 | esac |
---|
98 | |
---|
99 | GROUP="$(ogGetGroupName)" |
---|
100 | if [ -n "$GROUP" ]; then |
---|
101 | DIR=$(ogGetPath "$REPO" "/groups/$GROUP" 2>/dev/null) |
---|
102 | [ -d "$DIR" ] && echo "$DIR" |
---|
103 | fi |
---|
104 | # Para que no haya error al fallar la condición anterior |
---|
105 | return 0 |
---|
106 | } |
---|
107 | |
---|
108 | |
---|
109 | #/** |
---|
110 | # ogGetGroupName |
---|
111 | #@brief Devuelve el nombre del grupo al que pertenece el cliente. |
---|
112 | #@return str_group - Nombre de grupo. |
---|
113 | #@version 1.0.2 - Primera versión para OpenGnSys. |
---|
114 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
115 | #@date 2011-10-03 |
---|
116 | #*/ |
---|
117 | function ogGetGroupName () |
---|
118 | { |
---|
119 | if [ "$*" == "help" ]; then |
---|
120 | ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => Grupo1" |
---|
121 | return |
---|
122 | fi |
---|
123 | [ -n "$group" ] && echo "$group" |
---|
124 | } |
---|
125 | |
---|
126 | |
---|
127 | #/** |
---|
128 | # ogGetHostname |
---|
129 | #@brief Muestra el nombre del cliente. |
---|
130 | #@return str_host - nombre de máquina |
---|
131 | #@version 0.10 - Integración en OpenGnSys 0.10 |
---|
132 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
133 | #@date 2010-02-11 |
---|
134 | #*/ ## |
---|
135 | function ogGetHostname () |
---|
136 | { |
---|
137 | local HOST |
---|
138 | if [ "$*" == "help" ]; then |
---|
139 | ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => pc1" |
---|
140 | return |
---|
141 | fi |
---|
142 | # Tomar nombre de la variable HOSTNAME |
---|
143 | HOST="$HOSTNAME" |
---|
144 | # Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) |
---|
145 | [ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} |
---|
146 | END {print host} |
---|
147 | ' /var/lib/dhcp3/dhclient.leases) |
---|
148 | # Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ |
---|
149 | [ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} |
---|
150 | $1~/hostname/ {print $2}' /proc/cmdline) |
---|
151 | [ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" |
---|
152 | [ -n "$HOST" ] && echo $HOST |
---|
153 | } |
---|
154 | |
---|
155 | |
---|
156 | #/** |
---|
157 | # ogGetIpAddress |
---|
158 | #@brief Muestra la dirección IP del sistema |
---|
159 | #@return str_ip - Dirección IP |
---|
160 | #@version 0.10 - Integración en OpenGnSys 0.10 |
---|
161 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
162 | #@date 2010-02-11 |
---|
163 | #@version 1.0 - Integración OpenGnSys 0.10 Opengnsys 0.10-testing |
---|
164 | #@note Usa las variables utilizadas por el initrd "/etc/net-ethX.conf |
---|
165 | #@author Antonio J. Doblas Viso. Universidad de Malaga. |
---|
166 | #@date 2011-02-24 |
---|
167 | #@version 1.0.2 - Soporte para varias tarjetas de red |
---|
168 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
169 | #@date 2011-06-17 |
---|
170 | #*/ ## |
---|
171 | function ogGetIpAddress () |
---|
172 | { |
---|
173 | local IP |
---|
174 | if [ "$*" == "help" ]; then |
---|
175 | ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 192.168.0.10" |
---|
176 | return |
---|
177 | fi |
---|
178 | if [ -n "$IPV4ADDR" ]; then |
---|
179 | IP="$IPV4ADDR" |
---|
180 | else |
---|
181 | # Obtener direcciones IP. |
---|
182 | if [ -n "$DEVICE" ]; then |
---|
183 | IP=$(ip -o address show up dev "$DEVICE" 2>/dev/null | awk '{if ($3~/inet$/) {printf ("%s ", $4)}}') |
---|
184 | else |
---|
185 | IP=$(ip -o address show up | awk '$2!~/lo/ {if ($3~/inet$/) {printf ("%s ", $4)}}') |
---|
186 | fi |
---|
187 | fi |
---|
188 | # Mostrar solo la primera. |
---|
189 | echo "${IP%%/*}" # (comentario para Doxygen) */ |
---|
190 | } |
---|
191 | |
---|
192 | |
---|
193 | #/** |
---|
194 | # ogGetMacAddress |
---|
195 | #@brief Muestra la dirección Ethernet del cliente. |
---|
196 | #@return str_ether - Dirección Ethernet |
---|
197 | #@version 0.10 - Integración en OpenGnSys 0.10 |
---|
198 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
199 | #@date 2010-02-11 |
---|
200 | #@version 1.0.2 - Soporte para varias tarjetas de red |
---|
201 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
202 | #@date 2011-06-17 |
---|
203 | #*/ ## |
---|
204 | function ogGetMacAddress () |
---|
205 | { |
---|
206 | local MAC |
---|
207 | if [ "$*" == "help" ]; then |
---|
208 | ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 00:11:22:33:44:55" |
---|
209 | return |
---|
210 | fi |
---|
211 | # Obtener direcciones Ethernet. |
---|
212 | if [ -n "$DEVICE" ]; then |
---|
213 | MAC=$(ip -o link show up dev "$DEVICE" 2>/dev/null | awk '{sub (/.*\\/, ""); if ($1~/ether/) printf ("%s ", toupper($2));}') |
---|
214 | else |
---|
215 | MAC=$(ip -o link show up | awk '$2!~/lo/ {sub (/.*\\/, ""); if ($1~/ether/) printf ("%s ", toupper($2));}') |
---|
216 | fi |
---|
217 | # Mostrar sólo la primera. |
---|
218 | echo ${MAC%% *} |
---|
219 | } |
---|
220 | |
---|
221 | |
---|
222 | #/** |
---|
223 | # ogGetNetInterface |
---|
224 | #@brief Muestra la interfaz de red del sistema |
---|
225 | #@return str_interface - interfaz de red |
---|
226 | #@version 1.0 - Integración OpenGnSys 0.10 Opengnsys 0.10-testing |
---|
227 | #@note Usa las variables utilizadas por el initrd "/etc/net-ethX.conf |
---|
228 | #@author Antonio J. Doblas Viso. Universidad de Malaga. |
---|
229 | #@date 2011-02-24 |
---|
230 | #*/ ## |
---|
231 | function ogGetNetInterface () |
---|
232 | { |
---|
233 | if [ "$*" == "help" ]; then |
---|
234 | ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => eth0" |
---|
235 | return |
---|
236 | fi |
---|
237 | [ -n "$DEVICE" ] && echo "$DEVICE" |
---|
238 | } |
---|
239 | |
---|
240 | |
---|
241 | #/** |
---|
242 | # ogGetRepoIp |
---|
243 | #@brief Muestra la dirección IP del repositorio de datos. |
---|
244 | #@return str_ip - Dirección IP |
---|
245 | #@version 0.10 - Integración en OpenGnSys 0.10 |
---|
246 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
247 | #@date 2011-01-13 |
---|
248 | #@version 1.0 - Integración OpenGnSys 0.10 Opengnsys 0.10-testing |
---|
249 | #@note Comprobacion segun protocolo de conexion al Repo |
---|
250 | #@author Antonio J. Doblas Viso. Universidad de Malaga. |
---|
251 | #@date 2011-02-24 |
---|
252 | #@version 1.0.6 - Obtener datos del punto de montaje, evitando fallo si $ogprotocol está vacía. |
---|
253 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
254 | #@date 2014-08-27 |
---|
255 | #*/ ## |
---|
256 | function ogGetRepoIp () |
---|
257 | { |
---|
258 | # Variables locales. |
---|
259 | local SOURCE FSTYPE |
---|
260 | |
---|
261 | # Mostrar ayuda. |
---|
262 | if [ "$*" == "help" ]; then |
---|
263 | ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 192.168.0.2" |
---|
264 | return |
---|
265 | fi |
---|
266 | |
---|
267 | # Obtener direcciones IP, según el tipo de montaje. |
---|
268 | eval $(findmnt -P -o SOURCE,FSTYPE $OGIMG) |
---|
269 | case "$FSTYPE" in |
---|
270 | nfs) echo "$SOURCE" | cut -f1 -d: ;; |
---|
271 | cifs) echo "$SOURCE" | cut -f3 -d/ ;; |
---|
272 | esac |
---|
273 | } |
---|
274 | |
---|
275 | |
---|
276 | #/** |
---|
277 | # ogGetServerIp |
---|
278 | #@brief Muestra la dirección IP del Servidor de OpenGnSys. |
---|
279 | #@return str_ip - Dirección IP |
---|
280 | #@version 0.10 - Integración en OpenGnSys 0.10 |
---|
281 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
282 | #@date 2011-01-13 |
---|
283 | #@version 1.0 - Integración OpenGnSys 0.10 Opengnsys 0.10-testing |
---|
284 | #@note Comprobacion segun protocolo de conexion al Repo |
---|
285 | #@author Antonio J. Doblas Viso. Universidad de Malaga. |
---|
286 | #@date 2011-02-24 |
---|
287 | #@version 1.0.6 - Obtener datos del punto de montaje, evitando fallo si $ogprotocol está vacía. |
---|
288 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
289 | #@date 2014-08-27 |
---|
290 | #*/ ## |
---|
291 | function ogGetServerIp () |
---|
292 | { |
---|
293 | # Variables locales. |
---|
294 | local SOURCE FSTYPE |
---|
295 | |
---|
296 | # Mostrar ayuda. |
---|
297 | if [ "$*" == "help" ]; then |
---|
298 | ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 192.168.0.2" |
---|
299 | return |
---|
300 | fi |
---|
301 | |
---|
302 | # Obtener direcciones IP, según el tipo de montaje. |
---|
303 | eval $(findmnt -P -o SOURCE,FSTYPE $OPENGNSYS) |
---|
304 | case "$FSTYPE" in |
---|
305 | nfs) echo "$SOURCE" | cut -f1 -d: ;; |
---|
306 | cifs) echo "$SOURCE" | cut -f3 -d/ ;; |
---|
307 | esac |
---|
308 | } |
---|
309 | |
---|
310 | |
---|
311 | #/** |
---|
312 | # ogMakeGroupDir [ str_repo ] |
---|
313 | #@brief Crea el directorio para el grupo del cliente. |
---|
314 | #@param str_repo repositorio de imágenes (opcional) |
---|
315 | #@return (nada) |
---|
316 | #@note repo = { REPO, CACHE } REPO por defecto |
---|
317 | #@exception OG_ERR_FORMAT formato incorrecto. |
---|
318 | #@version 1.0.5 - Primera versión para OpenGnSys. |
---|
319 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
320 | #@date 2013-09-26 |
---|
321 | #*/ |
---|
322 | function ogMakeGroupDir () |
---|
323 | { |
---|
324 | local REPO DIR GROUP |
---|
325 | if [ "$*" == "help" ]; then |
---|
326 | ogHelp "$FUNCNAME" "$FUNCNAME str_repo" \ |
---|
327 | "$FUNCNAME" "$FUNCNAME REPO" |
---|
328 | return |
---|
329 | fi |
---|
330 | # Error si se recibe más de 1 parámetro. |
---|
331 | case $# in |
---|
332 | 0) REPO="REPO" ;; |
---|
333 | 1) REPO="$1" ;; |
---|
334 | *) ogRaiseError $OG_ERR_FORMAT "$*" |
---|
335 | return $? ;; |
---|
336 | esac |
---|
337 | # Comprobar tipo de repositorio. |
---|
338 | DIR=$(ogGetPath "$REPO" / 2>/dev/null) |
---|
339 | [ -n "$DIR" ] || ogRaiseError $OG_ERR_FORMAT "$1" |
---|
340 | GROUP="$(ogGetGroupName)" |
---|
341 | if [ -n "$GROUP" ]; then |
---|
342 | mkdir -p "$DIR/groups/$GROUP" 2>/dev/null |
---|
343 | fi |
---|
344 | } |
---|
345 | |
---|