Page MenuHomeClusterLabs Projects

No OneTemporary

diff --git a/GNUmakefile b/GNUmakefile
index 5752276efb..91cf41b2de 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -1,382 +1,382 @@
#
# Copyright (C) 2008 Andrew Beekhof
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
default: $(shell test ! -e configure && echo init) $(shell test -e configure && echo core)
-include Makefile
PACKAGE ?= pacemaker
# Force 'make dist' to be consistent with 'make export'
distdir = $(PACKAGE)-$(TAG)
TARFILE = $(PACKAGE)-$(SHORTTAG).tar.gz
DIST_ARCHIVES = $(TARFILE)
RPM_ROOT = $(shell pwd)
RPM_OPTS = --define "_sourcedir $(RPM_ROOT)" \
--define "_specdir $(RPM_ROOT)" \
--define "_srcrpmdir $(RPM_ROOT)" \
MOCK_OPTIONS ?= --resultdir=$(RPM_ROOT)/mock --no-cleanup-after
# Default to building Fedora-compliant spec files
# SLES: /etc/SuSE-release
# openSUSE: /etc/SuSE-release
# RHEL: /etc/redhat-release, /etc/system-release
# Fedora: /etc/fedora-release, /etc/redhat-release, /etc/system-release
# CentOS: /etc/centos-release, /etc/redhat-release, /etc/system-release
F ?= $(shell test ! -e /etc/fedora-release && echo 0; test -e /etc/fedora-release && rpm --eval %{fedora})
ARCH ?= $(shell test -e /etc/fedora-release && rpm --eval %{_arch})
MOCK_CFG ?= $(shell test -e /etc/fedora-release && echo fedora-$(F)-$(ARCH))
DISTRO ?= $(shell test -e /etc/SuSE-release && echo suse; echo fedora)
COMMIT ?= HEAD
TAG ?= $(shell T=$$(git describe --all '$(COMMIT)' | sed -n 's|tags/\(.*\)|\1|p'); \
test -n "$${T}" && echo "$${T}" \
|| git log --pretty=format:%H -n 1 '$(COMMIT)')
lparen = (
rparen = )
SHORTTAG ?= $(shell case $(TAG) in Pacemaker-*$(rparen) echo '$(TAG)' | cut -c11-;; \
*$(rparen) git log --pretty=format:%h -n 1 '$(TAG)';; esac)
SHORTTAG_ABBREV = $(shell printf %s '$(SHORTTAG)' | wc -c)
WITH ?= --without doc
#WITH ?= --without=doc --with=gcov
LAST_RC ?= $(shell test -e /Volumes || git tag -l | grep Pacemaker | sort -Vr | grep rc | head -n 1)
ifneq ($(origin VERSION), undefined)
LAST_RELEASE ?= Pacemaker-$(VERSION)
else
LAST_RELEASE ?= $(shell git tag -l | grep Pacemaker | sort -Vr | grep -v rc | head -n 1)
endif
NEXT_RELEASE ?= $(shell echo $(LAST_RELEASE) | awk -F. '/[0-9]+\./{$$3+=1;OFS=".";print $$1,$$2,$$3}')
BUILD_COUNTER ?= build.counter
LAST_COUNT = $(shell test ! -e $(BUILD_COUNTER) && echo 0; test -e $(BUILD_COUNTER) && cat $(BUILD_COUNTER))
COUNT = $(shell expr 1 + $(LAST_COUNT))
SPECVERSION ?= $(COUNT)
# toplevel rsync destination for www targets (without trailing slash)
RSYNC_DEST ?= root@www.clusterlabs.org:/var/www/html
# recursive, preserve symlinks/permissions/times, verbose, compress,
# don't cross filesystems, sparse, show progress
RSYNC_OPTS = -rlptvzxS --progress
# rpmbuild wrapper that translates "--with[out] FEATURE" into RPM macros
#
# Unfortunately, at least recent versions of rpm do not support mentioned
# switch. To work this around, we can emulate mechanism that rpm uses
# internally: unfold the flags into respective macro definitions:
#
# --with[out] FOO -> --define "_with[out]_FOO --with[out]-FOO"
#
# $(1) ... WITH string (e.g., --with pre_release --without cman)
# $(2) ... options following the initial "rpmbuild" in the command
# $(3) ... final arguments determined with $2 (e.g., pacemaker.spec)
#
# Note that if $(3) is a specfile, extra case is taken so as to reflect
# pcmkversion correctly (using in-place modification).
#
# Also note that both ways to specify long option with an argument
# (i.e., what getopt and, importantly, rpm itself support) can be used:
#
# --with FOO
# --with=FOO
rpmbuild-with = \
WITH=$$(getopt -o "" -l with:,without: -- $(1)) || exit 1; \
CMD='rpmbuild $(2)'; PREREL=0; \
eval set -- "$${WITH}"; \
while true; do \
case "$$1" in \
--with) CMD="$${CMD} --define \"_with_$$2 --with-$$2\""; \
[ "$$2" != pre_release ] || PREREL=1; shift 2;; \
--without) CMD="$${CMD} --define \"_without_$$2 --without-$$2\""; \
[ "$$2" != pre_release ] || PREREL=0; shift 2;; \
--) shift ; break ;; \
*) echo "cannot parse WITH: $$1"; exit 1;; \
esac; \
done; \
case "$(3)" in \
*.spec) { [ $${PREREL} -eq 0 ] || [ $(LAST_RELEASE) = $(TAG) ]; } \
&& sed -i "s/^\(%global pcmkversion \).*/\1$$(echo $(LAST_RELEASE) | sed -e s:Pacemaker-:: -e s:-.*::)/" $(3) \
|| sed -i "s/^\(%global pcmkversion \).*/\1$$(echo $(NEXT_RELEASE) | sed -e s:Pacemaker-:: -e s:-.*::)/" $(3);; \
esac; \
CMD="$${CMD} $(3)"; \
eval "$${CMD}"
init:
./autogen.sh init
export:
rm -f $(PACKAGE)-dirty.tar.* $(PACKAGE)-tip.tar.* $(PACKAGE)-HEAD.tar.*
if [ ! -f $(TARFILE) ]; then \
rm -f $(PACKAGE).tar.*; \
if [ $(TAG) = dirty ]; then \
git commit -m "DO-NOT-PUSH" -a; \
git archive --prefix=$(distdir)/ HEAD | gzip > $(TARFILE); \
git reset --mixed HEAD^; \
else \
git archive --prefix=$(distdir)/ $(TAG) | gzip > $(TARFILE); \
fi; \
echo `date`: Rebuilt $(TARFILE); \
else \
echo `date`: Using existing tarball: $(TARFILE); \
fi
$(PACKAGE)-opensuse.spec: $(PACKAGE)-suse.spec
cp $^ $@
@echo Rebuilt $@
$(PACKAGE)-suse.spec: $(PACKAGE).spec.in GNUmakefile
rm -f $@
if [ x != x"`git ls-files -m | grep pacemaker.spec.in`" ]; then \
cp $(PACKAGE).spec.in $@; \
echo "Rebuilt $@ (local modifications)"; \
elif [ x = x"`git show $(TAG):pacemaker.spec.in 2>/dev/null`" ]; then \
cp $(PACKAGE).spec.in $@; \
echo "Rebuilt $@"; \
else \
git show $(TAG):$(PACKAGE).spec.in >> $@; \
echo "Rebuilt $@ from $(TAG)"; \
fi
sed -i s:%{_docdir}/%{name}:%{_docdir}/%{name}-%{version}:g $@
sed -i s:corosynclib:libcorosync:g $@
sed -i s:libexecdir}/lcrso:libdir}/lcrso:g $@
sed -i 's:%{name}-libs:lib%{name}3:g' $@
sed -i s:cluster-glue-libs:libglue:g $@
sed -i s:bzip2-devel:libbz2-devel:g $@
sed -i s:docbook-style-xsl:docbook-xsl-stylesheets:g $@
sed -i s:libtool-ltdl-devel::g $@
sed -i s:publican::g $@
sed -i s:byacc::g $@
sed -i s:gnutls-devel:libgnutls-devel:g $@
sed -i s:189:90:g $@
sed -i 's:python-devel:python-curses python-xml python-devel:' $@
sed -i 's@Requires: python@Requires: python-curses python-xml python@' $@
@echo "Applied SUSE-specific modifications"
# Works for all fedora based distros
$(PACKAGE)-%.spec: $(PACKAGE).spec.in
rm -f $@
if [ x != x"`git ls-files -m | grep pacemaker.spec.in`" ]; then \
cp $(PACKAGE).spec.in $(PACKAGE)-$*.spec; \
echo "Rebuilt $@ (local modifications)"; \
elif [ x = x"`git show $(TAG):pacemaker.spec.in 2>/dev/null`" ]; then \
cp $(PACKAGE).spec.in $(PACKAGE)-$*.spec; \
echo "Rebuilt $@"; \
else \
git show $(TAG):$(PACKAGE).spec.in >> $(PACKAGE)-$*.spec; \
echo "Rebuilt $@ from $(TAG)"; \
fi
srpm-%: export $(PACKAGE)-%.spec
rm -f *.src.rpm
cp $(PACKAGE)-$*.spec $(PACKAGE).spec
echo "* $(shell date +"%a %b %d %Y") Andrew Beekhof <andrew@beekhof.net> $(shell git describe --tags $(TAG) | sed -e s:Pacemaker-:: -e s:-.*::)-1" >> $(PACKAGE).spec
echo " - See included ChangeLog file or https://raw.github.com/ClusterLabs/pacemaker/master/ChangeLog for full details" >> $(PACKAGE).spec
if [ -e $(BUILD_COUNTER) ]; then \
echo $(COUNT) > $(BUILD_COUNTER); \
fi
sed -e 's/global\ specversion\ .*/global\ specversion\ $(SPECVERSION)/' \
-e 's/global\ commit\ .*/global\ commit\ $(TAG)/' \
-e 's/global\ commit_abbrev\ .*/global\ commit_abbrev\ $(SHORTTAG_ABBREV)/' \
-i $(PACKAGE).spec
$(call rpmbuild-with,$(WITH),-bs --define "dist .$*" $(RPM_OPTS),$(PACKAGE).spec)
chroot: mock-$(MOCK_CFG) mock-install-$(MOCK_CFG) mock-sh-$(MOCK_CFG)
echo "Done"
mock-next:
make F=$(shell expr 1 + $(F)) mock
mock-rawhide:
make F=rawhide mock
mock-install-%:
echo "Installing packages"
mock --root=$* $(MOCK_OPTIONS) --install $(RPM_ROOT)/mock/*.rpm vi sudo valgrind lcov gdb fence-agents psmisc
mock-install: mock-install-$(MOCK_CFG)
echo "Done"
mock-sh: mock-sh-$(MOCK_CFG)
echo "Done"
mock-sh-%:
echo "Connecting"
mock --root=$* $(MOCK_OPTIONS) --shell
echo "Done"
# eg. WITH="--with cman" make rpm
mock-%:
make srpm-$(firstword $(shell echo $(@:mock-%=%) | tr '-' ' '))
-rm -rf $(RPM_ROOT)/mock
@echo "mock --root=$* --rebuild $(WITH) $(MOCK_OPTIONS) $(RPM_ROOT)/*.src.rpm"
mock --root=$* --no-cleanup-after --rebuild $(WITH) $(MOCK_OPTIONS) $(RPM_ROOT)/*.src.rpm
srpm: srpm-$(DISTRO)
echo "Done"
mock: mock-$(MOCK_CFG)
echo "Done"
rpm-dep: $(PACKAGE)-$(DISTRO).spec
if [ x != x`which yum-builddep 2>/dev/null` ]; then \
echo "Installing with yum-builddep"; \
sudo yum-builddep $(PACKAGE)-$(DISTRO).spec; \
elif [ x != x`which yum 2>/dev/null` ]; then \
echo -e "Installing: $(shell grep BuildRequires pacemaker.spec.in | sed -e s/BuildRequires:// -e s:\>.*0:: | tr '\n' ' ')\n\n"; \
sudo yum install $(shell grep BuildRequires pacemaker.spec.in | sed -e s/BuildRequires:// -e s:\>.*0:: | tr '\n' ' '); \
elif [ x != x`which zypper` ]; then \
echo -e "Installing: $(shell grep BuildRequires pacemaker.spec.in | sed -e s/BuildRequires:// -e s:\>.*0:: | tr '\n' ' ')\n\n"; \
sudo zypper install $(shell grep BuildRequires pacemaker.spec.in | sed -e s/BuildRequires:// -e s:\>.*0:: | tr '\n' ' ');\
else \
echo "I don't know how to install $(shell grep BuildRequires pacemaker.spec.in | sed -e s/BuildRequires:// -e s:\>.*0:: | tr '\n' ' ')";\
fi
rpm: srpm
@echo To create custom builds, edit the flags and options in $(PACKAGE).spec first
$(call rpmbuild-with,$(WITH),$(RPM_OPTS),--rebuild $(RPM_ROOT)/*.src.rpm)
release:
make TAG=$(LAST_RELEASE) rpm
rc:
make TAG=$(LAST_RC) rpm
dirty:
make TAG=dirty mock
COVERITY_DIR = $(shell pwd)/coverity-$(TAG)
COVFILE = $(PACKAGE)-coverity-$(TAG).tgz
COVHOST ?= scan5.coverity.com
COVPASS ?= password
# Public coverity
coverity:
test -e configure || ./autogen.sh
test -e Makefile || ./configure
make core-clean
rm -rf $(COVERITY_DIR)
cov-build --dir $(COVERITY_DIR) make core
tar czf $(COVFILE) --transform=s@.*$(TAG)@cov-int@ $(COVERITY_DIR)
@echo "Uploading to public Coverity instance..."
curl --form file=@$(COVFILE) --form project=$(PACKAGE) --form password=$(COVPASS) --form email=andrew@beekhof.net http://$(COVHOST)/cgi-bin/upload.py
rm -rf $(COVFILE) $(COVERITY_DIR)
coverity-corp:
test -e configure || ./autogen.sh
test -e Makefile || ./configure
make core-clean
rm -rf $(COVERITY_DIR)
cov-build --dir $(COVERITY_DIR) make core
@echo "Waiting for a corporate Coverity license..."
cov-analyze --dir $(COVERITY_DIR) --wait-for-license
cov-format-errors --dir $(COVERITY_DIR) --emacs-style > $(TAG).coverity
cov-format-errors --dir $(COVERITY_DIR)
- rsync $(RSYNC_OPTS) "$(COVERITY_DIR)/c/output/errors/" "$(RSYNC_DEST)/coverity/$(PACKAGE)/$(TAG)"
+ rsync $(RSYNC_OPTS) "$(COVERITY_DIR)/c/output/errors/" "$(RSYNC_DEST)/$(PACKAGE)/coverity/$(TAG)/"
make core-clean
# cov-commit-defects --host $(COVHOST) --dir $(COVERITY_DIR) --stream $(PACKAGE) --user auto --password $(COVPASS)
rm -rf $(COVERITY_DIR)
global: clean-generic
gtags -q
global-upload: global
htags -sanhIT
- rsync $(RSYNC_OPTS) HTML/ "$(RSYNC_DEST)/global/$(PACKAGE)/$(TAG)"
+ rsync $(RSYNC_OPTS) HTML/ "$(RSYNC_DEST)/$(PACKAGE)/global/$(TAG)/"
%.8.html: %.8
echo groff -mandoc `man -w ./$<` -T html > $@
groff -mandoc `man -w ./$<` -T html > $@
- rsync $(RSYNC_OPTS) "$@" "$(RSYNC_DEST)/man/$(PACKAGE)/"
+ rsync $(RSYNC_OPTS) "$@" "$(RSYNC_DEST)/$(PACKAGE)/man/"
%.7.html: %.7
echo groff -mandoc `man -w ./$<` -T html > $@
groff -mandoc `man -w ./$<` -T html > $@
- rsync $(RSYNC_OPTS) "$@" "$(RSYNC_DEST)/man/$(PACKAGE)/"
+ rsync $(RSYNC_OPTS) "$@" "$(RSYNC_DEST)/$(PACKAGE)/man/"
manhtml-upload: all
find . -name "[a-z]*.[78]" -exec make \{\}.html \;
doxygen: Doxyfile
doxygen Doxyfile
doxygen-upload: doxygen
- rsync $(RSYNC_OPTS) doc/api/html/ "$(RSYNC_DEST)/doxygen/$(PACKAGE)/$(TAG)"
+ rsync $(RSYNC_OPTS) doc/api/html/ "$(RSYNC_DEST)/$(PACKAGE)/doxygen/$(TAG)/"
abi:
./abi-check pacemaker $(LAST_RELEASE) $(TAG)
abi-www:
- ./abi-check -u pacemaker $(LAST_RELEASE) $(TAG)
+ export RSYNC_DEST=$(RSYNC_DEST); ./abi-check -u pacemaker $(LAST_RELEASE) $(TAG)
www: manhtml-upload global-upload doxygen-upload
make RSYNC_DEST=$(RSYNC_DEST) -C doc www
summary:
@printf "\n* `date +"%a %b %d %Y"` `git config user.name` <`git config user.email`> $(NEXT_RELEASE)-1"
@printf "\n- Update source tarball to revision: `git log --pretty=format:%h -n 1`"
@printf "\n- Changesets: `git log --pretty=oneline $(LAST_RELEASE)..HEAD | wc -l`"
@printf "\n- Diff: "
@git diff -r $(LAST_RELEASE)..HEAD --stat include lib mcp pengine/*.c pengine/*.h cib crmd fencing lrmd tools xml | tail -n 1
rc-changes:
@make NEXT_RELEASE=$(shell echo $(LAST_RC) | sed s:-rc.*::) LAST_RELEASE=$(LAST_RC) changes
changes: summary
@printf "\n- Features added since $(LAST_RELEASE)\n"
@git log --pretty=format:' +%s' --abbrev-commit $(LAST_RELEASE)..HEAD | grep -e Feature: | sed -e 's@Feature:@@' | sort -uf
@printf "\n- Changes since $(LAST_RELEASE)\n"
@git log --pretty=format:' +%s' --abbrev-commit $(LAST_RELEASE)..HEAD | grep -e High: -e Fix: -e Bug | sed -e 's@Fix:@@' -e s@High:@@ -e s@Fencing:@fencing:@ -e 's@Bug@ Bug@' -e s@PE:@pengine:@ | sort -uf
changelog:
@make changes > ChangeLog
@printf "\n">> ChangeLog
git show $(LAST_RELEASE):ChangeLog >> ChangeLog
@echo -e "\033[1;35m -- Don't forget to run the bumplibs.sh script! --\033[0m"
indent:
find . -name "*.h" -exec ./p-indent \{\} \;
find . -name "*.c" -exec ./p-indent \{\} \;
git co HEAD crmd/fsa_proto.h lib/gnu
rel-tags: tags
find . -name TAGS -exec sed -i 's:\(.*\)/\(.*\)/TAGS:\2/TAGS:g' \{\} \;
CLANG_analyzer = $(shell which scan-build)
CLANG_checkers =
check: clang cppcheck
# Extra cppcheck options: --enable=all --inconclusive --std=posix
cppcheck:
for d in replace lib mcp attrd pengine cib crmd fencing lrmd tools; do cppcheck -q $$d; done
clang:
test -e $(CLANG_analyzer)
scan-build $(CLANG_checkers:%=-enable-checker %) make clean all
# V3 = scandir unsetenv alphasort xalloc
# V2 = setenv strerror strchrnul strndup
# http://www.gnu.org/software/gnulib/manual/html_node/Initial-import.html#Initial-import
GNU_MODS = crypto/md5
gnulib-update:
-test ! -e gnulib && git clone git://git.savannah.gnu.org/gnulib.git
cd gnulib && git pull
gnulib/gnulib-tool --source-base=lib/gnu --lgpl=2 --no-vc-files --import $(GNU_MODS)
diff --git a/abi-check b/abi-check
index c3409ab2da..48220e5bc3 100755
--- a/abi-check
+++ b/abi-check
@@ -1,97 +1,100 @@
#!/bin/bash
-UPLOAD=0
+# toplevel rsync destination for www targets (without trailing slash)
+: ${RSYNC_DEST:=root@www.clusterlabs.org:/var/www/html}
+
+UPLOAD=0
if [ $1 = "-u" ]; then
UPLOAD=1; shift
fi
PACKAGE=$1; shift
function tag() {
if [[ $1 =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ]]; then
echo Pacemaker-$1
else
echo $1
fi
}
function version() {
echo $1 | sed s:.*-::
}
function extract() {
TAG=$1
VERSION=$2
if [ $VERSION = HEAD ]; then
rm -rf abi_dumps/$PACKAGE/${PACKAGE}_$VERSION.abi.tar.gz
elif [ -f abi_dumps/$PACKAGE/${PACKAGE}_$VERSION.abi.tar.gz ]; then
return
fi
echo "Building ABI dump for $*"
BUILD_ROOT=.ABI-build
rm -rf $BUILD_ROOT
git archive --prefix $BUILD_ROOT/ $TAG | tar xv
BUILD_ROOT=$(pwd)/$BUILD_ROOT
DESC=$BUILD_ROOT/$VERSION.xml
sed -i.sed 's: doc::' $BUILD_ROOT/Makefile.am
cat <<EOF >$DESC
<?xml version="1.0" encoding="utf-8"?>
<descriptor>
<version>
$VERSION
</version>
<headers>
$BUILD_ROOT/root/usr/include/pacemaker/crm
</headers>
<libs>
EOF
( cd $BUILD_ROOT && ./autogen.sh )
( cd $BUILD_ROOT && ./configure --disable-fatal-warnings )
make -C $BUILD_ROOT V=0 DESTDIR=${BUILD_ROOT}/root install
if [ $? -ne 0 ]; then
echo "Build for $TAG failed. Repair, populate <libs/> and re-run: "
echo " abi-compliance-checker -l $PACKAGE -dump_abi $DESC"
echo ""
echo "To find libraries after building:"
echo " find $BUILD_ROOT/root -name "*.so" -print"
else
find $BUILD_ROOT/root -name "*.so" -print >> $DESC
fi
cat <<EOF >>$DESC
</libs>
</descriptor>
EOF
abi-compliance-checker -l $PACKAGE -dump_abi $DESC
rm -rf $BUILD_ROOT
}
for arg in $*; do
T=$(tag $arg)
V=$(version $T)
extract $T $V
done
if [ $# -eq 2 ]; then
V1=$(version $1)
V2=$(version $2)
abi-compliance-checker -l ${PACKAGE} \
-d1 abi_dumps/${PACKAGE}/${PACKAGE}_${V1}.abi.tar.gz \
-d2 abi_dumps/${PACKAGE}/${PACKAGE}_${V2}.abi.tar.gz
if [ $UPLOAD = 1 -a -d compat_reports/pacemaker/${V1}_to_${V2} ]; then
- rsync -azxlSD --progress compat_reports/pacemaker/${V1}_to_${V2} root@www.clusterlabs.org:/var/www/html/abi/pacemaker/
+ rsync -azxlSD --progress compat_reports/pacemaker/${V1}_to_${V2} ${RSYNC_DEST}/${PACKAGE}/abi/
fi
fi
diff --git a/doc/Makefile.am b/doc/Makefile.am
index ceeb9f00e4..d5bf3d3ec9 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -1,290 +1,290 @@
#
# doc: Pacemaker code
#
# Copyright (C) 2008 Andrew Beekhof
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
include $(top_srcdir)/Makefile.common
helpdir = $(datadir)/$(PACKAGE)
ascii = crm_fencing.txt acls.txt
docbook = Clusters_from_Scratch \
Pacemaker_Development \
Pacemaker_Explained \
Pacemaker_Remote
doc_DATA = $(ascii) $(generated_docs)
# toplevel rsync destination for www targets (without trailing slash)
-RSYNC_DEST ?= root@www.clusterlabs.org:/var/www/html/
+RSYNC_DEST ?= root@www.clusterlabs.org:/var/www/html
# recursive, preserve symlinks/permissions/times, verbose, compress,
# don't cross filesystems, sparse, show progress
RSYNC_OPTS = -rlptvzxS --progress
publican_docs =
generated_docs =
generated_mans =
ASCIIDOC_CLI_TYPE := pcs
DOCBOOK_FORMATS := html-desktop
DOCBOOK_LANGS := en-US
DOTs = $(wildcard */en-US/images/*.dot)
SVG = $(wildcard */en-US/images/pcmk-*.svg) $(DOTs:%.dot=%.svg)
generated_PNGS = $(SVG:%.svg=%-small.png) $(SVG:%.svg=%.png) $(SVG:%.svg=%-large.png) \
Pacemaker_Explained/en-US/images/Policy-Engine-big.png \
Pacemaker_Explained/en-US/images/Policy-Engine-small.png
PNGS = $(generated_PNGS) \
Pacemaker_Remote/en-US/images/pcmk-ha-cluster-stack.png \
Pacemaker_Remote/en-US/images/pcmk-ha-remote-stack.png
BRAND_PNGS = publican-clusterlabs/en-US/images/title_logo.png \
publican-clusterlabs/en-US/images/image_left.png \
publican-clusterlabs/en-US/images/image_right.png \
publican-clusterlabs/en-US/images/h1-bg.png
graphics: $(PNGS)
%.png: %.svg
$(AM_V_IMG)$(INKSCAPE) --file=$< --export-dpi=90 -C --export-png=$@
%-small.png: %.svg
$(AM_V_IMG)$(INKSCAPE) --file=$< --export-dpi=45 -C --export-png=$@
%-large.png: %.svg
$(AM_V_IMG)$(INKSCAPE) --file=$< --export-dpi=180 -C --export-png=$@
if BUILD_ASCIIDOC
generated_docs += $(ascii:%.txt=%.html)
if BUILD_DOCBOOK
publican_docs += $(docbook)
endif
endif
EXTRA_DIST = $(docbook:%=%.xml)
%.html: %.txt
$(AM_V_ASCII)$(ASCIIDOC) --unsafe --backend=xhtml11 $<
# publican-clusterlabs/xsl/{html,html-single,pdf}.xsl refer to URIs
# requiring Internet access, hence we shadow that with a XML catalog-based
# redirect to local files brought with Publican installation;
# this is what newer Publican normally does with the system-wide catalog
# upon its installation, but let's provide a compatibility for older
# or badly installed instances (via adding the created file into
# XML_CATALOG_FILES for libxml2 backing Publican as a fallback);
# note that nextCatalog arrangement needed so as to overcome
# https://rt.cpan.org/Public/Bug/Display.html?id=113781
publican-catalog-fallback:
@exec >$@-t \
&& echo '<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">' \
&& echo '<rewriteURI uriStartString="https://fedorahosted.org/released/publican/xsl/docbook4/" rewritePrefix="file:///usr/share/publican/xsl/"/>' \
&& echo '</catalog>'
$(AM_V_GEN)mv $@-t $@
publican-catalog: publican-catalog-fallback
@exec >$@-t \
&& echo '<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">' \
&& echo '<nextCatalog catalog="file:///etc/xml/catalog"/>' \
&& echo '<nextCatalog catalog="file://$(CURDIR)/$<"/>' \
&& echo '</catalog>'
$(AM_V_GEN)mv $@-t $@
SHARED_TXT=$(wildcard shared/en-US/*.txt)
SHARED_XML=$(SHARED_TXT:%.txt=%.xml)
CFS_SHARED_TXT=$(addprefix shared/en-US/,pacemaker-intro.txt)
CFS_SHARED_XML=$(CFS_SHARED_TXT:%.txt=%.xml)
CFS_TXT=$(wildcard Clusters_from_Scratch/en-US/*.txt)
CFS_XML=$(CFS_TXT:%.txt=%.xml)
$(CFS_XML): $(CFS_SHARED_XML)
PUBLICAN_INTREE_DEPS =
if PUBLICAN_INTREE_BRAND
PUBLICAN_INTREE_DEPS += publican-catalog
endif
# We have to hardcode the book name
# With '%' the test for 'newness' fails
Clusters_from_Scratch.build: $(PNGS) $(wildcard Clusters_from_Scratch/en-US/*.xml) $(CFS_XML) $(CFS_SHARED_XML) $(PUBLICAN_INTREE_DEPS)
$(PCMK_V) @echo Building $(@:%.build=%) because of $?
rm -rf $(@:%.build=%)/publish/*
if PUBLICAN_INTREE_BRAND
$(AM_V_PUB)cd $(@:%.build=%) \
&& RPM_BUILD_DIR="" XML_CATALOG_FILES="$(CURDIR)/publican-catalog" \
$(PUBLICAN) build --publish --langs=$(DOCBOOK_LANGS) --formats=$(DOCBOOK_FORMATS) --brand_dir=../publican-clusterlabs \
$(PCMK_quiet)
else
$(AM_V_PUB)cd $(@:%.build=%) \
&& RPM_BUILD_DIR="" \
$(PUBLICAN) build --publish --langs=$(DOCBOOK_LANGS) --formats=$(DOCBOOK_FORMATS) \
$(PCMK_quiet)
endif
rm -rf $(@:%.build=%)/tmp
touch $@
PD_TXT=$(wildcard Pacemaker_Development/en-US/*.txt)
PD_XML=$(PD_TXT:%.txt=%.xml)
# We have to hardcode the book name
# With '%' the test for 'newness' fails
Pacemaker_Development.build: $(wildcard Pacemaker_Development/en-US/*.xml) $(PD_XML) $(PUBLICAN_INTREE_DEPS)
$(PCMK_V) @echo Building $(@:%.build=%) because of $?
rm -rf $(@:%.build=%)/publish/*
if PUBLICAN_INTREE_BRAND
$(AM_V_PUB)cd $(@:%.build=%) \
&& RPM_BUILD_DIR="" XML_CATALOG_FILES="$(CURDIR)/publican-catalog" \
$(PUBLICAN) build --publish --langs=$(DOCBOOK_LANGS) --formats=$(DOCBOOK_FORMATS) --brand_dir=../publican-clusterlabs \
$(PCMK_quiet)
else
$(AM_V_PUB)cd $(@:%.build=%) \
&& RPM_BUILD_DIR="" \
$(PUBLICAN) build --publish --langs=$(DOCBOOK_LANGS) --formats=$(DOCBOOK_FORMATS) \
$(PCMK_quiet)
endif
rm -rf $(@:%.build=%)/tmp
touch $@
PE_SHARED_TXT=$(addprefix shared/en-US/,pacemaker-intro.txt)
PE_SHARED_XML=$(PE_SHARED_TXT:%.txt=%.xml)
PE_TXT=$(wildcard Pacemaker_Explained/en-US/*.txt)
PE_XML=$(PE_TXT:%.txt=%.xml)
$(PE_XML): $(PE_SHARED_XML)
# We have to hardcode the book name
# With '%' the test for 'newness' fails
Pacemaker_Explained.build: $(PNGS) $(wildcard Pacemaker_Explained/en-US/*.xml) $(PE_XML) $(PE_SHARED_XML) $(PUBLICAN_INTREE_DEPS)
$(PCMK_V) @echo Building $(@:%.build=%) because of $?
rm -rf $(@:%.build=%)/publish/*
if PUBLICAN_INTREE_BRAND
$(AM_V_PUB)cd $(@:%.build=%) \
&& RPM_BUILD_DIR="" XML_CATALOG_FILES="$(CURDIR)/publican-catalog" \
$(PUBLICAN) build --publish --langs=$(DOCBOOK_LANGS) --formats=$(DOCBOOK_FORMATS) --brand_dir=../publican-clusterlabs \
$(PCMK_quiet)
else
$(AM_V_PUB)cd $(@:%.build=%) \
&& RPM_BUILD_DIR="" \
$(PUBLICAN) build --publish --langs=$(DOCBOOK_LANGS) --formats=$(DOCBOOK_FORMATS) \
$(PCMK_quiet)
endif
rm -rf $(@:%.build=%)/tmp
touch $@
PR_TXT=$(wildcard Pacemaker_Remote/en-US/*.txt)
PR_XML=$(PR_TXT:%.txt=%.xml)
# We have to hardcode the book name
# With '%' the test for 'newness' fails
Pacemaker_Remote.build: $(PNGS) $(wildcard Pacemaker_Remote/en-US/*.xml) $(PR_XML) $(PUBLICAN_INTREE_DEPS)
$(PCMK_V) @echo Building $(@:%.build=%) because of $?
rm -rf $(@:%.build=%)/publish/*
if PUBLICAN_INTREE_BRAND
$(AM_V_PUB)cd $(@:%.build=%) \
&& RPM_BUILD_DIR="" XML_CATALOG_FILES="$(CURDIR)/publican-catalog" \
$(PUBLICAN) build --publish --langs=$(DOCBOOK_LANGS) --formats=$(DOCBOOK_FORMATS) --brand_dir=../publican-clusterlabs \
$(PCMK_quiet)
else
$(AM_V_PUB)cd $(@:%.build=%) \
&& RPM_BUILD_DIR="" \
$(PUBLICAN) build --publish --langs=$(DOCBOOK_LANGS) --formats=$(DOCBOOK_FORMATS) \
$(PCMK_quiet)
endif
rm -rf $(@:%.build=%)/tmp
touch $@
# Update the translation template
pot:
for book in $(docbook); do \
echo "Updating translation templates in: $$book"; \
( cd $$book && RPM_BUILD_DIR="" $(PUBLICAN) update_pot ); \
done
# Update the actual translations
po: pot
for book in $(docbook); do \
echo "Updating translations in: $$book"; \
( cd $$book && RPM_BUILD_DIR="" $(PUBLICAN) update_po --langs=all );\
done
if BUILD_DOCBOOK
docbook_build = $(docbook:%=%.build)
all-local: $(docbook_build) */publican.cfg
install-data-local: all-local
for book in $(docbook); do \
filelist=`find $$book/publish/* -print`; \
for f in $$filelist; do \
p=`echo $$f | sed s:publish/:: | sed s:Pacemaker/::`; \
if [ -d $$f ]; then \
$(INSTALL) -d -m 775 $(DESTDIR)$(docdir)/$$p; \
else \
$(INSTALL) -m 644 $$f $(DESTDIR)$(docdir)/$$p; \
fi \
done; \
done
endif
brand: $(BRAND_PNGS) $(wildcard publican-clusterlabs/en-US/*.xml)
cd publican-clusterlabs && publican build --formats=xml --langs=all --publish
echo "Installing..."
cd publican-clusterlabs && sudo publican install_brand --path=$(datadir)/publican/Common_Content
# find publican-clusterlabs -name "*.noarch.rpm" -exec rm -f \{\} \;
# cd publican-clusterlabs && $(PUBLICAN) package --binary
# find publican-clusterlabs -name "*.noarch.rpm" -exec sudo rpm -Uvh --force \{\} \;
pdf:
make DOCBOOK_FORMATS="pdf" ASCIIDOC_CLI_TYPE=$(ASCIIDOC_CLI_TYPE) all-local
www: clean-local $(generated_docs) $(ascii)
make www-cli
- rsync $(RSYNC_OPTS) $(generated_docs) $(ascii) $(asciiman) "$(RSYNC_DEST)/doc/"
+ rsync $(RSYNC_OPTS) $(generated_docs) $(ascii) $(asciiman) "$(RSYNC_DEST)/$(PACKAGE)/doc/"
www-pcs: www-cli
www-cli:
for book in $(docbook); do \
sed -i.sed 's@brand:.*@brand: clusterlabs@' $$book/publican.cfg; \
sed -i.sed 's@version:.*@version: $(PACKAGE_SERIES)-$(ASCIIDOC_CLI_TYPE)@' $$book/publican.cfg; \
done
make DOCBOOK_FORMATS="pdf,html,html-single,epub" DOCBOOK_LANGS="all" ASCIIDOC_CLI_TYPE=$(ASCIIDOC_CLI_TYPE) all-local
echo Uploading current $(PACKAGE_SERIES)-$(ASCIIDOC_CLI_TYPE) documentation set to clusterlabs.org
if BUILD_DOCBOOK
for book in $(docbook); do \
echo Uploading $$book...; \
echo "Generated on `date` from version: $(shell git log --pretty="format:%h %d" -n 1)" >> $$book/publish/build-$(PACKAGE_SERIES)-$(ASCIIDOC_CLI_TYPE).txt; \
for lang in `ls -1 $$book/publish | grep [a-z][a-z]-[A-Z][A-Z]`; do \
mv $$book/publish/$$lang/Pacemaker/$(PACKAGE_SERIES)-$(ASCIIDOC_CLI_TYPE)/epub/$$book/Pacemaker-1.1{-$(ASCIIDOC_CLI_TYPE),}-$$book-$$lang.epub; \
mv $$book/publish/$$lang/Pacemaker/$(PACKAGE_SERIES)-$(ASCIIDOC_CLI_TYPE)/pdf/$$book/Pacemaker-1.1{-$(ASCIIDOC_CLI_TYPE),}-$$book-$$lang.pdf; \
done; \
- rsync $(RSYNC_OPTS) $$book/publish/* "$(RSYNC_DEST)/doc/"; \
+ rsync $(RSYNC_OPTS) $$book/publish/* "$(RSYNC_DEST)/$(PACKAGE)/doc/"; \
sed -i.sed 's@version:.*@version: $(PACKAGE_SERIES)@' $$book/publican.cfg; \
done
endif
clean-local:
-rm -rf $(generated_docs) $(generated_mans) $(docbook_build) $(generated_PNGS)
-rm -rf $(SHARED_XML) $(CFS_XML) $(PE_XML) $(PR_XML)
-rm -rf publican-catalog-fallback publican-catalog
for book in $(docbook); do rm -rf $$book/tmp $$book/publish; done
diff --git a/doc/Pacemaker_Explained/en-US/Ch-Intro.txt b/doc/Pacemaker_Explained/en-US/Ch-Intro.txt
index e61065115a..dad06350b7 100644
--- a/doc/Pacemaker_Explained/en-US/Ch-Intro.txt
+++ b/doc/Pacemaker_Explained/en-US/Ch-Intro.txt
@@ -1,23 +1,25 @@
= Read-Me-First =
== The Scope of this Document ==
The purpose of this document is to definitively explain the concepts
used to configure Pacemaker. To achieve this, it will focus
exclusively on the XML syntax used to configure the CIB.
For those that are allergic to XML, there exist several unified shells
and GUIs for Pacemaker. However these tools will not be covered at all
in this document
footnote:[I hope, however, that the concepts explained here make the functionality of these tools more easily understood.]
, precisely because they hide the XML.
Additionally, this document is NOT a step-by-step how-to guide for
configuring a specific clustering scenario.
Although such guides exist,
-footnote:[For example, see the http://www.clusterlabs.org/doc/[Clusters from Scratch] guide.]
+footnote:[
+For example, see https://www.clusterlabs.org/pacemaker/doc/[Clusters from Scratch]
+]
the purpose of this document is to provide an understanding of the building
blocks that can be used to construct any type of Pacemaker cluster.
include::../../shared/en-US/pacemaker-intro.txt[]

File Metadata

Mime Type
text/x-diff
Expires
Sat, Jan 25, 12:25 PM (20 h, 1 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1322552
Default Alt Text
(30 KB)

Event Timeline