[58828de] | 1 | #@file ogfunctions.lib |
---|
| 2 | #@brief Librería o clase para la generación del 1erFS |
---|
| 3 | #@class client |
---|
| 4 | #@brief Funciones para la generación del primers sistema (initrd) |
---|
| 5 | #@version 0.91 |
---|
| 6 | #@warning License: GNU GPLv3+ |
---|
| 7 | |
---|
| 8 | |
---|
| 9 | ogExportKernelParameters () |
---|
| 10 | { |
---|
| 11 | GLOBAL="cat /proc/cmdline" |
---|
| 12 | for i in `${GLOBAL}` |
---|
| 13 | do |
---|
| 14 | echo $i | grep "=" > /dev/null && export $i |
---|
| 15 | done |
---|
| 16 | return 0 |
---|
| 17 | } |
---|
| 18 | |
---|
| 19 | ogExportVarEnvironment () |
---|
| 20 | { |
---|
[924e2f1] | 21 | export CFGINITRD="/tmp/initrd.cfg" |
---|
| 22 | OGPROTOCOL="${ogprotocol:-smb}" |
---|
| 23 | case "$OGPROTOCOL" in |
---|
| 24 | nfs|NFS) |
---|
| 25 | #export NFSROOTBOOT="/var/lib/tftpboot" |
---|
| 26 | export SRCOGLIVE="/var/lib/tftpboot" && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD |
---|
| 27 | #export NFSCLIENTDIR="/opt/opengnsys/client" |
---|
| 28 | export SRCOGSHARE="/opt/opengnsys/client" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD |
---|
| 29 | #export NFSLOGDIR="/opt/opengnsys/log/clients" |
---|
| 30 | export SRCOGLOG="/opt/opengnsys/log/clients" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD |
---|
| 31 | #export NFSIMGDIR="/opt/opengnsys/images" |
---|
| 32 | export SRCOGIMAGES="/opt/opengnsys/images" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD |
---|
| 33 | ;; |
---|
| 34 | smb|SMB|cifs|CIFS|samba|SAMBA) |
---|
| 35 | export OPTIONS=" -o user=opengnsys,pass=og" |
---|
| 36 | #export SMBROOTBOOT="tftpboot" && echo "SMBROOTBOOT=$SMBROOTBOOT" >> $CFGINITRD |
---|
| 37 | export SRCOGLIVE="tftpboot" && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD |
---|
| 38 | #export SMBCLIENTDIR="ogclient" && echo "SMBCLIENTDIR=$SMBCLIENTDIR" >> $CFGINITRD |
---|
| 39 | export SRCOGSHARE="ogclient" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD |
---|
| 40 | #export SMBLOGDIR="oglog" && echo "SMBLOGDIR=$SMBLOGDIR" >> $CFGINITRD |
---|
| 41 | export SRCOGLOG="oglog" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD |
---|
| 42 | #export SMBIMGDIR="ogimages" && echo "SMBIMGDIR=$SMBIMGDIR" >> $CFGINITRD |
---|
| 43 | export SRCOGIMAGES="ogimages" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD |
---|
| 44 | ;; |
---|
| 45 | local|LOCAL) |
---|
| 46 | export SRCOGLIVE="local" |
---|
| 47 | ;; |
---|
| 48 | esac |
---|
| 49 | #punto de acceso al boot-tools live |
---|
| 50 | #export LOCALROOTBOOT="/opt/og2fs/tftpboot" && echo "LOCALROOTBOOT=$LOCALROOTBOOT" >> $CFGINITRD |
---|
| 51 | export DSTOGLIVE="/opt/oglive/tftpboot" |
---|
[bba10c8] | 52 | #punto de montaje para unionfs |
---|
[924e2f1] | 53 | #export LOCALROOTRAM="/opt/og2fs/1stfs" && echo "LOCALROOTRAM=$LOCALROOTRAM" >> $CFGINITRD |
---|
| 54 | export OGLIVERAMFS="/opt/oglive/ramfs" && echo "OGLIVERAMFS=$OGLIVERAMFS" >> $CFGINITRD |
---|
| 55 | #punto de montaje donde se accede al 2nd FS mediante loop |
---|
| 56 | #export LOCALROOTIMG="/opt/og2fs/2ndfs" && echo "LOCALROOTIMG=$LOCALROOTIMG" >> $CFGINITRD |
---|
| 57 | export OGLIVEROOTFS="/opt/oglive/rootfs" && echo "OGLIVEROOTFS=$OGLIVEROOTFS" >> $CFGINITRD |
---|
| 58 | #punto de union entre LOCALROOTIMG y LOCALROOTRAM |
---|
| 59 | #export LOCALROOTUNION="/opt/og2fs/unionfs" && echo "LOCALROOTUNION=$LOCALROOTUNION" >> $CFGINITRD |
---|
| 60 | export OGLIVEUNIONFS="/opt/oglive/unionfs" && echo "OGLIVEUNIONFS=$OGLIVEUNIONFS" >> $CFGINITRD |
---|
| 61 | #etiquta para los dispositivos offline |
---|
| 62 | export OGLIVELABEL="ogClient" |
---|
| 63 | |
---|
| 64 | #echo "puntos de montajes para los demas accesos" |
---|
| 65 | #echo "acceso al client, engine, scritps, interfaz" |
---|
| 66 | #export LOCALCLIENTDIR="/opt/opengnsys" && echo "LOCALCLIENTDIR=$LOCALCLIENTDIR" >> $CFGINITRD |
---|
| 67 | export DSTOGSHARE="/opt/opengnsys" && echo "DSTOGSHARE=$DSTOGSHARE" >> $CFGINITRD |
---|
| 68 | #export LOCALLOGDIR="/opt/opengnsys/log" && echo "LOCALLOGDIR=$LOCALLOGDIR" >> $CFGINITRD |
---|
| 69 | export DSTOGLOG="/opt/opengnsys/log" && echo "DSTOGLOG=$DSTOGLOG" >> $CFGINITRD |
---|
| 70 | #export LOCALIMGDIR="/opt/opengnsys/images" && echo "LOCALIMGDIR=$LOCALIMGDIR" >> $CFGINITRD |
---|
| 71 | export DSTOGIMAGES="/opt/opengnsys/images" && echo "DSTOGIMAGES=$DSTOGIMAGES" >> $CFGINITRD |
---|
| 72 | |
---|
| 73 | ##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES ogConfigureNetwork. |
---|
| 74 | #DEVICE |
---|
| 75 | #IPV4DDR |
---|
| 76 | #IPV4BROADCAST |
---|
| 77 | #IPV4NETMASK |
---|
| 78 | #IPV4GATEWAY |
---|
| 79 | #HOSTNAME |
---|
| 80 | #INFORMACION de otras variasbles obteneidas desde ogGetROOTSERVER |
---|
| 81 | #ROOTSERVER si ip=dhcp -> ROOTSERVER=NEXT-SERVER; si ip=host:rootserver:gw:mask:hostname:interfaz -> ROOTSERVER=rootserver |
---|
| 82 | #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. |
---|
| 83 | #$OGSERVERLIVE |
---|
| 84 | #$OGSERVERSHARE |
---|
| 85 | #$OGSERVERLOG |
---|
| 86 | #$OGSERVERIMAGES |
---|
[58828de] | 87 | return 0 |
---|
| 88 | } |
---|
| 89 | |
---|
| 90 | ogConfigureRamfs () |
---|
| 91 | { |
---|
[924e2f1] | 92 | #mkdir -p $LOCALROOTBOOT |
---|
| 93 | mkdir -p $DSTOGLIVE |
---|
| 94 | #mkdir -p $LOCALROOTRAM |
---|
| 95 | mkdir -p $OGLIVERAMFS |
---|
| 96 | #mkdir -p $LOCALROOTIMG |
---|
| 97 | mkdir -p $OGLIVEROOTFS |
---|
| 98 | #mkdir -p $LOCALROOTUNION |
---|
| 99 | mkdir -p $OGLIVEUNIONFS |
---|
[58828de] | 100 | } |
---|
| 101 | |
---|
| 102 | ogLoadNetModule () |
---|
| 103 | { |
---|
| 104 | if [ -n "$ognetmodule" ] |
---|
| 105 | then |
---|
| 106 | echo "Cargando modulo de red $netmodule" |
---|
| 107 | insmod `find /lib/modules/ -name ${netmodule}*` |
---|
| 108 | fi |
---|
| 109 | } |
---|
| 110 | |
---|
| 111 | |
---|
| 112 | ogPostConfigureFS() |
---|
| 113 | { |
---|
| 114 | # configuramos el /etc/hostname. |
---|
| 115 | echo $HOSTNAME > /etc/hostname |
---|
| 116 | |
---|
| 117 | #configuramos el /etc/hosts |
---|
| 118 | echo "127.0.0.1 localhost" > /etc/hosts |
---|
| 119 | echo "$IPV4ADDR $HOSTNAME" >> /etc/hosts |
---|
| 120 | |
---|
| 121 | #configuramos el host.conf |
---|
| 122 | echo "order hosts,bind" > /etc/host.conf |
---|
| 123 | echo "multi on" >> /etc/host.conf |
---|
| 124 | |
---|
[924e2f1] | 125 | #configuramos el dns |
---|
| 126 | echo "nameserver $ogdns" > /etc/resolv.conf |
---|
| 127 | |
---|
| 128 | |
---|
[58828de] | 129 | # configuramos el /etc/networks |
---|
| 130 | #read -e NETIP NETDEFAULT <<<$(route -n | grep eth0 | awk -F" " '{print $1}') |
---|
| 131 | NETIP=$(route -n | grep eth0 | awk -F" " '{print $1}') && NETIP=$(echo $NETIP | cut -f1 -d" ") |
---|
| 132 | echo "default 0.0.0.0" > /etc/networks |
---|
| 133 | echo "loopback 127.0.0.0" >> /etc/networks |
---|
| 134 | echo "link-local 169.254.0.0" >> /etc/networks |
---|
| 135 | echo "localnet $NETIP" >> /etc/networks |
---|
| 136 | #route |
---|
[afeb76b] | 137 | |
---|
[924e2f1] | 138 | echo "ogLive1.0.2" > /etc/debian_chroot |
---|
| 139 | |
---|
[971c33f] | 140 | #enlace si iniciamos desde ogprotocolo=local { cdrom, usb, cache } . |
---|
| 141 | # monta el raiz del dispositivo local en /opt/og2fs/tftpboot - acceso al fichero .sqfs |
---|
| 142 | # y monta el sistema root sqfs en /opt/og2fs/2ndfs |
---|
[924e2f1] | 143 | #[ "$LOCALMEDIA" == "CACHE" ] && ln -s /opt/oglive/tftpboot /opt/opengnsys/cache |
---|
| 144 | #[ "$ogprotocol" == "local" ] && ln -s /opt/oglive/2ndfs/opt/opengnsys/* /opt/opengnsys/ |
---|
| 145 | [ "$LOCALMEDIA" == "CACHE" ] && ln -s $DSTOGLIVE /opt/opengnsys/cache |
---|
| 146 | [ "$ogprotocol" == "local" ] && ln -s ${OGLIVEROOTFS}/opt/opengnsys/* /opt/opengnsys/ |
---|
[971c33f] | 147 | |
---|
[afeb76b] | 148 | |
---|
[58828de] | 149 | } |
---|
| 150 | |
---|
| 151 | |
---|
| 152 | |
---|
[924e2f1] | 153 | #Requiere ogConfigureNetworking. |
---|
| 154 | #Exporta ROOTSERVER |
---|
| 155 | # si la red ha sido configurada con dhcp el valor de ROOTSERVER será el valor de next-server del dhcp |
---|
| 156 | # si la red ha sido configurada con el parametro de kernel ip, será el segundo valor. |
---|
| 157 | ## ip=iphost:ipnext-server:ipgateway:netmask:hostname:iface:none |
---|
| 158 | ## ip=172.17.36.21:62.36.225.150:172.17.36.254:255.255.255.0:prueba1:eth0:none |
---|
[58828de] | 159 | ogGetROOTSERVER () |
---|
| 160 | { |
---|
| 161 | # get nfs root from dhcp |
---|
| 162 | if [ "x${NFSROOT}" = "xauto" ]; then |
---|
| 163 | # check if server ip is part of dhcp root-path |
---|
| 164 | if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then |
---|
| 165 | NFSROOT=${ROOTSERVER}:${ROOTPATH} |
---|
| 166 | else |
---|
| 167 | NFSROOT=${ROOTPATH} |
---|
| 168 | fi |
---|
| 169 | |
---|
| 170 | # nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] |
---|
| 171 | elif [ -n "${NFSROOT}" ]; then |
---|
| 172 | # nfs options are an optional arg |
---|
| 173 | if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then |
---|
| 174 | NFSOPTS="-o ${NFSROOT#*,}" |
---|
| 175 | fi |
---|
| 176 | NFSROOT=${NFSROOT%%,*} |
---|
| 177 | if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then |
---|
| 178 | NFSROOT=${ROOTSERVER}:${NFSROOT} |
---|
| 179 | fi |
---|
| 180 | fi |
---|
| 181 | export ROOTSERVER |
---|
[bba10c8] | 182 | echo "ROOTSERVER=$ROOTSERVER" >> $CFGINITRD |
---|
[924e2f1] | 183 | |
---|
| 184 | #si oglive no oglive=R |
---|
| 185 | export OGSERVERIMAGES="${ogrepo:-$ROOTSERVER}" |
---|
| 186 | export OGSERVERSHARE="${ogshare:-$ROOTSERVER}" |
---|
| 187 | export OGSERVERLOG="${oglog:-$ROOTSERVER}" |
---|
| 188 | export OGSERVERLIVE="${oglive:-$OGSERVERIMAGES}" |
---|
| 189 | |
---|
| 190 | return 0 |
---|
| 191 | } |
---|
[58828de] | 192 | |
---|
[924e2f1] | 193 | #ogConnect |
---|
| 194 | # parm 1 ip servidor TODO:dns |
---|
| 195 | # parm 2 protocolo |
---|
| 196 | # parm 3 punto de acceso remoto |
---|
| 197 | # parm 4 punto de montaje local |
---|
| 198 | # parm 5 acceso de lectura tipo ",ro" |
---|
| 199 | ogConnect () |
---|
[58828de] | 200 | { |
---|
[924e2f1] | 201 | SERVER=$1 |
---|
| 202 | PROTOCOL=$2 |
---|
| 203 | SRC=$3 |
---|
| 204 | DST=$4 |
---|
| 205 | READONLY=$5 |
---|
| 206 | |
---|
| 207 | case "$PROTOCOL" in |
---|
| 208 | nfs) |
---|
| 209 | nfsmount -o nolock${READONLY} ${SERVER}:${SRC} ${DST} |
---|
| 210 | ;; |
---|
| 211 | smb) |
---|
| 212 | mount.cifs //${SERVER}/${SRC} ${DST} ${OPTIONS}${READONLY} |
---|
| 213 | ;; |
---|
| 214 | esac |
---|
| 215 | } |
---|
| 216 | |
---|
| 217 | ogConnectOgLive () |
---|
| 218 | { |
---|
| 219 | # Si ogprotocol=local, la funcion ogExportVar => SRCOGLIVE=local |
---|
| 220 | if [ "$SRCOGLIVE" == "local" ] |
---|
| 221 | then |
---|
[971c33f] | 222 | echo "Montar imagen del sistema root desde dispositivo local" |
---|
[924e2f1] | 223 | for i in $(blkid /dev/s* | grep $OGLIVELABEL | awk -F: '{print $2}' | tr -d \"); do export $i; done |
---|
| 224 | mount -t $TYPE LABEL=$LABEL $DSTOGLIVE |
---|
[971c33f] | 225 | if [ $? != 0 ] |
---|
| 226 | then |
---|
[924e2f1] | 227 | mount -t reiserfs LABEL=CACHE $DSTOGLIVE |
---|
[971c33f] | 228 | export LOCALMEDIA=CACHE |
---|
| 229 | fi |
---|
[924e2f1] | 230 | else |
---|
| 231 | # Si ogprotocol es remoto. TODO en smb rw y en nfs ro?? |
---|
| 232 | ogConnect $OGSERVERLIVE $OGPROTOCOL $SRCOGLIVE $DSTOGLIVE |
---|
| 233 | fi |
---|
| 234 | # Si el montaje ha sido correcto, tanto en local como en remoto. Procedemos con la union |
---|
| 235 | ogMergeLive |
---|
[58828de] | 236 | } |
---|
| 237 | |
---|
[924e2f1] | 238 | |
---|
| 239 | |
---|
| 240 | ogMergeLive() |
---|
[58828de] | 241 | { |
---|
[924e2f1] | 242 | #Si existe en el punto de acceso del del oglive el fichero ogclient.sqfs |
---|
| 243 | if [ -f $DSTOGLIVE/ogclient/ogclient.sqfs ] |
---|
[58828de] | 244 | then |
---|
| 245 | cat /proc/mounts > /tmp/mtab.preunion |
---|
| 246 | if [ "$og2nd" == "img" ] |
---|
| 247 | then |
---|
[924e2f1] | 248 | #Montamos el ROOTFS tipo img, para desarrolladores |
---|
| 249 | losetup /dev/loop0 $DSTOGLIVE/ogclient/ogclient.img -o 32256 |
---|
| 250 | mount /dev/loop0 $OGLIVEROOTFS |
---|
[58828de] | 251 | else |
---|
[924e2f1] | 252 | ## Montamos el ROOTFS tipo squashfs |
---|
| 253 | mount $DSTOGLIVE/ogclient/ogclient.sqfs $OGLIVEROOTFS -t squashfs -o loop |
---|
[58828de] | 254 | fi |
---|
[924e2f1] | 255 | # Realizamos la union entre el ogliveram(initrd) y el ogliverootfs(ogclient.sqfs) |
---|
[58828de] | 256 | for i in etc var lib bin sbin usr root boot; do |
---|
[924e2f1] | 257 | ogUnionLiveDir $i |
---|
[58828de] | 258 | done |
---|
| 259 | cat /tmp/mtab.preunion > /etc/mtab |
---|
| 260 | else |
---|
| 261 | echo "Fichero imagen del cliente no encontrado" |
---|
| 262 | return 1 |
---|
| 263 | fi |
---|
| 264 | } |
---|
| 265 | |
---|
| 266 | |
---|
[924e2f1] | 267 | |
---|
| 268 | |
---|
| 269 | #ogUnionLiveDir |
---|
| 270 | #par 1 el directorio a unir. |
---|
| 271 | # para el parmetro 1 (directorio), |
---|
| 272 | ogUnionLiveDir() |
---|
[58828de] | 273 | { |
---|
[924e2f1] | 274 | TMPDIR=/$1 #dir |
---|
[58828de] | 275 | FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" |
---|
| 276 | UNION_OPT="-o cow -o noinitgroups" |
---|
| 277 | UBIN="unionfs-fuse" |
---|
[924e2f1] | 278 | |
---|
| 279 | mkdir -p $OGLIVERAMFS$TMPDIR |
---|
| 280 | U1STDIR="${OGLIVERAMFS}${TMPDIR}=RW" |
---|
| 281 | U2NDDIR="${OGLIVEROOTFS}${TMPDIR}=RO" |
---|
| 282 | UNIONDIR=${OGLIVEUNIONFS}${TMPDIR} |
---|
[58828de] | 283 | mkdir -p $UNIONDIR |
---|
| 284 | $UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR |
---|
[924e2f1] | 285 | mount --bind $UNIONDIR $TMPDIR |
---|
[58828de] | 286 | } |
---|
| 287 | |
---|
| 288 | |
---|
| 289 | |
---|
[924e2f1] | 290 | |
---|
| 291 | ogConfigureLoopback() |
---|
[58828de] | 292 | { |
---|
| 293 | # for the portmapper we need localhost |
---|
| 294 | ifconfig lo 127.0.0.1 |
---|
| 295 | #/etc/init.d/portmap start |
---|
| 296 | } |
---|
| 297 | |
---|
[924e2f1] | 298 | ogConfigureNetworking() |
---|
[58828de] | 299 | { |
---|
[924e2f1] | 300 | #echo "ogConfigureNetworking: Buscando interfaz a configurar DEVICE" |
---|
[98db1ad] | 301 | if [ -n "${BOOTIF}" ] |
---|
| 302 | then |
---|
[9ff7b49] | 303 | #echo " variable BOOTIF exportada con pxelinux.0 con valor $BOOTIF" |
---|
[2afd100] | 304 | IP=$IPOPTS |
---|
[98db1ad] | 305 | temp_mac=${BOOTIF#*-} |
---|
| 306 | # convert to typical mac address format by replacing "-" with ":" |
---|
| 307 | bootif_mac="" |
---|
| 308 | IFS='-' |
---|
| 309 | for x in $temp_mac ; do |
---|
| 310 | if [ -z "$bootif_mac" ]; then |
---|
| 311 | bootif_mac="$x" |
---|
| 312 | else |
---|
| 313 | bootif_mac="$x:$bootif_mac" |
---|
[58828de] | 314 | fi |
---|
[98db1ad] | 315 | done |
---|
| 316 | unset IFS |
---|
| 317 | # look for devices with matching mac address, and set DEVICE to |
---|
| 318 | # appropriate value if match is found. |
---|
| 319 | for device in /sys/class/net/* ; do |
---|
| 320 | if [ -f "$device/address" ]; then |
---|
| 321 | current_mac=$(cat "$device/address") |
---|
| 322 | if [ "$bootif_mac" = "$current_mac" ]; then |
---|
| 323 | DEVICE=${device##*/} |
---|
| 324 | break |
---|
| 325 | fi |
---|
| 326 | fi |
---|
| 327 | done |
---|
| 328 | else |
---|
[9ff7b49] | 329 | #echo "variable BOOTIF no exportada, intentamos detectar que interfaz se ha iniciado" |
---|
[98db1ad] | 330 | IP=$ip |
---|
| 331 | #TODO Detectar que interfaz se ha iniciado |
---|
| 332 | case ${IP} in |
---|
| 333 | none|off) |
---|
[2afd100] | 334 | return 0 |
---|
[98db1ad] | 335 | ;; |
---|
| 336 | ""|on|any) |
---|
| 337 | # Bring up device |
---|
| 338 | DEVICE=eth0 |
---|
| 339 | ;; |
---|
| 340 | dhcp|bootp|rarp|both) |
---|
| 341 | DEVICE=eth0 |
---|
| 342 | ;; |
---|
| 343 | *) |
---|
| 344 | DEVICE=`echo $IP | cut -f6 -d:` |
---|
| 345 | ;; |
---|
| 346 | esac |
---|
| 347 | fi |
---|
[2afd100] | 348 | if [ -z "${DEVICE}" ]; then |
---|
| 349 | echo "variable DEVICE con valor $DEVICE no encontrada, llamamos de nuevo a ogconfigure_networking" |
---|
[924e2f1] | 350 | ogConfigureNetworking |
---|
[2afd100] | 351 | fi |
---|
| 352 | |
---|
[9ff7b49] | 353 | [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 |
---|
| 354 | #if [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ]; then |
---|
| 355 | # echo "variable DEVICE con valor $DEVICE y fichero /tmp/net-$DEVICE encontrados" |
---|
| 356 | # return 0 |
---|
| 357 | #else |
---|
| 358 | # echo "variable DEVICE con valor $DEVICE encontrada, procedemos a configurala y a crear el fichero /tmp/net-$DEVICE" |
---|
| 359 | #fi |
---|
| 360 | |
---|
| 361 | # Activamos la interfaz antes de configurar. |
---|
| 362 | ip address flush $DEVICE |
---|
| 363 | ip link set dev $DEVICE up |
---|
| 364 | # Si no se detecta señal portadora volver a configurar. |
---|
| 365 | sleep 1 |
---|
| 366 | CARRIER=$(cat /sys/class/net/${DEVICE}/carrier) |
---|
| 367 | if [ "$CARRIER" != "1" ] |
---|
| 368 | then |
---|
[924e2f1] | 369 | ogConfigureNetworking |
---|
[2afd100] | 370 | fi |
---|
| 371 | |
---|
[98db1ad] | 372 | # support ip options see linux sources |
---|
| 373 | # Documentation/filesystems/nfsroot.txt |
---|
| 374 | # Documentation/frv/booting.txt |
---|
| 375 | for ROUNDTTT in 2 3 4 6 9 16 25 36 64 100; do |
---|
| 376 | # The NIC is to be configured if this file does not exist. |
---|
| 377 | # Ip-Config tries to create this file and when it succeds |
---|
| 378 | # creating the file, ipconfig is not run again. |
---|
| 379 | if [ -e /tmp/net-"${DEVICE}".conf ]; then |
---|
| 380 | break; |
---|
| 381 | fi |
---|
| 382 | case ${IP} in |
---|
| 383 | none|off) |
---|
[2afd100] | 384 | return 0 |
---|
[98db1ad] | 385 | ;; |
---|
| 386 | ""|on|any) |
---|
[58828de] | 387 | # Bring up device |
---|
[2afd100] | 388 | echo "Setting $DEVICE with option:on|any and Variable IP= $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} " |
---|
[58828de] | 389 | ipconfig -t ${ROUNDTTT} ${DEVICE} |
---|
[98db1ad] | 390 | ;; |
---|
| 391 | dhcp|bootp|rarp|both) |
---|
[2afd100] | 392 | echo "Setting $DEVICE with option:dhcp|bootp|rarp|both and Variable IP= $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} " |
---|
[58828de] | 393 | ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} |
---|
[98db1ad] | 394 | ;; |
---|
| 395 | *) |
---|
[2afd100] | 396 | echo "Setting $DEVICE with option * and Variable IP= $IP: ipconfig -t ${ROUNDTTT} -d $IP " |
---|
[58828de] | 397 | ipconfig -t ${ROUNDTTT} -d $IP |
---|
| 398 | # grab device entry from ip option |
---|
| 399 | NEW_DEVICE=${IP#*:*:*:*:*:*} |
---|
| 400 | if [ "${NEW_DEVICE}" != "${IP}" ]; then |
---|
| 401 | NEW_DEVICE=${NEW_DEVICE%:*} |
---|
| 402 | else |
---|
| 403 | # wrong parse, possibly only a partial string |
---|
| 404 | NEW_DEVICE= |
---|
| 405 | fi |
---|
| 406 | if [ -n "${NEW_DEVICE}" ]; then |
---|
| 407 | DEVICE="${NEW_DEVICE}" |
---|
| 408 | fi |
---|
[98db1ad] | 409 | ;; |
---|
| 410 | esac |
---|
| 411 | done |
---|
[58828de] | 412 | |
---|
[98db1ad] | 413 | # source ipconfig output |
---|
[2afd100] | 414 | if [ -n "${DEVICE}" ]; then |
---|
[98db1ad] | 415 | . /tmp/net-${DEVICE}.conf |
---|
[924e2f1] | 416 | DEVICECFG="/tmp/net-${DEVICE}.conf" |
---|
[bba10c8] | 417 | export DEVICECFG |
---|
| 418 | export DEVICE |
---|
| 419 | echo "DEVICE=$DEVICE" >> $CFGINITRD |
---|
| 420 | echo "DEVICECFG=$DEVICECFG" >> $CFGINITRD |
---|
[2afd100] | 421 | echo "exportando variable DEVICE con valor = $DEVICE y el DEVICECFG con valor $DEVICECFG" |
---|
[98db1ad] | 422 | else |
---|
| 423 | # source any interface as not exaclty specified |
---|
| 424 | . /tmp/net-*.conf |
---|
| 425 | fi |
---|
[58828de] | 426 | } |
---|
| 427 | |
---|
| 428 | ##################################################################### |
---|
| 429 | # Ask yesno question. |
---|
| 430 | # |
---|
| 431 | # Usage: yesno OPTIONS QUESTION |
---|
| 432 | # |
---|
| 433 | # Options: |
---|
| 434 | # --timeout N Timeout if no input seen in N seconds. |
---|
| 435 | # --default ANS Use ANS as the default answer on timeout or |
---|
| 436 | # if an empty answer is provided. |
---|
| 437 | # |
---|
| 438 | # Exit status is the answer. 0=yes 1=no |
---|
| 439 | |
---|
| 440 | ogYesNo() |
---|
| 441 | { |
---|
| 442 | local ans |
---|
| 443 | local ok=0 |
---|
| 444 | local timeout=0 |
---|
| 445 | local default |
---|
| 446 | local t |
---|
| 447 | |
---|
| 448 | while [[ "$1" ]] |
---|
| 449 | do |
---|
| 450 | case "$1" in |
---|
| 451 | --default) |
---|
| 452 | shift |
---|
| 453 | default=$1 |
---|
| 454 | if [[ ! "$default" ]]; then error "Missing default value"; fi |
---|
| 455 | t=$(echo $default | tr '[:upper:]' '[:lower:]') |
---|
| 456 | |
---|
| 457 | if [[ "$t" != 'y' && "$t" != 'yes' && "$t" != 'n' && "$t" != 'no' ]]; then |
---|
| 458 | error "Illegal default answer: $default" |
---|
| 459 | fi |
---|
| 460 | default=$t |
---|
| 461 | shift |
---|
| 462 | ;; |
---|
| 463 | |
---|
| 464 | --timeout) |
---|
| 465 | shift |
---|
| 466 | timeout=$1 |
---|
| 467 | if [[ ! "$timeout" ]]; then error "Missing timeout value"; fi |
---|
| 468 | #if [[ ! "$timeout" =~ ^[0-9][0-9]*$ ]]; then error "Illegal timeout value: $timeout"; fi |
---|
| 469 | shift |
---|
| 470 | ;; |
---|
| 471 | |
---|
| 472 | -*) |
---|
| 473 | error "Unrecognized option: $1" |
---|
| 474 | ;; |
---|
| 475 | |
---|
| 476 | *) |
---|
| 477 | break |
---|
| 478 | ;; |
---|
| 479 | esac |
---|
| 480 | done |
---|
| 481 | |
---|
| 482 | if [[ $timeout -ne 0 && ! "$default" ]]; then |
---|
| 483 | error "Non-zero timeout requires a default answer" |
---|
| 484 | fi |
---|
| 485 | |
---|
| 486 | if [[ ! "$*" ]]; then error "Missing question"; fi |
---|
| 487 | |
---|
| 488 | while [[ $ok -eq 0 ]] |
---|
| 489 | do |
---|
| 490 | if [[ $timeout -ne 0 ]]; then |
---|
| 491 | if ! read -t $timeout -p "$*" ans; then |
---|
| 492 | ans=$default |
---|
| 493 | else |
---|
| 494 | # Turn off timeout if answer entered. |
---|
| 495 | timeout=0 |
---|
| 496 | if [[ ! "$ans" ]]; then ans=$default; fi |
---|
| 497 | fi |
---|
| 498 | else |
---|
| 499 | read -p "$*" ans |
---|
| 500 | if [[ ! "$ans" ]]; then |
---|
| 501 | ans=$default |
---|
| 502 | else |
---|
| 503 | ans=$(echo $ans | tr '[:upper:]' '[:lower:]') |
---|
| 504 | fi |
---|
| 505 | fi |
---|
| 506 | |
---|
| 507 | if [[ "$ans" == 'y' || "$ans" == 'yes' || "$ans" == 'n' || "$ans" == 'no' ]]; then |
---|
| 508 | ok=1 |
---|
| 509 | fi |
---|
| 510 | |
---|
| 511 | if [[ $ok -eq 0 ]]; then warning "Valid answers are: yes y no n"; fi |
---|
| 512 | done |
---|
| 513 | [[ "$ans" = "y" || "$ans" == "yes" ]] |
---|
| 514 | } |
---|
| 515 | |
---|
[924e2f1] | 516 | |
---|
| 517 | ### # borrar |
---|
| 518 | |
---|
| 519 | ogConectROOTSERVER () |
---|
| 520 | { |
---|
| 521 | local OPTIONS |
---|
| 522 | #params a detectar |
---|
| 523 | if [ $ogrepo ] |
---|
| 524 | then |
---|
| 525 | # Validar si la ip es correcta |
---|
| 526 | ROOTREPO=$ogrepo |
---|
| 527 | else |
---|
| 528 | ROOTREPO=$ROOTSERVER |
---|
| 529 | fi |
---|
| 530 | |
---|
| 531 | case "$ogprotocol" in |
---|
| 532 | local) |
---|
| 533 | echo "Montar imagen del sistema root desde dispositivo local" |
---|
| 534 | for i in $(blkid /dev/s* | grep ogClient | awk -F: '{print $2}' | tr -d \"); do export $i; done |
---|
| 535 | mount -t $TYPE LABEL=$LABEL $LOCALROOTBOOT |
---|
| 536 | if [ $? != 0 ] |
---|
| 537 | then |
---|
| 538 | mount -t reiserfs LABEL=CACHE $LOCALROOTBOOT |
---|
| 539 | export LOCALMEDIA=CACHE |
---|
| 540 | fi |
---|
| 541 | ;; |
---|
| 542 | httfs) |
---|
| 543 | echo "protocolo httfs aun no soportado" |
---|
| 544 | ;; |
---|
| 545 | sshfs) |
---|
| 546 | echo "protocolo sshfs aun no soportado" |
---|
| 547 | ;; |
---|
| 548 | smb) |
---|
| 549 | echo "Preparando conexión con el Repositorio $ROOTSERVER por $ogprotocol" |
---|
| 550 | OPTIONS=" -o user=opengnsys,pass=og" |
---|
| 551 | mount.cifs //${ROOTSERVER}/${SMBROOTBOOT} $LOCALROOTBOOT $OPTIONS |
---|
| 552 | mount.cifs //${ROOTSERVER}/${SMBCLIENTDIR} $LOCALCLIENTDIR $OPTIONS |
---|
| 553 | mount.cifs //${ROOTSERVER}/${SMBLOGDIR} $LOCALLOGDIR $OPTIONS |
---|
| 554 | |
---|
| 555 | mount.cifs //${ROOTREPO}/${SMBIMGDIR} $LOCALIMGDIR ${OPTIONS},ro |
---|
| 556 | ;; |
---|
| 557 | nfs) |
---|
| 558 | echo "Preparando conexión con el Repositorio $ROOTSERVER por $ogprotocol" |
---|
| 559 | nfsmount -o nolock $ROOTSERVER:$NFSROOTBOOT $LOCALROOTBOOT |
---|
| 560 | nfsmount -o nolock,ro $ROOTSERVER:$NFSCLIENTDIR $LOCALCLIENTDIR |
---|
| 561 | nfsmount -o nolock $ROOTSERVER:$NFSLOGDIR $LOCALLOGDIR |
---|
| 562 | |
---|
| 563 | nfsmount -o nolock,ro $ROOTREPO:$NFSIMGDIR $LOCALIMGDIR |
---|
| 564 | ;; |
---|
| 565 | esac |
---|
| 566 | } |
---|
| 567 | |
---|
| 568 | ogMerge2ndFile() |
---|
| 569 | { |
---|
| 570 | if [ -f $LOCALROOTBOOT/ogclient/ogclient.sqfs ] |
---|
| 571 | then |
---|
| 572 | cat /proc/mounts > /tmp/mtab.preunion |
---|
| 573 | if [ "$og2nd" == "img" ] |
---|
| 574 | then |
---|
| 575 | #para acceder al img |
---|
| 576 | losetup /dev/loop0 $LOCALROOTBOOT/ogclient/ogclient.img -o 32256 |
---|
| 577 | mount /dev/loop0 $LOCALROOTIMG |
---|
| 578 | else |
---|
| 579 | ## para acceder al squashfs |
---|
| 580 | mount $LOCALROOTBOOT/ogclient/ogclient.sqfs $LOCALROOTIMG -t squashfs -o loop |
---|
| 581 | fi |
---|
| 582 | for i in etc var lib bin sbin usr root boot; do |
---|
| 583 | unionmount $i |
---|
| 584 | done |
---|
| 585 | cat /tmp/mtab.preunion > /etc/mtab |
---|
| 586 | else |
---|
| 587 | echo "Fichero imagen del cliente no encontrado" |
---|
| 588 | return 1 |
---|
| 589 | fi |
---|
| 590 | } |
---|
[58828de] | 591 | |
---|
[924e2f1] | 592 | unionmount() |
---|
| 593 | { |
---|
| 594 | tmpdir=/$1 #dir |
---|
| 595 | FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" |
---|
| 596 | UNION_OPT="-o cow -o noinitgroups" |
---|
| 597 | UBIN="unionfs-fuse" |
---|
| 598 | #UPATH="/unionfs" |
---|
| 599 | #LOCALROOTIMG="/opt/og2fs/2ndfs" |
---|
| 600 | #LOCALROOTRAM="/opt/og2fs/1stfs" #/unionfs/host #punto de montaje para unionfs |
---|
| 601 | #LOCALROOTUNION=/opt/og2fs/unionfs/" #/unionfs/union #punto de union entreo LOCALROOTIMG y LOCALROOTRAM |
---|
| 602 | #mkdir -p $LOCALROOTRAM #/unionfs/host |
---|
| 603 | #mkdir -p $LOCALROOTUNION #/unionfs/union |
---|
| 604 | mkdir -p $LOCALROOTRAM$tmpdir |
---|
| 605 | #mount --bind /$tmpdir $LOCALROOTRAM$tmpdir |
---|
| 606 | U1STDIR="${LOCALROOTRAM}${tmpdir}=RW" |
---|
| 607 | U2NDDIR="${LOCALROOTIMG}${tmpdir}=RO" |
---|
| 608 | UNIONDIR=$LOCALROOTUNION$tmpdir |
---|
| 609 | mkdir -p $UNIONDIR |
---|
| 610 | $UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR |
---|
| 611 | mount --bind $UNIONDIR $tmpdir |
---|
| 612 | } |
---|
| 613 | |
---|
| 614 | |
---|
| 615 | unionmountOLD() |
---|
| 616 | { |
---|
| 617 | FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" |
---|
| 618 | UNION_OPT="-o cow -o noinitgroups" |
---|
| 619 | UPATH="/unionfs" |
---|
| 620 | UBIN="unionfs-fuse" |
---|
| 621 | mkdir -p /unionfs/host |
---|
| 622 | mkdir -p /unionfs/union |
---|
| 623 | dir=$1 |
---|
| 624 | mkdir -p /unionfs/host/$dir |
---|
| 625 | #mount --bind /$dir /unionfs/host/$dir |
---|
| 626 | mkdir -p /unionfs/union/$dir |
---|
| 627 | host="/unionfs/host/${dir}=RW" |
---|
| 628 | common="/opt/og2fs/${dir}=RO" |
---|
| 629 | $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir |
---|
| 630 | mount --bind /unionfs/union/$dir /$dir |
---|
| 631 | } |
---|