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 0.9 |
---|
8 | #@warning License: GNU GPLv3+ |
---|
9 | #*/ |
---|
10 | |
---|
11 | |
---|
12 | #/** |
---|
13 | # ogEcho [str_loglevel] "str_message..." |
---|
14 | #@brief Muestra mensajes en consola y lo registra en fichero de incidencias. |
---|
15 | #@param str_loglevel nivel de registro de incidencias. |
---|
16 | #@param str_message mensaje (puede recibir más de 1 parámetro. |
---|
17 | #@return Mensaje mostrado. |
---|
18 | #@note El nivel de ayuda \c (help) no se registra en el fichero de incidencias. |
---|
19 | #@version 0.9 - Primera versión para OpenGnSys |
---|
20 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
21 | #@date 2009-07-23 |
---|
22 | #*/ |
---|
23 | function ogEcho () { |
---|
24 | |
---|
25 | # Variables locales |
---|
26 | local LOGLEVEL LOGFILE DATETIME |
---|
27 | |
---|
28 | # Selección del nivel de registro (opcional). |
---|
29 | case "$1" in |
---|
30 | help) shift ;; |
---|
31 | info) LOGLEVEL=$1; shift ;; |
---|
32 | warning) LOGLEVEL=$1; shift ;; |
---|
33 | error) LOGLEVEL=$1; shift ;; |
---|
34 | *) ;; |
---|
35 | esac |
---|
36 | # Pendiente en cliente Initrd. |
---|
37 | #DATETIME=$(date +"%F %T") |
---|
38 | |
---|
39 | if [ -n "$LOGLEVEL" ]; then |
---|
40 | logger -s -t "OpenGnSys $LOGLEVEL" $LOGFILE "$DATETIME $*" |
---|
41 | else |
---|
42 | echo "$*" |
---|
43 | fi |
---|
44 | } |
---|
45 | |
---|
46 | |
---|
47 | #/** |
---|
48 | # ogRaiseError int_errcode ["str_errmessage" ...] |
---|
49 | #@brief Devuelve el mensaje y el código de error correspondiente. |
---|
50 | #@param int_errcode código de error. |
---|
51 | #@param str_errmessage mensajes complementarios de error. |
---|
52 | #@return str_message - Mensaje de error. |
---|
53 | #@warning No definidas |
---|
54 | #@note Mensajes internacionales del fichero de idiomas. |
---|
55 | #@version 0.9 - Primera versión para OpenGnSys. |
---|
56 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
57 | #@date 2009-07-21 |
---|
58 | #*/ |
---|
59 | function ogRaiseError () { |
---|
60 | |
---|
61 | # Variables locales |
---|
62 | local MSG CODE |
---|
63 | |
---|
64 | # Obtener código y mensaje de error. |
---|
65 | CODE=$1 |
---|
66 | case "$CODE" in |
---|
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 | $OG_ERR_NOTWRITE) MSG="$MSG_ERR_NOTWRITE \"$2\"" ;; |
---|
78 | $OG_ERR_NOTCACHE) MSG="$MSG_ERR_NOTCACHE \"$2\"" ;; |
---|
79 | $OG_ERR_CACHESIZE) MSG="$MSG_ERR_CACHESIZE \"$2\"" ;; |
---|
80 | $OG_ERR_REDUCEFS) MSG="$MSG_ERR_REDUCEFS \"$2\"" ;; |
---|
81 | $OG_ERR_EXTENDFS) MSG="$MSG_ERR_EXTENDFS \"$2\"" ;; |
---|
82 | $OG_ERR_IMGSIZEPARTITION) MSG="$MSG_ERR_IMGSIZEPARTITION \"$2\"" ;; |
---|
83 | $OG_ERR_UCASTSYNTAXT) MSG="$MSG_ERR_UCASTSYNTAXT \"$2\"" ;; |
---|
84 | $OG_ERR_UCASTSENDPARTITION) MSG="$MSG_ERR_UCASTSENDPARTITION \"$2\"" ;; |
---|
85 | $OG_ERR_UCASTSENDFILE) MSG="$MSG_ERR_UCASTSENDFILE \"$2\"" ;; |
---|
86 | $OG_ERR_UCASTRECEIVERPARTITION) MSG="$MSG_ERR_UCASTRECEIVERPARTITION \"$2\"" ;; |
---|
87 | $OG_ERR_UCASTRECEIVERFILE) MSG="$MSG_ERR_UCASTRECEIVERFILE \"$2\"" ;; |
---|
88 | $OG_ERR_MCASTSYNTAXT) MSG="$MSG_ERR_MCASTSYNTAXT \"$2\"" ;; |
---|
89 | $OG_ERR_MCASTSENDFILE) MSG="$MSG_ERR_MCASTSENDFILE \"$2\"" ;; |
---|
90 | $OG_ERR_MCASTRECEIVERFILE) MSG="$MSG_ERR_MCASTRECEIVERFILE \"$2\"" ;; |
---|
91 | $OG_ERR_MCASTSENDPARTITION) MSG="$MSG_ERR_MCASTSENDPARTITION \"$2\"" ;; |
---|
92 | $OG_ERR_MCASTRECEIVERPARTITION) MSG="$MSG_ERR_MCASTRECEIVERPARTITION \"$2\"" ;; |
---|
93 | $OG_ERR_PROTOCOLJOINMASTER) MSG="$MSG_ERR_PROTOCOLJOINMASTER \"$2\"" ;; |
---|
94 | *) MSG="$MSG_ERR_GENERIC"; CODE=$OG_ERR_GENERIC ;; |
---|
95 | esac |
---|
96 | |
---|
97 | # Mostrar mensaje de error y salir con el código indicado. |
---|
98 | ogEcho error "${FUNCNAME[1]}: $MSG" >&2 |
---|
99 | return $CODE |
---|
100 | } |
---|
101 | |
---|
102 | |
---|
103 | #/** |
---|
104 | # ogGetCaller |
---|
105 | #@brief Devuelve nombre del programa o script ejecutor (padre). |
---|
106 | #@param No. |
---|
107 | #@return str_name - Nombre del programa ejecutor. |
---|
108 | #@version 0.10 - Primera versión para OpenGnSys. |
---|
109 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
110 | #@date 2011-01-17 |
---|
111 | #*/ |
---|
112 | function ogGetCaller () { |
---|
113 | |
---|
114 | # Obtener el nombre del programa o del script que ha llamado al proceso actual. |
---|
115 | basename $(ps hlp $PPID | awk '{if ($13~/bash/ && $14!="") print $14; |
---|
116 | else print $13;}') |
---|
117 | } |
---|
118 | |
---|
119 | |
---|
120 | #/** |
---|
121 | # ogIsRepoLocked |
---|
122 | #@brief Comprueba si el repositorio está siendo usado (tiene ficheros abiertos). |
---|
123 | #@param No. |
---|
124 | #@return Código de salida: 0 - sin bloquear (libre), 1 - bloqueado. |
---|
125 | #@version 0.10 - Primera versión para OpenGnSys. |
---|
126 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
127 | #@date 2011-01-17 |
---|
128 | #*/ |
---|
129 | function ogIsRepoLocked () { |
---|
130 | |
---|
131 | # Variables locales. |
---|
132 | local f FILES |
---|
133 | |
---|
134 | # No hacer nada, si no está definido el punto de montaje del repositorio. |
---|
135 | [ -z "$OGIMG" ] && return |
---|
136 | |
---|
137 | # Comprobar si alguno de los ficheros abiertos por los procesos activos está en el |
---|
138 | # punto de montaje del repositorio de imágenes. |
---|
139 | FILES=$(for f in /proc/[0-9]*/fd/*; do readlink -f "$f"; done | grep "^$OGIMG") # */ (comentario Doxygen) |
---|
140 | [ -n "$FILES" ] |
---|
141 | } |
---|
142 | |
---|
143 | |
---|
144 | |
---|
145 | #/** |
---|
146 | # ogHelp ["str_function" ["str_format" ["str_example" ... ]]] |
---|
147 | #@brief Muestra mensaje de ayuda para una función determinda. |
---|
148 | #@param str_function Nombre de la función. |
---|
149 | #@param str_format Formato de ejecución de la función. |
---|
150 | #@param str_example Ejemplo de ejecución de la función. |
---|
151 | #@return str_help - Salida de ayuda. |
---|
152 | #@note Si no se indican parámetros, la función se toma de la variable \c $FUNCNAME |
---|
153 | #@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. |
---|
154 | #@note Pueden especificarse varios mensajes con ejemplos. |
---|
155 | #@version 0.9 - Primera versión para OpenGnSys. |
---|
156 | #@author Ramon Gomez, ETSII Universidad de Sevilla |
---|
157 | #@date 2009-07-27 |
---|
158 | #*/ |
---|
159 | function ogHelp () { |
---|
160 | |
---|
161 | # Variables locales. |
---|
162 | local FUNC MSG |
---|
163 | |
---|
164 | # Mostrar función, descripción y formato. |
---|
165 | FUNC="${1:-${FUNCNAME[${#FUNCNAME[*]}-1]}}" |
---|
166 | MSG="MSG_HELP_$FUNC" |
---|
167 | ogEcho help "$MSG_FUNCTION $FUNC: ${!MSG}" |
---|
168 | [ -n "$2" ] && ogEcho help " $MSG_FORMAT: $2" |
---|
169 | # Mostrar ejemplos (si existen). |
---|
170 | shift 2 |
---|
171 | while [ $# -gt 0 ]; do |
---|
172 | ogEcho help " $MSG_EXAMPLE: $1" |
---|
173 | shift |
---|
174 | done |
---|
175 | } |
---|
176 | |
---|
177 | ogCheckProgram () |
---|
178 | { |
---|
179 | # Si se solicita, mostrar ayuda. |
---|
180 | if [ "$*" == "help" ]; then |
---|
181 | ogHelp "$FUNCNAME \"str_program1 program2 programN\" " \ |
---|
182 | "$FUNCNAME \"partimage partclone mbuffer\" " |
---|
183 | return |
---|
184 | fi |
---|
185 | |
---|
186 | # Error si no se recibe 1 parámetro. |
---|
187 | [ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $? |
---|
188 | |
---|
189 | local PERROR PLOG |
---|
190 | PERROR=0 |
---|
191 | PLOG=" " |
---|
192 | for i in `echo $1` |
---|
193 | do |
---|
194 | if [ ! `which $i` ] |
---|
195 | then |
---|
196 | PERROR=1 |
---|
197 | PLOG="$PLOG $i" |
---|
198 | fi |
---|
199 | done |
---|
200 | if [ "$PERROR" == "1" ] |
---|
201 | then |
---|
202 | ogRaiseError $OG_ERR_NOTEXEC "$PLOG" || return $? |
---|
203 | else |
---|
204 | return 0 |
---|
205 | fi |
---|
206 | } |
---|