From mboxrd@z Thu Jan 1 00:00:00 1970 From: Fabio M. Di Nitto Date: Fri, 8 Jul 2011 15:54:11 +0200 Subject: [Cluster-devel] [PATCH] config: add dynamic generation of relaxng schema for config validation Message-ID: <1310133251-17351-1-git-send-email-fdinitto@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Add new tool ccs_update_schema Modify ccs_config_validate to call ccs_update_schema This feature requires resource-agents 3.9.2 and fence-agents 3.1.5 and xsltproc available on the installed system. Resolves: rhbz#680930 Signed-off-by: Fabio M. Di Nitto --- config/tools/man/Makefile | 1 + config/tools/man/ccs_config_validate.8 | 4 + config/tools/man/ccs_update_schema.8 | 29 + config/tools/xml/Makefile | 19 +- config/tools/xml/ccs_config_validate.in | 25 +- config/tools/xml/ccs_update_schema.in | 311 +++ config/tools/xml/cluster.rng.in | 4309 ------------------------------- config/tools/xml/cluster.rng.in.head | 1049 ++++++++ config/tools/xml/cluster.rng.in.tail | 1 + make/install.mk | 8 + make/uninstall.mk | 6 + 11 files changed, 1447 insertions(+), 4315 deletions(-) create mode 100644 config/tools/man/ccs_update_schema.8 create mode 100644 config/tools/xml/ccs_update_schema.in delete mode 100644 config/tools/xml/cluster.rng.in create mode 100644 config/tools/xml/cluster.rng.in.head create mode 100644 config/tools/xml/cluster.rng.in.tail diff --git a/config/tools/man/Makefile b/config/tools/man/Makefile index 8674f66..5faaf6b 100644 --- a/config/tools/man/Makefile +++ b/config/tools/man/Makefile @@ -1,6 +1,7 @@ MANTARGET= \ ccs_config_dump.8 \ ccs_config_validate.8 \ + ccs_update_schema.8 \ ccs_tool.8 \ confdb2ldif.8 diff --git a/config/tools/man/ccs_config_validate.8 b/config/tools/man/ccs_config_validate.8 index 8884952..ac78178 100644 --- a/config/tools/man/ccs_config_validate.8 +++ b/config/tools/man/ccs_config_validate.8 @@ -24,6 +24,10 @@ Validate an alternate config file without preloading it with default values. Validate an alternate config file with preloading of default values (recommended option). .SS "Advanced options:" .TP +\fB\-u\fR +Do not update relaxng schema (see ccs_update_schema.8) +.HP +.TP \fB\-r\fR Force validation of runtime config .HP diff --git a/config/tools/man/ccs_update_schema.8 b/config/tools/man/ccs_update_schema.8 new file mode 100644 index 0000000..3467c9c --- /dev/null +++ b/config/tools/man/ccs_update_schema.8 @@ -0,0 +1,29 @@ +.TH "ccs_update_schema" "8" "" "" "" +.SH "NAME" +ccs_update_schema \- Tool to generate cluster relaxng schema for cluster config validation. + +.SH "SYNOPSIS" +.B ccs_update_schema +[\fIOPTION\fR].. + +.SH "DESCRIPTION" + +\fBccs_update_schema\fP is part of the Cluster Configuration System (CCS). +It is used to update the cluster relaxng schema that validates cluster.conf. + +.SH "OPTIONS" +.TP +\fB\-h\fP +Help. Print out the usage. +.TP +\fB\-V\fP +Print the version information. +.TP +\fB\-v\fP +Be verbose. Mostly for debugging purposes. +.TP +\fB\-f\fP +Ignore local stored cache and regenerate a fresh schema. + +.SH "SEE ALSO" +ccs_config_validate(8), cluster.conf(5) diff --git a/config/tools/xml/Makefile b/config/tools/xml/Makefile index a5c5cc7..3c9e97c 100644 --- a/config/tools/xml/Makefile +++ b/config/tools/xml/Makefile @@ -2,12 +2,14 @@ include ../../../make/defines.mk TARGET1 = ccs_config_dump TARGET2 = ccs_config_validate -TARGET3 = cluster.rng +TARGET3 = ccs_update_schema +TARGET4 = cluster.rng -SBINDIRT = $(TARGET1) $(TARGET2) -SHAREDIRT = $(TARGET3) +SBINDIRT = $(TARGET1) $(TARGET2) $(TARGET3) +SHAREDIRSYMT = $(TARGET4) +RELAXNGDIRT = cluster.rng.in.head cluster.rng.in.tail -all: $(TARGET1) $(TARGET2) $(TARGET3) +all: $(TARGET1) $(TARGET2) $(TARGET3) $(TARGET4) include $(OBJDIR)/make/cobj.mk include $(OBJDIR)/make/clean.mk @@ -33,6 +35,13 @@ ${TARGET2}: $(S)/${TARGET2}.in > $(TARGET2) ${TARGET3}: $(S)/${TARGET3}.in - cp $(S)/${TARGET3}.in ${TARGET3} + cat $(S)/$(TARGET3).in | sed \ + -e 's#@SBINDIR@#${sbindir}#g' \ + -e 's#@SHAREDIR@#${sharedir}#g' \ + -e 's#@VERSION@#${RELEASE_VERSION}#g' \ + > $(TARGET3) + +${TARGET4}: + ln -sf /var/lib/cluster/cluster.rng ${TARGET4} clean: generalclean diff --git a/config/tools/xml/ccs_config_validate.in b/config/tools/xml/ccs_config_validate.in index f7d7c04..6573fef 100644 --- a/config/tools/xml/ccs_config_validate.in +++ b/config/tools/xml/ccs_config_validate.in @@ -42,6 +42,7 @@ print_usage() { echo " -l configfile Validate an alternate config file (load test)" echo "" echo "Advanced options:" + echo " -u Do not update relaxng schema" echo " -r Force validation of runtime config" echo " -C config_loader Override config plugin loader" echo " -t tempfile Force temporay file to tempfile" @@ -135,6 +136,9 @@ check_opts() { exit 255 fi ;; + -u) + updaterelaxng=0 + ;; esac shift done @@ -146,7 +150,7 @@ lecho() return 0 } -opts=$(getopt t:hVnC:f:l:rR:ovq $@) +opts=$(getopt t:hVnC:f:l:rR:ovqu $@) if [ "$?" != 0 ]; then print_usage >&2 exit 255 @@ -182,6 +186,25 @@ else fi lecho "Configuration stored in temporary file" +lecho "Updating relaxng schema" +if [ "$updaterelaxng" != 0 ]; then + updateerr="$(ccs_update_schema 2>&1)" + if [ $? != 0 ]; then + echo "Unable to update relaxng schema: $updateerr" >&2 + exit 255 + fi +fi + +if [ -f /var/lib/cluster/rng_update.lock ]; then + echo "Relax-ng schema update in progress" >&2 + exit 255 +fi + +if [ ! -e @SHAREDIR@/cluster.rng ]; then + echo "Unable to verify a configuration without relaxng schema" >&2 + exit 255 +fi + lecho "Validating.." xmlout=$(xmllint --noout \ diff --git a/config/tools/xml/ccs_update_schema.in b/config/tools/xml/ccs_update_schema.in new file mode 100644 index 0000000..ce6cf8d --- /dev/null +++ b/config/tools/xml/ccs_update_schema.in @@ -0,0 +1,311 @@ +#!/bin/bash + +set +e +export LC_ALL=C + +rngdir=@SHAREDIR@/relaxng +rasdir=@SHAREDIR@ +fasdir=@SBINDIR@ +vardir=/var/lib/cluster +force="" +verbose="" + +print_usage() { + echo "Usage:" + echo "" + echo "ccs_update_schema [options]" + echo "" + echo "Options:" + echo " -h Print this help, then exit" + echo " -V Print program version information, then exit" + echo " -v Produce verbose output" + echo " -f Force schema regeneration and ignore cache" +} + +lecho() { + [ -n "$verbose" ] && echo "$@" + return 0 +} + +check_opts() { + while [ "$1" != "--" ]; do + case $1 in + -h) + print_usage + exit 0 + ;; + -V) + echo "ccs_update_schema version @VERSION@" + exit 0 + ;; + -v) + verbose=1 + ;; + -f) + force=1 + ;; + esac + shift + done +} + +opts=$(getopt hvVf $@) +if [ "$?" != 0 ]; then + print_usage >&2 + exit 1 +fi +check_opts $opts + +# need to be careful (might have to mask traps on exit) +cleanup() { + [ -n "$tmpdir" ] && [ -d "$tmddir" ] && rm -rf "$tmpdir" + rm -f $vardir/rng_update.lock + exit $1 +} + +trap "cleanup 1" ABRT +trap "cleanup 1" QUIT +trap "cleanup 1" TERM +trap "cleanup 1" INT +trap "cleanup 1" ERR + +filter_file_list() { + filelist="$@" + for i in $filelist; do + [ "${i%\~}" != "${i}" ] && continue + [ "${i%,}" != "${i}" ] && continue + [ "${i%.orig}" != "${i}" ] && continue + [ "${i%.cfsaved}" != "${i}" ] && continue + [ "${i%.rpmsave}" != "${i}" ] && continue + [ "${i%.rpmorig}" != "${i}" ] && continue + [ "${i%.rpmnew}" != "${i}" ] && continue + [ "${i%.swp}" != "${i}" ] && continue + [ "${i%,v}" != "${i}" ] && continue + [ "${i%.dpkg-old}" != "${i}" ] && continue + [ "${i%.dpkg-dist}" != "${i}" ] && continue + [ "${i%.dpkg-new}" != "${i}" ] && continue + echo "$i" + done +} + +filter_fence_list() { + filelist="$@" + for i in $faslist; do + [ "${i}" = "$fasdir/fence_legacy" ] && continue + [ "${i}" = "$fasdir/fence_node" ] && continue + [ "${i}" = "$fasdir/fence_nss_wrapper" ] && continue + [ "${i}" = "$fasdir/fence_tool" ] && continue + [ "${i}" = "$fasdir/fence_vmware_helper" ] && continue + echo "$i" + done +} + +generate_hash() { + outputfile="$1" + shift + filelist="$@" + + if [ -n "$filelist" ]; then + md5sum $filelist > $outputfile + return $? + else + echo -n > $outputfile + return $? + fi +} + +generate_ras() { + outputdir="$1" + raslist="" + + lecho " ras: checking required files" + + for i in ra2rng.xsl ra2ref.xsl \ + resources.rng.head resources.rng.mid resources.rng.tail; do + if [ ! -f "$rngdir/$i" ]; then + echo "Unable to find $rngdir/$i" >&2 + return 1 + fi + done + + lecho " ras: looking for agents" + + if [ -d "$rasdir" ]; then + raslist=$(find $rasdir \ + -mindepth 1 -maxdepth 1 -type f -executable | sort -u) + raslist=$(filter_file_list $raslist) + # ordering is important apparently + [ -x $rasdir/service.sh ] && \ + raslist="$rasdir/service.sh \ + $(echo $raslist | sed -e 's#'$rasdir'/service.sh##g')" + fi + + lecho " ras: generating hashes" + + if ! generate_hash \ + "$outputdir/resources.rng.hash" \ + "$raslist $rngdir/ra2*.xsl $rngdir/resources.rng.* $0"; then + echo "Unable to generate resource agents hash" >&2 + return 1 + fi + + if [ -z "$force" ] && \ + [ -f $vardir/resources.rng.hash ] && \ + [ -f $vardir/resources.rng.cache ] && \ + [ "$(cat $vardir/resources.rng.hash | md5sum -)" = \ + "$(cat "$outputdir/resources.rng.hash" | md5sum -)" ]; then + lecho " ras: using local cache" + cp $vardir/resources.rng.cache $outputdir/resources.rng.cache + return 0 + fi + + lecho " ras: generating rng data" + + cat $rngdir/resources.rng.head > "$outputdir/resources.rng.cache" + lecho " ras: generating rng data" + for i in $raslist; do + lecho " ras: processing $(basename $i)" + $i meta-data 2>/dev/null | xsltproc $rngdir/ra2rng.xsl - >> \ + "$outputdir/resources.rng.cache" 2>/dev/null + done + cat $rngdir/resources.rng.mid >> "$outputdir/resources.rng.cache" + lecho " ras: generating ref data" + for i in $raslist; do + lecho " ras: processing $(basename $i)" + $i meta-data 2>/dev/null | xsltproc $rngdir/ra2ref.xsl - >> \ + "$outputdir/resources.rng.cache" 2>/dev/null + done + cat $rngdir/resources.rng.tail >> "$outputdir/resources.rng.cache" +} + +generate_fas() { + outputdir="$1" + faslist="" + + lecho " fas: checking required files" + + for i in fence2rng.xsl fence.rng.head fence.rng.tail; do + if [ ! -f "$rngdir/$i" ]; then + echo "Unable to find $rngdir/$i" >&2 + return 1 + fi + done + + lecho " fas: looking for agents" + + if [ -d "$fasdir" ]; then + faslist=$(ls -1 $fasdir/fence_*) + faslist=$(filter_file_list $faslist) + faslist=$(filter_fence_list $faslist) + fi + + lecho " fas: generating hashes" + + if ! generate_hash \ + "$outputdir/fence_agents.rng.hash" \ + "$faslist $rngdir/fence2*.xsl $rngdir/fence.rng.* $0"; then + echo "Unable to generate fence agents hash" >&2 + return 1 + fi + + if [ -z "$force" ] && \ + [ -f $vardir/fence_agents.rng.hash ] && \ + [ -f $vardir/fence_agents.rng.cache ] && \ + [ "$(cat $vardir/fence_agents.rng.hash | md5sum -)" = \ + "$(cat "$outputdir/fence_agents.rng.hash" | md5sum -)" ]; then + lecho " fas: using local cache" + cp $vardir/fence_agents.rng.cache \ + $outputdir/fence_agents.rng.cache + return 0 + fi + + lecho " fas: generating new cache" + + cat $rngdir/fence.rng.head > "$outputdir/fence_agents.rng.cache" + for i in $faslist; do + lecho " fas: processing $(basename $i)" + $i -o metadata 2>/dev/null | \ + xsltproc $rngdir/fence2rng.xsl - >> \ + "$outputdir/fence_agents.rng.cache" 2>/dev/null + [ "$?" != 0 ] && \ + echo " " >> \ + "$outputdir/fence_agents.rng.cache" + done + cat $rngdir/fence.rng.tail >> "$outputdir/fence_agents.rng.cache" +} + +build_schema() { + cat $rngdir/cluster.rng.in.head \ + $outputdir/resources.rng.cache \ + $outputdir/fence_agents.rng.cache \ + $rngdir/cluster.rng.in.tail \ + > $outputdir/cluster.rng || { + echo "generic error linking relaxng schema" >&2 + return 1 + } + + xmllint --noout $outputdir/cluster.rng || { + echo "generated schema does not pass xmllint validation" >&2 + return 1 + } + + return 0 +} + +# NOTE +# failure to delete cache and hash or failure to install them +# is not fatal and will result in both being regenerated at the next run + +install_schema() { + mkdir -p $outputdir/backup || { + echo "Unable to create backup dir" >&2 + return 1 + } + cp -a $vardir/*rng* $outputdir/backup/ || { + echo "Unable to perform backup of current schema" >&2 + return 1 + } + rm -f $vardir/*.cache $vardir/*.hash + cp -f $outputdir/cluster.rng $vardir/ || { + cp -a $outputdir/backup/* $vardir/ + echo "Failed to update relaxng ondisk data" >&2 + return 1 + } + cp $outputdir/*.cache $outputdir/*.hash $vardir/ + return 0 +} + +( + flock --exclusive 200 + + tmpdir="$(mktemp -d -q)" || { + echo "unable to create tempdir" >&2 + exit 1 + } + + lecho "Generating resource-agents cache" + + generate_ras "$tmpdir" || { + echo "generic error creating resource agents relaxng schema" >&2 + cleanup 1 + } + + lecho "Generating fence-agents cache" + + generate_fas "$tmpdir" || { + echo "generic error creating fence agents relaxng schema" >&2 + cleanup 1 + } + + lecho "Building final relaxng schema" + + build_schema || cleanup 1 + + lecho "Installing schema in $vardir" + + install_schema || cleanup 1 + + lecho "all done. have a nice day!" + + cleanup 0 +) 200>$vardir/rng_update.lock diff --git a/config/tools/xml/cluster.rng.in b/config/tools/xml/cluster.rng.in deleted file mode 100644 index 8ba6df6..0000000 --- a/config/tools/xml/cluster.rng.in +++ /dev/null @@ -1,4309 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - udp - udpb - udpu - rdma - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/config/tools/xml/cluster.rng.in.head b/config/tools/xml/cluster.rng.in.head new file mode 100644 index 0000000..f9606ad --- /dev/null +++ b/config/tools/xml/cluster.rng.in.head @@ -0,0 +1,1049 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + udp + udpb + udpu + rdma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/tools/xml/cluster.rng.in.tail b/config/tools/xml/cluster.rng.in.tail new file mode 100644 index 0000000..d4e2278 --- /dev/null +++ b/config/tools/xml/cluster.rng.in.tail @@ -0,0 +1 @@ + diff --git a/make/install.mk b/make/install.mk index e3c1c9d..49ca678 100644 --- a/make/install.mk +++ b/make/install.mk @@ -74,6 +74,14 @@ ifdef SHAREDIRT install -d ${sharedir} install -m644 ${SHAREDIRT} ${sharedir} endif +ifdef SHAREDIRSYMT + install -d ${sharedir} + cp -a ${SHAREDIRSYMT} ${sharedir} +endif +ifdef RELAXNGDIRT + install -d ${sharedir}/relaxng + install -m644 ${RELAXNGDIRT} ${sharedir}/relaxng +endif ifdef MANTARGET set -e; \ for i in ${MANTARGET}; do \ diff --git a/make/uninstall.mk b/make/uninstall.mk index 6f84727..3ca687f 100644 --- a/make/uninstall.mk +++ b/make/uninstall.mk @@ -44,6 +44,12 @@ endif ifdef SHAREDIRT ${UNINSTALL} ${SHAREDIRT} ${sharedir} endif +ifdef SHAREDIRSYMT + ${UNINSTALL} ${SHAREDIRSYMT} ${sharedir} +endif +ifdef RELAXNGDIRT + ${UNINSTALL} ${RELAXNGDIRT} ${sharedir}/relaxng +endif ifdef MANTARGET set -e; \ for i in ${MANTARGET}; do \ -- 1.7.4.4