diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 06:49:00 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 06:49:00 +0000 |
commit | 93907d0c009d758811b54e7984337477a39f05cf (patch) | |
tree | a34881e1b02ccd5281ca58a799877f2d5e80d778 /debian | |
parent | Adding upstream version 4.6.0. (diff) | |
download | crmsh-93907d0c009d758811b54e7984337477a39f05cf.tar.xz crmsh-93907d0c009d758811b54e7984337477a39f05cf.zip |
Adding debian version 4.6.0-1.debian/4.6.0-1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'debian')
45 files changed, 2206 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..3e88592 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,564 @@ +crmsh (4.6.0-1) unstable; urgency=medium + + * New upstream version 4.6.0 + * d/control: drop depends on python3-parallax (Closes: #1061552) + * d/patches: refresh for new version + * d/patches: fix build with Python 3.12 (Closes: #1061794) + * d/control: update pkgconf dependency + * d/patches: fix bootstrap with dash as /bin/sh + * d/postinst: create log dir and file unless they exists + + -- Valentin Vidic <vvidic@debian.org> Sat, 17 Feb 2024 13:58:22 +0100 + +crmsh (4.5.0-1) unstable; urgency=medium + + * New upstream version 4.5.0 + * d/patches: refresh for new version + * d/tests: refresh for new version + * d/postinst: create a logging directory (Closes: #1042448) + * d/clean: remove generated files (Closes: #1044302) + * d/patches: add fix for ssh error + + -- Valentin Vidic <vvidic@debian.org> Tue, 10 Oct 2023 22:57:14 +0200 + +crmsh (4.4.1-1) unstable; urgency=medium + + [ Bas Couwenberg ] + * Mark spelling-errors.patch as Applied-Upstream. + * Mark getargspec.patch as Applied-Upstream. + + [ Valentin Vidic ] + * New upstream version 4.4.1 + * d/patches: refresh for new version + + -- Valentin Vidic <vvidic@debian.org> Fri, 03 Mar 2023 22:48:41 +0100 + +crmsh (4.4.0-5) unstable; urgency=medium + + [ Lucas Kanashiro ] + * d/tests: use fence-virt in utils.sh test + + [ Valentin Vidic ] + * d/control: update Standards-Version to 4.6.2 + * d/copyright: update year + + -- Valentin Vidic <vvidic@debian.org> Sat, 14 Jan 2023 01:45:45 +0100 + +crmsh (4.4.0-4) unstable; urgency=medium + + * Team upload. + * Add patch to not use inspect.getargspec, removed from python3.11. + * Add gbp.conf to use pristine-tar & --source-only-changes by default. + * Add patch to fix spelling errors. + + -- Bas Couwenberg <sebastic@debian.org> Thu, 12 Jan 2023 09:54:32 +0100 + +crmsh (4.4.0-3) unstable; urgency=medium + + * d/patches: fix crmadmin parsing (Closes: #1023824) + * d/tests: add test for resource restart + + -- Valentin Vidic <vvidic@debian.org> Sun, 13 Nov 2022 13:18:35 +0100 + +crmsh (4.4.0-2) unstable; urgency=medium + + * d/tests: update node status test + * d/patches: fix build with new version of setuptools + * d/patches: fix typo in patch description + * d/lintian-overrides: update format for new lintian + + -- Valentin Vidic <vvidic@debian.org> Sat, 15 Oct 2022 14:49:18 +0200 + +crmsh (4.4.0-1) unstable; urgency=medium + + * New upstream version 4.4.0 + * d/patches: refresh for new version + * d/tests: refresh for new version + * d/control: add iputils-ping dependency + * d/control: update Standards-Version to 4.6.1 + * d/lintian-overrides: refresh for new version + + -- Valentin Vidic <vvidic@debian.org> Sat, 28 May 2022 12:06:50 +0200 + +crmsh (4.3.1-3) unstable; urgency=medium + + [ Athos Ribeiro ] + * d/p/0020-Use-crmsh-hb_report.patch: use the crmsh shipped hb_report script + when available + * d/p/0021-Support-python-310.patch: support Python 3.10 + (Closes: #1009087, #1009092) + + [ Valentin Vidic ] + * d/patches: cleanup duplicate patch + * d/rules: fix timestamps on patched files for reproducible build + + -- Valentin Vidic <vvidic@debian.org> Sun, 10 Apr 2022 09:48:28 +0200 + +crmsh (4.3.1-2) unstable; urgency=medium + + * d/tests: fix cluster init test + * d/patches: add fix for python 3.10 (Closes: #1009087, #1009087) + + -- Valentin Vidic <vvidic@debian.org> Sun, 10 Apr 2022 07:11:23 +0200 + +crmsh (4.3.1-1) unstable; urgency=medium + + [ Valentin Vidic ] + * New upstream version 4.3.1 (Closes: #992708) + * d/patches: refresh for new version + * d/tests: update for new version + * d/control: update Standards-Version + * d/copyright: update year + * d/watch: update github url + * d/rules: fix installation of vim syntax plugin (Closes: #990222) + + [ Athos Ribeiro ] + * d/t/testsuite.sh: set timezone for time conversion tests + * d/p/0017-Fix-health-scripts-python-38-support.patch: remove deprecated + function usage + * d/p/0018-Replace-crmd.patch: replace crmd calls with pacemaker-controld + * d/p/0019-Add-hb_report-dpkg-support.patch: Add dpkg support to hb_report + + -- Valentin Vidic <vvidic@debian.org> Wed, 19 Jan 2022 21:13:36 +0100 + +crmsh (4.2.1-3) unstable; urgency=medium + + * Team upload + * Fix autopkgtest regression with Pacemaker 2.1 + Caused by the fix of https://bugs.clusterlabs.org/show_bug.cgi?id=5395 + (commit 0923b405030820daef3474ac2ae07187a7dd97f7) + + -- Ferenc Wágner <wferi@debian.org> Sat, 30 Oct 2021 15:37:37 +0200 + +crmsh (4.2.1-2) unstable; urgency=medium + + * d/patches: include fix for CVE-2020-35459 (Closes: #985376) + + -- Valentin Vidic <vvidic@debian.org> Sun, 21 Mar 2021 21:23:08 +0100 + +crmsh (4.2.1-1) unstable; urgency=medium + + * New upstream version 4.2.1 + * d/patches: refresh for new version + * d/control: update Standards-Version + * d/watch: update version to 4 + * d/lintian-overrides: ignore text files + * d/tests: update for new version + + -- Valentin Vidic <vvidic@debian.org> Wed, 03 Feb 2021 22:05:33 +0100 + +crmsh (4.2.0-4) unstable; urgency=medium + + * d/patches: fix flaky autopkgtest (Closes: #972619) + * d/control: use debhelper v13 + * d/lintian-overrides: update override name + + -- Valentin Vidic <vvidic@debian.org> Wed, 21 Oct 2020 20:42:26 +0200 + +crmsh (4.2.0-3) unstable; urgency=medium + + [ Debian Janitor ] + * Use secure URI in Homepage field. + * Set upstream metadata fields: Bug-Database, Bug-Submit, Repository, + Repository-Browse. + + [ Valentin Vidic ] + * debian/tests: use isolation-machine for cluster init (Closes: #953944) + * d/control: update Standards-Version to 4.5.0 + * d/patches: refresh patches + + -- Valentin Vidic <vvidic@debian.org> Sun, 15 Mar 2020 20:22:51 +0100 + +crmsh (4.2.0-2) unstable; urgency=medium + + * d/patches: fix tests failing in 2020 + + -- Valentin Vidic <vvidic@debian.org> Sat, 04 Jan 2020 11:30:00 +0100 + +crmsh (4.2.0-1) unstable; urgency=medium + + * New upstream version 4.2.0 + * d/salsa-ci.yml: enable CI + * d/tests: update for pacemaker 2.0.3 + * d/tests: ufw broken without /sbin/iptables symlink + * d/patches: refresh for new upstream version + * d/control: add Rules-Requires-Root + * d/lintian-overrides: ignore manpage warning + + -- Valentin Vidic <vvidic@debian.org> Thu, 26 Dec 2019 16:05:33 +0100 + +crmsh (4.1.0-4) unstable; urgency=medium + + * d/tests: skip some tests in uprivileged containers + * d/control: update Standards-Version to 4.4.1 + + -- Valentin Vidic <vvidic@debian.org> Mon, 18 Nov 2019 20:22:57 +0100 + +crmsh (4.1.0-3) unstable; urgency=medium + + * d/control: use debhelper v12 + * d/patches: fix new testsuite errors + * d/patches: fix YAML warning for unsafe loader + + -- Valentin Vidic <vvidic@debian.org> Sun, 01 Sep 2019 10:39:19 +0200 + +crmsh (4.1.0-2) unstable; urgency=medium + + * d/control: drop python 2 packages from Build-Depends + * d/rules: clean using python 3 + * d/patches: build documentation using python 3 + * d/patches: fix spelling problems reported by lintian + + -- Valentin Vidic <vvidic@debian.org> Fri, 16 Aug 2019 19:07:42 +0200 + +crmsh (4.1.0-1) unstable; urgency=medium + + * New upstream version 4.1.0 + * d/control: update Standards-Version to 4.4.0 + * d/patches: update for new version + + -- Valentin Vidic <vvidic@debian.org> Sat, 13 Jul 2019 23:26:42 +0200 + +crmsh (4.0.0~git20190108.3d56538-3) unstable; urgency=medium + + * d/tests: disable regression tests for now + * d/tests: cleanup regexp + + -- Valentin Vidic <vvidic@debian.org> Sun, 20 Jan 2019 10:59:14 +0100 + +crmsh (4.0.0~git20190108.3d56538-2) unstable; urgency=medium + + * d/tests: try to fix regression testsuite + + -- Valentin Vidic <vvidic@debian.org> Sat, 19 Jan 2019 23:53:26 +0100 + +crmsh (4.0.0~git20190108.3d56538-1) unstable; urgency=medium + + * New upstream version 4.0.0~git20190108.3d56538 (Closes: #883171) + * d/control: update for python3 + * d/rules: update for python3 + * d/postinst,prerm: autogenerated with python3 + * d/patches: update for new version + * d/tests: update for new version + * d/tests: run testsuite + * d/control: link fonts from fonts-font-awesome + * d/rules: install README into /usr/share/doc/crmsh + + -- Valentin Vidic <vvidic@debian.org> Sat, 19 Jan 2019 12:39:02 +0100 + +crmsh (3.0.3-2) unstable; urgency=medium + + * d/patches: use knet for unicast bootstrap + * d/tests: use unicast for cluster bootstrap + * d/tests: fix default node name + * d/control: update Standards-Version to 4.3.0 + * d/control: update my email address + + -- Valentin Vidic <vvidic@debian.org> Thu, 27 Dec 2018 21:05:17 +0100 + +crmsh (3.0.3-1) unstable; urgency=medium + + * New upstream version 3.0.3 + * d/rules: install bash completion + * d/rules: install vim plugin + * d/patches: refresh for new upstream version + + -- Valentin Vidic <Valentin.Vidic@CARNet.hr> Mon, 02 Jul 2018 14:35:45 +0200 + +crmsh (3.0.1-4) unstable; urgency=medium + + * d/control: update Vcs URLs to use salsa + * d/rules: cleanup trailing whitespace + * d/copyright: use https in Format url + * d/control: update Standards-Version to 4.1.4 + + -- Valentin Vidic <Valentin.Vidic@CARNet.hr> Wed, 11 Apr 2018 09:40:22 +0200 + +crmsh (3.0.1-3) unstable; urgency=medium + + * d/patches: fix crm cluster stop/start on Debian + * d/tests: use vim for testing package removal (Closes: #883524) + * d/tests: update Depends list for dmidecode (Closes: #883524) + * d/patches: drop patches merged upstream + * d/compat: update debhelper to v11 + * d/control: update Standards-Version to 4.1.3 + * d/changelog: cleanup trailing whitespace + * d/control: cleanup trailing whitespace + + -- Valentin Vidic <Valentin.Vidic@CARNet.hr> Thu, 25 Jan 2018 21:40:26 +0100 + +crmsh (3.0.1-2) unstable; urgency=medium + + * d/control: add fdisk to Depends (Closes: #872129) + * d/control: replace deprecated priority extra + * d/control: move tools used by bootstrap to Suggests + * d/patches: disable watchdog when generating corosync.conf + + -- Valentin Vidic <Valentin.Vidic@CARNet.hr> Fri, 01 Sep 2017 20:32:26 +0200 + +crmsh (3.0.1-1) unstable; urgency=medium + + * New upstream version 3.0.1 + * d/patches: refresh for new upstream version + * d/control: remove dh-autoreconf from Depends + * d/patches: add fixes for cluster init on Debian + * d/tests: add test for cluster init + + -- Valentin Vidic <Valentin.Vidic@CARNet.hr> Tue, 25 Jul 2017 15:32:31 +0200 + +crmsh (3.0.0-1) unstable; urgency=medium + + [ Christoph Berg ] + * debian/tests/utils.sh: Make test more robust against environment changes. + + [ Valentin Vidic ] + * New upstream version 3.0.0 + * d/patches: refresh for new upstream version + * d/control: remove ${shlibs:Depends} from Depends + * d/rules: use dh_missing --fail-missing + * d/control: update Standards-Version to 4.0.0 + * d/control: update debhelper to version 10 + + -- Valentin Vidic <Valentin.Vidic@CARNet.hr> Tue, 27 Jun 2017 23:50:54 +0200 + +crmsh (2.3.2-4) unstable; urgency=medium + + * Remove uninstall file list + + -- Valentin Vidic <Valentin.Vidic@CARNet.hr> Mon, 19 Dec 2016 10:45:25 +0100 + +crmsh (2.3.2-3) unstable; urgency=medium + + * Make crm.8.html generation reproducible + * Cleanup debian/rules + + -- Valentin Vidic <Valentin.Vidic@CARNet.hr> Mon, 12 Dec 2016 10:46:36 +0100 + +crmsh (2.3.2-2) unstable; urgency=medium + + [ Valentin Vidic ] + * Use https for Vcs-Browser link (lintian fix) + * Update debian/copyright for moved files (lintian fix) + * crmsh: Change Architecture to all + * Drop unused libraries from build-depends + * Make generated documentation reproducible + * Remove unused packages from Build-Depends + * Fix crm manpage spelling + * crmsh-doc: add Multi-Arch: foreign + * d/tests: add basic crm node tests + * Patch scripts in utils to work on Debian + * d/tests: add tests for package management scripts + * Add patch to make 'cluster init' work on Debian + * Add python-parallax to Depends (Closes: #819545) + * Add patch to fix crm history on Debian systems + + [ Christoph Berg ] + * Remove Martin and myself from Uploaders. + + -- Valentin Vidic <Valentin.Vidic@CARNet.hr> Sun, 04 Dec 2016 18:57:50 +0100 + +crmsh (2.3.2-1) unstable; urgency=medium + + [ Christoph Berg ] + * Fix changelog for previous upload, d/tests got lost. + + [ Arturo Borrero Gonzalez ] + * Refresh 0004-Fix-privacy-breach-generic-caused-by-footer-template.patch + patch + + [ Valentin Vidic ] + * Imported upstream version 2.3.2 (Closes: #815823, #815346) + * crm report: add gawk to Depends + * crm report: upstream fix for dash (Closes: #772269) + * Add myself to Uploaders list + + -- Valentin Vidic <Valentin.Vidic@CARNet.hr> Thu, 03 Nov 2016 10:20:56 +0100 + +crmsh (2.2.1-1) unstable; urgency=medium + + [ Adrian Vondendriesch ] + * New upstream release + * patches: + - drop 0001-Remove-AM_CONDITIONAL-for-UNAME_IS_DEBIAN.patch + - drop 0002-Remove-fix-for-Debian.patch + * Add myself to uploaders. + * Bump standars version. + + [ Arturo Borrero Gonzalez ] + * d/tests: add basic crm and pacemaker tests + Check that the crm utility can run without issues, locating all of the + libraries it needs, and check the integration between crmsh and pacemaker + (and corosync). We build a cluster and then add a basic IP resource to it. + + -- Adrian Vondendriesch <adrian.vondendriesch@credativ.de> Tue, 03 May 2016 20:05:28 +0200 + +crmsh (2.2.0-1) unstable; urgency=high + + [ Richard B Winters ] + * New upstream release + * debian/clean: Added + - In order to incorporate the recommended strategy for + handling Python eggs + * debian/rules: Multiple changes; + - Updated hardening implementation + - Added an export for ensuring a link against all needed + libraries (cf. Policy 10.2) + - Override configure to properly set paths for build + - Override dh_auto_build to add instruction for building + html documentation + - Override dh_auto_install to remove duplicate files + - Override dh_compress to strip compiled bytecode from the + package + - Added --single-version-externally-managed as recommended + for handling Python eggs + * debian/control: Multiple changes; + - Updated uploaders list and formatted for folding + - Added Vcs-Git and Vcs-Browser entries + - Updated Build-Depends to reflect current dependencies; + - Python updated to Python2.7 as > Python27 not supported + - Dropped hardening-wrapper; not necessary any longer + - Formatted Build-Depends and Depends entries for folding + - Updated Build-Depends to not use transitional packages + - Updated description + - Bumped standards version to 3.9.6; No changes required + - Added crmsh-doc to package offering + * debian/copyright: Multiple edits + - Updated source field to current upstream source location + - Consolidated copyright notices for authors added to upstreams + author list found in AUTHORS + - Updated copyright for debian/* to include myself and Debian-HA + team + - Added License paragraph to remove need for including a paragraph + for each copyright/license entry present + * debian/crmsh.install: Added since multiple package build requires + it + * debian/crmsh.doc-base: Added for crmsh html documents + * debian/crmsh-doc.install: Add to support crmsh-doc package + * debian/crmsh-doc.doc-base: Added for crmsh-doc html documents + * debian/patches/*: Added for resolving privacy-breach-generic + lintian informational warnings; + - Includes binary png file in source to remove need for remote + resource + - Patches crm.conf file for asciidoc, to fix remove remote + resource in .html files + - Patch python file to fix resource links in atom.xml template + - Series file added + * debian/postinst: Added to compile bytecode for *.py files + * debian/prerm: Added to removed compiled bytecode + * debian/pycompat: Added as recommended by packaging tools + * debian/source/include-binaries: Added to allow patch which adds + a binary png file to the upstream source + * debian/source/options: Added + - Added to incorporate the recommended strategy for handling + Python eggs + * debian/watch: Added for monitoring upstream releases + + [ Adrian Vondendriesch ] + * debian/control: Add python-dateutil to Build-Depends + + -- Richard B Winters <rik@mmogp.com> Thu, 28 Jan 2016 21:22:05 +0100 + +crmsh (1.2.6+git+e77add-2) unstable; urgency=medium + + * Update control for new pacemaker dev packages. + + -- Christoph Berg <myon@debian.org> Sat, 16 Jan 2016 16:26:36 +0100 + +crmsh (1.2.6+git+e77add-1.4) unstable; urgency=medium + + * Non-maintainer upload. + * Port from python-support to dh_python2 (Closes: #785973) + + -- Stefano Rivera <stefanor@debian.org> Thu, 20 Aug 2015 15:31:26 +0200 + +crmsh (1.2.6+git+e77add-1.3) unstable; urgency=low + + * Non-maintainer upload. + * Build-Depend on docbook-xsl to fix FTBFS + Closes: 770132 + + -- Johann Felix Soden <johfel@debian.org> Sat, 22 Nov 2014 13:09:35 +0100 + +crmsh (1.2.6+git+e77add-1.2) unstable; urgency=medium + + * Non-maintainer upload. + * Depend on python-yaml to fix grave bug (Closes: #745219) + + -- Stefan Bauer (Cubewerk GmbH) <stefan.bauer@cubewerk.de> Fri, 25 Apr 2014 17:46:39 +0200 + +crmsh (1.2.6+git+e77add-1.1) unstable; urgency=medium + + * Non-maintainer upload. + * Add pkg-config to Build-Depends. Closes: 741772 + + -- Chris Boot <debian@bootc.net> Sat, 22 Mar 2014 15:50:25 +0000 + +crmsh (1.2.6+git+e77add-1) unstable; urgency=medium + + * New upstream checkout + * debian/control: Bump Standards-Version + * debian/control: Add Breaks & Replaces for Pacemaker << 1.1.8 + Closes: 717986 + * debian/control: Depend on python-lxml + Closes: 738651 + + -- Martin Loschwitz <madkiss@debian.org> Fri, 21 Feb 2014 15:51:13 +0000 + +crmsh (1.2.5+hg1034-1) unstable; urgency=low + + * New upstream checkout + + -- Martin Loschwitz <madkiss@debian.org> Mon, 05 Aug 2013 05:21:29 +0000 + +crmsh (1.2.5+hg1006-1) unstable; urgency=low + + * New upstream checkout for Pacemaker 1.1.10 + + -- Martin Loschwitz <madkiss@debian.org> Fri, 02 Aug 2013 07:37:50 +0000 + +crmsh (1.2.5+hg953-3) unstable; urgency=low + + * Upload to unstable instead of experimental + + -- Martin Loschwitz <madkiss@debian.org> Fri, 02 Aug 2013 06:52:11 +0000 + +crmsh (1.2.5+hg953-2) experimental; urgency=low + + * Build-Depend on libcib3-dev instead of libcib2-dev + + -- Martin Loschwitz <madkiss@debian.org> Fri, 19 Apr 2013 07:08:47 +0000 + +crmsh (1.2.5+hg953-1) experimental; urgency=low + + * New upstream release + + -- Martin Loschwitz <madkiss@debian.org> Wed, 20 Mar 2013 23:11:44 +0000 + +crmsh (1.2.0+hg20121010-1) unstable; urgency=low + + * New upstream checkout to catch some additional bugfixes + * debian/control: Depend on version 1.1.8+git20121010 of libcib as well + as libcrmcommon and libpengine to make sure we get the versions with + proper .pc files (Closes: #690055) + + -- Martin Loschwitz <madkiss@debian.org> Wed, 10 Oct 2012 11:39:06 +0000 + +crmsh (1.2.0+hg20121009-3) unstable; urgency=low + + * debian/control: Fix possible circular build dependency by using the + real library package names instead of pacemaker-dev (Closes: #690055) + + -- Martin Loschwitz <madkiss@debian.org> Tue, 09 Oct 2012 17:29:01 +0000 + +crmsh (1.2.0+hg20121009-2) unstable; urgency=low + + * debian/control: Set the maintainer field to the HA group instead of me + personally. (Closes: #690055) + + -- Martin Loschwitz <madkiss@debian.org> Tue, 09 Oct 2012 16:20:15 +0000 + +crmsh (1.2.0+hg20121009-1) unstable; urgency=low + + * Initial release (Closes: #690055) <nnnn is the bug number of your ITP> + + -- Martin Loschwitz <madkiss@debian.org> Tue, 09 Oct 2012 14:36:09 +0000 diff --git a/debian/clean b/debian/clean new file mode 100644 index 0000000..9e2f5c2 --- /dev/null +++ b/debian/clean @@ -0,0 +1,8 @@ +Makefile +config.log +config.status +crmsh.spec +doc/website-v1/news.adoc +etc/crm.conf +version +*.egg-info/* diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..368c753 --- /dev/null +++ b/debian/control @@ -0,0 +1,80 @@ +Source: crmsh +Section: admin +Priority: optional +Maintainer: Debian HA Maintainers <debian-ha-maintainers@lists.alioth.debian.org> +Uploaders: + Richard B Winters <rik@mmogp.com>, + Adrian Vondendriesch <adrian.vondendriesch@credativ.de>, + Valentin Vidic <vvidic@debian.org> +Build-Depends: + asciidoc, + debhelper-compat (= 13), + dh-python, + docbook-xml, + docbook-xsl, + dos2unix, + libxml2-utils, + pkgconf, + python3-all, + python3-dateutil, + python3-packaging, + python3-pygments, + python3-setuptools, + xsltproc +Standards-Version: 4.6.2 +Rules-Requires-Root: no +Homepage: https://crmsh.github.io/ +Vcs-Browser: https://salsa.debian.org/ha-team/crmsh +Vcs-Git: https://salsa.debian.org/ha-team/crmsh.git + +Package: crmsh +Architecture: all +Depends: + ${misc:Depends}, + gawk, + iputils-ping, + pacemaker-cli-utils, + ${python3:Depends}, + python3-dateutil, + python3-packaging, + python3-lxml, + python3-yaml +Recommends: pacemaker (>= 1.1.12) +Replaces: pacemaker (<< 1.1.12) +Breaks: pacemaker (<< 1.1.12) +Suggests: + bash-completion, + cluster-glue, + csync2, + dmidecode, + fdisk | util-linux (<< 2.29.2-3~), + ocfs2-tools, + openssh-server, + parted, + sbd, + ufw, + vim-addon-manager +Description: CRM shell for the pacemaker cluster manager + The crm shell is an advanced command-line interface for High-Availability + cluster management in GNU/Linux. Effortlessly configure, manage and + troubleshoot your clusters from the command line, with full tab completion + and extensive help. crmsh also provides advanced features like low-level + cluster configuration, cluster scripting and package management, and + history exploration tools giving you an instant view of what your cluster + is doing. + +Package: crmsh-doc +Section: doc +Architecture: all +Multi-Arch: foreign +Depends: ${misc:Depends}, fonts-font-awesome +Description: crmsh HTML Documentation + The crm shell is an advanced command-line interface for High-Availability + cluster management in GNU/Linux. Effortlessly configure, manage and + troubleshoot your clusters from the command line, with full tab completion + and extensive help. crmsh also provides advanced features like low-level + cluster configuration, cluster scripting and package management, and + history exploration tools giving you an instant view of what your cluster + is doing. + . + This package contains the html Pacemaker API documentation. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..283ed2c --- /dev/null +++ b/debian/copyright @@ -0,0 +1,194 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: crmsh +Source: http://github.com/clusterlabs/crmsh + +Files: * +Copyright: (c) 2008-2015 Upstream Authors (From AUTHORS) + afederic <afederic[at]gmail[dot]com> + Andrew Beekhof <andrew[at]beekhof[dot]net> + Borislav Borisov <borislav[dot]v[dot]borisov[at]gmail[dot]com> + Christian Seiler <christian[at]iwakd[dot]de> + Dejan Muhamedagic <dejan[at]suse[dot]de> + Federica Teodori <federica[dot]teodori[at]googlemail[dot]com> + Florian Haas <florian[dot]haas[at]linbit[dot]com> + Goldwyn Rodrigues <rgoldwyn[at]novell[dot]com> + Hideo Yamauchi <renayama19661014[at]ybb[dot]ne[dot]jp> + Holger Teutsch <holger[dot]teutsch[at]web[dot]de> + Kazunori INOUE <kazunori[dot]inoue3[at]gmail[dot]com> + Keisuke MORI <keisuke[dot]mori+ha[at]gmail[dot]com> + Kristoffer Gronlund <kgronlund[at]suse[dot]com> + Lars Ellenberg <lars[dot]ellenberg[at]linbit[dot]com> + Lars Marowsky-Brée <lmb[at]suse[dot]de> + Michael Prokop <devnull[at]localhost> + NAKAHIRA Kazutomo <nakahira[dot]kazutomo[at]oss[dot]ntt[dot]co[dot]jp> + nozawat <nozawat[at]gmail[dot]com> + renayama19661014 <renayama19661014[at]ybb[dot]ne[dot]jp> + Richard B Winters <rik[at]mmogp[dot]com> + seabres <rainer[dot]brestan[at]gmx[dot]net> + Tim Serong <tserong[at]suse[dot]com> + Vincenzo Pii <piiv[at]zhaw[dot]ch> + Vladislav Bogdanov <bubble[at]hoster-ok[dot]com> + Xia Li <XLi[at]suse[dot]com> + Xinwei Hu <xwhu[at]novell[dot]com> + Yan Gao <ygao[at]suse[dot]com> + Yuusuke IIDA <iidayuus[at]intellilink[dot]co[dot]jp> +License: GPL-2+ + +Files: crmsh/crm_pssh.py +Copyright: 2003-2008, Brent N. Chun + 2009 Andrew McNabb + 2011 Dejan Muhamedagic +License: GPL-2+ + +Files: contrib/bash_completion.sh +Copyright: 2013 Kristoffer Gronlund + 2006-2008, Ian Macdonald + 2009-2010, Bash Completion Maintainers +License: GPL-2+ + +Files: crmsh/ordereddict.py + crmsh/orderedset.py +Copyright: 2009 Raymond Hettinger +License: Expat + +Files: doc/website-v1/css/crm.css +Copyright: 2012-2015 Ryan Tomayko <r@tomayko.com> + 2012-2015 Kristoffer Gronlund <kgronlund@suse.com> +License: GPL-2+ + +Files: doc/website-v1/css/font-awesome.css +Copyright: 2012-2015 Dave Gandy +License: Expat + +Files: doc/website-v1/fonts/* +Copyright: 2012-2015 Dave Gandy +License: SIL-OFL-1.1 + +Files: debian/* +Copyright: 2012-2022 Debian-HA Maintainers + 2012-2015 Martin Loschwitz <madkiss@debian.org> + 2015 Richard B Winters <rik@mmogp.com> + 2016-2023 Valentin Vidic <vvidic@debian.org> +License: GPL-2+ + +License: GPL-2+ + This package 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 package 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, see <http://www.gnu.org/licenses/> + . + On Debian systems, the complete text of the GNU General + Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". + +License: Expat + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation files + (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, + publish, distribute, sublicense, and/or sell copies of the Software, + and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + . + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +License: SIL-OFL-1.1 + PREAMBLE + The goals of the Open Font License (OFL) are to stimulate worldwide + development of collaborative font projects, to support the font creation + efforts of academic and linguistic communities, and to provide a free and + open framework in which fonts may be shared and improved in partnership + with others. + . + The OFL allows the licensed fonts to be used, studied, modified and + redistributed freely as long as they are not sold by themselves. The + fonts, including any derivative works, can be bundled, embedded, + redistributed and/or sold with any software provided that any reserved + names are not used by derivative works. The fonts and derivatives, + however, cannot be released under any other type of license. The + requirement for fonts to remain under this license does not apply + to any document created using the fonts or their derivatives. + . + DEFINITIONS + "Font Software" refers to the set of files released by the Copyright + Holder(s) under this license and clearly marked as such. This may + include source files, build scripts and documentation. + . + "Reserved Font Name" refers to any names specified as such after the + copyright statement(s). + . + "Original Version" refers to the collection of Font Software components as + distributed by the Copyright Holder(s). + . + "Modified Version" refers to any derivative made by adding to, deleting, + or substituting — in part or in whole — any of the components of the + Original Version, by changing formats or by porting the Font Software to a + new environment. + . + "Author" refers to any designer, engineer, programmer, technical + writer or other person who contributed to the Font Software. + . + PERMISSION & CONDITIONS + Permission is hereby granted, free of charge, to any person obtaining + a copy of the Font Software, to use, study, copy, merge, embed, modify, + redistribute, and sell modified and unmodified copies of the Font + Software, subject to the following conditions: + . + 1) Neither the Font Software nor any of its individual components, + in Original or Modified Versions, may be sold by itself. + . + 2) Original or Modified Versions of the Font Software may be bundled, + redistributed and/or sold with any software, provided that each copy + contains the above copyright notice and this license. These can be + included either as stand-alone text files, human-readable headers or + in the appropriate machine-readable metadata fields within text or + binary files as long as those fields can be easily viewed by the user. + . + 3) No Modified Version of the Font Software may use the Reserved Font + Name(s) unless explicit written permission is granted by the corresponding + Copyright Holder. This restriction only applies to the primary font name as + presented to the users. + . + 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font + Software shall not be used to promote, endorse or advertise any + Modified Version, except to acknowledge the contribution(s) of the + Copyright Holder(s) and the Author(s) or with their explicit written + permission. + . + 5) The Font Software, modified or unmodified, in part or in whole, + must be distributed entirely under this license, and must not be + distributed under any other license. The requirement for fonts to + remain under this license does not apply to any document created + using the Font Software. + . + TERMINATION + This license becomes null and void if any of the above conditions are + not met. + . + DISCLAIMER + THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE + COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL + DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM + OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/debian/crmsh-doc.doc-base b/debian/crmsh-doc.doc-base new file mode 100644 index 0000000..26c4d89 --- /dev/null +++ b/debian/crmsh-doc.doc-base @@ -0,0 +1,16 @@ +Document: crmsh-doc +Title: crmsh complete HTML documentation +Section: System/Administration + +Format: HTML +Index: /usr/share/doc/crmsh-doc/html/index.html +Files: /usr/share/doc/crmsh-doc/html/*.html + /usr/share/doc/crmsh-doc/html/*/*/*.html + /usr/share/doc/crmsh-doc/html/*/*.png + /usr/share/doc/crmsh-doc/html/*/*.gif + /usr/share/doc/crmsh-doc/html/*/*.css + /usr/share/doc/crmsh-doc/html/*/*.otf + /usr/share/doc/crmsh-doc/html/*/*.eot + /usr/share/doc/crmsh-doc/html/*/*.svg + /usr/share/doc/crmsh-doc/html/*/*.ttf + /usr/share/doc/crmsh-doc/html/*/*.woff diff --git a/debian/crmsh-doc.install b/debian/crmsh-doc.install new file mode 100644 index 0000000..a2633a6 --- /dev/null +++ b/debian/crmsh-doc.install @@ -0,0 +1,2 @@ +doc/website-v1/gen/* usr/share/doc/crmsh-doc/html +debian/copyright usr/share/doc/crmsh-doc diff --git a/debian/crmsh-doc.links b/debian/crmsh-doc.links new file mode 100644 index 0000000..6a66ed3 --- /dev/null +++ b/debian/crmsh-doc.links @@ -0,0 +1,6 @@ +usr/share/fonts-font-awesome/css/font-awesome.min.css usr/share/doc/crmsh-doc/html/css/font-awesome.min.css +usr/share/fonts-font-awesome/fonts/FontAwesome.otf usr/share/doc/crmsh-doc/html/fonts/FontAwesome.otf +usr/share/fonts-font-awesome/fonts/fontawesome-webfont.eot usr/share/doc/crmsh-doc/html/fonts/fontawesome-webfont.eot +usr/share/fonts-font-awesome/fonts/fontawesome-webfont.svg usr/share/doc/crmsh-doc/html/fonts/fontawesome-webfont.svg +usr/share/fonts-font-awesome/fonts/fontawesome-webfont.ttf usr/share/doc/crmsh-doc/html/fonts/fontawesome-webfont.ttf +usr/share/fonts-font-awesome/fonts/fontawesome-webfont.woff usr/share/doc/crmsh-doc/html/fonts/fontawesome-webfont.woff diff --git a/debian/crmsh.doc-base b/debian/crmsh.doc-base new file mode 100644 index 0000000..c9195d7 --- /dev/null +++ b/debian/crmsh.doc-base @@ -0,0 +1,7 @@ +Document: crmsh +Title: crmsh HTML documentation +Section: System/Administration + +Format: HTML +Index: /usr/share/doc/crmsh/crm.8.html +Files: /usr/share/doc/crmsh/*.html diff --git a/debian/crmsh.install b/debian/crmsh.install new file mode 100644 index 0000000..18b686d --- /dev/null +++ b/debian/crmsh.install @@ -0,0 +1,4 @@ +etc/crm/* +usr/sbin/* +usr/share/* +usr/lib/python*/* diff --git a/debian/crmsh.lintian-overrides b/debian/crmsh.lintian-overrides new file mode 100644 index 0000000..44db703 --- /dev/null +++ b/debian/crmsh.lintian-overrides @@ -0,0 +1,3 @@ +crmsh: spare-manual-page [usr/share/man/man8/crmsh_crm_report.8.gz] +crmsh: national-encoding [usr/share/crmsh/tests/unittests/pacemaker_unicode.log] +crmsh: package-contains-documentation-outside-usr-share-doc [usr/share/crmsh/tests/bugs-test.txt] diff --git a/debian/crmsh.postinst b/debian/crmsh.postinst new file mode 100644 index 0000000..1212f89 --- /dev/null +++ b/debian/crmsh.postinst @@ -0,0 +1,50 @@ +#!/bin/sh +# postinst script for crmsh +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * <postinst> `configure' <most-recently-configured-version> +# * <old-postinst> `abort-upgrade' <new version> +# * <conflictor's-postinst> `abort-remove' `in-favour' <package> +# <new-version> +# * <deconfigured's-postinst> `abort-deconfigure' `in-favour' +# <failed-install-package> <version> `removing' +# <conflicting-package> <version> +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package +# + +case "$1" in + configure) + if [ ! -e /var/log/crmsh ]; then + mkdir /var/log/crmsh + chown hacluster:haclient /var/log/crmsh + chmod 0775 /var/log/crmsh + fi + + if [ ! -e /var/log/crmsh/crmsh.log ]; then + touch /var/log/crmsh/crmsh.log + chown hacluster:haclient /var/log/crmsh/crmsh.log + chmod 0664 /var/log/crmsh/crmsh.log + fi + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/crmsh.postrm b/debian/crmsh.postrm new file mode 100644 index 0000000..f798316 --- /dev/null +++ b/debian/crmsh.postrm @@ -0,0 +1,41 @@ +#!/bin/sh +# postrm script for crmsh +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * <postrm> `remove' +# * <postrm> `purge' +# * <old-postrm> `upgrade' <new-version> +# * <new-postrm> `failed-upgrade' <old-version> +# * <new-postrm> `abort-install' +# * <new-postrm> `abort-install' <old-version> +# * <new-postrm> `abort-upgrade' <old-version> +# * <disappearer's-postrm> `disappear' <overwriter> +# <overwriter-version> +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + purge) + rm -rf /var/log/crmsh + ;; + + remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/gbp.conf b/debian/gbp.conf new file mode 100644 index 0000000..e3daba6 --- /dev/null +++ b/debian/gbp.conf @@ -0,0 +1,19 @@ +[DEFAULT] + +# The default name for the upstream branch is "upstream". +# Change it if the name is different (for instance, "master"). +upstream-branch = upstream + +# The default name for the Debian branch is "master". +# Change it if the name is different (for instance, "debian/unstable"). +debian-branch = master + +# git-import-orig uses the following names for the upstream tags. +# Change the value if you are not using git-import-orig +upstream-tag = upstream/%(version)s + +# Always use pristine-tar. +pristine-tar = True + +[buildpackage] +pbuilder-options = --source-only-changes diff --git a/debian/patches/0003-Add-remote-resource-to-local-cache.patch b/debian/patches/0003-Add-remote-resource-to-local-cache.patch Binary files differnew file mode 100644 index 0000000..8f966d5 --- /dev/null +++ b/debian/patches/0003-Add-remote-resource-to-local-cache.patch diff --git a/debian/patches/0004-Fix-privacy-breach-generic-caused-by-footer-template.patch b/debian/patches/0004-Fix-privacy-breach-generic-caused-by-footer-template.patch new file mode 100644 index 0000000..5da4a07 --- /dev/null +++ b/debian/patches/0004-Fix-privacy-breach-generic-caused-by-footer-template.patch @@ -0,0 +1,25 @@ +From: Richard B Winters <rik@mmogp.com> +Date: Fri, 29 Jan 2016 10:43:26 -0500 +Subject: Fix privacy-breach-generic caused by footer template + + - An image fetched from githubuserconent needs to be + replaced with a local cache to avoid the + aforementioned lintian informational warning + +Change-Id: I3798ca0f774161ed6d99d0da25369ad421e69397 +Signed-off-by: Richard B Winters <rik@mmogp.com> +--- + doc/website-v1/crm.conf | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/doc/website-v1/crm.conf ++++ b/doc/website-v1/crm.conf +@@ -589,7 +589,7 @@ + </div> + </div> + +-<a href="https://github.com/ClusterLabs/crmsh"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/a6677b08c955af8400f44c6298f40e7d19cc5b2d/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f677261795f3664366436642e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_gray_6d6d6d.png"></a> ++<a href="https://github.com/ClusterLabs/crmsh"><img style="position: absolute; top: 0; right: 0; border: 0;" src="/img/fork-me-on-github.png" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_orange_ff7600.png"></a> + + </body> + </html> diff --git a/debian/patches/0005-Fix-privacy-breach-generic-caused-by-atom-xml-templa.patch b/debian/patches/0005-Fix-privacy-breach-generic-caused-by-atom-xml-templa.patch new file mode 100644 index 0000000..beb880b --- /dev/null +++ b/debian/patches/0005-Fix-privacy-breach-generic-caused-by-atom-xml-templa.patch @@ -0,0 +1,28 @@ +From: Richard B Winters <rik@mmogp.com> +Date: Fri, 29 Jan 2016 10:43:46 -0500 +Subject: Fix privacy-breach-generic caused by atom xml template + + - Modifies the atom xml template so as not to breach + privacy by using remote resources. + +Change-Id: I0043f9815620a3b88546c481f416b6ebebe66472 +Signed-off-by: Richard B Winters <rik@mmogp.com> +--- + doc/website-v1/make-news.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/doc/website-v1/make-news.py b/doc/website-v1/make-news.py +index f3c9073..89271d2 100644 +--- a/doc/website-v1/make-news.py ++++ b/doc/website-v1/make-news.py +@@ -21,8 +21,8 @@ ATOM_TEMPLATE = """<?xml version="1.0" encoding="utf-8"?> + <feed xmlns="http://www.w3.org/2005/Atom"> + <title>crmsh</title> + <subtitle>Cluster manager shell news</subtitle> +-<link href="http://crmsh.github.io/atom.xml" rel="self" /> +-<link href="http://crmsh.github.io/" /> ++<link href="/atom.xml" rel="self" /> ++<link href="/" /> + <id>%(id)s</id> + <updated>%(updated)s</updated> + %(entries)s diff --git a/debian/patches/0006-Fix-privacy-breach-generic-caused-by-youtube-iframe.patch b/debian/patches/0006-Fix-privacy-breach-generic-caused-by-youtube-iframe.patch new file mode 100644 index 0000000..074aef2 --- /dev/null +++ b/debian/patches/0006-Fix-privacy-breach-generic-caused-by-youtube-iframe.patch @@ -0,0 +1,26 @@ +From: Richard B Winters <rik@mmogp.com> +Date: Fri, 29 Jan 2016 11:26:22 -0500 +Subject: Fix privacy-breach-generic caused by youtube iframe + + - Modified 2015-05-13-releaswe-2_1_4.adoc so as not to + embed the youtube video + +Change-Id: Iaaf487ace95f5c5b02ba5f89d796e08e9abab4fd +Signed-off-by: Richard B Winters <rik@mmogp.com> +--- + doc/website-v1/news/2015-05-13-release-2_1_4.adoc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/doc/website-v1/news/2015-05-13-release-2_1_4.adoc b/doc/website-v1/news/2015-05-13-release-2_1_4.adoc +index 31297cf..e1dc9df 100644 +--- a/doc/website-v1/news/2015-05-13-release-2_1_4.adoc ++++ b/doc/website-v1/news/2015-05-13-release-2_1_4.adoc +@@ -50,7 +50,7 @@ builds upon the crmsh history feature at openSUSE conf in The Hague + earlier this month. The video of that presentation is online here: + + ++++++++++++ +-<iframe width="420" height="315" src="https://www.youtube.com/embed/mngfxzXkFLw" frameborder="0" allowfullscreen></iframe> ++<iframe width="420" height="315" src="/" frameborder="0" allowfullscreen></iframe> + ++++++++++++ + + https://www.youtube.com/watch?v=mngfxzXkFLw diff --git a/debian/patches/0007-pygmentize-lexer.patch b/debian/patches/0007-pygmentize-lexer.patch new file mode 100644 index 0000000..153edd3 --- /dev/null +++ b/debian/patches/0007-pygmentize-lexer.patch @@ -0,0 +1,81 @@ +From: Arturo Borrero Gonzalez <arturo.borrero.glez@gmail.com> +Subject: Patch to avoid using the custom lexer + This patch makes some changes to the crmsh doc build so it doesn't use + the included custom lexer. +Forwarded: not-needed +Last-Update: 2016-09-23 + +--- a/doc/website-v1/history-guide.adoc ++++ b/doc/website-v1/history-guide.adoc +@@ -51,7 +51,7 @@ + preparing this document we noticed that a probe failed repeatedly + on a node which wasn't even running the resource <<Listing 2>>. + +-[source,ansiclr] ++[source,c] + [caption="Listing 2: "] + .crm status output[[Listing 2]] + ----------------- +@@ -61,7 +61,7 @@ + The history +resource+ command shows log messages relevant to the + supplied resource <<Listing 3>>. + +-[source,ansiclr] ++[source,c] + [caption="Listing 3: "] + .Logs on failed +nfs-server+ probe operation[[Listing 3]] + ----------------- +@@ -88,7 +88,7 @@ + tracing of the resource agent. <<Listing 4>> shows how to do + that. + +-[source,ansiclr] ++[source,c] + [caption="Listing 4: "] + .Set `nfs-server` probe operation resource tracing[[Listing 4]] + ----------------- +@@ -126,7 +126,7 @@ + To begin, we run the `info` command which gives an overview, as + shown in <<Listing 5>>. + +-[source,ansiclr] ++[source,c] + [caption="Listing 5: "] + .Basic history information[[Listing 5]] + ----------------- +@@ -155,7 +155,7 @@ + The listing is annotated to explain the output in more detail. + + +-[source,ansiclr] ++[source,c] + [caption="Listing 6: "] + .Viewing transitions[[Listing 6]] + ----------------- +@@ -194,7 +194,7 @@ + It may sometimes be useful to see what changed between two + transitions. History `diff` command is in action in <<Listing 7>>. + +-[source,ansiclr] ++[source,c] + [caption="Listing 7: "] + .Viewing transitions[[Listing 7]] + ----------------- +@@ -212,7 +212,7 @@ + actions of that transition are yet to be executed. So, the status + section of transition _N_ corresponds to the configuration _N-1_. + +-[source,ansiclr] ++[source,c] + [caption="Listing 8: "] + .Full transition log[[Listing 8]] + ----------------- +@@ -232,7 +232,7 @@ + recommendable), then use the history `detail` command to + increase the level of detail displayed. + +-[source,ansiclr] ++[source,c] + [caption="Listing 9: "] + .Resource related messages[[Listing 9]] + ----------------- diff --git a/debian/patches/0010-Fix-package-management.patch b/debian/patches/0010-Fix-package-management.patch new file mode 100644 index 0000000..a4da58f --- /dev/null +++ b/debian/patches/0010-Fix-package-management.patch @@ -0,0 +1,33 @@ +Description: Use dpkg and apt for package management +Author: Valentin Vidic <Valentin.Vidic@CARNet.hr> +Last-Update: 2019-01-12 +--- a/utils/crm_init.py ++++ b/utils/crm_init.py +@@ -27,12 +27,12 @@ + def service_info(service): + "Returns information about a given service" + active, enabled = 'unknown', 'unknown' +- rc, out, err = crm_script.call(["/usr/bin/systemctl", "is-enabled", "%s.service" % (service)]) ++ rc, out, err = crm_script.call(["/bin/systemctl", "is-enabled", "%s.service" % (service)]) + if rc in (0, 1, 3) and out: + enabled = out.strip() + else: + return {'name': service, 'error': err.strip()} +- rc, out, err = crm_script.call(["/usr/bin/systemctl", "is-active", "%s.service" % (service)]) ++ rc, out, err = crm_script.call(["/bin/systemctl", "is-active", "%s.service" % (service)]) + if rc in (0, 1, 3) and out: + active = out.strip() + else: +--- a/utils/crm_script.py ++++ b/utils/crm_script.py +@@ -133,8 +133,8 @@ + + def service(name, action): + if action.startswith('is-'): +- return call(['/usr/bin/systemctl', action, name + '.service']) +- return sudo_call(['/usr/bin/systemctl', action, name + '.service']) ++ return call(['/bin/systemctl', action, name + '.service']) ++ return sudo_call(['/bin/systemctl', action, name + '.service']) + + + def package(name, state): diff --git a/debian/patches/0011-Fix-scripts-init.patch b/debian/patches/0011-Fix-scripts-init.patch new file mode 100644 index 0000000..dfdef5a --- /dev/null +++ b/debian/patches/0011-Fix-scripts-init.patch @@ -0,0 +1,14 @@ +Description: Make cluster init work on Debian +Author: Valentin Vidic <Valentin.Vidic@CARNet.hr> +Last-Update: 2016-11-19 +--- a/crmsh/corosync.py ++++ b/crmsh/corosync.py +@@ -609,7 +609,7 @@ + fileline: off + to_stderr: no + to_logfile: yes +- logfile: /var/log/cluster/corosync.log ++ logfile: /var/log/corosync/corosync.log + to_syslog: yes + debug: off + timestamp: on diff --git a/debian/patches/0012-Fix-crm-history.patch b/debian/patches/0012-Fix-crm-history.patch new file mode 100644 index 0000000..614fc01 --- /dev/null +++ b/debian/patches/0012-Fix-crm-history.patch @@ -0,0 +1,24 @@ +Description: Fix detection of cluster events + hb_report looks at /var/log/messages for cluster events by default. + On Debian systems this file only contains kernel messages so we use + /var/log/syslog instead. + . + Since the pacemaker looging moved to /var/log/pacemaker.log rather + than syslog, only this new file contains info on transitions so + use it instead of standard syslog messaging. +Author: Valentin Vidic <Valentin.Vidic@CARNet.hr> +Bug: https://github.com/ClusterLabs/crmsh/issues/169 +Last-Update: 2019-01-12 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +--- a/crmsh/history.py ++++ b/crmsh/history.py +@@ -21,7 +21,7 @@ + logger = log.setup_logger(__name__) + + +-_LOG_FILES = ("ha-log.txt", "messages", "ha-log", "cluster-log.txt", "journal.log", "pacemaker.log") ++_LOG_FILES = ("ha-log.txt", "syslog", "ha-log", "cluster-log.txt", "journal.log", "pacemaker.log") + + + # diff --git a/debian/patches/0013-Fix-cluster-bootstrap.patch b/debian/patches/0013-Fix-cluster-bootstrap.patch new file mode 100644 index 0000000..342d3fd --- /dev/null +++ b/debian/patches/0013-Fix-cluster-bootstrap.patch @@ -0,0 +1,70 @@ +Description: Fix cluster init on Debian + Update file paths and service names to work better on Debian. +Author: Valentin Vidic <Valentin.Vidic@CARNet.hr> +Last-Update: 2019-01-12 +--- a/crmsh/utils.py ++++ b/crmsh/utils.py +@@ -2495,13 +2495,13 @@ + """ + Check if package is installed + """ +- cmd = "rpm -q --quiet {}".format(pkg) ++ cmd = "dpkg-query --status {}".format(pkg) + if remote_addr: + # check on remote + rc, _, _ = sh.cluster_shell().get_rc_stdout_stderr_without_input(remote_addr, cmd) + else: + # check on local +- rc, _ = ShellUtils().get_stdout(cmd) ++ rc, _, _ = ShellUtils().get_stdout_stderr(cmd) + return rc == 0 + + +--- a/crmsh/bootstrap.py ++++ b/crmsh/bootstrap.py +@@ -52,12 +52,12 @@ + logger_utils = log.LoggerUtils(logger) + + +-CSYNC2_KEY = "/etc/csync2/key_hagroup" +-CSYNC2_CFG = "/etc/csync2/csync2.cfg" ++CSYNC2_KEY = "/etc/csync2.key_hagroup" ++CSYNC2_CFG = "/etc/csync2.cfg" + COROSYNC_AUTH = "/etc/corosync/authkey" + CRM_CFG = "/etc/crm/crm.conf" + PROFILES_FILE = "/etc/crm/profiles.yml" +-SYSCONFIG_SBD = "/etc/sysconfig/sbd" ++SYSCONFIG_SBD = "/etc/default/sbd" + SYSCONFIG_PCMK = "/etc/sysconfig/pacemaker" + SYSCONFIG_NFS = "/etc/sysconfig/nfs" + SYSCONFIG_FW = "/etc/sysconfig/SuSEfirewall2" +@@ -1385,7 +1385,7 @@ + clustername=_context.cluster_name, + ringXaddr=ringXaddr_res, + mcastport=mcastport_res, +- transport="udpu", ++ transport="knet", + ipv6=_context.ipv6, + two_rings=two_rings) + sync_file(corosync.conf()) +--- a/crmsh/corosync.py ++++ b/crmsh/corosync.py +@@ -643,7 +643,7 @@ + two_rings=False, + qdevice=None): + +- if transport == "udpu": ++ if transport == "knet": + ring_tmpl = "" + for i in 0, 1: + ring_tmpl += " ring{}_addr: {}\n".format(i, ringXaddr[i]) +@@ -682,6 +682,9 @@ + expected_votes: 1 + two_node: 0 + } ++resources { ++ watchdog_device: off ++} + """ + if qdevice is not None: + quorum_tmpl = """quorum { diff --git a/debian/patches/0014-Fix-cluster-stop-start.patch b/debian/patches/0014-Fix-cluster-stop-start.patch new file mode 100644 index 0000000..a36b5eb --- /dev/null +++ b/debian/patches/0014-Fix-cluster-stop-start.patch @@ -0,0 +1,17 @@ +Description: Fix crm cluster stop/start on Debian + Corosync remains running after 'crm cluster stop'. + Don't rely on systemd service dependencies to stop it + and also make it work with sysv init. +Author: Valentin Vidic <Valentin.Vidic@CARNet.hr> +Last-Update: 2017-10-20 +--- a/crmsh/ui_cluster.py ++++ b/crmsh/ui_cluster.py +@@ -170,7 +170,7 @@ + ''' + Starts the cluster stack on all nodes or specific node(s) + ''' +- service_check_list = ["pacemaker.service"] ++ service_check_list = ["corosync.service", "pacemaker.service"] + start_qdevice = False + if utils.is_qdevice_configured(): + start_qdevice = True diff --git a/debian/patches/0015-Fix-testsuite-errors.patch b/debian/patches/0015-Fix-testsuite-errors.patch new file mode 100644 index 0000000..b93250a --- /dev/null +++ b/debian/patches/0015-Fix-testsuite-errors.patch @@ -0,0 +1,188 @@ +Description: Fix testsuite + Make sure testsuite output works with Pacemaker 2. +Author: Valentin Vidic <vvidic@debian.org> +Last-Update: 2021-02-03 +--- a/test/unittests/test_utils.py ++++ b/test/unittests/test_utils.py +@@ -34,12 +34,12 @@ + mock_run.assert_called_once_with("crm_node -l") + + +-@mock.patch("crmsh.sh.ShellUtils.get_stdout") ++@mock.patch("crmsh.sh.ShellUtils.get_stdout_stderr") + def test_package_is_installed_local(mock_run): +- mock_run.return_value = (0, None) ++ mock_run.return_value = (0, None, None) + res = utils.package_is_installed("crmsh") + assert res is True +- mock_run.assert_called_once_with("rpm -q --quiet crmsh") ++ mock_run.assert_called_once_with("dpkg-query --status crmsh") + + + @mock.patch('crmsh.utils.detect_file') +--- a/test/unittests/test_sbd.py ++++ b/test/unittests/test_sbd.py +@@ -512,9 +512,9 @@ + + self.sbd_inst._update_sbd_configuration() + +- mock_copy.assert_called_once_with("/usr/share/fillup-templates/sysconfig.sbd", "/etc/sysconfig/sbd") +- mock_sysconfig.assert_called_once_with("/etc/sysconfig/sbd", SBD_WATCHDOG_DEV='/dev/watchdog', SBD_DEVICE='/dev/sdb1;/dev/sdc1', SBD_WATCHDOG_TIMEOUT="15") +- mock_update.assert_called_once_with("/etc/sysconfig/sbd") ++ mock_copy.assert_called_once_with("/usr/share/fillup-templates/sysconfig.sbd", "/etc/default/sbd") ++ mock_sysconfig.assert_called_once_with("/etc/default/sbd", SBD_WATCHDOG_DEV='/dev/watchdog', SBD_DEVICE='/dev/sdb1;/dev/sdc1', SBD_WATCHDOG_TIMEOUT="15") ++ mock_update.assert_called_once_with("/etc/default/sbd") + + @mock.patch('crmsh.bootstrap.utils.parse_sysconfig') + def test_get_sbd_device_from_config_none(self, mock_parse): +@@ -525,7 +525,7 @@ + res = self.sbd_inst._get_sbd_device_from_config() + assert res == [] + +- mock_parse.assert_called_once_with("/etc/sysconfig/sbd") ++ mock_parse.assert_called_once_with("/etc/default/sbd") + mock_parse_inst.get.assert_called_once_with("SBD_DEVICE") + + @mock.patch('crmsh.utils.re_split_string') +@@ -539,7 +539,7 @@ + res = self.sbd_inst._get_sbd_device_from_config() + assert res == ["/dev/sdb1", "/dev/sdc1"] + +- mock_parse.assert_called_once_with("/etc/sysconfig/sbd") ++ mock_parse.assert_called_once_with("/etc/default/sbd") + mock_parse_inst.get.assert_called_once_with("SBD_DEVICE") + mock_split.assert_called_once_with(sbd.SBDManager.PARSE_RE, "/dev/sdb1;/dev/sdc1") + +@@ -712,7 +712,7 @@ + mock_exists.return_value = False + self.sbd_inst.join_sbd("alice", "node1") + mock_package.assert_called_once_with("sbd") +- mock_exists.assert_called_once_with("/etc/sysconfig/sbd") ++ mock_exists.assert_called_once_with("/etc/default/sbd") + mock_invoke.assert_called_once_with("systemctl disable sbd.service") + + @mock.patch('crmsh.bootstrap.invoke') +@@ -727,7 +727,7 @@ + self.sbd_inst.join_sbd("alice", "node1") + + mock_package.assert_called_once_with("sbd") +- mock_exists.assert_called_once_with("/etc/sysconfig/sbd") ++ mock_exists.assert_called_once_with("/etc/default/sbd") + mock_invoke.assert_called_once_with("systemctl disable sbd.service") + mock_enabled.assert_called_once_with("sbd.service", "node1") + +@@ -751,7 +751,7 @@ + self.sbd_inst.join_sbd("alice", "node1") + + mock_package.assert_called_once_with("sbd") +- mock_exists.assert_called_once_with("/etc/sysconfig/sbd") ++ mock_exists.assert_called_once_with("/etc/default/sbd") + mock_invoke.assert_called_once_with("systemctl enable sbd.service") + mock_get_device.assert_called_once_with() + mock_verify.assert_called_once_with(["/dev/sdb1"], ["node1"]) +@@ -781,7 +781,7 @@ + self.sbd_inst.join_sbd("alice", "node1") + + mock_package.assert_called_once_with("sbd") +- mock_exists.assert_called_once_with("/etc/sysconfig/sbd") ++ mock_exists.assert_called_once_with("/etc/default/sbd") + mock_invoke.assert_called_once_with("systemctl enable sbd.service") + mock_get_device.assert_called_once_with() + mock_warn.assert_called_once_with("node1") +--- a/test/unittests/test_ui_cluster.py ++++ b/test/unittests/test_ui_cluster.py +@@ -44,11 +44,13 @@ + mock_qdevice_configured.return_value = False + context_inst = mock.Mock() + mock_parse_nodes.return_value = ["node1", "node2"] +- mock_active.side_effect = [True, True] ++ mock_active.side_effect = [True, True, True, True] + self.ui_cluster_inst.do_start(context_inst, "node1", "node2") + mock_parse_nodes.assert_called_once_with(context_inst, "node1", "node2") + mock_active.assert_has_calls([ ++ mock.call("corosync.service", remote_addr="node1"), + mock.call("pacemaker.service", remote_addr="node1"), ++ mock.call("corosync.service", remote_addr="node2"), + mock.call("pacemaker.service", remote_addr="node2") + ]) + mock_info.assert_has_calls([ +@@ -67,12 +69,13 @@ + context_inst = mock.Mock() + mock_start_pacemaker.return_value = ["node1"] + mock_parse_nodes.return_value = ["node1"] +- mock_active.side_effect = [False, False] ++ mock_active.side_effect = [False, False, False] + mock_qdevice_configured.return_value = True + + self.ui_cluster_inst.do_start(context_inst, "node1") + + mock_active.assert_has_calls([ ++ mock.call("corosync.service", remote_addr="node1"), + mock.call("pacemaker.service", remote_addr="node1"), + mock.call("corosync-qdevice.service", remote_addr="node1") + ]) +--- a/test/unittests/test_bootstrap.py ++++ b/test/unittests/test_bootstrap.py +@@ -1760,7 +1760,7 @@ + bootstrap.rm_configuration_files() + mock_run.assert_has_calls([ + mock.call('rm -f file1 file2', None), +- mock.call('cp /usr/share/fillup-templates/sysconfig.sbd /etc/sysconfig/sbd', None) ++ mock.call('cp /usr/share/fillup-templates/sysconfig.sbd /etc/default/sbd', None) + ]) + + @mock.patch('crmsh.utils.get_iplist_from_name') +--- a/test/cibtests/001.exp.xml ++++ b/test/cibtests/001.exp.xml +@@ -9,6 +9,9 @@ + <resources> + <primitive id="rsc_dummy" class="ocf" provider="heartbeat" type="Dummy"> + <operations> ++ <op name="monitor" timeout="20s" interval="10s" id="rsc_dummy-monitor-10s"/> ++ <op name="start" timeout="20s" interval="0s" id="rsc_dummy-start-0s"/> ++ <op name="stop" timeout="20s" interval="0s" id="rsc_dummy-stop-0s"/> + <op name="monitor" interval="30" id="rsc_dummy-monitor-30"/> + </operations> + </primitive> +--- a/test/cibtests/002.exp.xml ++++ b/test/cibtests/002.exp.xml +@@ -13,6 +13,11 @@ + <nvpair name="interleave" value="true" id="testfs-clone-meta_attributes-interleave"/> + </meta_attributes> + <primitive id="testfs" class="ocf" provider="heartbeat" type="Dummy"> ++ <operations> ++ <op name="monitor" timeout="20s" interval="10s" id="testfs-monitor-10s"/> ++ <op name="start" timeout="20s" interval="0s" id="testfs-start-0s"/> ++ <op name="stop" timeout="20s" interval="0s" id="testfs-stop-0s"/> ++ </operations> + <instance_attributes id="testfs-instance_attributes"> + <nvpair name="fake" value="1" id="testfs-instance_attributes-fake"/> + </instance_attributes> +--- a/test/cibtests/003.exp.xml ++++ b/test/cibtests/003.exp.xml +@@ -14,6 +14,11 @@ + <nvpair id="testfs-clone-meta_attributes-target-role" name="target-role" value="Stopped"/> + </meta_attributes> + <primitive id="testfs" class="ocf" provider="heartbeat" type="Dummy"> ++ <operations> ++ <op name="monitor" timeout="20s" interval="10s" id="testfs-monitor-10s"/> ++ <op name="start" timeout="20s" interval="0s" id="testfs-start-0s"/> ++ <op name="stop" timeout="20s" interval="0s" id="testfs-stop-0s"/> ++ </operations> + <instance_attributes id="testfs-instance_attributes"> + <nvpair name="fake" value="2" id="testfs-instance_attributes-fake"/> + </instance_attributes> +--- a/test/cibtests/004.exp.xml ++++ b/test/cibtests/004.exp.xml +@@ -14,6 +14,11 @@ + <nvpair id="testfs-clone-meta_attributes-target-role" name="target-role" value="Started"/> + </meta_attributes> + <primitive id="testfs" class="ocf" provider="heartbeat" type="Dummy"> ++ <operations> ++ <op name="monitor" timeout="20s" interval="10s" id="testfs-monitor-10s"/> ++ <op name="start" timeout="20s" interval="0s" id="testfs-start-0s"/> ++ <op name="stop" timeout="20s" interval="0s" id="testfs-stop-0s"/> ++ </operations> + <instance_attributes id="testfs-instance_attributes"> + <nvpair name="fake" value="hello" id="testfs-instance_attributes-fake"/> + </instance_attributes> diff --git a/debian/patches/0016-Fix-python2-calls.patch b/debian/patches/0016-Fix-python2-calls.patch new file mode 100644 index 0000000..568ccd6 --- /dev/null +++ b/debian/patches/0016-Fix-python2-calls.patch @@ -0,0 +1,138 @@ +Description: Build using only python 3 +Author: Valentin Vidic <vvidic@debian.org> +Last-Update: 2019-08-16 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +--- a/doc/website-v1/Makefile ++++ b/doc/website-v1/Makefile +@@ -54,6 +54,7 @@ + XDGOPEN := xdg-open + NEWS := $(wildcard news/*.adoc) + NEWSDOC := $(patsubst %.adoc,gen/%/index.html,$(NEWS)) ++PYTHON := python3 + + .PHONY: all clean deploy open + +@@ -62,33 +63,33 @@ + gen/index.html: index.adoc $(CRMCONF) + @mkdir -p $(dir $@) + @$(ASCIIDOC) --unsafe -b html5 -a icons -a iconsdir=/img/icons -f $(CRMCONF) -o $@ $< +- @python ./postprocess.py -o $@ $< ++ @$(PYTHON) ./postprocess.py -o $@ $< + + gen/%/index.html: %.adoc $(CRMCONF) + @mkdir -p $(dir $@) + @$(ASCIIDOC) --unsafe -b html5 -a icons -a iconsdir=/img/icons -f $(CRMCONF) -o $@ $< +- @python ./postprocess.py -o $@ $< ++ @$(PYTHON) ./postprocess.py -o $@ $< + + gen/history-guide/index.html: $(HISTORY_LISTINGS) + + gen/man/index.html: ../crm.8.adoc $(CRMCONF) + @mkdir -p $(dir $@) + @$(ASCIIDOC) --unsafe -b html5 -f $(CRMCONF) -o $@ $< +- @python ./postprocess.py -o $@ $< ++ @$(PYTHON) ./postprocess.py -o $@ $< + + gen/404.html: 404.adoc $(CRMCONF) + @mkdir -p $(dir $@) + @$(ASCIIDOC) --unsafe -b html5 -f $(CRMCONF) -o $@ $< +- @python ./postprocess.py -o $@ $< ++ @$(PYTHON) ./postprocess.py -o $@ $< + + news.adoc: $(NEWS) $(CRMCONF) + @echo "news:" $(NEWS) +- python ./make-news.py $@ $(NEWS) ++ $(PYTHON) ./make-news.py $@ $(NEWS) + + gen/news/index.html: news.adoc + @mkdir -p $(dir $@) + $(ASCIIDOC) --unsafe -b html5 -f $(CRMCONF) -o $@ $< +- @python ./postprocess.py -o $@ $< ++ @$(PYTHON) ./postprocess.py -o $@ $< + + gen/css/%.css: css/%.css + @mkdir -p gen/css +@@ -127,7 +128,7 @@ + + gen/atom.xml: $(NEWSDOC) + @echo "atom:" $(NEWSDOC) +- python ./make-news.py gen/atom.xml $(NEWS) ++ $(PYTHON) ./make-news.py gen/atom.xml $(NEWS) + + site: gen/atom.xml gen/index.html gen/404.html gen/news/index.html gen/man/index.html $(TGT) $(CSS) $(IMG) $(FONTS) $(NEWSDOC) + @which dos2unix >/dev/null && find gen -name "*.html" -type f -exec dos2unix {} \; +--- a/doc/website-v1/postprocess.py ++++ b/doc/website-v1/postprocess.py +@@ -48,7 +48,7 @@ + def generate_toc(infile, outfile, debug): + + if debug: +- print "Infile:", infile ++ print("Infile:", infile) + toc = read_toc_data(infile, debug) + ''' + toc_data = [] +@@ -57,7 +57,7 @@ + m = section.match(line) + if m: + if debug: +- print "toc_data: %s" % str(((m.group('depth'), m.group('text'), m.group('id')))) ++ print("toc_data: %s" % str(((m.group('depth'), m.group('text'), m.group('id'))))) + toc_data.append((m.group('depth'), m.group('text'), m.group('id'))) + + toc = '' +@@ -73,11 +73,11 @@ + # Write TOC to outfile + if outfile: + if debug: +- print "Writing TOC:" +- print "----" +- print toc +- print "----" +- print "Outfile:", outfile ++ print("Writing TOC:") ++ print("----") ++ print(toc) ++ print("----") ++ print("Outfile:", outfile) + fil = open(outfile) + f = fil.readlines() + fil.close() +@@ -96,14 +96,14 @@ + m = section.match(line) + if m: + if debug: +- print "toc_data: %s" % str(((m.group('depth'), m.group('text'), m.group('id')))) ++ print("toc_data: %s" % str(((m.group('depth'), m.group('text'), m.group('id'))))) + toc_data.append((m.group('depth'), m.group('text'), m.group('id'))) + + toc = '' + if len(toc_data) > 0: + toc = '<div id="toc">\n' + for depth, text, link in toc_data: +- if depth >= 2 and link is not None: ++ if int(depth) >= 2 and link is not None: + toc += '<div class="toclevel%s"><a href="#%s">%s</a></div>\n' % ( + int(depth) - 1, link, text) + toc += '</div>\n' +@@ -126,7 +126,7 @@ + debug = args.debug + outfile = args.output + infile = args.input +- print "+ %s -> %s" % (infile, outfile) ++ print("+ %s -> %s" % (infile, outfile)) + gen = False + for tocpage in TOC_PAGES: + if not gen and outfile.endswith(tocpage): +--- a/doc/website-v1/make-news.py ++++ b/doc/website-v1/make-news.py +@@ -63,7 +63,7 @@ + raise ValueError("Missing date") + + def atom_id(self): +- return root_id + '::' + hashlib.sha1(self.filename).hexdigest() ++ return root_id + '::' + hashlib.sha1(self.filename.encode('utf-8')).hexdigest() + + def atom_date(self): + return self.date.replace(' ', 'T') + ':00' + time.tzname[0] diff --git a/debian/patches/0017-Fix-profiles-adoc.patch b/debian/patches/0017-Fix-profiles-adoc.patch new file mode 100644 index 0000000..ece2773 --- /dev/null +++ b/debian/patches/0017-Fix-profiles-adoc.patch @@ -0,0 +1,17 @@ +Description: Skip building profiles as a separate document + It is included in crm(8) already. +Author: Valentin Vidic <vvidic@debian.org> +Last-Update: 2022-05-28 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +--- a/Makefile.am ++++ b/Makefile.am +@@ -29,7 +29,7 @@ + contribdir = $(docdir)/contrib + contrib_DATA = contrib/pcmk.vim contrib/README.vimsyntax + helpdir = $(datadir)/$(PACKAGE) +-asciiman = doc/crm.8.adoc doc/crmsh_crm_report.8.adoc doc/profiles.adoc ++asciiman = doc/crm.8.adoc doc/crmsh_crm_report.8.adoc + help_DATA = doc/crm.8.adoc + + generated_docs = diff --git a/debian/patches/0018-Fix-python3-install.patch b/debian/patches/0018-Fix-python3-install.patch new file mode 100644 index 0000000..de1c33e --- /dev/null +++ b/debian/patches/0018-Fix-python3-install.patch @@ -0,0 +1,16 @@ +Description: Fix build failure with new version of setuptools + Files get installed in /usr/local. +Author: Valentin Vidic <vvidic@debian.org> +Last-Update: 2022-10-15 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +--- a/Makefile.am ++++ b/Makefile.am +@@ -69,6 +69,7 @@ + $(PYTHON) $(srcdir)/setup.py install \ + --root $(DESTDIR)/// \ + $(python_prefix) \ ++ --install-layout=deb \ + --record $(DESTDIR)$(pkgpythondir)/install_files.txt \ + --verbose + $(INSTALL) -d -m 770 $(DESTDIR)$(CRM_CACHE_DIR) diff --git a/debian/patches/0019-Remove-news-adoc.patch b/debian/patches/0019-Remove-news-adoc.patch new file mode 100644 index 0000000..be0fed7 --- /dev/null +++ b/debian/patches/0019-Remove-news-adoc.patch @@ -0,0 +1,34 @@ +Description: Fix rebuild failure due to generated files +Author: Valentin Vidic <vvidic@debian.org> +Last-Update: 2023-10-10 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +--- a/doc/website-v1/news.adoc ++++ /dev/null +@@ -1,26 +0,0 @@ +-= News +- +-link:/news/2017-01-31-release-3_0_0[2017-01-31 10:00] +- +-:leveloffset: 1 +- +-include::news/2017-01-31-release-3_0_0.adoc[] +- +-:leveloffset: 0 +- +-'''' +-* link:/news/2016-09-05-release-2_2_2[2016-09-05 19:00 Releasing crmsh version 2.2.2] +-* link:/news/2016-09-02-release-2_3_1[2016-09-02 10:00 Releasing crmsh version 2.3.1] +-* link:/news/2016-09-01-release-2_1_7[2016-09-01 09:00 Announcing crmsh stable release 2.1.7] +-* link:/news/2016-08-12-release-2_3_0[2016-08-12 10:30 Releasing crmsh version 2.3.0] +-* link:/news/2016-04-28-release-2_2_1[2016-04-28 01:00 crmsh 2.2.1 and 2.1.6 are released] +-* link:/news/2016-01-15-release-2_2_0[2016-01-15 15:00 crmsh 2.2.0 is released] +-* link:/news/2016-01-12-release-2_1_5[2016-01-12 10:00 Announcing crmsh stable release 2.1.5] +-* link:/news/2015-05-25-getting-started-jp[2015-05-25 13:30 Getting Started translated to Japanese] +-* link:/news/2015-05-13-release-2_1_4[2015-05-13 15:30 Announcing crmsh stable release 2.1.4] +-* link:/news/2015-04-10-release-2_1_3[2015-04-10 12:30 Announcing crmsh stable release 2.1.3] +-* link:/news/2015-01-26-release-2_1_2[2015-01-26 11:05 Announcing crmsh release 2.1.2] +-* link:/news/2014-10-28-release-2_1_1[2014-10-29 00:20 Announcing crmsh release 2.1.1] +-* link:/news/2014-06-30-release-2_1[2014-06-30 09:00 Announcing crmsh release 2.1] +- +-link:https://savannah.nongnu.org/news/?group_id=10890[Old News Archive] diff --git a/debian/patches/0020-Replace-distutils.patch b/debian/patches/0020-Replace-distutils.patch new file mode 100644 index 0000000..fd5cfb3 --- /dev/null +++ b/debian/patches/0020-Replace-distutils.patch @@ -0,0 +1,75 @@ +Description: Fix build with python 3.12 +Author: Valentin Vidic <vvidic@debian.org> +Last-Update: 2024-03-04 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +--- a/crmsh/ra.py ++++ b/crmsh/ra.py +@@ -50,15 +50,15 @@ + + @utils.memoize + def can_use_lrmadmin(): +- from distutils import version ++ from packaging.version import Version + # after this glue release all users can get meta-data and + # similar from lrmd + minimum_glue = "1.0.10" + _rc, glue_ver = ShellUtils().get_stdout("%s -v" % lrmadmin_prog, stderr_on=False) + if not glue_ver: # lrmadmin probably not found + return False +- v_min = version.LooseVersion(minimum_glue) +- v_this = version.LooseVersion(glue_ver) ++ v_min = Version(minimum_glue) ++ v_this = Version(glue_ver) + if v_this < v_min: + return False + if userdir.getuser() not in ("root", config.path.crm_daemon_user): +--- a/crmsh/utils.py ++++ b/crmsh/utils.py +@@ -37,7 +37,7 @@ + from . import constants + from . import options + from . import term +-from distutils.version import LooseVersion ++from packaging import version + from .constants import SSH_OPTION + from . import log + from .prun import prun +@@ -1632,8 +1632,15 @@ + return val_l + + +-def is_larger_than_min_version(version, min_version): +- return LooseVersion(version) >= LooseVersion(min_version) ++def is_larger_than_min_version(this_version, min_version): ++ version_re = re.compile(version.VERSION_PATTERN, re.VERBOSE | re.IGNORECASE) ++ match1 = version_re.search(this_version) ++ if not match1: ++ raise InvalidVersion(f"Invalid version: '{this_version}'") ++ match2 = version_re.search(min_version) ++ if not match2: ++ raise InvalidVersion(f"Invalid version: '{min_version}'") ++ return version.parse(match1.group(0)) >= version.parse(match2.group(0)) + + + def is_min_pcmk_ver(min_ver, cib_f=None): +--- a/test/unittests/test_utils.py ++++ b/test/unittests/test_utils.py +@@ -7,7 +7,7 @@ + import os + import socket + import re +-import imp ++import importlib + import subprocess + import unittest + import pytest +@@ -24,7 +24,7 @@ + utils._ip_for_cloud = None + # Mock memoize method and reload the module under test later with imp + mock.patch('crmsh.utils.memoize', lambda x: x).start() +- imp.reload(utils) ++ importlib.reload(utils) + + + @mock.patch("crmsh.sh.ShellUtils.get_stdout_stderr") diff --git a/debian/patches/0021-Fix-bootstrap-bash.patch b/debian/patches/0021-Fix-bootstrap-bash.patch new file mode 100644 index 0000000..943aeb9 --- /dev/null +++ b/debian/patches/0021-Fix-bootstrap-bash.patch @@ -0,0 +1,25 @@ +Description: Fix bootstrap with dash +Author: Valentin Vidic <vvidic@debian.org> +Last-Update: 2024-02-17 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +--- a/crmsh/ssh_key.py ++++ b/crmsh/ssh_key.py +@@ -235,7 +235,7 @@ + ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -C "Cluster internal on $(hostname)" -N '' <> /dev/null + echo 'GENERATED=1' + fi +-for file in ~/.ssh/id_{{{pattern}}}; do ++for file in {pattern}; do + if [ -f "$file" ]; then + if ! [ -f "$file".pub ]; then + ssh-keygen -y -f "$file" > "$file".pub +@@ -245,7 +245,7 @@ + done + '''.format( + condition=' -o '.join([f'-f ~/.ssh/id_{t}' for t in self.KNOWN_KEY_TYPES]), +- pattern=','.join(self.KNOWN_KEY_TYPES), ++ pattern=' '.join([f'~/.ssh/id_{t}' for t in self.KNOWN_KEY_TYPES]), + ) + result = self.cluster_shell.subprocess_run_without_input( + host, user, diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 0000000..b77d82f --- /dev/null +++ b/debian/patches/series @@ -0,0 +1,17 @@ +0003-Add-remote-resource-to-local-cache.patch +0004-Fix-privacy-breach-generic-caused-by-footer-template.patch +0005-Fix-privacy-breach-generic-caused-by-atom-xml-templa.patch +0006-Fix-privacy-breach-generic-caused-by-youtube-iframe.patch +0007-pygmentize-lexer.patch +0010-Fix-package-management.patch +0011-Fix-scripts-init.patch +0012-Fix-crm-history.patch +0013-Fix-cluster-bootstrap.patch +0014-Fix-cluster-stop-start.patch +0015-Fix-testsuite-errors.patch +0016-Fix-python2-calls.patch +0017-Fix-profiles-adoc.patch +0018-Fix-python3-install.patch +0019-Remove-news-adoc.patch +0020-Replace-distutils.patch +0021-Fix-bootstrap-bash.patch diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..19d41fe --- /dev/null +++ b/debian/rules @@ -0,0 +1,65 @@ +#!/usr/bin/make -f +# See debhelper(7) (uncomment to enable) +# output every command that modifies files on the build system. +#DH_VERBOSE = 1 + +# see FEATURE AREAS in dpkg-buildflags(1) +export DEB_BUILD_MAINT_OPTIONS = hardening=+all + +# Ensure that we link against all needed libraries (cf. Policy 10.2) +export DEB_LDFLAGS_MAINT_APPEND=-Wl,-z,defs + +# Properly support multi-arch triplet paths +DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) + +# If your package provides eggs, install egg-info directories instead of real eggs +DEB_PYTHON_INSTALL_ARGS_ALL += --single-version-externally-managed + +# main packaging script based on dh7 syntax +%: + dh $@ --with python3 + +override_dh_missing: + dh_missing --fail-missing + +override_dh_auto_configure: + dh_auto_configure -- --prefix=/usr --sysconfdir=/etc \ + --libdir=/usr/lib/$(DEB_HOST_MULTIARCH) --includedir=/usr/include/$(DEB_HOST_MULTIARCH) \ + --datadir=/usr/share --docdir=/usr/share/doc/crmsh --htmldir=/usr/share/doc/crmsh/html + +# Make generated documentation reproducible +override_dh_auto_build: export TZ=UTC +override_dh_auto_build: + dh_auto_build +# Manually invoke building of the asciidoc html documentation + cd $(CURDIR)/doc/website-v1 && $(MAKE) + +DOC = debian/tmp/usr/share/doc/crmsh + +override_dh_auto_install: + dh_auto_install +# remove redundant files + rm -v $(DOC)/COPYING +# move README to doc dir + mv debian/tmp/usr/share/crmsh/tests/README.regression $(DOC)/README.regression +# keep crm in /usr/sbin for now + install -D debian/tmp/usr/bin/crm debian/tmp/usr/sbin/crm + rm debian/tmp/usr/bin/crm +# remove uninstall file list (breaks reproducible builds) + rm debian/tmp/usr/lib/python*/site-packages/crmsh/install_files.txt +# install bash completion + install -m 644 -D contrib/bash_completion.sh debian/tmp/usr/share/bash-completion/completions/crm +# install vim plugin + install -m 644 -D debian/vim-pcmk.yaml debian/tmp/usr/share/vim/registry/vim-pcmk.yaml + install -m 644 -D contrib/pcmk-ftdetect.vim debian/tmp/usr/share/vim/addons/ftdetect/pcmk.vim + install -m 644 -D contrib/pcmk.vim debian/tmp/usr/share/vim/addons/syntax/pcmk.vim + rm -r debian/tmp/usr/share/doc/crmsh/contrib/ +# fix timestamps on patched files for reproducible build + find debian/tmp -print0 | xargs -0 touch --date=@$${SOURCE_DATE_EPOCH} + +# clean with python 3 +override_dh_auto_clean: + python3 setup.py clean -a + +override_dh_clean: + dh_clean build/ doc/*.8 doc/*.html doc/website-v1/gen/ diff --git a/debian/salsa-ci.yml b/debian/salsa-ci.yml new file mode 100644 index 0000000..33c3a64 --- /dev/null +++ b/debian/salsa-ci.yml @@ -0,0 +1,4 @@ +--- +include: + - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml + - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian/source/include-binaries b/debian/source/include-binaries new file mode 100644 index 0000000..2ace81b --- /dev/null +++ b/debian/source/include-binaries @@ -0,0 +1 @@ +debian/patches/0003-Add-remote-resource-to-local-cache.patch diff --git a/debian/source/options b/debian/source/options new file mode 100644 index 0000000..b2b7b88 --- /dev/null +++ b/debian/source/options @@ -0,0 +1 @@ +extend-diff-ignore="^[^/]+\.egg-info/" diff --git a/debian/tests/control b/debian/tests/control new file mode 100644 index 0000000..e67a361 --- /dev/null +++ b/debian/tests/control @@ -0,0 +1,32 @@ +Test-Command: crm --help +Depends: crmsh +Restrictions: needs-root + +Test-Command: crm help +Depends: crmsh +Restrictions: needs-root + +Test-Command: crm --version +Depends: crmsh +Restrictions: needs-root + +Tests: utils.sh +Depends: crmsh, fence-virt +Restrictions: needs-root, allow-stderr + +Tests: testsuite.sh +Depends: crmsh, openssh-server, python3-pytest +Restrictions: needs-root + +Tests: pacemaker-basic-resource.sh +Depends: crmsh +Restrictions: needs-root, allow-stderr, isolation-container, skippable + +Tests: pacemaker-node-status.sh +Depends: crmsh +Restrictions: needs-root, allow-stderr, isolation-container, skippable + +# Test disabled because it generates broken corosync config (missing nodelist) +Tests: pacemaker-cluster-init.sh +Depends: crmsh, csync2, ntp, ufw, openssh-server, dmidecode [any-amd64 arm64 armhf any-i386], booth, booth-pacemaker +Restrictions: needs-root, allow-stderr, isolation-machine, skippable diff --git a/debian/tests/pacemaker-basic-resource.sh b/debian/tests/pacemaker-basic-resource.sh new file mode 100755 index 0000000..de2a4c4 --- /dev/null +++ b/debian/tests/pacemaker-basic-resource.sh @@ -0,0 +1,98 @@ +#!/bin/sh + +set -ex + +DAEMON_TIMEOUT=60 +CRM_TIMEOUT=5 +RSC_NAME="test" +rsc_check() +{ + if crm status | grep "$RSC_NAME[[:space:]][(]ocf::\?heartbeat:IPv6addr[)]:[[:space:]].*$1" >/dev/null; then + return 0 + else + return 1 + fi +} + +# https://bugs.launchpad.net/bugs/1828228 +ulimit -H -l unlimited 2>/dev/null || { + echo "test disabled for unprivileged namespaces" + exit 77 +} + +# +# daemons start +# + +service corosync start +service pacemaker start +sleep $DAEMON_TIMEOUT + +# +# disable stonith and quorum +# + +crm configure property stonith-enabled="false" +crm configure property no-quorum-policy="ignore" +sleep $CRM_TIMEOUT + +# +# creation & start +# + +crm configure primitive $RSC_NAME \ + ocf:heartbeat:IPv6addr \ + params ipv6addr="fe00::200" \ + cidr_netmask="64" \ + nic="lo" +sleep $CRM_TIMEOUT +crm resource start $RSC_NAME +sleep $CRM_TIMEOUT +if rsc_check "Started" ; then + : INFO resource creation and start OK +else + : ERROR failed to start resource + exit 1 +fi + +# +# restart +# + +crm resource restart $RSC_NAME +sleep $CRM_TIMEOUT +if rsc_check "Started" ; then + : INFO resource restart OK +else + : ERROR failed to restart resource + exit 1 +fi + +# +# stop +# + +crm resource stop $RSC_NAME +sleep $CRM_TIMEOUT +if rsc_check "Stopped" ; then + : INFO resource stop OK +else + : ERROR failed to stop resource + exit 1 +fi + +# +# delete +# + +crm configure delete $RSC_NAME +sleep $CRM_TIMEOUT +if ! rsc_check "Stopped" ; then + : INFO resource delete OK +else + : ERROR failed to delete resource + exit 1 +fi + +: INFO all tests OK +exit 0 diff --git a/debian/tests/pacemaker-cluster-init.sh b/debian/tests/pacemaker-cluster-init.sh new file mode 100755 index 0000000..a3cf349 --- /dev/null +++ b/debian/tests/pacemaker-cluster-init.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +set -ex + +# https://bugs.launchpad.net/bugs/1828228 +ulimit -H -l unlimited 2>/dev/null || { + echo "test disabled for unprivileged namespaces" + exit 77 +} + +# ufw currently broken without /sbin/iptables +if ! ufw status; then + test -e /sbin/iptables || ln -s /usr/sbin/iptables /sbin/iptables + test -e /sbin/ip6tables || ln -s /usr/sbin/ip6tables /sbin/ip6tables +fi + +service corosync stop + +crm cluster init --yes --name=autopkgtest --unicast + +crm cluster geo_init --yes --clusters=autopkgtest=127.2.2.2 --tickets=ticket1 +crm resource start g-booth +sleep 5 + +crm status + +crm status | grep -q booth-ip.*Started +crm status | grep -q booth-site.*Started + +: INFO all tests OK +exit 0 diff --git a/debian/tests/pacemaker-node-status.sh b/debian/tests/pacemaker-node-status.sh new file mode 100755 index 0000000..a0a2fbc --- /dev/null +++ b/debian/tests/pacemaker-node-status.sh @@ -0,0 +1,76 @@ +#!/bin/sh + +set -ex + +DAEMON_TIMEOUT=60 +CRM_TIMEOUT=5 + +# https://bugs.launchpad.net/bugs/1828228 +ulimit -H -l unlimited 2>/dev/null || { + echo "test disabled for unprivileged namespaces" + exit 77 +} + +# +# daemons start +# + +service corosync start +service pacemaker start +sleep $DAEMON_TIMEOUT + +# Get the node name as sugested in +# https://lists.clusterlabs.org/pipermail/users/2022-May/030309.html +NODE="$(crm_node -n)" +if [ -z "$NODE" ]; then + echo "Could not detect node name" + exit 1 +fi +# crmsh will try to ping the node name so make sure it can be resolved +if ! getent hosts "$NODE" >/dev/null 2>&1; then + echo "127.0.0.1 $NODE" >> /etc/hosts +fi + +# +# online +# + +crm status | grep "Online:.*$NODE" + +# +# standby +# + +crm node standby $NODE +sleep $CRM_TIMEOUT +crm status | grep "Node $NODE: standby" + +crm node online $NODE +sleep $CRM_TIMEOUT +crm status | grep "Online:.*$NODE" + +# +# maintenance +# + +crm node maintenance $NODE +sleep $CRM_TIMEOUT +crm status | grep "Node $NODE: maintenance" + +crm node ready $NODE +sleep $CRM_TIMEOUT +crm status | grep "Online:.*$NODE" + +# +# attributes +# + +crm node attribute $NODE set memory_size 1024 +crm node attribute $NODE show memory_size | grep 1024 +crm node utilization $NODE set memory 2048 +crm node utilization $NODE show memory | grep 2048 +crm node server +crm node show + +: INFO all tests OK +exit 0 diff --git a/debian/tests/testsuite.sh b/debian/tests/testsuite.sh new file mode 100755 index 0000000..842551a --- /dev/null +++ b/debian/tests/testsuite.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +set -e + +# prepare test env +export PATH=$PATH:/usr/lib/pacemaker +export PYTHONPATH=/usr/share/crmsh +# test/unittests/test_report.py::test_ts_to_dt assumes UTC +export TZ=UTC + +mkdir /usr/share/crmsh/doc + +# some tests fail if the cluster is running +service pacemaker stop +service corosync stop + +cd /usr/share/crmsh/tests/unittests +printf "Running unittests...\n" +py.test-3 -vv + +cp /usr/share/pacemaker/*.rng /usr/share/crmsh/tests/unittests/schemas/ + +cd /usr/share/crmsh/tests +printf "\nRunning cibtests...\n" +./cib-tests.sh + +printf "\nRunning regressions...\n" +./regression.sh -m buildbot || true +cat crmtestout/regression.out diff --git a/debian/tests/utils.sh b/debian/tests/utils.sh new file mode 100755 index 0000000..6ff8480 --- /dev/null +++ b/debian/tests/utils.sh @@ -0,0 +1,33 @@ +#!/bin/sh + +set -ex + +export LC_ALL=C +PKG=fence-virt + +dpkg --purge $PKG + +# package not installed +/usr/share/crmsh/utils/crm_rpmcheck.py $PKG | grep error + +# install +/usr/share/crmsh/utils/crm_pkg.py -n $PKG -s present | grep Unpacking +/usr/share/crmsh/utils/crm_rpmcheck.py $PKG | grep status +dpkg --status $PKG + +# upgrade +/usr/share/crmsh/utils/crm_pkg.py -n $PKG -s latest | grep False + +# purge +/usr/share/crmsh/utils/crm_pkg.py -n $PKG -s removed | egrep 'Removing|Purging' +/usr/share/crmsh/utils/crm_rpmcheck.py $PKG | grep error + +# clean +cd $AUTOPKGTEST_TMP +mkdir dir +touch dir/file +cp /usr/share/crmsh/utils/crm_clean.py . +$PWD/crm_clean.py $PWD/crm_clean.py $PWD/dir +if ls | grep .; then + exit 1 +fi diff --git a/debian/upstream/metadata b/debian/upstream/metadata new file mode 100644 index 0000000..2607150 --- /dev/null +++ b/debian/upstream/metadata @@ -0,0 +1,4 @@ +Bug-Database: https://github.com/ClusterLabs/crmsh/issues +Bug-Submit: https://github.com/ClusterLabs/crmsh/issues/new +Repository: https://github.com/ClusterLabs/crmsh.git +Repository-Browse: https://github.com/ClusterLabs/crmsh diff --git a/debian/vim-pcmk.yaml b/debian/vim-pcmk.yaml new file mode 100644 index 0000000..3163817 --- /dev/null +++ b/debian/vim-pcmk.yaml @@ -0,0 +1,5 @@ +addon: pcmk +description: "The Pacemaker crmsh plugin for Vim" +files: + - ftdetect/pcmk.vim + - syntax/pcmk.vim diff --git a/debian/watch b/debian/watch new file mode 100644 index 0000000..64a1df1 --- /dev/null +++ b/debian/watch @@ -0,0 +1,4 @@ +version=4 + +opts=uversionmangle=s/(\d)[_\.\-\+]?((RC|rc|pre|dev|beta|alpha)\d*)$/$1~$2/ \ + https://github.com/ClusterLabs/crmsh/tags .*/v?(\d\S*)\.tar\.gz |