37 local CONT=1 LOGS LOGLEVEL DATETIME
39 # Selección de ficheros de rgistro de incidencias. 42 log) LOGS=
"$LOGS $OGLOGFILE"; shift ;;
43 command) LOGS=
"$LOGS $OGLOGCOMMAND"; shift ;;
44 session) LOGS=
"$LOGS $OGLOGSESSION"; shift ;;
49 # Selección del nivel de registro (opcional). 52 info) LOGLEVEL=
"$1"; shift ;;
53 warning) LOGLEVEL=
"$1"; shift ;;
54 error) LOGLEVEL=
"$1"; shift ;;
58 if [ -n
"$LOGLEVEL" ]; then
59 DATETIME=$(date +
"%F %T")
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
64 echo
"$*" | tee -a $LOGS
80 function ogExecAndLog () { 83 local ISCOMMAND ISLOG ISSESSION COMMAND CONTINUE=1 FILES REDIREC
85 # Si se solicita, mostrar ayuda. 86 if [
"$*" ==
"help" ]; then
87 ogHelp "$FUNCNAME str_logfile ... str_command ..." \
88 "$FUNCNAME COMMAND ls -al /" 92 # Procesar parámetros. 93 while [ $CONTINUE ];
do 95 command) ISCOMMAND=1; shift ;;
96 log) ISLOG=1; shift ;;
97 session) ISSESSION=1; shift ;;
102 # Error si no se recibe un comando que ejecutar. 103 [ -n
"$COMMAND" ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
105 # Componer lista de ficheros de registro. 106 if [ $ISCOMMAND ]; then
107 FILES=
"$OGLOGCOMMAND" 111 [ $ISLOG ] && FILES=
"$FILES $OGLOGFILE" 112 [ $ISSESSION ] && FILES=
"$FILES $OGLOGSESSION" 115 eval $COMMAND $REDIREC | tee -a $FILES
116 # Salida de error del comando ejecutado. 117 return ${PIPESTATUS[0]}
130 function ogGetCaller () { 132 # Obtener el nombre del programa o del script que ha llamado al proceso actual. 133 basename
"$(COLUMNS=200 ps hp $PPID -o args | \ 134 awk '{if ($1~/bash/ && $2!="") { print $2; } 135 else { sub(/^-/,"",$1); print $1; } }')" 158 # Mostrar función, descripción y formato. 159 FUNC=
"${1:-${FUNCNAME[${#FUNCNAME[*]}-1]}}" 161 ogEcho help
"$MSG_FUNCTION $FUNC: ${!MSG}" 162 [ -n
"$2" ] &&
ogEcho help
" $MSG_FORMAT: $2" 163 # Mostrar ejemplos (si existen). 165 while [ $# -gt 0 ];
do 166 ogEcho help
" $MSG_EXAMPLE: $1" 188 function ogRaiseError () { 191 local CONT=1 LOGS MSG CODE FUNCS
193 # Si se solicita, mostrar ayuda. 194 if [
"$*" ==
"help" ]; then
195 ogHelp "$FUNCNAME" "$FUNCNAME [str_logfile ...] int_errorcode str_errormessage" 199 # Selección de rgistros de incidencias. 202 log|command|session) LOGS=
"$LOGS $1"; shift ;;
207 # Obtener código y mensaje de error. 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\"" ;;
216 $OG_ERR_NOGPT) MSG=
"$MSG_ERR_NOGPT \"$2\"" ;;
217 $OG_ERR_REPO) MSG=
"$MSG_ERR_REPO \"$2\"" ;;
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\"" ;;
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\"" ;;
228 $OG_ERR_UPDATECACHE) MSG=
"$MSG_ERR_UPDATECACHE \"$2\"" ;;
229 $OG_ERR_DONTFORMAT) MSG=
"$MSG_ERR_DONTFORMAT \"$2\"" ;;
230 $OG_ERR_IMAGEFILE) MSG=
"$MSG_ERR_IMAGEFILE \"$2\"" ;;
231 $OG_ERR_UCASTSYNTAXT) MSG=
"$MSG_ERR_UCASTSYNTAXT \"$2\"" ;;
232 $OG_ERR_UCASTSENDPARTITION) MSG=
"$MSG_ERR_UCASTSENDPARTITION \"$2\"" ;;
233 $OG_ERR_UCASTSENDFILE) MSG=
"$MSG_ERR_UCASTSENDFILE \"$2\"" ;;
234 $OG_ERR_UCASTRECEIVERPARTITION) MSG=
"$MSG_ERR_UCASTRECEIVERPARTITION \"$2\"" ;;
235 $OG_ERR_UCASTRECEIVERFILE) MSG=
"$MSG_ERR_UCASTRECEIVERFILE \"$2\"" ;;
236 $OG_ERR_MCASTSYNTAXT) MSG=
"$MSG_ERR_MCASTSYNTAXT \"$2\"" ;;
237 $OG_ERR_MCASTSENDFILE) MSG=
"$MSG_ERR_MCASTSENDFILE \"$2\"" ;;
238 $OG_ERR_MCASTRECEIVERFILE) MSG=
"$MSG_ERR_MCASTRECEIVERFILE \"$2\"" ;;
239 $OG_ERR_MCASTSENDPARTITION) MSG=
"$MSG_ERR_MCASTSENDPARTITION \"$2\"" ;;
240 $OG_ERR_MCASTRECEIVERPARTITION) MSG=
"$MSG_ERR_MCASTRECEIVERPARTITION \"$2\"" ;;
241 $OG_ERR_PROTOCOLJOINMASTER) MSG=
"$MSG_ERR_PROTOCOLJOINMASTER \"$2\"" ;;
242 $OG_ERR_DONTMOUNT_IMAGE) MSG=
"$MSG_ERR_DONTMOUNT_IMAGE \"$2\"" ;;
243 $OG_ERR_DONTUNMOUNT_IMAGE) MSG=
"$MSG_ERR_DONTUNMOUNT_IMAGE \"$2\"" ;;
244 $OG_ERR_DONTSYNC_IMAGE) MSG=
"$MSG_ERR_DONTSYNC_IMAGE \"$2\"" ;;
245 $OG_ERR_NOTDIFFERENT) MSG=
"$MSG_ERR_NOTDIFFERENT \"$2\"" ;;
246 $OG_ERR_SYNCHRONIZING) MSG=
"$MSG_ERR_SYNCHRONIZING \"$2\"" ;;
247 $OG_ERR_NOTUEFI) MSG=
"$MSG_ERR_NOTUEFI \"$2\"" ;;
248 $OG_ERR_NOMSDOS) MSG=
"$MSG_ERR_NOMSDOS \"$2\"" ;;
249 $OG_ERR_NOTBIOS) MSG=
"$MSG_ERR_NOTBIOS \"$2\"" ;;
250 *) MSG=
"$MSG_ERR_GENERIC"; CODE=$OG_ERR_GENERIC ;;
253 # Obtener lista de funciones afectadas, incluyendo el script que las llama. 254 FUNCS=
"${FUNCNAME[@]:1}" 255 FUNCS=
"${FUNCS/main/$(basename $0 2>/dev/null)}" 257 # Mostrar mensaje de error si es función depurable y salir con el código indicado. 259 ogEcho $LOGS error
"${FUNCS// /<-}: $MSG" >&2
277 function ogIsRepoLocked () 282 # Si se solicita, mostrar ayuda. 283 if [
"$*" ==
"help" ]; then
284 ogHelp "$FUNCNAME" "$FUNCNAME" "if $FUNCNAME; then ...; fi" 288 # No hacer nada, si no está definido el punto de montaje del repositorio. 289 [ -z
"$OGIMG" ] &&
return 1
291 # Comprobar si alguno de los ficheros abiertos por los procesos activos está en el 292 # punto de montaje del repositorio de imágenes. 293 FILES=$(
for f in /proc/[0-9]*/fd (comentario Doxygen)
300 # Si se solicita, mostrar ayuda. 301 if [
"$*" ==
"help" ]; then
302 ogHelp "$FUNCNAME \"str_program ...\"" \
303 "$FUNCNAME \"partimage partclone mbuffer\"" 307 # Error si no se recibe 1 parámetro. 321 if [
"$PERROR" ==
"1" ]
333 case "$(dmidecode -s system-product-name)" in
function ogIsVirtualMachine()
function ogRaiseError()
Devuelve el mensaje y el código de error correspondiente. #.
function ogHelp()
Muestra mensaje de ayuda para una función determinda. #.
function ogCheckProgram()
function ogCheckStringInGroup()
Función para determinar si el elemento pertenece a un conjunto #.
function ogEcho()
Muestra mensajes en consola y lo registra en fichero de incidencias. #.