source: client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions @ dc157ae

918-git-images-111dconfigfileconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacionwebconsole3
Last change on this file since dc157ae was 1a2fa9d8, checked in by ramon <ramongomez@…>, 10 years ago

#673: Actualizar código incluido en OepnGnSys? 1.0.6 sobre la rama version1.1 para desarrollar la nueva versión.

git-svn-id: https://opengnsys.es/svn/branches/version1.1@4609 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100644
File size: 22.3 KB
Line 
1#/**
2#@file    ogfunctions.lib
3#@brief   Librería o clase para la gestion del sistema operativo de los clientes OpenGnSys.
4#@class   client
5#@version 1.0.5
6#@warning License: GNU GPLv3+
7#*/ ##
8
9
10#/**
11#        ogExportKernelParameters
12#@brief   Exporta los parametros pasados al kernel
13#@param   
14#@return 
15#@exception OG_ERR_FORMAT    Formato incorrecto.
16#@version 0.7 -
17#@author Antonio J. Doblas. Universidad de Malaga.
18#@date    2010/05/24
19#*/ ##
20ogExportKernelParameters ()
21{
22        GLOBAL="cat /proc/cmdline"
23        for i in `${GLOBAL}`
24        do
25                echo $i | grep "=" > /dev/null && export $i
26        done
27        return 0
28}
29
30
31#/**
32#         ogChangeVideoResolution
33#@brief   Cambia la resolución de vídeo utilizando el parámetro "video" del Kernel
34#         (sustituye al parámetro "vga").
35#@note    Formato del parámetro vídeo:    video=DRIVER:RESXxRESY-BITS
36#@note    El valor por defecto es:        video=uvesafb:640x480-16
37#@todo    Control de errores en el foramto de la variable "video".
38#@version 1.0.5 - Primera versión de la función.
39#@author  Ramón Gómez, ETSII Universidad de Sevilla
40#@date    2013/02/18
41#*/ ##
42ogChangeVideoResolution ()
43{
44# Variables locales.
45local DRIVER MODE
46# Obtener driver y resolución.
47DRIVER="$(echo $video|cut -f1 -d:)"
48MODE="$(echo $video|cut -f2 -d:)"
49case "$DRIVER" in
50        # Cambiar resolución para driver "uvesafb".
51        uvesafb)
52                grep ":$(echo $MODE|cut -f1 -d-)p" /sys/class/graphics/fb0/modes | head -1 > /sys/class/graphics/fb0/mode 2>&1 || MODE="640x480-16"
53                echo "$(echo $MODE|cut -f2 -d-)" > /sys/class/graphics/fb0/bits_per_pixel 2>&1
54                echo "Screen mode: $(cat /sys/class/graphics/fb0/mode),$(cat /sys/class/graphics/fb0/bits_per_pixel)bpp."
55        ;;
56        # Resolución por defecto para el resto de casos.
57        *)      echo "Unknown video driver, using default mode."
58        ;;
59esac
60}
61
62
63#/**
64#       ogExportVarEnvironment
65#@brief   Exporta las variables usadas en el proceso de inicio OpenGnsys y las almacena en /tmp
66#@param   
67#@return 
68#@exception OG_ERR_FORMAT    Formato incorrecto.
69#@version 0.9
70#@author Antonio J. Doblas. Universidad de Malaga.
71#@date    2011/05/24
72#*/ ##
73ogExportVarEnvironment ()
74{
75        export CFGINITRD="/tmp/initrd.cfg"     
76        OGPROTOCOL="${ogprotocol:-smb}"
77        # OPTIONS Para samba y local (a nfs no le afecta)
78        export OPTIONS=" -o user=opengnsys,pass=og"
79        case "$OGPROTOCOL" in
80                nfs|NFS)                       
81                        export SRCOGLIVE="/var/lib/tftpboot" && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD       
82                        export SRCOGSHARE="/opt/opengnsys/client" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD
83                        export SRCOGLOG="/opt/opengnsys/log/clients" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD
84                        export SRCOGIMAGES="/opt/opengnsys/images" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD     
85                ;;
86                smb|SMB|cifs|CIFS|samba|SAMBA)
87                        export SRCOGLIVE="tftpboot"  && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD
88                        export SRCOGSHARE="ogclient" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD
89                        export SRCOGLOG="oglog" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD     
90                        export SRCOGIMAGES="ogimages" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD
91                ;;
92                local|LOCAL)
93                        # Ponemos variables SRC compatibles con smb y nfs.
94                        export SRCOGLIVE="local"
95                        export SRCOGSHARE="client" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD
96                        export SRCOGLOG="log" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD
97                        export SRCOGIMAGES="images" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD
98                ;;
99        esac
100        #punto de acceso al boot-tools live
101        export DSTOGLIVE="/opt/oglive/tftpboot"
102        #punto de montaje para unionfs
103        export OGLIVERAMFS="/opt/oglive/ramfs" && echo "OGLIVERAMFS=$OGLIVERAMFS" >> $CFGINITRD
104        #punto de montaje donde se accede al 2nd FS mediante loop
105        export OGLIVEROOTFS="/opt/oglive/rootfs" && echo "OGLIVEROOTFS=$OGLIVEROOTFS" >> $CFGINITRD
106        #punto de union entre LOCALROOTIMG y LOCALROOTRAM
107        export OGLIVEUNIONFS="/opt/oglive/unionfs" && echo "OGLIVEUNIONFS=$OGLIVEUNIONFS" >> $CFGINITRD
108        #etiquta para los dispositivos offline
109        export OGLIVELABEL="ogClient"
110       
111        #echo "puntos de montajes para los demas accesos"
112        #echo "acceso al client, engine, scritps, interfaz"
113        export DSTOGSHARE="/opt/opengnsys" && echo "DSTOGSHARE=$DSTOGSHARE" >> $CFGINITRD               
114        export DSTOGLOG="/opt/opengnsys/log" && echo "DSTOGLOG=$DSTOGLOG" >> $CFGINITRD
115        export DSTOGIMAGES="/opt/opengnsys/images" && echo "DSTOGIMAGES=$DSTOGIMAGES" >> $CFGINITRD
116               
117        ##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES ogConfigureNetwork.
118                #DEVICE
119                #IPV4DDR
120                #IPV4BROADCAST
121                #IPV4NETMASK
122                #IPV4GATEWAY
123                #HOSTNAME
124    #INFORMACION de otras variasbles obteneidas desde ogGetROOTSERVER
125                #ROOTSERVER  si ip=dhcp -> ROOTSERVER=NEXT-SERVER; si ip=host:rootserver:gw:mask:hostname:interfaz -> ROOTSERVER=rootserver
126                #BOOTIF -> si el gestor remoto es pxelinux.0 y se añade una linea más tipo "IPAPPEND 2" esta variable tendrá la mac de la interfaz.
127                #$OGSERVERLIVE
128                #$OGSERVERSHARE
129                #$OGSERVERLOG
130                #$OGSERVERIMAGES
131        return 0
132}
133
134
135#/**
136#       ogConfigureRamfs
137#@brief   Configura el initrd para adaptarlo al sistema raiz.
138#@param   
139#@return 
140#@exception OG_ERR_FORMAT    Formato incorrecto.
141#@version 0.9
142#@author Antonio J. Doblas. Universidad de Malaga.
143#@date    2010/05/24
144#*/ ##
145ogConfigureRamfs ()
146{
147        mkdir -p $DSTOGLIVE     
148        mkdir -p $OGLIVERAMFS   
149        mkdir -p $OGLIVEROOTFS                           
150        mkdir -p $OGLIVEUNIONFS
151
152        touch /etc/fstab
153}
154
155
156#/**
157#       ogLoadNetModule
158#@brief   Carga en un demerminado modulo de red, requiere compilación previo del modulo
159#@param   
160#@return 
161#@exception OG_ERR_FORMAT    Formato incorrecto.
162#@version 0.9
163#@author Antonio J. Doblas. Universidad de Malaga.
164#@date    2010/05/24
165#*/ ##
166ogLoadNetModule ()
167{
168        if [ -n "$ognetmodule" ]
169        then
170                echo "Cargando modulo de red $ognetmodule"
171                modprobe ${ognetmodule}
172        fi
173}
174
175
176#/**
177#      ogPostConfigureFS
178#@brief   Configura el sistema raiz, para independizarlo entre los clientes.
179#@param   
180#@return 
181#@exception OG_ERR_FORMAT    Formato incorrecto.
182#@version 0.9
183#@author Antonio J. Doblas. Universidad de Malaga.
184#@date    2010/05/24
185#*/ ##
186ogPostConfigureFS()
187{
188        # configuramos el /etc/hostname.
189        echo $HOSTNAME > /etc/hostname
190       
191        #configuramos el /etc/hosts
192        echo "127.0.0.1 localhost" > /etc/hosts
193        echo "$IPV4ADDR $HOSTNAME" >> /etc/hosts
194       
195        #configuramos el host.conf
196        echo "order hosts,bind" > /etc/host.conf
197        echo "multi on" >> /etc/host.conf
198       
199        #configuramos el dns anterior ubuntu 12.04 (parámetro del Kernel "ogdns=IP_DNS")
200        if [ -n "$ogdns" ]; then
201                mkdir -p /run/resolvconf
202                echo "nameserver $ogdns" > /run/resolvconf/resolv.conf
203        fi
204       
205        #configuramos el uso del servicio http proxy (parámetro del Kernel "ogproxy=URL_Proxy")
206        [ -n "${ogproxy}" ] && export http_proxy="$ogproxy"     
207       
208        # configuramos el /etc/networks
209        #read -e NETIP NETDEFAULT <<<$(route -n | grep eth0 | awk -F" " '{print $1}')
210        NETIP=$(route -n | grep eth0 | awk -F" " '{print $1}') && NETIP=$(echo $NETIP | cut -f1 -d" ")
211        echo "default 0.0.0.0" > /etc/networks
212        echo "loopback 127.0.0.0" >> /etc/networks
213        echo "link-local 169.254.0.0" >> /etc/networks
214        echo "localnet $NETIP" >> /etc/networks
215        #route
216
217        #echo "ogLive1.0.2" > /etc/debian_chroot
218
219        #enlace si iniciamos desde ogprotocolo=local { cdrom, usb, cache } .
220        # monta el raiz del dispositivo local en /opt/og2fs/tftpboot  - acceso al fichero .sqfs
221        # y monta el sistema root sqfs en /opt/og2fs/2ndfs
222        #[ "$LOCALMEDIA" == "CACHE" ] && ln -s $DSTOGLIVE /opt/opengnsys/cache
223        #[ "$ogprotocol" == "local" ] &&  ln -s ${OGLIVEROOTFS}/opt/opengnsys/* /opt/opengnsys/
224        if [ "$ogprotocol" == "local" ]; then
225           # Creamos los subdirectorios de /opt/opengnsys/
226           [ "$ogstatus" == "offline" ] && ln -s ${OGLIVEROOTFS}/opt/opengnsys/* /opt/opengnsys/
227           # Montamos CACHE
228           # Si existe particion identificada como CACHE se monta.
229           DEVICECACHE=$(blkid -L "CACHE")
230           if [ "$DEVICECACHE" != "" ]; then
231                # Se monta diferente segun el dispositivo de cache igual o no al de ogclient.
232                DEVICEOGLIVE=$(df |grep $DSTOGLIVE|awk '{print $1}')
233                if [[ "$DEVICECACHE" == "*$DEVICEOGLIVE*" ]];then
234                   mount --bind $DSTOGLIVE /opt/opengnsys/cache
235                else
236                   mount $DEVICECACHE /opt/opengnsys/cache
237                fi
238                if [ "$ogstatus" == "offline" ]; then
239                   [ -d /opt/opengnsys/cache/log ] || mkdir /opt/opengnsys/cache/log
240                   mount --bind /opt/opengnsys/cache/log /opt/opengnsys/log
241                fi
242           fi
243           # Montamos REPO
244           if [ "$ogstatus" == "offline" ]; then
245                # Si estatus distinto de online buscamos un dispositivo con etiqueta repo
246                # y si no existe montamos la cache como repo (si existe).
247                TYPE=$(blkid | grep REPO | awk -F"TYPE=" '{print $2}' | tr -d \")
248                if [ "$TYPE" == "" ]; then
249                   [ -d "/opt/opengnsys/cache$DSTOGIMAGES" ] && mount --bind  /opt/opengnsys/cache$DSTOGIMAGES $DSTOGIMAGES
250                else
251                   mount -t $TYPE LABEL=REPO $DSTOGIMAGES &>/dev/null
252                fi
253           fi
254        fi
255
256        #Montamos un directorio temporal para el apt-get
257        mount tmpfs /var/cache/apt/archives -t tmpfs -o size=15M
258        mkdir -p /var/cache/apt/archives/partial
259}
260
261
262#/**
263#     ogGetROOTSERVER
264#@brief   Determina los puntos de accesos a los distintos recursos.
265#Requiere ogConfigureNetworking.
266#Exporta ROOTSERVER
267# si la red ha sido configurada con dhcp el valor de ROOTSERVER será el valor de next-server del dhcp
268# si la red ha sido configurada con el parametro de kernel ip, será el segundo valor.
269## ip=iphost:ipnext-server:ipgateway:netmask:hostname:iface:none
270## ip=172.17.36.21:62.36.225.150:172.17.36.254:255.255.255.0:prueba1:eth0:none
271#@param   
272#@return 
273#@exception OG_ERR_FORMAT    Formato incorrecto.
274#@version 0.9
275#@author Antonio J. Doblas. Universidad de Malaga.
276#@date    2010/05/24
277#*/ ##
278ogGetROOTSERVER ()
279{
280        # get nfs root from dhcp
281        if [ "x${NFSROOT}" = "xauto" ]; then
282                # check if server ip is part of dhcp root-path
283                if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then
284                        NFSROOT=${ROOTSERVER}:${ROOTPATH}
285                else
286                        NFSROOT=${ROOTPATH}
287                fi
288
289        # nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
290        elif [ -n "${NFSROOT}" ]; then
291                # nfs options are an optional arg
292                if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then
293                        NFSOPTS="-o ${NFSROOT#*,}"
294                fi
295                NFSROOT=${NFSROOT%%,*}
296                if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then
297                        NFSROOT=${ROOTSERVER}:${NFSROOT}
298                fi
299        fi
300        export ROOTSERVER
301        echo "ROOTSERVER=$ROOTSERVER" >> $CFGINITRD
302       
303        #si oglive no oglive=R
304        export OGSERVERIMAGES="${ogrepo:-$ROOTSERVER}" && echo "OGSERVERIMAGES=$OGSERVERIMAGES" >> $CFGINITRD
305        export OGSERVERSHARE="${ogshare:-$ROOTSERVER}" && echo "OGSERVERSHARE=$OGSERVERSHARE" >> $CFGINITRD
306        export OGSERVERLOG="${oglog:-$ROOTSERVER}" && echo "OGSERVERLOG=$OGSERVERLOG" >> $CFGINITRD
307        export OGSERVERLIVE="${oglive:-$OGSERVERIMAGES}" && echo "OGSERVERLIVE=$OGSERVERLIVE" >> $CFGINITRD
308               
309        return 0
310}
311
312
313
314#       ogUpdateInitrd
315#@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.
316#@param1
317#@return 
318#@exception OG_ERR_FORMAT    Formato incorrecto.
319#@version 0.9
320#@author Antonio J. Doblas. Universidad de Malaga.
321#@date    2011/05/24
322#*/ ##
323
324ogUpdateInitrd ()
325{
326        cd /tmp
327        mkdir /tmp/cache
328        TYPE=$(blkid | grep CACHE | awk -F"TYPE=" '{print $2}' | tr -d \")
329        mount -t $TYPE LABEL=CACHE /tmp/cache || return
330        mkdir /tmp/cache/boot
331       
332       
333        # comparamos los del server
334        busybox tftp -g -r ogvmlinuz.sum $ROOTSERVER
335        busybox tftp -g -r oginitrd.img.sum $ROOTSERVER
336        SERVERVMLINUZ=`cat ogvmlinuz.sum`
337        SERVERINITRD=`cat oginitrd.img.sum`
338
339       
340        #comparamos los de la cache
341        CACHEVMLINUZ=`cat /tmp/cache/boot/ogvmlinuz.sum`
342        CACHEINITRD=`cat /tmp/cache/boot/oginitrd.img.sum`
343       
344        echo "MD5 on SERVER: $SERVERVMLINUZ $SERVERINITRD"
345        echo "MD5  on CACHE: $CACHEVMLINUZ $CACHEINITRD"
346       
347        cd /tmp/cache/boot
348       
349        if [ "$CACHEVMLINUZ" != "$SERVERVMLINUZ" ]
350        then           
351                echo "ogvmlinuz updating"
352                busybox tftp -g -r ogvmlinuz $ROOTSERVER
353                busybox tftp -g -r ogvmlinuz.sum $ROOTSERVER
354                DOREBOOT=true
355        fi
356        if [ "$CACHEINITRD" != "$SERVERINITRD" ]
357        then
358                echo "oginitrd updating"
359                busybox tftp -g -r oginitrd.img $ROOTSERVER
360                busybox tftp -g -r oginitrd.img.sum $ROOTSERVER
361                DOREBOOT=true
362        fi
363
364        cd /; umount /tmp/cache
365
366        [ "$DOREBOOT" == "true" ] && reboot -f
367
368}
369
370#/**
371#       ogConnect
372#@brief   Conecta con los recursos necesarios para opengnsys
373#@param1 ip del servidor TODO:dns
374#@param2 protocolo
375#@param3 punto de acceso remoto
376#@param4  punto de montaje local
377#@param5 acceso de lectura tipo ",ro"
378#@return 
379#@exception OG_ERR_FORMAT    Formato incorrecto.
380#@version 0.9
381#@author Antonio J. Doblas. Universidad de Malaga.
382#@date    2011/05/24
383#*/ ##
384   
385ogConnect ()
386{
387        SERVER=$1
388        PROTOCOL=$2
389        SRC=$3
390        DST=$4
391        READONLY=$5
392       
393        case "$PROTOCOL" in
394                nfs)
395                        nfsmount  ${SERVER}:${SRC} ${DST} -o nolock${READONLY} 2> /dev/null || mount.nfs ${SERVER}:${SRC} ${DST} -o nolock${READONLY}
396                ;;
397                smb)
398                        mount.cifs //${SERVER}/${SRC} ${DST} ${OPTIONS}${READONLY}             
399                ;;
400                local)
401                   # Comprobamos que estatus sea online y que la variable del server no esta vacia.
402                   if [ "$ogstatus" != "offline" -a "$SERVER" != "" -a "$SRC" != "" ]; then
403                        # Comprobamos que existe un servicio de samba.
404                        smbclient -L $SERVER -N &>/dev/null
405                        if [ $? -eq 0 ]; then
406                           mount.cifs //${SERVER}/og${SRC} ${DST} ${OPTIONS}${READONLY}
407                        fi
408                        # TODO: buscar condicion para NFS
409                   fi
410                ;;
411        esac
412}
413
414
415#/**
416#       ogConnectOgLive
417#@brief   Conecta con el recurso para usar el sistema raiz externo, remoto o local
418#@param1
419#@return 
420#@exception OG_ERR_FORMAT    Formato incorrecto.
421#@version 0.9
422#@author Antonio J. Doblas. Universidad de Malaga.
423#@date    2011/05/24   
424ogConnectOgLive ()
425{
426# Si ogprotocol=local, la funcion ogExportVar => SRCOGLIVE=local
427        if [ "$SRCOGLIVE" == "local" ]
428        then           
429                echo  "Montar imagen del sistema root desde dispositivo local"
430                for i in $(blkid /dev/s* | grep $OGLIVELABEL  | awk -F: '{print $2}' | tr -d \"); do export $i; done
431                # si local usb| cd con partcion es identificada como label $OGLIVELABEL         
432                mount -t $TYPE LABEL=$OGLIVELABEL $DSTOGLIVE 
433                if [ $? != 0 ]
434                then
435                        # Si local es particion CACHE es identificada como CACHE
436                        mount LABEL=CACHE $DSTOGLIVE
437                        #export LOCALMEDIA=CACHE
438                fi
439        else
440                # Si ogprotocol es remoto.    TODO en smb rw y en nfs ro??
441                ogConnect $OGSERVERLIVE $OGPROTOCOL $SRCOGLIVE $DSTOGLIVE               
442        fi             
443# Si el montaje ha sido correcto, tanto en local como en remoto. Procedemos con la union
444        ogMergeLive
445}
446
447
448#/**
449#       ogMergeLive
450#@brief   Metafuncion para fusionar el initrd con el sistema raiz.
451#@param1
452#@return 
453#@exception OG_ERR_FORMAT    Formato incorrecto.
454#@version 0.9
455#@author Antonio J. Doblas. Universidad de Malaga.
456#@date    2011/05/24   
457ogMergeLive()
458{
459#Si existe en el punto de acceso del del oglive el fichero ogclient.sqfs       
460if [ -f $DSTOGLIVE/ogclient/ogclient.sqfs ]
461then   
462        cat /proc/mounts > /tmp/mtab.preunion
463        if [ "$og2nd" == "img" ]
464        then
465                #Montamos el ROOTFS tipo  img, para desarrolladores
466                #TODO: comprobar que se tiene acceso de escritura
467                losetup /dev/loop0 $DSTOGLIVE/ogclient/ogclient.img -o 32256
468                mount /dev/loop0 $OGLIVEROOTFS
469        else
470                ## Montamos el ROOTFS tipo squashfs
471                mount $DSTOGLIVE/ogclient/ogclient.sqfs $OGLIVEROOTFS -t squashfs -o loop
472        fi
473# Realizamos la union entre el ogliveram(initrd) y el ogliverootfs(ogclient.sqfs)       
474        for i in etc var lib bin sbin usr root boot; do
475                ogUnionLiveDir $i
476        done
477        cat /tmp/mtab.preunion > /etc/mtab
478else
479        echo "Fichero imagen del cliente no encontrado"
480        return 1
481fi
482}
483
484
485
486#/**
487#       ogUnionLiveDir
488#@brief  fusiona dos directorios con unionfs
489#@param1
490#@return 
491#@exception OG_ERR_FORMAT    Formato incorrecto.
492#@version 0.9
493#@author Antonio J. Doblas. Universidad de Malaga.
494#@date    2011/05/24
495ogUnionLiveDir()
496{
497        TMPDIR=/$1              #dir
498        FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid"
499        UNION_OPT="-o cow -o noinitgroups"
500        UBIN="unionfs-fuse"
501
502        mkdir -p $OGLIVERAMFS$TMPDIR
503        U1STDIR="${OGLIVERAMFS}${TMPDIR}=RW"
504        U2NDDIR="${OGLIVEROOTFS}${TMPDIR}=RO"
505        UNIONDIR=${OGLIVEUNIONFS}${TMPDIR}
506        mkdir -p $UNIONDIR
507        $UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR
508        mount --bind  $UNIONDIR $TMPDIR
509}
510
511
512
513#/**
514#     ogConfigureLoopback
515#@brief   Configura la interfaz loopback para cliente torrent
516#@param   
517#@return 
518#@exception OG_ERR_FORMAT    Formato incorrecto.
519#@version 0.9   Usando funciones generales de ubuntu
520#@author Antonio J. Doblas. Universidad de Malaga.
521#@date    2010/05/24
522#@version 1.0.1   Deteccion automatica de interfaz con enlace activo.
523#@author Antonio J. Doblas. Universidad de Malaga.
524#@date    2011/05/24
525#*/ ##
526ogConfigureLoopback()
527{
528        # for the portmapper we need localhost
529        ifconfig lo 127.0.0.1
530        #/etc/init.d/portmap start
531}
532
533#/**
534#    ogConfigureNetworking
535#@brief   Configura la interfaz de red usada en el pxe
536#@param   
537#@return 
538#@exception OG_ERR_FORMAT    Formato incorrecto.
539#@version 0.9
540#@author Antonio J. Doblas. Universidad de Malaga.
541#@date    2010/05/24
542#*/ ##
543ogConfigureNetworking()
544{
545#echo "ogConfigureNetworking: Buscando interfaz a configurar DEVICE"
546if [ -n "${BOOTIF}" ]
547then
548        #echo " variable BOOTIF exportada con pxelinux.0 con valor $BOOTIF"
549        IP=$IPOPTS
550        temp_mac=${BOOTIF#*-}
551        # convert to typical mac address format by replacing "-" with ":"
552        bootif_mac=""
553        IFS='-'
554        for x in $temp_mac ; do
555                if [ -z "$bootif_mac" ]; then
556        bootif_mac="$x"
557        else
558                bootif_mac="$x:$bootif_mac"
559        fi
560        done
561        unset IFS
562        # look for devices with matching mac address, and set DEVICE to
563        # appropriate value if match is found.
564        for device in /sys/class/net/* ; do
565                if [ -f "$device/address" ]; then
566                        current_mac=$(cat "$device/address")
567                        if [ "$bootif_mac" = "$current_mac" ]; then
568                                DEVICE=${device##*/}
569                                break
570                        fi
571                fi
572        done
573else
574        #echo "variable BOOTIF no exportada, intentamos detectar que interfaz se ha iniciado"
575        IP=$ip
576        #TODO Detectar que interfaz se ha iniciado
577        case "$IP" in
578                none|off)
579                        return 0
580                        ;;
581                ""|on|any)
582                        # Bring up device
583                        DEVICE=eth0
584                        ;;
585                dhcp|bootp|rarp|both)
586                        DEVICE=eth0
587                        ;;
588                *)
589                        DEVICE=`echo $IP | cut -f6 -d:`
590                        ;;
591        esac
592fi
593if [ -z "${DEVICE}" ]; then
594        echo "variable DEVICE con valor $DEVICE no encontrada, llamamos de nuevo a ogconfigure_networking"
595        ogConfigureNetworking
596fi
597
598[ -n "${DEVICE}" ] && [ -e /run/net-"${DEVICE}".conf ] && return 0
599#if [ -n "${DEVICE}" ] && [ -e /run/net-"${DEVICE}".conf ]; then
600#       echo "variable DEVICE con valor $DEVICE  y fichero /run/net-$DEVICE encontrados"
601#       return 0
602#else
603#       echo "variable DEVICE con valor $DEVICE encontrada, procedemos a configurala y a crear el fichero /run/net-$DEVICE"
604#fi
605
606# Activamos la interfaz antes de configurar.
607ip address flush $DEVICE
608ip link set dev $DEVICE up
609# Si no se detecta señal portadora volver a configurar.
610sleep 1
611CARRIER=$(cat /sys/class/net/${DEVICE}/carrier)
612if [ "$CARRIER" != "1" ]
613then
614        ogConfigureNetworking
615fi
616
617# support ip options see linux sources
618# Documentation/filesystems/nfsroot.txt
619# Documentation/frv/booting.txt
620for ROUNDTTT in 2 3 4 6 9 16 25 36 64 100; do
621        # The NIC is to be configured if this file does not exist.
622        # Ip-Config tries to create this file and when it succeds
623        # creating the file, ipconfig is not run again.
624        if [ -e /run/net-"${DEVICE}".conf ]; then
625                break;
626        fi
627        case "$IP" in
628                none|off)
629                        return 0
630                ;;
631                ""|on|any)
632                        # Bring up device
633                        echo "Setting $DEVICE  with option:on|any and Variable IP= $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} "
634                        ipconfig -t ${ROUNDTTT} ${DEVICE}
635                ;;
636                dhcp|bootp|rarp|both)
637                        echo "Setting $DEVICE with option:dhcp|bootp|rarp|both and Variable IP=  $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} "
638                        ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE}
639                ;;
640                *)
641                        echo "Setting $DEVICE with option *  and Variable IP= $IP: ipconfig -t ${ROUNDTTT} -d $IP  "
642                        ipconfig -t ${ROUNDTTT} -d $IP
643                        # grab device entry from ip option
644                        NEW_DEVICE=${IP#*:*:*:*:*:*}
645                        if [ "${NEW_DEVICE}" != "${IP}" ]; then
646                                NEW_DEVICE=${NEW_DEVICE%:*}
647                        else
648                                # wrong parse, possibly only a partial string
649                                NEW_DEVICE=
650                        fi
651                        if [ -n "${NEW_DEVICE}" ]; then
652                                DEVICE="${NEW_DEVICE}"
653                        fi
654                ;;
655        esac
656done
657
658# source ipconfig output
659if [ -n "${DEVICE}" ]; then     
660        export DEVICE
661        export DEVICECFG="/run/net-${DEVICE}.conf"
662        # En algunos casos, el fichero de configuración está en /tmp.
663        [ ! -f $DEVICECFG -a -f ${DEVICECFG/run/tmp} ] && mv ${DEVICECFG/run/tmp} $DEVICECFG
664        source $DEVICECFG
665        echo "DEVICE=$DEVICE" >> $CFGINITRD
666        echo "DEVICECFG=$DEVICECFG" >> $CFGINITRD
667        echo "exportando variable DEVICE con valor = $DEVICE y DEVICECFG con valor $DEVICECFG"
668        # Compatibilidad con versiones anteriores.
669        ln -fs $DEVICECFG /tmp
670else
671        # source any interface as not exaclty specified
672        source /run/net-*.conf
673fi
674}
675
676
677#/**
678#    ogYesNo
679#@brief   Gestion de peticiones de usuario en modo ogdebug=true
680#@param1  OPTIONS    --timeout N    --default ANSWER
681#@param1 Questions   
682#@return  1=yes 0=no
683#@exception OG_ERR_FORMAT    Formato incorrecto.
684#@version 0.9
685#@author: 
686#@date    2010/05/24
687#*/ ##
688ogYesNo()
689{
690    local ans
691    local ok=0
692    local timeout=0
693    local default
694    local t
695
696    while [[ "$1" ]]
697    do
698        case "$1" in
699        --default)
700            shift
701            default=$1
702            if [[ ! "$default" ]]; then error "Missing default value"; fi
703            t=$(echo $default | tr '[:upper:]' '[:lower:]')
704
705            if [[ "$t" != 'y'  &&  "$t" != 'yes'  &&  "$t" != 'n'  &&  "$t" != 'no' ]]; then
706                error "Illegal default answer: $default"
707            fi
708            default=$t
709            shift
710            ;;
711
712        --timeout)
713            shift
714            timeout=$1
715            if [[ ! "$timeout" ]]; then error "Missing timeout value"; fi
716            #if [[ ! "$timeout" =~ ^[0-9][0-9]*$ ]]; then error "Illegal timeout value: $timeout"; fi
717            shift
718            ;;
719
720        -*)
721            error "Unrecognized option: $1"
722            ;;
723
724        *)
725            break
726            ;;
727        esac
728    done
729
730    if [[ $timeout -ne 0  &&  ! "$default" ]]; then
731        error "Non-zero timeout requires a default answer"
732    fi
733
734    if [[ ! "$*" ]]; then error "Missing question"; fi
735
736    while [[ $ok -eq 0 ]]
737    do
738        if [[ $timeout -ne 0 ]]; then
739            if ! read -t $timeout -p "$*" ans; then
740                ans=$default
741            else
742                # Turn off timeout if answer entered.
743                timeout=0
744                if [[ ! "$ans" ]]; then ans=$default; fi
745            fi
746        else
747            read -p "$*" ans
748            if [[ ! "$ans" ]]; then
749                ans=$default
750            else
751                ans=$(echo $ans | tr '[:upper:]' '[:lower:]')
752            fi
753        fi
754
755        if [[ "$ans" == 'y'  ||  "$ans" == 'yes'  ||  "$ans" == 'n'  ||  "$ans" == 'no' ]]; then
756            ok=1
757        fi
758
759        if [[ $ok -eq 0 ]]; then warning "Valid answers are: yes y no n"; fi
760    done
761    [[ "$ans" = "y" || "$ans" == "yes" ]]
762}
763 
Note: See TracBrowser for help on using the repository browser.