[9f29ba6] | 1 | #!/bin/bash |
---|
| 2 | #/** |
---|
| 3 | #@file System.lib |
---|
[9f57de01] | 4 | #@brief Librería o clase System |
---|
[9f29ba6] | 5 | #@class System |
---|
| 6 | #@brief Funciones básicas del sistema. |
---|
| 7 | #@version 0.9 |
---|
| 8 | #@warning License: GNU GPLv3+ |
---|
| 9 | #*/ |
---|
| 10 | |
---|
[2e15649] | 11 | |
---|
[9f29ba6] | 12 | #/** |
---|
[42669ebf] | 13 | # ogEcho [str_loglevel] "str_message..." |
---|
[9f57de01] | 14 | #@brief Muestra mensajes en consola y lo registra en fichero de incidencias. |
---|
[42669ebf] | 15 | #@param str_loglevel nivel de registro de incidencias. |
---|
| 16 | #@param str_message mensaje (puede recibir más de 1 parámetro. |
---|
[9f57de01] | 17 | #@return Mensaje mostrado. |
---|
[aae34f6] | 18 | #@note El nivel de ayuda \c (help) no se registra en el fichero de incidencias. |
---|
[ead38fb] | 19 | #@version 0.9 - Primera versión para OpenGnSys |
---|
[aae34f6] | 20 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
[9f57de01] | 21 | #@date 2009-07-23 |
---|
[9f29ba6] | 22 | #*/ |
---|
[9f57de01] | 23 | function ogEcho () { |
---|
[9f29ba6] | 24 | |
---|
[59f9ad2] | 25 | # Variables locales |
---|
[cfeabbf] | 26 | local LOGLEVEL LOGFILE DATETIME |
---|
[9f57de01] | 27 | |
---|
[42669ebf] | 28 | # Selección del nivel de registro (opcional). |
---|
[9f57de01] | 29 | case "$1" in |
---|
[d071d9b] | 30 | help) shift ;; |
---|
| 31 | info) LOGLEVEL=$1; shift ;; |
---|
| 32 | warning) LOGLEVEL=$1; shift ;; |
---|
| 33 | error) LOGLEVEL=$1; shift ;; |
---|
| 34 | *) ;; |
---|
[9f57de01] | 35 | esac |
---|
[42669ebf] | 36 | # Pendiente en cliente Initrd. |
---|
| 37 | #DATETIME=$(date +"%F %T") |
---|
| 38 | |
---|
[cfeabbf] | 39 | if [ -n "$LOGLEVEL" ]; then |
---|
[ead38fb] | 40 | logger -s -t "OpenGnSys $LOGLEVEL" $LOGFILE "$DATETIME $*" |
---|
[cfeabbf] | 41 | else |
---|
| 42 | echo "$*" |
---|
[9f57de01] | 43 | fi |
---|
[9f29ba6] | 44 | } |
---|
| 45 | |
---|
| 46 | |
---|
| 47 | #/** |
---|
[42669ebf] | 48 | # ogRaiseError int_errcode ["str_errmessage" ...] |
---|
[9f57de01] | 49 | #@brief Devuelve el mensaje y el código de error correspondiente. |
---|
[42669ebf] | 50 | #@param int_errcode código de error. |
---|
| 51 | #@param str_errmessage mensajes complementarios de error. |
---|
[b1384da] | 52 | #@return str_message - Mensaje de error. |
---|
[9f57de01] | 53 | #@warning No definidas |
---|
[aae34f6] | 54 | #@note Mensajes internacionales del fichero de idiomas. |
---|
[ead38fb] | 55 | #@version 0.9 - Primera versión para OpenGnSys. |
---|
[aae34f6] | 56 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
[9f57de01] | 57 | #@date 2009-07-21 |
---|
[9f29ba6] | 58 | #*/ |
---|
[9f57de01] | 59 | function ogRaiseError () { |
---|
[9f29ba6] | 60 | |
---|
[59f9ad2] | 61 | # Variables locales |
---|
[a5df9b9] | 62 | local MSG CODE |
---|
[2e15649] | 63 | |
---|
[42669ebf] | 64 | # Obtener código y mensaje de error. |
---|
[a5df9b9] | 65 | CODE=$1 |
---|
| 66 | case "$CODE" in |
---|
[315aaca] | 67 | $OG_ERR_FORMAT) MSG="$MSG_ERR_FORMAT \"$2\"" ;; |
---|
| 68 | $OG_ERR_NOTFOUND) MSG="$MSG_ERR_NOTFOUND \"$2\"" ;; |
---|
| 69 | $OG_ERR_OUTOFLIMIT) MSG="$MSG_ERR_OUTOFLIMIT \"$2\"" ;; |
---|
| 70 | $OG_ERR_PARTITION) MSG="$MSG_ERR_PARTITION \"$2\"" ;; |
---|
| 71 | $OG_ERR_LOCKED) MSG="$MSG_ERR_LOCKED \"$2\"" ;; |
---|
| 72 | $OG_ERR_CACHE) MSG="$MSG_ERR_CACHE \"$2\"" ;; |
---|
| 73 | $OG_ERR_FILESYS) MSG="$MSG_ERR_FILESYS \"$2\"" ;; |
---|
| 74 | $OG_ERR_IMAGE) MSG="$MSG_ERR_IMAGE \"$2\"" ;; |
---|
| 75 | $OG_ERR_NOTOS) MSG="$MSG_ERR_NOTOS \"$2\"" ;; |
---|
| 76 | $OG_ERR_NOTEXEC) MSG="$MSG_ERR_NOTEXEC \"$2\"" ;; |
---|
| 77 | *) MSG="$MSG_ERR_GENERIC"; CODE=$OG_ERR_GENERIC ;; |
---|
[2e15649] | 78 | esac |
---|
| 79 | |
---|
[42669ebf] | 80 | # Mostrar mensaje de error y salir con el código indicado. |
---|
[aae34f6] | 81 | ogEcho error "${FUNCNAME[1]}: $MSG" >&2 |
---|
[a5df9b9] | 82 | return $CODE |
---|
[9f29ba6] | 83 | } |
---|
| 84 | |
---|
| 85 | |
---|
[aae34f6] | 86 | #/** |
---|
[b1384da] | 87 | # ogGetCaller |
---|
| 88 | #@brief Devuelve nombre del programa o script ejecutor (padre). |
---|
| 89 | #@param No. |
---|
| 90 | #@return str_name - Nombre del programa ejecutor. |
---|
| 91 | #@version 0.10 - Primera versión para OpenGnSys. |
---|
| 92 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
| 93 | #@date 2011-01-17 |
---|
| 94 | #*/ |
---|
| 95 | function ogGetCaller () { |
---|
| 96 | |
---|
| 97 | # Obtener el nombre del programa o del script que ha llamado al proceso actual. |
---|
| 98 | basename $(ps | grep $PPID | \ |
---|
| 99 | awk -v P=$PPID '{if ($1==P) { |
---|
| 100 | if ($5~/bash/ && $6!="") print $6 |
---|
| 101 | else print $5; } }') |
---|
| 102 | } |
---|
| 103 | |
---|
| 104 | |
---|
| 105 | #/** |
---|
| 106 | # ogIsRepoLocked |
---|
| 107 | #@brief Comprueba si el repositorio está siendo usado (tiene ficheros abiertos). |
---|
| 108 | #@param No. |
---|
| 109 | #@return Código de salida: 0 - sin bloquear (libre), 1 - bloqueado. |
---|
| 110 | #@version 0.10 - Primera versión para OpenGnSys. |
---|
| 111 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
| 112 | #@date 2011-01-17 |
---|
| 113 | #*/ |
---|
| 114 | function ogIsRepoLocked () { |
---|
| 115 | |
---|
| 116 | # Variables locales. |
---|
| 117 | local f FILES |
---|
| 118 | |
---|
| 119 | # No hacer nada, si no está definido el punto de montaje del repositorio. |
---|
| 120 | [ -z "$OGIMG" ] && return |
---|
| 121 | |
---|
| 122 | # Comprobar si alguno de los ficheros abiertos por los procesos activos está en el |
---|
| 123 | # punto de montaje del repositorio de imágenes. |
---|
| 124 | FILES=$(for f in /proc/[0-9]*/fd/*; do readlink -f "$f"; done | grep "^$OGIMG") |
---|
| 125 | [ -n "$FILES" ] |
---|
| 126 | } |
---|
| 127 | |
---|
| 128 | |
---|
| 129 | |
---|
| 130 | #/** |
---|
[1e7eaab] | 131 | # ogHelp ["str_function" ["str_format" ["str_example" ... ]]] |
---|
[aae34f6] | 132 | #@brief Muestra mensaje de ayuda para una función determinda. |
---|
[42669ebf] | 133 | #@param str_function Nombre de la función. |
---|
| 134 | #@param str_format Formato de ejecución de la función. |
---|
| 135 | #@param str_example Ejemplo de ejecución de la función. |
---|
| 136 | #@return str_help - Salida de ayuda. |
---|
[aae34f6] | 137 | #@note Si no se indican parámetros, la función se toma de la variable \c $FUNCNAME |
---|
| 138 | #@note La descripción de la función se toma de la variable compuesta por \c MSG_FUNC_$función incluida en el fichero de idiomas. |
---|
| 139 | #@note Pueden especificarse varios mensajes con ejemplos. |
---|
[ead38fb] | 140 | #@version 0.9 - Primera versión para OpenGnSys. |
---|
[aae34f6] | 141 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
| 142 | #@date 2009-07-27 |
---|
| 143 | #*/ |
---|
| 144 | function ogHelp () { |
---|
| 145 | |
---|
[59f9ad2] | 146 | # Variables locales. |
---|
[aae34f6] | 147 | local FUNC MSG |
---|
| 148 | |
---|
[42669ebf] | 149 | # Mostrar función, descripción y formato. |
---|
[aae34f6] | 150 | FUNC="${1:-${FUNCNAME[${#FUNCNAME[*]}-1]}}" |
---|
| 151 | MSG="MSG_HELP_$FUNC" |
---|
| 152 | ogEcho help "$MSG_FUNCTION $FUNC: ${!MSG}" |
---|
| 153 | [ -n "$2" ] && ogEcho help " $MSG_FORMAT: $2" |
---|
[42669ebf] | 154 | # Mostrar ejemplos (si existen). |
---|
[aae34f6] | 155 | shift 2 |
---|
| 156 | while [ $# -gt 0 ]; do |
---|
| 157 | ogEcho help " $MSG_EXAMPLE: $1" |
---|
| 158 | shift |
---|
| 159 | done |
---|
| 160 | } |
---|