source: client/engine/System.lib @ 202d6a3

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-instalacion
Last change on this file since 202d6a3 was b00e622, checked in by Irina Gómez <irinagomez@…>, 6 years ago

#802 #888 Functions for the NVRAM management. Functions in UEFI.lib ordered in alphabetical order.

  • Property mode set to 100755
File size: 11.1 KB
RevLine 
[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.
[1ccd273]7#@version  1.1.0
[9f29ba6]8#@warning  License: GNU GPLv3+
9#*/
10
[2e15649]11
[9f29ba6]12#/**
[4bf0ddf]13#         ogEcho [str_logtype ...] [str_loglevel] "str_message" ...
[9f57de01]14#@brief   Muestra mensajes en consola y lo registra en fichero de incidencias.
[e7e3140]15#@param   str_logtype  tipo de registro de incidencias.
[42669ebf]16#@param   str_loglevel nivel de registro de incidencias.
17#@param   str_message  mensaje (puede recibir más de 1 parámetro.
[9f57de01]18#@return  Mensaje mostrado.
[e2923e1]19#@warning Si no se indica nivel de registro, solo muestra mensaje en pantalla.
[1ccd273]20#@warning Si DEBUG="no", no se registran mensajes de error.
[4bf0ddf]21#@note    logfile = { log, command, session }; usa "log" si se indica nivel de registro.
22#@note    loglevel = { help, info, warning, error }
[aae34f6]23#@note    El nivel de ayuda \c (help) no se registra en el fichero de incidencias.
[ead38fb]24#@version 0.9 - Primera versión para OpenGnSys
[aae34f6]25#@author  Ramon Gomez, ETSII Universidad de Sevilla
[9f57de01]26#@date    2009-07-23
[4bf0ddf]27#@version 1.0.5 - Elegir fichero de log.
28#@author  Ramon Gomez, ETSII Universidad de Sevilla
[9a2f946]29#@date    2014-03-17
[1ccd273]30#@version 1.1.0 - Posibilidad de no registrar mensajes en ficheros.
31#@author  Ramon Gomez, ETSII Universidad de Sevilla
32#@date    2015-11-10
[9f29ba6]33#*/
[9f57de01]34function ogEcho () {
[9f29ba6]35
[59f9ad2]36# Variables locales
[4bf0ddf]37local CONT=1 LOGS LOGLEVEL DATETIME
38
39# Selección de ficheros de rgistro de incidencias.
40while [ $CONT ]; do
41    case "${1,,}" in
42        log)     LOGS="$LOGS $OGLOGFILE";    shift ;;
43        command) LOGS="$LOGS $OGLOGCOMMAND"; shift ;;
44        session) LOGS="$LOGS $OGLOGSESSION"; shift ;;
45        *)       CONT= ;;
46    esac
47done
[9f57de01]48
[42669ebf]49# Selección del nivel de registro (opcional).
[4bf0ddf]50case "${1,,}" in
[d071d9b]51     help)    shift ;;
[e2923e1]52     info)    LOGLEVEL="$1"; shift ;;
53     warning) LOGLEVEL="$1"; shift ;;
54     error)   LOGLEVEL="$1"; shift ;;
[d071d9b]55     *)       ;;
[9f57de01]56esac
[42669ebf]57
[cfeabbf]58if [ -n "$LOGLEVEL" ]; then
[4bf0ddf]59    DATETIME=$(date +"%F %T")
[1ccd273]60    # Registrar mensajes en fichero de log si la depuración no está desactivada.
61    [ "${DEBUG,,}" != "no" ] && LOGS="$OGLOGFILE $LOGS"
62    logger -s -t "OpenGnsys $LOGLEVEL" "$DATETIME $*" 2>&1 | tee -a $LOGS
[cfeabbf]63else
[4bf0ddf]64    echo "$*" | tee -a $LOGS
[9f57de01]65fi
[9f29ba6]66}
67
68
69#/**
[9a2f946]70#         ogExecAndLog str_logfile ... str_command ...
71#@brief   Ejecuta un comando y guarda su salida en fichero de registro.
72#@param   str_logfile     fichero de registro (pueden ser varios).
73#@param   str_command     comando y comandos a ejecutar.
74#@return  Salida de ejecución del comando.
75#@note    str_logfile = { LOG, SESSION, COMMAND }
76#@version 1.0.6 - Primera versión para OpenGnSys
77#@author  Ramon Gomez, ETSII Universidad de Sevilla
78#@date    2013-07-02
79#*/
80function ogExecAndLog () {
81
82# Variables locales
83local ISCOMMAND ISLOG ISSESSION COMMAND CONTINUE=1 FILES REDIREC
84
85# Si se solicita, mostrar ayuda.
86if [ "$*" == "help" ]; then
87    ogHelp "$FUNCNAME str_logfile ... str_command ..." \
88           "$FUNCNAME COMMAND ls -al /"
89    return
90fi
91
92# Procesar parámetros.
93while [ $CONTINUE ]; do
94    case "${1,,}" in
95        command) ISCOMMAND=1; shift ;;
96        log)     ISLOG=1; shift ;;
97        session) ISSESSION=1; shift ;;
98        *)       COMMAND="$@"
99                 CONTINUE= ;;
100    esac
101done
102# Error si no se recibe un comando que ejecutar.
103[ -n "$COMMAND" ] || ogRaiseError $OG_ERR_FORMAT || return $?
104
105# Componer lista de ficheros de registro.
[d32ebd8]106if [ $ISCOMMAND ]; then
107    FILES="$OGLOGCOMMAND"
108    > $FILES
109    REDIREC="2>&1"
110fi
[9a2f946]111[ $ISLOG ] && FILES="$FILES $OGLOGFILE"
112[ $ISSESSION ] && FILES="$FILES $OGLOGSESSION"
113
114# Ejecutar comando.
[d32ebd8]115eval $COMMAND $REDIREC | tee -a $FILES
[1a2fa9d8]116# Salida de error del comando ejecutado.
117return ${PIPESTATUS[0]}
[9a2f946]118}
119
120
121#/**
[2851a93]122#         ogGetCaller
123#@brief   Devuelve nombre del programa o script ejecutor (padre).
124#@param   No.
125#@return  str_name - Nombre del programa ejecutor.
126#@version 0.10 - Primera versión para OpenGnSys.
127#@author  Ramon Gomez, ETSII Universidad de Sevilla
128#@date    2011-01-17
129#*/
130function ogGetCaller () {
131
132# Obtener el nombre del programa o del script que ha llamado al proceso actual.
[299d11e]133basename "$(COLUMNS=200 ps hp $PPID -o args | \
134            awk '{if ($1~/bash/ && $2!="") { print $2; }
135                  else { sub(/^-/,"",$1); print $1; } }')"
[2851a93]136}
137
138
139#/**
140#         ogHelp ["str_function" ["str_format" ["str_example" ... ]]]
141#@brief   Muestra mensaje de ayuda para una función determinda.
142#@param   str_function Nombre de la función.
143#@param   str_format   Formato de ejecución de la función.
144#@param   str_example  Ejemplo de ejecución de la función.
145#@return  str_help - Salida de ayuda.
146#@note    Si no se indican parámetros, la función se toma de la variable \c $FUNCNAME
147#@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.
148#@note    Pueden especificarse varios mensajes con ejemplos.
149#@version 0.9 - Primera versión para OpenGnSys.
150#@author  Ramon Gomez, ETSII Universidad de Sevilla
151#@date    2009-07-27
152#*/
153function ogHelp () {
154
155# Variables locales.
156local FUNC MSG
157
158# Mostrar función, descripción y formato.
159FUNC="${1:-${FUNCNAME[${#FUNCNAME[*]}-1]}}"
160MSG="MSG_HELP_$FUNC"
161ogEcho help "$MSG_FUNCTION $FUNC: ${!MSG}"
162[ -n "$2" ] && ogEcho help "    $MSG_FORMAT: $2"
163# Mostrar ejemplos (si existen).
164shift 2
165while [ $# -gt 0 ]; do
166    ogEcho help "    $MSG_EXAMPLE: $1"
167    shift
168done
169}
170
171
172#/**
[4bf0ddf]173#         ogRaiseError [str_logtype ...] int_errcode ["str_errmessage" ...]
[9f57de01]174#@brief   Devuelve el mensaje y el código de error correspondiente.
[e7e3140]175#@param   str_logtype    tipo de registro de incidencias.
[42669ebf]176#@param   int_errcode    código de error.
177#@param   str_errmessage mensajes complementarios de error.
[3294b83]178#@return  str_message - Mensaje de error, incluyendo las funciones relacionadas.
[9f57de01]179#@warning No definidas
[aae34f6]180#@note    Mensajes internacionales del fichero de idiomas.
[ead38fb]181#@version 0.9 - Primera versión para OpenGnSys.
[aae34f6]182#@author  Ramon Gomez, ETSII Universidad de Sevilla
[9f57de01]183#@date    2009-07-21
[3294b83]184#@version 1.0.5 - Muestra en el mensaje todas las funciones relacionadas (separadas por <-).
185#@author  Ramon Gomez, ETSII Universidad de Sevilla
186#@date    2014-03-17
[9f29ba6]187#*/
[9f57de01]188function ogRaiseError () {
[9f29ba6]189
[59f9ad2]190# Variables locales
[3294b83]191local CONT=1 LOGS MSG CODE FUNCS
[4bf0ddf]192
[39db3a1]193# Si se solicita, mostrar ayuda.
194if [ "$*" == "help" ]; then
195    ogHelp "$FUNCNAME" "$FUNCNAME [str_logfile ...] int_errorcode str_errormessage"
196    return
197fi
198
[4bf0ddf]199# Selección de rgistros de incidencias.
200while [ $CONT ]; do
201    case "${1,,}" in
202        log|command|session)  LOGS="$LOGS $1"; shift ;;
203        *)                    CONT= ;;
204    esac
205done
[2e15649]206
[42669ebf]207# Obtener código y mensaje de error.
[4bf0ddf]208CODE="$1"
[a5df9b9]209case "$CODE" in
[315aaca]210     $OG_ERR_FORMAT)     MSG="$MSG_ERR_FORMAT \"$2\"" ;;
211     $OG_ERR_NOTFOUND)   MSG="$MSG_ERR_NOTFOUND \"$2\"" ;;
212     $OG_ERR_OUTOFLIMIT) MSG="$MSG_ERR_OUTOFLIMIT \"$2\"" ;;
213     $OG_ERR_PARTITION)  MSG="$MSG_ERR_PARTITION \"$2\"" ;;
214     $OG_ERR_LOCKED)     MSG="$MSG_ERR_LOCKED \"$2\"" ;;
215     $OG_ERR_CACHE)      MSG="$MSG_ERR_CACHE \"$2\"" ;;
[4e1dc53]216     $OG_ERR_NOGPT)      MSG="$MSG_ERR_NOGPT \"$2\"" ;;
[cead9e3]217     $OG_ERR_REPO)       MSG="$MSG_ERR_REPO \"$2\"" ;;
[315aaca]218     $OG_ERR_FILESYS)    MSG="$MSG_ERR_FILESYS \"$2\"" ;;
219     $OG_ERR_IMAGE)      MSG="$MSG_ERR_IMAGE \"$2\"" ;;
220     $OG_ERR_NOTOS)      MSG="$MSG_ERR_NOTOS \"$2\"" ;;
221     $OG_ERR_NOTEXEC)    MSG="$MSG_ERR_NOTEXEC \"$2\"" ;;
[eb9424f]222     $OG_ERR_NOTWRITE)   MSG="$MSG_ERR_NOTWRITE \"$2\"" ;;
223     $OG_ERR_NOTCACHE)   MSG="$MSG_ERR_NOTCACHE \"$2\"" ;;
224     $OG_ERR_CACHESIZE)  MSG="$MSG_ERR_CACHESIZE \"$2\"" ;;
225     $OG_ERR_REDUCEFS)   MSG="$MSG_ERR_REDUCEFS \"$2\"" ;;
226     $OG_ERR_EXTENDFS)   MSG="$MSG_ERR_EXTENDFS \"$2\"" ;;
227     $OG_ERR_IMGSIZEPARTITION)   MSG="$MSG_ERR_IMGSIZEPARTITION \"$2\"" ;;   
[167b8d5]228     $OG_ERR_UPDATECACHE)       MSG="$MSG_ERR_UPDATECACHE \"$2\"" ;;
[1a2fa9d8]229     $OG_ERR_DONTFORMAT)        MSG="$MSG_ERR_DONTFORMAT \"$2\"" ;;
[eb9424f]230     $OG_ERR_UCASTSYNTAXT)   MSG="$MSG_ERR_UCASTSYNTAXT \"$2\"" ;;
231     $OG_ERR_UCASTSENDPARTITION)   MSG="$MSG_ERR_UCASTSENDPARTITION \"$2\"" ;;   
232     $OG_ERR_UCASTSENDFILE)   MSG="$MSG_ERR_UCASTSENDFILE \"$2\"" ;; 
233     $OG_ERR_UCASTRECEIVERPARTITION)   MSG="$MSG_ERR_UCASTRECEIVERPARTITION \"$2\"" ;;   
234     $OG_ERR_UCASTRECEIVERFILE)   MSG="$MSG_ERR_UCASTRECEIVERFILE \"$2\"" ;; 
235     $OG_ERR_MCASTSYNTAXT)   MSG="$MSG_ERR_MCASTSYNTAXT \"$2\"" ;;
236     $OG_ERR_MCASTSENDFILE)   MSG="$MSG_ERR_MCASTSENDFILE \"$2\"" ;;
237     $OG_ERR_MCASTRECEIVERFILE)   MSG="$MSG_ERR_MCASTRECEIVERFILE \"$2\"" ;;
238     $OG_ERR_MCASTSENDPARTITION)   MSG="$MSG_ERR_MCASTSENDPARTITION \"$2\"" ;;
239     $OG_ERR_MCASTRECEIVERPARTITION)   MSG="$MSG_ERR_MCASTRECEIVERPARTITION \"$2\"" ;;
[4e1dc53]240     $OG_ERR_PROTOCOLJOINMASTER)   MSG="$MSG_ERR_PROTOCOLJOINMASTER \"$2\"" ;;
[1ee5d4d3]241     $OG_ERR_DONTMOUNT_IMAGE)   MSG="$MSG_ERR_DONTMOUNT_IMAGE \"$2\"" ;;
[cd1f048]242     $OG_ERR_DONTUNMOUNT_IMAGE)   MSG="$MSG_ERR_DONTUNMOUNT_IMAGE \"$2\"" ;;
[e27c4f4]243     $OG_ERR_DONTSYNC_IMAGE)    MSG="$MSG_ERR_DONTSYNC_IMAGE \"$2\"" ;;
[a4f7a1a0]244     $OG_ERR_NOTDIFFERENT)      MSG="$MSG_ERR_NOTDIFFERENT \"$2\"" ;;
[c4db9c1]245     $OG_ERR_SYNCHRONIZING)     MSG="$MSG_ERR_SYNCHRONIZING \"$2\"" ;;
[b00e622]246     $OG_ERR_NOTUEFI)           MSG="$MSG_ERR_NOTUEFI \"$2\"" ;;
[1cd64e6]247     *)                  MSG="$MSG_ERR_GENERIC"; CODE=$OG_ERR_GENERIC ;;
[2e15649]248esac
249
[5962edd]250# Obtener lista de funciones afectadas, incluyendo el script que las llama.
[3294b83]251FUNCS="${FUNCNAME[@]:1}"
[5962edd]252FUNCS="${FUNCS/main/$(basename $0 2>/dev/null)}"
253
[7bb2f3f]254# Mostrar mensaje de error si es función depurable y salir con el código indicado.
255if [ $CODE == $OG_ERR_FORMAT ] || ogCheckStringInGroup "$FUNCS" "$NODEBUGFUNCTIONS" || ! ogCheckStringInGroup "${FUNCS%% *}" "$NODEBUGFUNCTIONS"; then
256    ogEcho $LOGS error "${FUNCS// /<-}: $MSG" >&2
257fi
[a5df9b9]258return $CODE
[9f29ba6]259}
260
261
[aae34f6]262#/**
[b1384da]263#         ogIsRepoLocked
264#@brief   Comprueba si el repositorio está siendo usado (tiene ficheros abiertos).
265#@param   No.
[7685100]266#@return  Código de salida: 0 - bloqueado, 1 - sin bloquear o error.
[b1384da]267#@version 0.10 - Primera versión para OpenGnSys.
268#@author  Ramon Gomez, ETSII Universidad de Sevilla
269#@date    2011-01-17
[7685100]270#@version 1.0.1 - Devolver falso en caso de error.
271#@author  Ramon Gomez, ETSII Universidad de Sevilla
272#@date    2011-05-18
[b1384da]273#*/
[7685100]274function ogIsRepoLocked ()
275{
[b1384da]276# Variables locales.
277local f FILES
278
[39db3a1]279# Si se solicita, mostrar ayuda.
280if [ "$*" == "help" ]; then
281    ogHelp "$FUNCNAME" "$FUNCNAME" "if $FUNCNAME; then ...; fi"
282    return
283fi
284
[b1384da]285# No hacer nada, si no está definido el punto de montaje del repositorio.
[7685100]286[ -z "$OGIMG" ] && return 1
[b1384da]287
288# Comprobar si alguno de los ficheros abiertos por los procesos activos está en el
289# punto de montaje del repositorio de imágenes.
[697a9ee]290FILES=$(for f in /proc/[0-9]*/fd/*; do readlink -f "$f"; done | grep "^$OGIMG")   # */ (comentario Doxygen)
[7685100]291test -n "$FILES"
[b1384da]292}
293
294
[1cd64e6]295function ogCheckProgram ()
[914d834]296{
297# Si se solicita, mostrar ayuda.
298if [ "$*" == "help" ]; then
[1cd64e6]299    ogHelp "$FUNCNAME \"str_program ...\"" \
300           "$FUNCNAME \"partimage partclone mbuffer\""
[914d834]301    return
302fi
303
304# Error si no se recibe 1 parámetro.
305[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
306
[1cd64e6]307local PERROR PLOG i
[914d834]308PERROR=0
309PLOG=" "
310for i in `echo $1`
311do
312  if [ ! `which $i` ]
313     then
314        PERROR=1
315        PLOG="$PLOG $i"
316     fi
317done
318if [ "$PERROR" == "1" ]
319then
320        ogRaiseError $OG_ERR_NOTEXEC "$PLOG" || return $?
321else           
322        return 0
323fi
324}
[1cd64e6]325
[1a55e13]326
327
328#### PRUEBA
329function ogIsVirtualMachine() {
330case "$(dmidecode -s system-product-name)" in
331    KVM|VirtualBox)
332        return 1 ;;
333    *)  return 0 ;;
334esac
335}
336
Note: See TracBrowser for help on using the repository browser.