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

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 0c40a55 was 5854ddb, checked in by irina <irinagomez@…>, 9 years ago

#678 Unidades organizativas: ogfuntions cambia recurso remoto montado en /opt/opengnsys/images del cliente

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