source: client/engine/System.lib @ c916af9

918-git-images-111dconfigfileconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacionwebconsole3
Last change on this file since c916af9 was d32ebd8, checked in by ramon <ramongomez@…>, 11 years ago

#611: corregir errata al componer la redirección de salida del comando a ejecutar y prueba de la nueva función en el script restoreImage.

git-svn-id: https://opengnsys.es/svn/branches/version1.0@4404 a21b9725-9963-47de-94b9-378ad31fedc9

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