Hey folks,
after changes in the OpenNMS config, I get always a little confused when
I did typo :-). In such a case there are messages like this in output.log:
---8<---
Caused by: org.exolab.castor.xml.MarshalException: Element type
"definition" must be followed by either attribute specifications, ">" or
"/>".{File: [not available]; line: 51; column: 5
---8<---
As the message is a little unspecific in naming the offending file, I
added a validity-check for the .xml files in the Debian init script. If
an invalid .xml file is found, the script exits with status 1. You need
the package xmlstarlet be installed in order to make that work (apt-get
install xmlstarlet). If the patch will be adopted, the Debian control
file should list xmlstarlet as a "recommends".
Currently it only check for well-formed XML, but xmlstartet also offers
DTD/XSD/RelaxNG support, so there is room for further improvement ;)
An example output, if an invalid file is found:
---8<---
opennms:/etc/opennms# /etc/init.d/opennms start
Preflight-Check...
/etc/opennms/test.xml is invalid.
Invalid config. Check /var/log/opennms/daemon/initscript.log for details.
---8<---
Rgds,
Andreas
---
opennms:/etc/opennms# diff -u
/usr/local/src/opennms-1.6.1-1/source/debian/opennms-server.opennms.init
/etc/init.d/opennms
---
/usr/local/src/opennms-1.6.1-1/source/debian/opennms-server.opennms.init
2008-11-13 20:10:05.000000000 +0100
+++ /etc/init.d/opennms 2009-01-04 12:27:30.000000000 +0100
@@ -30,6 +30,27 @@
set -e
+preflight_check() {
+ # XML vaild?
+ if [ -e /usr/bin/xmlstarlet ]; then
+ echo -n "Preflight-Check..."
+ echo "Preflight-Check $(date)" >>
/var/log/opennms/daemon/initscript.log
+ STARTMEUP=1
+ for i in $(find /etc/opennms -name "*.xml"); do
+ if ! ( /usr/bin/xmlstarlet val -q $i 2>>
/var/log/opennms/daemon/initscript.log ); then
+ echo -e "\n$i is invalid."
+ STARTMEUP=0
+ fi
+ done
+ if [ ${STARTMEUP} = 1 ]; then
+ echo "OK"
+ else
+ echo "Invalid config. Check
/var/log/opennms/daemon/initscript.log for details."
+ exit 1
+ fi
+ fi
+}
+
# read in settings from default file
if [ -f /etc/default/$NAME ]; then
. /etc/default/$NAME
@@ -53,6 +74,7 @@
case "$1" in
start)
+ preflight_check
echo -n "Starting $DESC: $NAME"
$DAEMON start > /dev/null
echo "."
@@ -64,6 +86,7 @@
echo "."
;;
restart|force-reload)
+ preflight_check
$0 stop
sleep 2
$0 start
------------------------------------------------------------------------------
_______________________________________________
Please read the OpenNMS Mailing List FAQ:
http://www.opennms.org/index.php/Mailing_List_FAQ
opennms-devel mailing list
To *unsubscribe* or change your subscription options, see the bottom of this
page:
https://lists.sourceforge.net/lists/listinfo/opennms-devel