From b95b589d0ca2195aada0712b5b4d1d317d9e1ace Mon Sep 17 00:00:00 2001 From: Natalia Serrano Date: Wed, 6 Aug 2025 10:42:15 +0200 Subject: [PATCH] refs #2594 save a log of early init --- CHANGELOG.md | 6 + .../etc/initramfs-tools/scripts/VERSION.txt | 2 +- .../etc/initramfs-tools/scripts/ogfunctions | 909 ++++++++++-------- includes/etc/initramfs-tools/scripts/oginit | 211 ++-- 4 files changed, 596 insertions(+), 532 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 629ce30..a4c0108 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.12.1] - 2025-08-05 + +### Added + +- Save a log of early init (oginit/ogfuncions) + ## [3.12.0] - 2025-07-31 ### Changed diff --git a/includes/etc/initramfs-tools/scripts/VERSION.txt b/includes/etc/initramfs-tools/scripts/VERSION.txt index 332983e..4d4a0ee 100644 --- a/includes/etc/initramfs-tools/scripts/VERSION.txt +++ b/includes/etc/initramfs-tools/scripts/VERSION.txt @@ -1 +1 @@ -OpenGnsys Client 3.12.0 +OpenGnsys Client 3.12.1 diff --git a/includes/etc/initramfs-tools/scripts/ogfunctions b/includes/etc/initramfs-tools/scripts/ogfunctions index 725d773..f3f2e99 100644 --- a/includes/etc/initramfs-tools/scripts/ogfunctions +++ b/includes/etc/initramfs-tools/scripts/ogfunctions @@ -19,20 +19,25 @@ #*/ ## ogGetNetworkDevice () { +echo "ogGetNetworkDevice()" >>/tmp/oginit.log # Mantener retrocompatibilidad con interfaces antiguas tipo eth. case "$1" in - eth0) ind=1 ;; - eth1) ind=2 ;; - eth2) ind=3 ;; - *) ind="$1" ;; + eth0) ind=1 ;; + eth1) ind=2 ;; + eth2) ind=3 ;; + *) ind="$1" ;; esac +echo "ind ($ind)" >>/tmp/oginit.log # Buscar el dispositivo del índice. dev="" for f in /sys/class/net/*/uevent; do - source $f - let aux=$IFINDEX-1 - [ "$ind" = "$INTERFACE" -o "$ind" = $aux ] && dev="$INTERFACE" + echo "source $f" >>/tmp/oginit.log + source $f + let aux=$IFINDEX-1 + echo "aux ($aux)" >>/tmp/oginit.log + [ "$ind" = "$INTERFACE" -o "$ind" = $aux ] && dev="$INTERFACE" done +echo "dev ($dev)" >>/tmp/oginit.log [ -n "$dev" ] && echo "$dev" } @@ -50,20 +55,22 @@ done #*/ ## ogExportKernelParameters () { - GLOBAL="cat /proc/cmdline" - for i in `${GLOBAL}` - do - echo $i | grep "=" > /dev/null && export $i - done - # Sustituir índice de interfaz de red por su dispositivo. - DEVIND=$(echo "$ip" | cut -f6 -d:) - if [ -n "$DEVIND" ]; then - PRE=$(echo "$ip" | cut -f1-5 -d:) - POST=$(echo "$ip" | cut -f7- -d:) - DEVICE=$(ogGetNetworkDevice $DEVIND) - [ -n "$DEVICE" ] && export ip="$PRE:$DEVICE:${POST:-none}" - fi - return 0 + echo "ogExportKernelParameters()" >>/tmp/oginit.log + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}`; do + echo $i | grep "=" > /dev/null && export $i && echo "export $i" >>/tmp/oginit.log + done + # Sustituir índice de interfaz de red por su dispositivo. + DEVIND=$(echo "$ip" | cut -f6 -d:) + echo "DEVIND ($DEVIND)" >>/tmp/oginit.log + if [ -n "$DEVIND" ]; then + PRE=$(echo "$ip" | cut -f1-5 -d:) + POST=$(echo "$ip" | cut -f7- -d:) + DEVICE=$(ogGetNetworkDevice $DEVIND) + echo "DEVICE ($DEVICE)" >>/tmp/oginit.log + [ -n "$DEVICE" ] && export ip="$PRE:$DEVICE:${POST:-none}" && echo "export ip=$PRE:$DEVICE:${POST:-none}" >>/tmp/oginit.log + fi + return 0 } @@ -80,29 +87,30 @@ ogExportKernelParameters () #*/ ## ogChangeVideoResolution () { +echo "ogChangeVideoResolution()" >>/tmp/oginit.log # Variables locales. local DRIVER MODE # Mostrar resolución y driver por defecto si solo hay una opción disponible. if [ $(grep -c "" /sys/class/graphics/fb0/modes) -eq 1 ]; then - echo "Default screen mode: $(cat /sys/class/graphics/fb0/modes),$(cat /sys/class/graphics/fb0/bits_per_pixel)bpp$(lsmod|awk '$1=="video" && $3>0 {printf " (%s)",$4}')." + echo "Default screen mode: $(cat /sys/class/graphics/fb0/modes),$(cat /sys/class/graphics/fb0/bits_per_pixel)bpp$(lsmod|awk '$1=="video" && $3>0 {printf " (%s)",$4}')." else - # Obtener driver y resolución. - DRIVER="$(echo $video|cut -f1 -d:)" - MODE="$(echo $video|cut -f2 -d:)" - case "$DRIVER" in - # Cambiar resolución para driver "uvesafb". - uvesafb) - # Obtener modo por defecto si parámetro "video=uvesafb:D". - [ "$MODE" == "D" ] && MODE=$(awk -F: '$1=="D" {print $2; nextfile}' /sys/class/graphics/fb0/modes) - # Cambiar resolución según valor del parámetro "video". - grep ":$(echo ${MODE/p/}|cut -f1 -d-)p" /sys/class/graphics/fb0/modes | head -1 > /sys/class/graphics/fb0/mode 2>&1 - echo "$(echo $MODE|cut -f2 -d-)" > /sys/class/graphics/fb0/bits_per_pixel 2>&1 - echo "Screen mode: $(cat /sys/class/graphics/fb0/mode),$(cat /sys/class/graphics/fb0/bits_per_pixel)bpp." - ;; - # Resolución por defecto para el resto de casos. - *) echo "Unknown video driver, using default mode." - ;; - esac + # Obtener driver y resolución. + DRIVER="$(echo $video|cut -f1 -d:)" + MODE="$(echo $video|cut -f2 -d:)" + case "$DRIVER" in + # Cambiar resolución para driver "uvesafb". + uvesafb) + # Obtener modo por defecto si parámetro "video=uvesafb:D". + [ "$MODE" == "D" ] && MODE=$(awk -F: '$1=="D" {print $2; nextfile}' /sys/class/graphics/fb0/modes) + # Cambiar resolución según valor del parámetro "video". + grep ":$(echo ${MODE/p/}|cut -f1 -d-)p" /sys/class/graphics/fb0/modes | head -1 > /sys/class/graphics/fb0/mode 2>&1 + echo "$(echo $MODE|cut -f2 -d-)" > /sys/class/graphics/fb0/bits_per_pixel 2>&1 + echo "Screen mode: $(cat /sys/class/graphics/fb0/mode),$(cat /sys/class/graphics/fb0/bits_per_pixel)bpp." + ;; + # Resolución por defecto para el resto de casos. + *) echo "Unknown video driver, using default mode." + ;; + esac fi } @@ -119,66 +127,67 @@ fi #*/ ## ogExportVarEnvironment () { - export CFGINITRD="/tmp/initrd.cfg" - OGPROTOCOL="${ogprotocol:-smb}" - [ "$ogunit" != "" ] && OGUNIT="/$ogunit" - # OPTIONS Para samba y local (a nfs no le afecta) - export OPTIONS=" -o user=opengnsys,pass=og" - DEFOGLIVE="ogclient" - export OGLIVEDIR="${oglivedir:-$DEFOGLIVE}" && echo "OGLIVEDIR=$OGLIVEDIR" >> $CFGINITRD - case "$OGPROTOCOL" in - nfs|NFS) - export SRCOGLIVE="/var/lib/tftpboot" && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD - export SRCOGSHARE="/opt/opengnsys/client" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD - export SRCOGLOG="/opt/opengnsys/log/clients" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD - export SRCOGIMAGES="/opt/opengnsys/images$OGUNIT" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD - ;; - smb|SMB|cifs|CIFS|samba|SAMBA) - export SRCOGLIVE="tftpboot" && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD - export SRCOGSHARE="ogclient" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD - export SRCOGLOG="oglog" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD - export SRCOGIMAGES="ogimages$OGUNIT" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD - ;; - local|LOCAL) - # Ponemos variables SRC compatibles con smb y nfs. - export SRCOGLIVE="local" - export SRCOGSHARE="client" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD - export SRCOGLOG="log" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD - export SRCOGIMAGES="images" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD - ;; - esac - #punto de acceso al boot-tools live - export DSTOGLIVE="/opt/oglive/tftpboot" - #punto de montaje para unionfs - export OGLIVERAMFS="/opt/oglive/ramfs" && echo "OGLIVERAMFS=$OGLIVERAMFS" >> $CFGINITRD - #punto de montaje donde se accede al 2nd FS mediante loop - export OGLIVEROOTFS="/opt/oglive/rootfs" && echo "OGLIVEROOTFS=$OGLIVEROOTFS" >> $CFGINITRD - #punto de union entre LOCALROOTIMG y LOCALROOTRAM - export OGLIVEUNIONFS="/opt/oglive/unionfs" && echo "OGLIVEUNIONFS=$OGLIVEUNIONFS" >> $CFGINITRD - #etiquta para los dispositivos offline - export OGLIVELABEL="ogClient" + echo "ogExportVarEnvironment()" >>/tmp/oginit.log + export CFGINITRD="/tmp/initrd.cfg" + OGPROTOCOL="${ogprotocol:-smb}" + [ "$ogunit" != "" ] && OGUNIT="/$ogunit" + # OPTIONS Para samba y local (a nfs no le afecta) + export OPTIONS=" -o user=opengnsys,pass=og" + DEFOGLIVE="ogclient" + export OGLIVEDIR="${oglivedir:-$DEFOGLIVE}" && echo "OGLIVEDIR=$OGLIVEDIR" >> $CFGINITRD + echo "CFGINITRD ($CFGINITRD) OGPROTOCOL ($OGPROTOCOL) OGUNIT ($OGUNIT) OGLIVEDIR ($OGLIVEDIR)" >>/tmp/oginit.log + export CFGINITRD="/tmp/initrd.cfg" + case "$OGPROTOCOL" in + nfs|NFS) + export SRCOGLIVE="/var/lib/tftpboot" && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD + export SRCOGSHARE="/opt/opengnsys/client" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD + export SRCOGLOG="/opt/opengnsys/log/clients" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD + export SRCOGIMAGES="/opt/opengnsys/images$OGUNIT" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD + ;; + smb|SMB|cifs|CIFS|samba|SAMBA) + export SRCOGLIVE="tftpboot" && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD + export SRCOGSHARE="ogclient" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD + export SRCOGLOG="oglog" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD + export SRCOGIMAGES="ogimages$OGUNIT" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD + ;; + local|LOCAL) + # Ponemos variables SRC compatibles con smb y nfs. + export SRCOGLIVE="local" + export SRCOGSHARE="client" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD + export SRCOGLOG="log" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD + export SRCOGIMAGES="images" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD + ;; + esac + echo "SRCOGLIVE ($SRCOGLIVE) SRCOGSHARE ($SRCOGSHARE) SRCOGLOG ($SRCOGLOG) SRCOGIMAGES ($SRCOGIMAGES)" >>/tmp/oginit.log + export DSTOGLIVE="/opt/oglive/tftpboot" #punto de acceso al boot-tools live + export OGLIVERAMFS="/opt/oglive/ramfs" && echo "OGLIVERAMFS=$OGLIVERAMFS" >> $CFGINITRD #punto de montaje para unionfs + export OGLIVEROOTFS="/opt/oglive/rootfs" && echo "OGLIVEROOTFS=$OGLIVEROOTFS" >> $CFGINITRD #punto de montaje donde se accede al 2nd FS mediante loop + export OGLIVEUNIONFS="/opt/oglive/unionfs" && echo "OGLIVEUNIONFS=$OGLIVEUNIONFS" >> $CFGINITRD #punto de union entre LOCALROOTIMG y LOCALROOTRAM + export OGLIVELABEL="ogClient" #etiquta para los dispositivos offline + echo "DSTOGLIVE ($DSTOGLIVE) OGLIVERAMFS ($OGLIVERAMFS) OGLIVEROOTFS ($OGLIVEROOTFS) OGLIVEUNIONFS ($OGLIVEUNIONFS)" >>/tmp/oginit.log - #echo "puntos de montajes para los demas accesos" - #echo "acceso al client, engine, scritps, interfaz" - export DSTOGSHARE="/opt/opengnsys" && echo "DSTOGSHARE=$DSTOGSHARE" >> $CFGINITRD - export DSTOGLOG="/opt/opengnsys/log" && echo "DSTOGLOG=$DSTOGLOG" >> $CFGINITRD - export DSTOGIMAGES="/opt/opengnsys/images" && echo "DSTOGIMAGES=$DSTOGIMAGES" >> $CFGINITRD + #echo "puntos de montajes para los demas accesos" + #echo "acceso al client, engine, scritps, interfaz" + export DSTOGSHARE="/opt/opengnsys" && echo "DSTOGSHARE=$DSTOGSHARE" >> $CFGINITRD + export DSTOGLOG="/opt/opengnsys/log" && echo "DSTOGLOG=$DSTOGLOG" >> $CFGINITRD + export DSTOGIMAGES="/opt/opengnsys/images" && echo "DSTOGIMAGES=$DSTOGIMAGES" >> $CFGINITRD + echo "DSTOGSHARE ($DSTOGSHARE) DSTOGLOG ($DSTOGLOG) DSTOGIMAGES ($DSTOGIMAGES)" >>/tmp/oginit.log - ##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES ogConfigureNetwork. - #DEVICE - #IPV4DDR - #IPV4BROADCAST - #IPV4NETMASK - #IPV4GATEWAY - #HOSTNAME + ##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES ogConfigureNetwork. + #DEVICE + #IPV4DDR + #IPV4BROADCAST + #IPV4NETMASK + #IPV4GATEWAY + #HOSTNAME #INFORMACION de otras variasbles obteneidas desde ogGetROOTSERVER - #ROOTSERVER si ip=dhcp -> ROOTSERVER=NEXT-SERVER; si ip=host:rootserver:gw:mask:hostname:interfaz -> ROOTSERVER=rootserver - #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. - #$OGSERVERLIVE - #$OGSERVERSHARE - #$OGSERVERLOG - #$OGSERVERIMAGES - return 0 + #ROOTSERVER si ip=dhcp -> ROOTSERVER=NEXT-SERVER; si ip=host:rootserver:gw:mask:hostname:interfaz -> ROOTSERVER=rootserver + #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. + #$OGSERVERLIVE + #$OGSERVERSHARE + #$OGSERVERLOG + #$OGSERVERIMAGES + return 0 } @@ -194,12 +203,13 @@ ogExportVarEnvironment () #*/ ## ogConfigureRamfs () { - mkdir -p $DSTOGLIVE - mkdir -p $OGLIVERAMFS - mkdir -p $OGLIVEROOTFS - mkdir -p $OGLIVEUNIONFS + echo "ogConfigureRamfs()" >>/tmp/oginit.log + mkdir -p $DSTOGLIVE + mkdir -p $OGLIVERAMFS + mkdir -p $OGLIVEROOTFS + mkdir -p $OGLIVEUNIONFS - touch /etc/fstab + touch /etc/fstab } @@ -215,11 +225,11 @@ ogConfigureRamfs () #*/ ## ogLoadNetModule () { - if [ -n "$ognetmodule" ] - then - echo "Cargando modulo de red $ognetmodule" - modprobe ${ognetmodule} - fi + echo "ogLoadNetModule()" >>/tmp/oginit.log + if [ -n "$ognetmodule" ]; then + echo "Cargando modulo de red $ognetmodule" |tee -a /tmp/oginit.log + modprobe ${ognetmodule} + fi } @@ -235,80 +245,96 @@ ogLoadNetModule () #*/ ## ogPostConfigureFS() { - # configuramos el /etc/hostname. - echo $HOSTNAME > /etc/hostname + echo "ogPostConfigureFS()" >>/tmp/oginit.log + echo "IPV4ADDR ($IPV4ADDR) HOSTNAME ($HOSTNAME)" >>/tmp/oginit.log + # configuramos el /etc/hostname. + echo $HOSTNAME > /etc/hostname - #configuramos el /etc/hosts - echo "127.0.0.1 localhost" > /etc/hosts - echo "$IPV4ADDR $HOSTNAME" >> /etc/hosts + #configuramos el /etc/hosts + echo "127.0.0.1 localhost" > /etc/hosts + echo "$IPV4ADDR $HOSTNAME" >> /etc/hosts - #configuramos el host.conf - echo "order hosts,bind" > /etc/host.conf - echo "multi on" >> /etc/host.conf + #configuramos el host.conf + echo "order hosts,bind" > /etc/host.conf + echo "multi on" >> /etc/host.conf - #configuramos el dns anterior ubuntu 12.04 (parámetro del Kernel "ogdns=IP_DNS") - if [ -n "$ogdns" ]; then - mkdir -p /run/resolvconf - echo "nameserver $ogdns" > /run/resolvconf/resolv.conf - fi + #configuramos el dns anterior ubuntu 12.04 (parámetro del Kernel "ogdns=IP_DNS") + if [ -n "$ogdns" ]; then + mkdir -p /run/resolvconf + echo "writing 'nameserver $ogdns' to /run/resolvconf/resolv.conf" >>/tmp/oginit.log + echo "nameserver $ogdns" > /run/resolvconf/resolv.conf + fi - #configuramos el uso del servicio http proxy (parámetro del Kernel "ogproxy=URL_Proxy") - if [ -n "${ogproxy}" ]; then - export http_proxy="$ogproxy" - export https_proxy="$ogproxy" - export ftp_proxy="$ogproxy" - export ftps_proxy="$ogproxy" - fi + #configuramos el uso del servicio http proxy (parámetro del Kernel "ogproxy=URL_Proxy") + echo "ogproxy ($ogproxy)" >>/tmp/oginit.log + if [ -n "${ogproxy}" ]; then + export http_proxy="$ogproxy" + export https_proxy="$ogproxy" + export ftp_proxy="$ogproxy" + export ftps_proxy="$ogproxy" + fi - # configuramos el /etc/networks - #read -e NETIP NETDEFAULT <<<$(route -n | grep eth0 | awk -F" " '{print $1}') - NETIP=$(route -n | grep eth0 | awk -F" " '{print $1}') && NETIP=$(echo $NETIP | cut -f1 -d" ") - echo "default 0.0.0.0" > /etc/networks - echo "loopback 127.0.0.0" >> /etc/networks - echo "link-local 169.254.0.0" >> /etc/networks - echo "localnet $NETIP" >> /etc/networks - #route + # configuramos el /etc/networks + #read -e NETIP NETDEFAULT <<<$(route -n | grep eth0 | awk -F" " '{print $1}') + NETIP=$(route -n | grep eth0 | awk -F" " '{print $1}') && NETIP=$(echo $NETIP | cut -f1 -d" ") + echo "NETIP ($NETIP)" >>/tmp/oginit.log + echo "default 0.0.0.0" > /etc/networks + echo "loopback 127.0.0.0" >> /etc/networks + echo "link-local 169.254.0.0" >> /etc/networks + echo "localnet $NETIP" >> /etc/networks + #route - #echo "ogLive1.0.2" > /etc/debian_chroot + #echo "ogLive1.0.2" > /etc/debian_chroot - #enlace si iniciamos desde ogprotocolo=local { cdrom, usb, cache } . - # monta el raiz del dispositivo local en /opt/og2fs/tftpboot - acceso al fichero .sqfs - # y monta el sistema root sqfs en /opt/og2fs/2ndfs - #[ "$LOCALMEDIA" == "CACHE" ] && ln -s $DSTOGLIVE /opt/opengnsys/cache - #[ "$ogprotocol" == "local" ] && ln -s ${OGLIVEROOTFS}/opt/opengnsys/* /opt/opengnsys/ - if [ "$ogprotocol" == "local" ]; then - # Creamos los subdirectorios de /opt/opengnsys/ - [ "$ogstatus" == "offline" ] && ln -s ${OGLIVEROOTFS}/opt/opengnsys/* /opt/opengnsys/ - # Montamos CACHE - # Si existe particion identificada como CACHE se monta. - DEVICECACHE=$(blkid -L "CACHE") - if [ "$DEVICECACHE" != "" ]; then - # Se monta diferente segun el dispositivo de cache igual o no al de ogclient. - DEVICEOGLIVE=$(df |grep $DSTOGLIVE|awk '{print $1}') - if [[ "$DEVICECACHE" == "*$DEVICEOGLIVE*" ]];then - mount --bind $DSTOGLIVE /opt/opengnsys/cache - else - mount $DEVICECACHE /opt/opengnsys/cache - fi - if [ "$ogstatus" == "offline" ]; then - [ -d /opt/opengnsys/cache/log ] || mkdir /opt/opengnsys/cache/log - mount --bind /opt/opengnsys/cache/log /opt/opengnsys/log - fi - fi - # Montamos REPO - if [ "$ogstatus" == "offline" ]; then - # Si estatus distinto de online buscamos un dispositivo con etiqueta repo - # y si no existe montamos la cache como repo (si existe). - TYPE=$(blkid | grep REPO | awk -F"TYPE=" '{print $2}' | tr -d \") - if [ "$TYPE" == "" ]; then - [ -d "/opt/opengnsys/cache$DSTOGIMAGES" ] && mount --bind /opt/opengnsys/cache$DSTOGIMAGES $DSTOGIMAGES - else - mount -t $TYPE LABEL=REPO $DSTOGIMAGES &>/dev/null - fi - fi - fi + #enlace si iniciamos desde ogprotocolo=local { cdrom, usb, cache } . + # monta el raiz del dispositivo local en /opt/og2fs/tftpboot - acceso al fichero .sqfs + # y monta el sistema root sqfs en /opt/og2fs/2ndfs + echo "LOCALMEDIA ($LOCALMEDIA) ogprotocol ($ogprotocol) ogstatus ($ogstatus)" >>/tmp/oginit.log + #[ "$LOCALMEDIA" == "CACHE" ] && ln -s $DSTOGLIVE /opt/opengnsys/cache + #[ "$ogprotocol" == "local" ] && ln -s ${OGLIVEROOTFS}/opt/opengnsys/* /opt/opengnsys/ + if [ "$ogprotocol" == "local" ]; then + # Creamos los subdirectorios de /opt/opengnsys/ + [ "$ogstatus" == "offline" ] && ln -s ${OGLIVEROOTFS}/opt/opengnsys/* /opt/opengnsys/ + # Montamos CACHE + # Si existe particion identificada como CACHE se monta. + DEVICECACHE=$(blkid -L "CACHE") + echo "DEVICECACHE ($DEVICECACHE)" >>/tmp/oginit.log + if [ "$DEVICECACHE" != "" ]; then + # Se monta diferente segun el dispositivo de cache igual o no al de ogclient. + DEVICEOGLIVE=$(df |grep $DSTOGLIVE|awk '{print $1}') + echo "DEVICEOGLIVE ($DEVICEOGLIVE)" >>/tmp/oginit.log + if [[ "$DEVICECACHE" == "*$DEVICEOGLIVE*" ]];then + echo "running 'mount --bind $DSTOGLIVE /opt/opengnsys/cache'" >>/tmp/oginit.log + mount --bind $DSTOGLIVE /opt/opengnsys/cache + else + echo "running 'mount $DEVICECACHE /opt/opengnsys/cache'" >>/tmp/oginit.log + mount $DEVICECACHE /opt/opengnsys/cache + fi + if [ "$ogstatus" == "offline" ]; then + [ -d /opt/opengnsys/cache/log ] || mkdir /opt/opengnsys/cache/log + echo "running 'mount --bind /opt/opengnsys/cache/log /opt/opengnsys/log'" >>/tmp/oginit.log + mount --bind /opt/opengnsys/cache/log /opt/opengnsys/log + fi + fi + # Montamos REPO + if [ "$ogstatus" == "offline" ]; then + # Si estatus distinto de online buscamos un dispositivo con etiqueta repo + # y si no existe montamos la cache como repo (si existe). + TYPE=$(blkid | grep REPO | awk -F"TYPE=" '{print $2}' | tr -d \") + echo "TYPE ($TYPE)" >>/tmp/oginit.log + if [ "$TYPE" == "" ]; then + if [ -d "/opt/opengnsys/cache$DSTOGIMAGES" ]; then + echo "running 'mount --bind /opt/opengnsys/cache$DSTOGIMAGES $DSTOGIMAGES'" >>/tmp/oginit.log + mount --bind /opt/opengnsys/cache$DSTOGIMAGES $DSTOGIMAGES + fi + else + echo "running 'mount -t $TYPE LABEL=REPO $DSTOGIMAGES'" >>/tmp/oginit.log + mount -t $TYPE LABEL=REPO $DSTOGIMAGES &>/dev/null + fi + fi + fi - #Montamos un directorio temporal para permitir instalacion de softare desde el comando apt-get (parametor kernel "ogtmpfs=50" valor en megas + #Montamos un directorio temporal para permitir instalacion de softare desde el comando apt-get (parametor kernel "ogtmpfs=50" valor en megas ogtmpfs="${ogtmpfs:-15}" #mount tmpfs /var/cache/apt/archives -t tmpfs -o size=${ogtmpfs}M mkdir -p /var/cache/apt/archives/partial @@ -323,7 +349,6 @@ ogPostConfigureFS() mkdir -p /dev/shm mount tmpfs -t tmpfs /dev/shm chmod 1777 /dev/shm - } @@ -345,36 +370,41 @@ ogPostConfigureFS() #*/ ## ogGetROOTSERVER () { - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi + echo "ogGetROOTSERVER()" >>/tmp/oginit.log + echo "NFSROOT ($NFSROOT)" >>/tmp/oginit.log + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - export ROOTSERVER - echo "ROOTSERVER=$ROOTSERVER" >> $CFGINITRD + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + echo "NFSROOT now ($NFSROOT)" >>/tmp/oginit.log + export ROOTSERVER + echo "ROOTSERVER=$ROOTSERVER" >> $CFGINITRD + echo "ROOTSERVER ($ROOTSERVER)" >>/tmp/oginit.log - #si oglive no oglive=R - export OGSERVERIMAGES="${ogrepo:-$ROOTSERVER}" && echo "OGSERVERIMAGES=$OGSERVERIMAGES" >> $CFGINITRD - export OGSERVERSHARE="${ogshare:-$ROOTSERVER}" && echo "OGSERVERSHARE=$OGSERVERSHARE" >> $CFGINITRD - export OGSERVERLOG="${oglog:-$ROOTSERVER}" && echo "OGSERVERLOG=$OGSERVERLOG" >> $CFGINITRD - export OGSERVERLIVE="${oglive:-$OGSERVERIMAGES}" && echo "OGSERVERLIVE=$OGSERVERLIVE" >> $CFGINITRD + #si oglive no oglive=R + export OGSERVERIMAGES="${ogrepo:-$ROOTSERVER}" && echo "OGSERVERIMAGES=$OGSERVERIMAGES" >> $CFGINITRD + export OGSERVERSHARE="${ogshare:-$ROOTSERVER}" && echo "OGSERVERSHARE=$OGSERVERSHARE" >> $CFGINITRD + export OGSERVERLOG="${oglog:-$ROOTSERVER}" && echo "OGSERVERLOG=$OGSERVERLOG" >> $CFGINITRD + export OGSERVERLIVE="${oglive:-$OGSERVERIMAGES}" && echo "OGSERVERLIVE=$OGSERVERLIVE" >> $CFGINITRD + echo "OGSERVERIMAGES ($OGSERVERIMAGES) OGSERVERSHARE ($OGSERVERSHARE) OGSERVERLOG ($OGSERVERLOG) OGSERVERLIVE ($OGSERVERLIVE)" >>/tmp/oginit.log - return 0 + return 0 } @@ -397,51 +427,51 @@ ogGetROOTSERVER () ogUpdateInitrd () { - local OGLIVEDIR - OGLIVEDIR=${oglivedir:-"ogclient"} - cd /tmp - mkdir /tmp/cache - TYPE=$(blkid -po export $(blkid -L CACHE) 2>/dev/null | awk -F= '$1=="TYPE" { print $2}') - # Salir si no se detecta caché. - [ -z "$TYPE" ] && return - mount -t $TYPE LABEL=CACHE /tmp/cache || return - mkdir -p /tmp/cache/boot/$OGLIVEDIR + echo "ogUpdateInitrd()" >>/tmp/oginit.log + local OGLIVEDIR + OGLIVEDIR=${oglivedir:-"ogclient"} + echo "OGLIVEDIR ($OGLIVEDIR)" >>/tmp/oginit.log + cd /tmp + mkdir /tmp/cache + TYPE=$(blkid -po export $(blkid -L CACHE) 2>/dev/null | awk -F= '$1=="TYPE" { print $2}') + echo "TYPE ($TYPE)" >>/tmp/oginit.log + # Salir si no se detecta caché. + [ -z "$TYPE" ] && return + echo "running 'mount -t $TYPE LABEL=CACHE /tmp/cache'" >>/tmp/oginit.log + mount -t $TYPE LABEL=CACHE /tmp/cache || return + echo "running 'mkdir -p /tmp/cache/boot/$OGLIVEDIR'" >>/tmp/oginit.log + mkdir -p /tmp/cache/boot/$OGLIVEDIR + # comparamos los del server + busybox tftp -g -r $OGLIVEDIR/ogvmlinuz.sum $ROOTSERVER + busybox tftp -g -r $OGLIVEDIR/oginitrd.img.sum $ROOTSERVER + SERVERVMLINUZ=`cat ogvmlinuz.sum` + SERVERINITRD=`cat oginitrd.img.sum` - # comparamos los del server - busybox tftp -g -r $OGLIVEDIR/ogvmlinuz.sum $ROOTSERVER - busybox tftp -g -r $OGLIVEDIR/oginitrd.img.sum $ROOTSERVER - SERVERVMLINUZ=`cat ogvmlinuz.sum` - SERVERINITRD=`cat oginitrd.img.sum` + #comparamos los de la cache + CACHEVMLINUZ=`cat /tmp/cache/boot/$OGLIVEDIR/ogvmlinuz.sum` + CACHEINITRD=`cat /tmp/cache/boot/$OGLIVEDIR/oginitrd.img.sum` + echo "MD5 on SERVER: $SERVERVMLINUZ $SERVERINITRD" |tee -a /tmp/oginit.log + echo "MD5 on CACHE: $CACHEVMLINUZ $CACHEINITRD" |tee -a /tmp/oginit.log - #comparamos los de la cache - CACHEVMLINUZ=`cat /tmp/cache/boot/$OGLIVEDIR/ogvmlinuz.sum` - CACHEINITRD=`cat /tmp/cache/boot/$OGLIVEDIR/oginitrd.img.sum` + cd /tmp/cache/boot/$OGLIVEDIR || mkdir -p /tmp/cache/boot/$OGLIVEDIR - echo "MD5 on SERVER: $SERVERVMLINUZ $SERVERINITRD" - echo "MD5 on CACHE: $CACHEVMLINUZ $CACHEINITRD" + if [ "$CACHEVMLINUZ" != "$SERVERVMLINUZ" ]; then + echo "ogvmlinuz updating" |tee -a /tmp/oginit.log + busybox tftp -g -r $OGLIVEDIR/ogvmlinuz $ROOTSERVER + busybox tftp -g -r $OGLIVEDIR/ogvmlinuz.sum $ROOTSERVER + DOREBOOT=true + fi + if [ "$CACHEINITRD" != "$SERVERINITRD" ]; then + echo "oginitrd updating" |tee -a /tmp/oginit.log + busybox tftp -g -r $OGLIVEDIR/oginitrd.img $ROOTSERVER + busybox tftp -g -r $OGLIVEDIR/oginitrd.img.sum $ROOTSERVER + DOREBOOT=true + fi - cd /tmp/cache/boot/$OGLIVEDIR || mkdir -p /tmp/cache/boot/$OGLIVEDIR - - if [ "$CACHEVMLINUZ" != "$SERVERVMLINUZ" ] - then - echo "ogvmlinuz updating" - busybox tftp -g -r $OGLIVEDIR/ogvmlinuz $ROOTSERVER - busybox tftp -g -r $OGLIVEDIR/ogvmlinuz.sum $ROOTSERVER - DOREBOOT=true - fi - if [ "$CACHEINITRD" != "$SERVERINITRD" ] - then - echo "oginitrd updating" - busybox tftp -g -r $OGLIVEDIR/oginitrd.img $ROOTSERVER - busybox tftp -g -r $OGLIVEDIR/oginitrd.img.sum $ROOTSERVER - DOREBOOT=true - fi - - cd /; umount /tmp/cache - - [ "$DOREBOOT" == "true" ] && reboot -f + cd /; umount /tmp/cache + [ "$DOREBOOT" == "true" ] && reboot -f } @@ -462,35 +492,43 @@ ogUpdateInitrd () ogConnect () { - SERVER=$1 - PROTOCOL=$2 - SRC=$3 - DST=$4 - READONLY=$5 + echo "ogConnect()" >>/tmp/oginit.log + SERVER=$1 + PROTOCOL=$2 + SRC=$3 + DST=$4 + READONLY=$5 + echo "SERVER ($SERVER) PROTOCOL ($PROTOCOL) SRC ($SRC) DST ($DST) READONLY ($READONLY)" >>/tmp/oginit.log + OPTIONS_LOG_SAFE=$(echo "$OPTIONS" |sed -e 's/pass=.*/pass=***/') - case "$PROTOCOL" in - nfs) - nfsmount ${SERVER}:${SRC} ${DST} -o nolock${READONLY} 2> /dev/null || mount.nfs ${SERVER}:${SRC} ${DST} -o nolock${READONLY} - ;; - smb) - mount.cifs //${SERVER}/${SRC} ${DST} ${OPTIONS}${READONLY} - ;; - local) - # Comprobamos que estatus sea online y que la variable del server no esta vacia. - if [ "$ogstatus" != "offline" -a "$SERVER" != "" -a "$SRC" != "" ]; then - # Comprobamos que existe un servicio de samba. - smbclient -L $SERVER -N &>/dev/null - if [ $? -eq 0 ]; then - mount.cifs //${SERVER}/og${SRC} ${DST} ${OPTIONS}${READONLY} - fi - # TODO: buscar condicion para NFS - fi - ;; - *) - return 1 - ;; - esac - return $? + case "$PROTOCOL" in + nfs) + echo "running 'nfsmount ${SERVER}:${SRC} ${DST} -o nolock${READONLY} || mount.nfs ${SERVER}:${SRC} ${DST} -o nolock${READONLY}'" >>/tmp/oginit.log + nfsmount ${SERVER}:${SRC} ${DST} -o nolock${READONLY} 2> /dev/null || mount.nfs ${SERVER}:${SRC} ${DST} -o nolock${READONLY} + ;; + smb) + echo "running 'mount.cifs //${SERVER}/${SRC} ${DST} ${OPTIONS_LOG_SAFE}${READONLY}'" >>/tmp/oginit.log + mount.cifs //${SERVER}/${SRC} ${DST} ${OPTIONS}${READONLY} + ;; + local) + # Comprobamos que estatus sea online y que la variable del server no esta vacia. + echo "ogstatus ($ogstatus) SERVER ($SERVER) SRC ($SRC)" >>/tmp/oginit.log + if [ "$ogstatus" != "offline" -a "$SERVER" != "" -a "$SRC" != "" ]; then + # Comprobamos que existe un servicio de samba. + echo "running 'smbclient -L $SERVER -N'" >>/tmp/oginit.log + smbclient -L $SERVER -N &>/dev/null + if [ $? -eq 0 ]; then + echo "running 'mount.cifs //${SERVER}/og${SRC} ${DST} ${OPTIONS_LOG_SAFE}${READONLY}'" >>/tmp/oginit.log + mount.cifs //${SERVER}/og${SRC} ${DST} ${OPTIONS}${READONLY} + fi + # TODO: buscar condicion para NFS + fi + ;; + *) + return 1 + ;; + esac + return $? } @@ -505,25 +543,31 @@ ogConnect () #@date 2011/05/24 ogConnectOgLive () { + echo "ogConnectOgLive()" >>/tmp/oginit.log + echo "SRCOGLIVE ($SRCOGLIVE)" >>/tmp/oginit.log # Si ogprotocol=local, la funcion ogExportVar => SRCOGLIVE=local - if [ "$SRCOGLIVE" == "local" ] - then - echo "Montar imagen del sistema root desde dispositivo local" - for i in $(blkid /dev/s* | grep $OGLIVELABEL | awk -F: '{print $2}' | tr -d \"); do export $i; done - # si local usb| cd con partcion es identificada como label $OGLIVELABEL - mount -t $TYPE LABEL=$OGLIVELABEL $DSTOGLIVE - if [ $? != 0 ] - then - # Si local es particion CACHE es identificada como CACHE - mount LABEL=CACHE $DSTOGLIVE - #export LOCALMEDIA=CACHE - fi - else - # Si ogprotocol es remoto. TODO en smb rw y en nfs ro?? - ogConnect $OGSERVERLIVE $OGPROTOCOL $SRCOGLIVE $DSTOGLIVE - fi + if [ "$SRCOGLIVE" == "local" ]; then + echo "Montar imagen del sistema root desde dispositivo local" |tee -a /tmp/oginit.log + for i in $(blkid /dev/s* | grep $OGLIVELABEL | awk -F: '{print $2}' | tr -d \"); do + echo "export $i" >>/tmp/oginit.log + export $i + done + # si local usb| cd con partcion es identificada como label $OGLIVELABEL + echo "running 'mount -t $TYPE LABEL=$OGLIVELABEL $DSTOGLIVE'" >>/tmp/oginit.log + mount -t $TYPE LABEL=$OGLIVELABEL $DSTOGLIVE + if [ $? != 0 ]; then + # Si local es particion CACHE es identificada como CACHE + echo "mount failed, running 'mount LABEL=CACHE $DSTOGLIVE'" >>/tmp/oginit.log + mount LABEL=CACHE $DSTOGLIVE + #export LOCALMEDIA=CACHE + fi + else + # Si ogprotocol es remoto. TODO en smb rw y en nfs ro?? + echo "running 'ogConnect $OGSERVERLIVE $OGPROTOCOL $SRCOGLIVE $DSTOGLIVE'" >>/tmp/oginit.log + ogConnect $OGSERVERLIVE $OGPROTOCOL $SRCOGLIVE $DSTOGLIVE + fi # Si el montaje ha sido correcto, tanto en local como en remoto. Procedemos con la union - ogMergeLive + ogMergeLive } @@ -538,34 +582,39 @@ ogConnectOgLive () #@date 2011/05/24 ogMergeLive() { +echo "ogMergeLive()" >>/tmp/oginit.log #Si existe en el punto de acceso del del oglive el fichero ogclient.sqfs if [ ! -d $DSTOGLIVE/$OGLIVEDIR ]; then - echo "Usando ogLive por defecto." - export OGLIVEDIR=$DEFOGLIVE + echo "Usando ogLive por defecto." + export OGLIVEDIR=$DEFOGLIVE fi -if [ -f $DSTOGLIVE/$OGLIVEDIR/ogclient.sqfs ] -then - cat /proc/mounts > /tmp/mtab.preunion - if [ "$og2nd" == "img" ] - then - #Montamos el ROOTFS tipo img, para desarrolladores - #TODO: comprobar que se tiene acceso de escritura - losetup /dev/loop0 $DSTOGLIVE/$OGLIVEDIR/ogclient.img -o 32256 - mount /dev/loop0 $OGLIVEROOTFS - else - ## Montamos el ROOTFS tipo squashfs - mount $DSTOGLIVE/$OGLIVEDIR/ogclient.sqfs $OGLIVEROOTFS -t squashfs -o loop - fi +echo "OGLIVEDIR ($OGLIVEDIR) og2nd ($og2nd)" >>/tmp/oginit.log +if [ -f $DSTOGLIVE/$OGLIVEDIR/ogclient.sqfs ]; then + cat /proc/mounts > /tmp/mtab.preunion + if [ "$og2nd" == "img" ]; then + #Montamos el ROOTFS tipo img, para desarrolladores + #TODO: comprobar que se tiene acceso de escritura + echo "running 'losetup /dev/loop0 $DSTOGLIVE/$OGLIVEDIR/ogclient.img -o 32256'" >>/tmp/oginit.log + losetup /dev/loop0 $DSTOGLIVE/$OGLIVEDIR/ogclient.img -o 32256 + echo "running 'mount /dev/loop0 $OGLIVEROOTFS'" >>/tmp/oginit.log + mount /dev/loop0 $OGLIVEROOTFS + else + ## Montamos el ROOTFS tipo squashfs + echo "running 'mount $DSTOGLIVE/$OGLIVEDIR/ogclient.sqfs $OGLIVEROOTFS -t squashfs -o loop'" >>/tmp/oginit.log + mount $DSTOGLIVE/$OGLIVEDIR/ogclient.sqfs $OGLIVEROOTFS -t squashfs -o loop + fi # Realizamos la union entre el ogliveram(initrd) y el ogliverootfs(ogclient.sqfs) # Nota: el orden es muy importante para evitar errores de montaje. - [ -d $OGLIVEROOTFS/lib32 ] && LIBS=lib32 - for i in bin sbin lib $LIBS etc var usr root boot; do - ogUnionLiveDir $i - done - [ -L /etc/mtab ] || cat /tmp/mtab.preunion > /etc/mtab + [ -d $OGLIVEROOTFS/lib32 ] && LIBS=lib32 + echo "LIBS ($LIBS)" >>/tmp/oginit.log + for i in bin sbin lib $LIBS etc var usr root boot; do + echo "ogUnionLiveDir $i" >>/tmp/oginit.log + ogUnionLiveDir $i + done + [ -L /etc/mtab ] || cat /tmp/mtab.preunion > /etc/mtab else - echo "Fichero imagen del cliente no encontrado" - return 1 + echo "Fichero imagen del cliente no encontrado" |tee -a /tmp/oginit.log + return 1 fi } @@ -582,19 +631,23 @@ fi #@date 2011/05/24 ogUnionLiveDir() { - TMPDIR=/$1 #dir - FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" - UNION_OPT="-o cow -o noinitgroups" - UBIN="unionfs-fuse" + echo "ogUnionLiveDir()" >>/tmp/oginit.log + TMPDIR=/$1 #dir + FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" + UNION_OPT="-o cow -o noinitgroups" + UBIN="unionfs-fuse" + echo "TMPDIR ($TMPDIR) FUSE_OPT ($FUSE_OPT) UNION_OPT ($UNION_OPT) UBIN ($UBIN)" >>/tmp/oginit.log - mkdir -p $OGLIVERAMFS$TMPDIR - U1STDIR="${OGLIVERAMFS}${TMPDIR}=RW" - U2NDDIR="${OGLIVEROOTFS}${TMPDIR}=RO" - UNIONDIR=${OGLIVEUNIONFS}${TMPDIR} - ulimit -n 4096 - mkdir -p $UNIONDIR $TMPDIR - $UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR - mount --bind $UNIONDIR $TMPDIR + mkdir -p $OGLIVERAMFS$TMPDIR + U1STDIR="${OGLIVERAMFS}${TMPDIR}=RW" + U2NDDIR="${OGLIVEROOTFS}${TMPDIR}=RO" + UNIONDIR=${OGLIVEUNIONFS}${TMPDIR} + ulimit -n 4096 + mkdir -p $UNIONDIR $TMPDIR + echo "running '$UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR'" >>/tmp/oginit.log + $UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR + echo "running 'mount --bind $UNIONDIR $TMPDIR'" >>/tmp/oginit.log + mount --bind $UNIONDIR $TMPDIR } @@ -614,9 +667,10 @@ ogUnionLiveDir() #*/ ## ogConfigureLoopback() { - # for the portmapper we need localhost - ifconfig lo 127.0.0.1 - #/etc/init.d/portmap start + echo "ogConfigureLoopback()" >>/tmp/oginit.log + # for the portmapper we need localhost + ifconfig lo 127.0.0.1 + #/etc/init.d/portmap start } #/** @@ -631,135 +685,149 @@ ogConfigureLoopback() #*/ ## ogConfigureNetworking() { -#echo "ogConfigureNetworking: Buscando interfaz a configurar DEVICE" -if [ -n "${BOOTIF}" ] -then - #echo " variable BOOTIF exportada con pxelinux.0 con valor $BOOTIF" - IP=$IPOPTS - temp_mac=${BOOTIF#*-} - # convert to typical mac address format by replacing "-" with ":" - bootif_mac="" - IFS='-' - for x in $temp_mac ; do - if [ -z "$bootif_mac" ]; then + echo "ogConfigureNetworking()" >>/tmp/oginit.log +echo "ogConfigureNetworking: Buscando interfaz a configurar DEVICE" >>/tmp/oginit.log +if [ -n "${BOOTIF}" ]; then + echo " variable BOOTIF exportada con pxelinux.0 con valor ($BOOTIF)" >>/tmp/oginit.log + IP=$IPOPTS + temp_mac=${BOOTIF#*-} + # convert to typical mac address format by replacing "-" with ":" + bootif_mac="" + IFS='-' + for x in $temp_mac ; do + if [ -z "$bootif_mac" ]; then bootif_mac="$x" else - bootif_mac="$x:$bootif_mac" + bootif_mac="$x:$bootif_mac" fi - done - unset IFS - # look for devices with matching mac address, and set DEVICE to - # appropriate value if match is found. - for device in /sys/class/net/* ; do - if [ -f "$device/address" ]; then - current_mac=$(cat "$device/address") - if [ "$bootif_mac" = "$current_mac" ]; then - DEVICE=${device##*/} - break - fi - fi - done + done + unset IFS + echo "IP ($IP) bootif_mac ($bootif_mac)" >>/tmp/oginit.log + # look for devices with matching mac address, and set DEVICE to appropriate value if match is found. + for device in /sys/class/net/* ; do + if [ -f "$device/address" ]; then + current_mac=$(cat "$device/address") + if [ "$bootif_mac" = "$current_mac" ]; then + DEVICE=${device##*/} + echo "current_mac ($current_mac) of device ($device) equals bootif_mac ($bootif_mac), setting DEVICE to ($DEVICE)" >>/tmp/oginit.log + break + fi + fi + done else - #echo "variable BOOTIF no exportada, intentamos detectar que interfaz se ha iniciado" - IP=$ip - #TODO Detectar que interfaz se ha iniciado - case "$IP" in - none|off) - return 0 - ;; - ""|on|any) - # Bring up device - DEVICE=1 - ;; - dhcp|bootp|rarp|both) - DEVICE=1 - ;; - *) - DEVICE=`echo $IP | cut -f6 -d:` - ;; - esac + echo "variable BOOTIF no exportada, intentamos detectar que interfaz se ha iniciado" >>/tmp/oginit.log + IP=$ip + echo "IP ($IP)" >>/tmp/oginit.log + #TODO Detectar que interfaz se ha iniciado + case "$IP" in + none|off) + return 0 + ;; + ""|on|any) + # Bring up device + DEVICE=1 + ;; + dhcp|bootp|rarp|both) + DEVICE=1 + ;; + *) + DEVICE=`echo $IP | cut -f6 -d:` + ;; + esac + echo "DEVICE ($DEVICE)" >>/tmp/oginit.log fi DEVICE=$(ogGetNetworkDevice $DEVICE) +echo "DEVICE now ($DEVICE)" >>/tmp/oginit.log if [ -z "${DEVICE}" ]; then - echo "variable DEVICE con valor $DEVICE no encontrada, llamamos de nuevo a ogconfigure_networking" - ogConfigureNetworking + echo "variable DEVICE con valor $DEVICE no encontrada, llamamos de nuevo a ogconfigure_networking" |tee -a /tmp/oginit.log + ogConfigureNetworking fi -[ -n "${DEVICE}" ] && [ -e /run/net-"${DEVICE}".conf ] && return 0 +[ -n "${DEVICE}" ] && [ -e /run/net-"${DEVICE}".conf ] && echo "/run/net-$DEVICE.conf exists" >>/tmp/oginit.log && return 0 #if [ -n "${DEVICE}" ] && [ -e /run/net-"${DEVICE}".conf ]; then -# echo "variable DEVICE con valor $DEVICE y fichero /run/net-$DEVICE encontrados" -# return 0 +# echo "variable DEVICE con valor $DEVICE y fichero /run/net-$DEVICE encontrados" |tee -a /tmp/oginit.log +# return 0 #else -# echo "variable DEVICE con valor $DEVICE encontrada, procedemos a configurala y a crear el fichero /run/net-$DEVICE" +# echo "variable DEVICE con valor $DEVICE encontrada, procedemos a configurala y a crear el fichero /run/net-$DEVICE" |tee -a /tmp/oginit.log #fi # Activamos la interfaz antes de configurar. +echo "running 'ip address flush $DEVICE'" >>/tmp/oginit.log ip address flush $DEVICE +echo "running 'ip link set dev $DEVICE up'" >>/tmp/oginit.log ip link set dev $DEVICE up + # Si no se detecta señal portadora volver a configurar. sleep 1 CARRIER=$(cat /sys/class/net/${DEVICE}/carrier) -if [ "$CARRIER" != "1" ] -then - ogConfigureNetworking +echo "CARRIER ($CARRIER)" >>/tmp/oginit.log +if [ "$CARRIER" != "1" ]; then + ogConfigureNetworking fi # support ip options see linux sources # Documentation/filesystems/nfsroot.txt # Documentation/frv/booting.txt for ROUNDTTT in 2 3 4 6 9 16 25 36 64 100; do - # The NIC is to be configured if this file does not exist. - # Ip-Config tries to create this file and when it succeds - # creating the file, ipconfig is not run again. - if [ -e /run/net-"${DEVICE}".conf ]; then - break; - fi - case "$IP" in - none|off) - return 0 - ;; - ""|on|any) - # Bring up device - echo "Setting $DEVICE with option:on|any and Variable IP= $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} " - ipconfig -t ${ROUNDTTT} ${DEVICE} - ;; - dhcp|bootp|rarp|both) - echo "Setting $DEVICE with option:dhcp|bootp|rarp|both and Variable IP= $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} " - ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} - ;; - *) - echo "Setting $DEVICE with option * and Variable IP= $IP: ipconfig -t ${ROUNDTTT} -d $IP " - ipconfig -t ${ROUNDTTT} -d $IP - # grab device entry from ip option - NEW_DEVICE=${IP#*:*:*:*:*:*} - if [ "${NEW_DEVICE}" != "${IP}" ]; then - NEW_DEVICE=${NEW_DEVICE%:*} - else - # wrong parse, possibly only a partial string - NEW_DEVICE= - fi - if [ -n "${NEW_DEVICE}" ]; then - DEVICE="${NEW_DEVICE}" - fi - ;; - esac + echo "ROUNDTTT ($ROUNDTTT)" >>/tmp/oginit.log + # The NIC is to be configured if this file does not exist. + # Ip-Config tries to create this file and when it succeds creating the file, ipconfig is not run again. + if [ -e /run/net-"${DEVICE}".conf ]; then + echo "/run/net-$DEVICE.conf exists" >>/tmp/oginit.log + break; + fi + echo "IP ($IP)" >>/tmp/oginit.log + case "$IP" in + none|off) + return 0 + ;; + ""|on|any) + # Bring up device + echo "Setting $DEVICE with option:on|any and Variable IP= $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} " |tee -a /tmp/oginit.log + ipconfig -t ${ROUNDTTT} ${DEVICE} + ;; + dhcp|bootp|rarp|both) + echo "Setting $DEVICE with option:dhcp|bootp|rarp|both and Variable IP= $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} " |tee -a /tmp/oginit.log + ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} + ;; + *) + echo "Setting $DEVICE with option * and Variable IP= $IP: ipconfig -t ${ROUNDTTT} -d $IP " |tee -a /tmp/oginit.log + ipconfig -t ${ROUNDTTT} -d $IP + # grab device entry from ip option + NEW_DEVICE=${IP#*:*:*:*:*:*} + if [ "${NEW_DEVICE}" != "${IP}" ]; then + NEW_DEVICE=${NEW_DEVICE%:*} + else + # wrong parse, possibly only a partial string + NEW_DEVICE= + fi + echo "NEW_DEVICE ($NEW_DEVICE)" >>/tmp/oginit.log + if [ -n "${NEW_DEVICE}" ]; then + DEVICE="${NEW_DEVICE}" + fi + ;; + esac done # source ipconfig output +echo "DEVICE ($DEVICE)" >>/tmp/oginit.log if [ -n "${DEVICE}" ]; then - export DEVICE - export DEVICECFG="/run/net-${DEVICE}.conf" - # En algunos casos, el fichero de configuración está en /tmp. - [ ! -f $DEVICECFG -a -f ${DEVICECFG/run/tmp} ] && mv ${DEVICECFG/run/tmp} $DEVICECFG - source $DEVICECFG - echo "DEVICE=$DEVICE" >> $CFGINITRD - echo "DEVICECFG=$DEVICECFG" >> $CFGINITRD - echo "exportando variable DEVICE con valor = $DEVICE y DEVICECFG con valor $DEVICECFG" - # Compatibilidad con versiones anteriores. - ln -fs $DEVICECFG /tmp + export DEVICE + export DEVICECFG="/run/net-${DEVICE}.conf" + # En algunos casos, el fichero de configuración está en /tmp. + [ ! -f $DEVICECFG -a -f ${DEVICECFG/run/tmp} ] && mv ${DEVICECFG/run/tmp} $DEVICECFG + echo "source'ing DEVICECFG ($DEVICECFG)" >>/tmp/oginit.log + source $DEVICECFG + echo "DEVICE=$DEVICE" >> $CFGINITRD + echo "DEVICECFG=$DEVICECFG" >> $CFGINITRD + echo "exportando variable DEVICE con valor = ($DEVICE) y DEVICECFG con valor ($DEVICECFG)" + # Compatibilidad con versiones anteriores. + ln -fs $DEVICECFG /tmp else - # source any interface as not exaclty specified - source /run/net-*.conf + # source any interface as not exaclty specified + NET_STAR=/run/net-*.conf + echo "source'ing ($NET_STAR)" >>/tmp/oginit.log + source /run/net-*.conf fi } @@ -777,6 +845,7 @@ fi #*/ ## ogYesNo() { + echo "ogYesNo()" >>/tmp/oginit.log local ans local ok=0 local timeout=0 diff --git a/includes/etc/initramfs-tools/scripts/oginit b/includes/etc/initramfs-tools/scripts/oginit index 2c88fdc..8539037 100755 --- a/includes/etc/initramfs-tools/scripts/oginit +++ b/includes/etc/initramfs-tools/scripts/oginit @@ -32,115 +32,104 @@ #@date 2013/02/18 #*/ - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ -f /scripts/VERSION.txt ] && OGVERSION=$(cat /scripts/VERSION.txt) - OGVERSION=${OGVERSION:-"OpenGnsys Client"} - echo; echo; echo "$OGVERSION"; echo; echo - - #[ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" - #run_scripts /scripts/og-top - #[ "$quiet" != "y" ] && log_end_msg - - # If the root device hasn't shown up yet, give it a little while - # to deal with removable devices - - . /scripts/functions - . /scripts/ogfunctions - - sleep 2 - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before get OG variables: y/N " - [ $? == 0 ] && sh || echo " " - set -a - log_success_msg "Checking kernel parameters" - ogExportKernelParameters - # Cambiar resolución de vídeo para kernels que usan el parámetro "video". - [ -n "$video" ] && ogChangeVideoResolution - log_success_msg "Checking OpenGnsys Environmnet" - ogExportVarEnvironment - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure ramfs structure for OG: y/N " - [ $? == 0 ] && sh || echo " " - ogConfigureRamfs - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure netmoule specified in kernel parameters: y/N " - [ $? == 0 ] && sh || echo " " - ogLoadNetModule - - #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" - #run_scripts /scripts/og-premount - #[ "$quiet" != "y" ] && log_end_msg - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure networking: y/N " - [ $? == 0 ] && sh || echo " " - if [ -n "$oglive" ] - then - while !(ping -c 1 $oglive &> /dev/null) - do - ogConfigureNetworking - done - fi - log_success_msg "config networking" - ogConfigureLoopback - log_success_msg "config loopback" - - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before detect rootserver: y/N " - [ $? == 0 ] && sh || echo " " - ogGetROOTSERVER && log_success_msg "Get Info from pxe server and ckeck distribuited OG services " - - - if [ "$ogdebug" == "true" -a "$ogupdateinitrd" == "true" ]; then - ogYesNo --timeout 5 --default no "Stop before check updating initrd: y/N " - [ $? == 0 ] && sh || echo " " - fi - # Actualizar Initrd si se solicita o si no se corresponde con su kernel. - if [ "$ogupdateinitrd" == "true" -o ! -d /lib/modules/$(uname -r) ]; then - ogUpdateInitrd - fi - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect and merging the rootfs -ogLive- with $OGSERVERLIVE: y/N " - [ $? == 0 ] && sh || echo " " - ogConnectOgLive && log_success_msg "Merge the initrd with the remote rootfs -ogLive- on $OGSERVERLIVE" || sh - # si es necesario realiza ogConnect $OGSERVERLIVE $OGPROTOCOL $SRCOGLIVE $DSTOGLIVE - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect with client dir SHARE -engine,scripts,interface, -share- on $OGSERVERSHARE : y/N " - [ $? == 0 ] && sh || echo " " - ogConnect $OGSERVERSHARE $OGPROTOCOL $SRCOGSHARE $DSTOGSHARE - if [ $? -ne 0 -a "$SRCOGSHARE" != "$DEFOGSHARE" ]; then - ogConnect $OGSERVERSHARE $OGPROTOCOL $DEFOGSHARE $DSTOGSHARE && SRCOGSHARE=$DEFOGSHARE - fi - unset DEFOGSHARE - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect with client dir LOG STORAGE on $OGSERVERLOG : y/N " - [ $? == 0 ] && sh || echo " " - ogConnect $OGSERVERLOG $OGPROTOCOL $SRCOGLOG $DSTOGLOG - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect with REPOSITORY STORAGE on $OGSERVERIMAGES : y/N " - [ $? == 0 ] && sh || echo " " - ogConnect $OGSERVERIMAGES $OGPROTOCOL $SRCOGIMAGES $DSTOGIMAGES ,ro - - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before doing the postconfiguration: y/N " - [ $? == 0 ] && sh || echo " " - ogPostConfigureFS - setupcon -k - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before calling oginit with /etc/inittab: y/N " - [ $? == 0 ] && sh || echo " " - -if [ "$oginit" ] -then - exec $oginit -else - exec init -fi - - - - - +og_ask() { + echo "$1" >>/tmp/oginit.log + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "$1: y/N "; [ $? == 0 ] && sh || echo " " +} + +mountroot () { + [ -f /scripts/VERSION.txt ] && OGVERSION=$(cat /scripts/VERSION.txt) + OGVERSION=${OGVERSION:-"OpenGnsys Client"} + echo; echo; echo "$OGVERSION"; echo; echo + + #[ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" + #run_scripts /scripts/og-top + #[ "$quiet" != "y" ] && log_end_msg + + . /scripts/functions + . /scripts/ogfunctions + + # If the root device hasn't shown up yet, give it a little while + # to deal with removable devices + sleep 2 + + + og_ask "Stop before get OG variables" + set -a + log_success_msg "Checking kernel parameters" + ogExportKernelParameters + [ -n "$video" ] && ogChangeVideoResolution # Cambiar resolución de vídeo para kernels que usan el parámetro "video". + log_success_msg "Checking OpenGnsys Environmnet" + ogExportVarEnvironment + + + og_ask "Stop before configure ramfs structure for OG" + ogConfigureRamfs + + + og_ask "Stop before configure netmoule specified in kernel parameters" + ogLoadNetModule + + #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" + #run_scripts /scripts/og-premount + #[ "$quiet" != "y" ] && log_end_msg + + + og_ask "Stop before configure networking" + if [ -n "$oglive" ]; then + while !(ping -c 1 $oglive &> /dev/null); do + ogConfigureNetworking + done + fi + log_success_msg "config networking" + ogConfigureLoopback + log_success_msg "config loopback" + + + og_ask "Stop before detect rootserver" + ogGetROOTSERVER && log_success_msg "Get Info from pxe server and ckeck distribuited OG services " + + + if [ "$ogupdateinitrd" == "true" ]; then + og_ask "Stop before check updating initrd" + fi + if [ "$ogupdateinitrd" == "true" -o ! -d /lib/modules/$(uname -r) ]; then + ogUpdateInitrd # Actualizar Initrd si se solicita o si no se corresponde con su kernel. + fi + + + og_ask "Stop before connect and merging the rootfs -ogLive- with $OGSERVERLIVE" + ogConnectOgLive && log_success_msg "Merge the initrd with the remote rootfs -ogLive- on $OGSERVERLIVE" || sh + # si es necesario realiza ogConnect $OGSERVERLIVE $OGPROTOCOL $SRCOGLIVE $DSTOGLIVE + + + og_ask "Stop before connect with client dir SHARE -engine,scripts,interface, -share- on $OGSERVERSHARE " + ogConnect $OGSERVERSHARE $OGPROTOCOL $SRCOGSHARE $DSTOGSHARE + if [ $? -ne 0 -a "$SRCOGSHARE" != "$DEFOGSHARE" ]; then + ogConnect $OGSERVERSHARE $OGPROTOCOL $DEFOGSHARE $DSTOGSHARE && SRCOGSHARE=$DEFOGSHARE + fi + unset DEFOGSHARE + + + og_ask "Stop before connect with client dir LOG STORAGE on $OGSERVERLOG " + ogConnect $OGSERVERLOG $OGPROTOCOL $SRCOGLOG $DSTOGLOG + + + og_ask "Stop before connect with REPOSITORY STORAGE on $OGSERVERIMAGES " + ogConnect $OGSERVERIMAGES $OGPROTOCOL $SRCOGIMAGES $DSTOGIMAGES ,ro + + + og_ask "Stop before doing the postconfiguration" + ogPostConfigureFS + setupcon -k + + + og_ask "Stop before calling oginit with /etc/inittab" + if [ "$oginit" ]; then + echo "exec oginit ($oginit)" >>/tmp/oginit.log + exec $oginit + else + echo "exec regular init" >>/tmp/oginit.log + exec init + fi }