Not found :(
-Sorry, but the page you were trying to view does not exist.
-It looks like this was the result of either:
--
-
- a mistyped address -
- an out-of-date link -
diff --git a/.gitignore b/.gitignore index c78acdd..81e75eb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,35 +1,14 @@ -# generated by jekyll -/html/*.html -/html/*.txt -/html/assets/ -/html/doc/ -/html/feed.xml -/html/pacemaker/index.html -/html/pacemaker/*/index.php -/html/polls/index.html -/src/.*-cache/ -/src/.jekyll-metadata +# generated by Hugo or Pacemaker make targets +/html/ +/src/.hugo_build.lock +/src/resources/ -# generated by pacemaker make targets -/html/pacemaker/abi/*/ -/html/pacemaker/doc/*/ -/html/pacemaker/doc/acls.* -/html/pacemaker/doc/build-[0-9].[0-9].txt -/html/pacemaker/doc/crm_fencing.* -/html/pacemaker/doxygen/*/ -/html/pacemaker/global/*/ -/html/pacemaker/man/*.[78].html - -# bugzilla and phorge source +# Bugzilla and Phorge source /bugzilla /bugzilla*/ /projects # not version-controlled *~ *.swp /build.clusterlabs.org -/ci.kronosnet.org/ -/html/doc/Two-Stacks.pdf -/html/images/ -/include/wiki.clusterlabs.org/secrets.php diff --git a/README.md b/README.md index 25a8fa0..d745879 100644 --- a/README.md +++ b/README.md @@ -1,141 +1,87 @@ # ClusterLabs.org website -## Installing Jekyll - -ClusterLabs.org is partially generated by Jekyll, a Ruby gem. The following -dependencies are required by Jekyll: - -* nodejs -* npm -* Ruby -* Bundler +## Dependencies -See src/Gemfile.lock for the currently required versions of those dependencies. - -Once you have these four dependencies, install Jekyll by changing to the `src` -directory and running `bundle install`. - -Note: If your development environment is not lucky enough to have the required -versions, these instructions might help: - -* Install Ruby Version Manager and its dependencies: - * `sudo dnf install rvm gcc g++ zlib-devel autoconf` -* Then, use rvm to install OpenSSL and the desired Ruby version: - * `rvm pkg install openssl` - * `rvm install $RUBY_VERSION --rubygems $GEMS_VERSION --with-openssl-dir=$HOME/.rvm/usr` - * `rvm use $RUBY_VERSION` -* Then, use gem to install the desired version of any gems. - * `gem install $GEM_NAME:$GEM_VERSION` +ClusterLabs.org is primarily generated by Hugo, a static website generator. +The site's only dependencies are Go >= 1.18.0 and Hugo >= 0.128.0. -## Using Jekyll +If your OS does not provide Hugo, you can download an architecture-specific +tarball from https://github.com/gohugoio/hugo/releases/latest, extract it, +and move the binary to somewhere on your $PATH. -ClusterLabs.org's jekyll source is under the `src` directory. Jekyll will -generate static content to the html directory. - -To generate content in a checkout for development and testing, change to the -`src` directory and run `bundle exec jekyll build` (to merely generate content) -or `bundle exec jekyll serve` (to generate and test via a local server). -To generate content on the production site, run -`JEKYLL_ENV=production bundle exec jekyll build` (which will enable such things -as asset digests). - -If `src/Gemfile` changes, re-run `bundle install` afterward. +## Building the site -### Updating Ruby gems +The hugo command must be run from the `src` directory. -Display Ruby dependencies, with their current version: +To generate a live preview in a checkout, run `hugo server`. To generate final +content on disk (whether in a checkout or on the production site), run `hugo`. - bundle list +Hugo will put the generated files in the `html` directory (which is excluded +from version control). Existing files there will be overwritten but not +deleted, so anything removed from the source has to be removed from a +previously generated `html` directory manually. For testing a checkout, it's +fine to simply erase `html` entirely before regenerating, but on the live +server, there are non-version-controlled files that must be kept (including +`html/images` and much of `html/projects/pacemaker`). -Show available updates: +If you want to test the PHP pages in the site, `hugo server` will not be +sufficient. You'll have to install a PHP-enabled local webserver (such as +Apache or Nginx) and use your checkout's `html` directory as the document root. - bundle outdated +## Using Hugo -Show where a gem comes from: +ClusterLabs uses Hugo's Congo theme, as a Go module. When you create a +checkout, run `hugo mod get` once. To update the site to the latest version of +the theme, run `hugo mod get -u`. - bundle info $GEM +Hugo does not follow symbolic links. -Update one gem and dependencies (will update Gemfile.lock, which must be committed): +Configuration files and front matter are in TOML format. - bundle update $GEM +The source is in Goldmark (CommonMark and GitHub Flavored Markdown with +extensions). -If a gem can't update due to not supporting the local Ruby version or -installable versions of other gems, or you need to raise a dependency version -to fix a security issue, you can edit Gemfile to add a version restriction -like: +## Source directory layout - gem "gem-name", "2.7.0" -> exact version - gem "gem-name", ">= 2.0.2, < 5.0" -> version within range - gem "gem-name.rb", "~> 0.6.0" -> last number may increase +* `archetypes/default.md`: This initializes the front matter of pages created + with the `hugo new content` command. -## Images, stylesheets and JavaScripts +* `config/_default/`: Configuration for Hugo and Congo. -We use the jekyll-assets plugin to manage "assets" such as images, stylesheets, -and JavaScript. One advantage is that digest hashes are automatically added to -the generated filenames when in production mode. This allows "cache busting" -when an asset changes, so we can use long cache times on the server end. -Another advantage is that sources are minified when in production mode. +* `content/`: Page source lives beneath here (as `.md` files). URL paths will + mirror this directory hierarchy. The home page is `content/_index.md`; each + other page should have its own subdirectory. -How CSS is managed: -* CSS is generated from SASS sources -* `src/_assets/stylesheets/main.scss` is just a list of imports -* all other *.scss files beneath `src/_assets/stylesheets` contain the SASS to - be imported by `main.scss` -* jekyll will generate `html/assets/main.css` (or `main-_HASH_.css`) as the - combination of all imports -* web pages can reference the stylesheet via `{% stylesheet main %}` + If a page directory has subdirectories, the page source should be `_index.md` + and will get an automatic listing of all subpages unless `layout = "single"` + is added to its front matter. With no subdirectories, the name should be + `index.md`. -JavaScript is managed similarly: -* `src/_assets/javascripts/main.js` is just a list of requires -* `src/_assets/javascripts/*.js` contain the JavaScript to be required by - `main.js` -* jekyll will copy these to `html/assets` -* jekyll will generate `html/assets/main.js` (or `main-_HASH_.js`) as the - combination of all JavaScript -* web pages can reference the script via `{% javascript main %}` + If a page directory contains an image whose name starts with `cover`, it will + be used as a splash image and should be 1320 pixels wide. You can also + provide a 160-pixel-wide by 120-pixel-high thumbnail named starting with + `thumb` which will be used in automatically generated page listings. -How images are managed: -* `src/_assets/images/*` are our images -* web pages can add an img tag using `{% image _NAME_._EXT_ %}` -* web pages can reference a path to an image (e.g. in a link's href) - using `{% asset_path _NAME_._EXT_ %}` -* CSS can reference a path to an image using - `url(asset_path("_NAME_._EXT_"))` -* only images that are referenced in one of these ways will be deployed - to the website, so `_assets` may contain image sources such as SVGs - that do not need to be deployed -* Tip: http://compresspng.com/ can often compress PNGs extremely well +* `layouts/`: Page templates. `layouts/_defaults/` contains layouts for PHP + pages (copied from the theme's layouts for HTML pages). `layouts/partials/` + contains snippets that can be included by pages or other layouts (these also + were copied from the theme, then customized). -## Site icons +* `resources/`: Automatically maintained cache -Site icons used to be easy, right? `favicon.ico` seems downright traditional. - -Unfortunately, site icons have become an ugly mess of incompatible proprietary -extensions. Even `favicon.ico` is just a proprietary extension (and obsolete, as -well). Now, there are also `apple-touch-icon[-NxN][-precomposed].png` (with at -least _12_ different sizes!), `browserconfig.xml`, `manifest.json`, -link tags with `rel=(icon|shortcut icon|apple-touch-icon-*)`, and Windows Phone -tile overlay divs. - -If you want to be discouraged and confused, see: - -* http://stackoverflow.com/questions/23849377/html-5-favicon-support - -* https://mathiasbynens.be/notes/touch-icons - -* https://css-tricks.com/favicon-quiz/ - -There is no way to handle the mess universally. In particular, some devices do -much better when different icon sizes are provided and listed in the HTML as -link tags, and will pick the size needed, whereas other devices will download -every single icon listed in those link tags, crippling page performance -- not -to mention the overhead that listing two dozen icon sizes adds to the HTML. - -We've chosen a simple approach: provide two site icons, a 16x16 `favicon.ico`, -and a 180x180 `apple-touch-icon.png`, both listed in link tags in the HTML. -Most browsers/devices will choose one of these and scale it as needed. +* `static/`: Files that will be copied as-is rather than generated (images, + CSS, etc.) and can be used on any page. Like `content/`, the URL paths will + mirror the directory hierarchy. ## Web server configuration The clusterlabs.org web server is configured to redirect certain old URLs to -their new locations, so be careful about renaming files. +their new locations, so be careful about renaming files. A helpful feature is +the ability to put `aliases = ["/some/url/path", ...]` in a page's front matter +with URL paths that will be redirected to the page's main URL. + +## For more information + +* Hugo: https://gohugo.io/documentation/ +* Goldmark: https://gohugo.io/content-management/formats/#markdown +* Congo theme: https://jpanther.github.io/congo/docs/ diff --git a/lists.clusterlabs.org/robots.txt b/lists.clusterlabs.org/robots.txt deleted file mode 100644 index 7bf4ee7..0000000 --- a/lists.clusterlabs.org/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Disallow: /mailman/admin diff --git a/maintenance/index.html b/maintenance/index.html deleted file mode 100644 index 0d89247..0000000 --- a/maintenance/index.html +++ /dev/null @@ -1,9 +0,0 @@ - -
-This site is under maintenance. Please try again later.
- - diff --git a/shared/apple-touch-icon.png b/shared/apple-touch-icon.png index 0c30678..4e3b586 100644 Binary files a/shared/apple-touch-icon.png and b/shared/apple-touch-icon.png differ diff --git a/shared/favicon.ico b/shared/favicon.ico index f06f01a..f2f71e8 100644 Binary files a/shared/favicon.ico and b/shared/favicon.ico differ diff --git a/src/404.html b/src/404.html deleted file mode 100644 index 77170db..0000000 --- a/src/404.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: default -title: Not Found ---- - - diff --git a/src/Gemfile b/src/Gemfile deleted file mode 100644 index 03b1e3d..0000000 --- a/src/Gemfile +++ /dev/null @@ -1,38 +0,0 @@ -source "https://rubygems.org" -ruby RUBY_VERSION - -# Hello! This is where you manage which Jekyll version is used to run. -# When you want to use a different version, change it below, save the -# file and run `bundle install`. Run Jekyll with `bundle exec`, like so: -# -# bundle exec jekyll serve -# -# This will help ensure the proper Jekyll version is running. -# Happy Jekylling! - -gem "jekyll" - -# This is the default theme for new Jekyll sites. You may change this to anything you like. -gem "minima", "~> 2.0" - -# not sure why jekyll doesn't generate this dependency automatically -gem "kramdown-parser-gfm" - -# Raise rack dependency version to avoid security issues -gem "rack", ">= 2.2.3.1" - -# Needed by jekyll-assets -group :jekyll_assets_deps do - gem "nokogiri" - gem "racc" -end - -# If you want to use GitHub Pages, remove the "gem "jekyll"" above and -# uncomment the line below. To upgrade, run `bundle update github-pages`. -# gem "github-pages", group: :jekyll_plugins - -# If you have any plugins, put them here! -group :jekyll_plugins do - gem "jekyll-assets", "~> 3.0" - gem "font-awesome-sass" -end diff --git a/src/Gemfile.lock b/src/Gemfile.lock deleted file mode 100644 index c10a33f..0000000 --- a/src/Gemfile.lock +++ /dev/null @@ -1,126 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - activesupport (5.2.8.1) - concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (>= 0.7, < 2) - minitest (~> 5.1) - tzinfo (~> 1.1) - addressable (2.8.6) - public_suffix (>= 2.0.2, < 6.0) - colorator (1.1.0) - concurrent-ruby (1.3.3) - em-websocket (0.5.3) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0) - eventmachine (1.2.7) - execjs (2.9.1) - extras (0.3.0) - forwardable-extended (~> 2.5) - fastimage (2.3.1) - ffi (1.17.0) - font-awesome-sass (6.5.2) - sassc (~> 2.0) - forwardable-extended (2.6.0) - http_parser.rb (0.8.0) - i18n (1.14.5) - concurrent-ruby (~> 1.0) - jekyll (3.9.5) - addressable (~> 2.4) - colorator (~> 1.0) - em-websocket (~> 0.5) - i18n (>= 0.7, < 2) - jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 2.0) - kramdown (>= 1.17, < 3) - liquid (~> 4.0) - mercenary (~> 0.3.3) - pathutil (~> 0.9) - rouge (>= 1.7, < 4) - safe_yaml (~> 1.0) - jekyll-assets (3.0.12) - activesupport (~> 5.0) - execjs (~> 2.7) - extras (~> 0.2) - fastimage (~> 2.0, >= 1.8) - jekyll (>= 3.5, < 4.0) - jekyll-sanity (~> 1.2) - liquid-tag-parser (~> 1.0) - nokogiri (~> 1.8) - pathutil (~> 0.16) - sprockets (>= 3.3, < 4.1.beta) - jekyll-feed (0.17.0) - jekyll (>= 3.7, < 5.0) - jekyll-sanity (1.6.0) - jekyll (>= 3.1, < 5.0) - pathutil (~> 0.16) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) - jekyll-seo-tag (2.8.0) - jekyll (>= 3.8, < 5.0) - jekyll-watch (2.2.1) - listen (~> 3.0) - kramdown (2.4.0) - rexml - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - liquid (4.0.4) - liquid-tag-parser (1.9.0) - extras (~> 0.3) - liquid (>= 3.0, < 5.0) - listen (3.9.0) - rb-fsevent (~> 0.10, >= 0.10.3) - rb-inotify (~> 0.9, >= 0.9.10) - mercenary (0.3.6) - minima (2.5.1) - jekyll (>= 3.5, < 5.0) - jekyll-feed (~> 0.9) - jekyll-seo-tag (~> 2.1) - minitest (5.23.1) - nokogiri (1.16.5-x86_64-linux) - racc (~> 1.4) - pathutil (0.16.2) - forwardable-extended (~> 2.6) - public_suffix (5.0.5) - racc (1.8.0) - rack (2.2.9) - rb-fsevent (0.11.2) - rb-inotify (0.11.1) - ffi (~> 1.0) - rexml (3.2.9) - strscan - rouge (3.30.0) - safe_yaml (1.0.5) - sass (3.7.4) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - sassc (2.4.0) - ffi (~> 1.9) - sprockets (4.0.3) - concurrent-ruby (~> 1.0) - rack (> 1, < 3) - strscan (3.1.0) - thread_safe (0.3.6) - tzinfo (1.2.11) - thread_safe (~> 0.1) - -PLATFORMS - x86_64-linux - -DEPENDENCIES - font-awesome-sass - jekyll - jekyll-assets (~> 3.0) - kramdown-parser-gfm - minima (~> 2.0) - nokogiri - racc - rack (>= 2.2.3.1) - -RUBY VERSION - ruby 3.0.4p208 - -BUNDLED WITH - 2.2.33 diff --git a/src/LICENSE.theme b/src/LICENSE.theme deleted file mode 100644 index d447b56..0000000 --- a/src/LICENSE.theme +++ /dev/null @@ -1,63 +0,0 @@ -Creative Commons Attribution 3.0 Unported -http://creativecommons.org/licenses/by/3.0/ - -License - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - -1. Definitions - - 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. - 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. - 3. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. - 4. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. - 5. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. - 6. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. - 7. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. - 8. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. - 9. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. - -2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. - -3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: - - 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; - 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; - 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and, - 4. to Distribute and Publicly Perform Adaptations. - 5. - - For the avoidance of doubt: - 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; - 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, - 3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. - -The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. - -4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: - - 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested. - 2. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. - 3. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. - -5. Representations, Warranties and Disclaimer - -UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. Termination - - 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. - 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. - -8. Miscellaneous - - 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. - 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. - 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. - 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. - 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. - 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. diff --git a/src/_assets/images/Deploy-small.png b/src/_assets/images/Deploy-small.png deleted file mode 100644 index 8c01767..0000000 Binary files a/src/_assets/images/Deploy-small.png and /dev/null differ diff --git a/src/_assets/images/Deploy.png b/src/_assets/images/Deploy.png deleted file mode 100644 index aa3cd83..0000000 Binary files a/src/_assets/images/Deploy.png and /dev/null differ diff --git a/src/_assets/images/GetPacemakerBanner.png b/src/_assets/images/GetPacemakerBanner.png deleted file mode 100644 index 13ee8fc..0000000 Binary files a/src/_assets/images/GetPacemakerBanner.png and /dev/null differ diff --git a/src/_assets/images/GetPacemakerBanner.svg b/src/_assets/images/GetPacemakerBanner.svg deleted file mode 100644 index 995c934..0000000 --- a/src/_assets/images/GetPacemakerBanner.svg +++ /dev/null @@ -1,2346 +0,0 @@ - - - - diff --git a/src/_assets/images/Monitor-small.png b/src/_assets/images/Monitor-small.png deleted file mode 100644 index 504b0bd..0000000 Binary files a/src/_assets/images/Monitor-small.png and /dev/null differ diff --git a/src/_assets/images/Monitor.png b/src/_assets/images/Monitor.png deleted file mode 100644 index 6e02aa0..0000000 Binary files a/src/_assets/images/Monitor.png and /dev/null differ diff --git a/src/_assets/images/Pacemaker.svg b/src/_assets/images/Pacemaker.svg deleted file mode 100644 index bf3f0bb..0000000 --- a/src/_assets/images/Pacemaker.svg +++ /dev/null @@ -1,726 +0,0 @@ - - - - diff --git a/src/_assets/images/Recover-small.png b/src/_assets/images/Recover-small.png deleted file mode 100644 index 31f52e6..0000000 Binary files a/src/_assets/images/Recover-small.png and /dev/null differ diff --git a/src/_assets/images/Recover.png b/src/_assets/images/Recover.png deleted file mode 100644 index 32eeb07..0000000 Binary files a/src/_assets/images/Recover.png and /dev/null differ diff --git a/src/_assets/images/clusterlabs.svg b/src/_assets/images/clusterlabs.svg deleted file mode 100644 index e902769..0000000 --- a/src/_assets/images/clusterlabs.svg +++ /dev/null @@ -1,140 +0,0 @@ - - - - diff --git a/src/_assets/images/clusterlabs2.svg b/src/_assets/images/clusterlabs2.svg deleted file mode 100644 index d56a751..0000000 --- a/src/_assets/images/clusterlabs2.svg +++ /dev/null @@ -1,100 +0,0 @@ - - - - diff --git a/src/_assets/images/clusterlabs3.svg b/src/_assets/images/clusterlabs3.svg deleted file mode 100644 index 49dd259..0000000 --- a/src/_assets/images/clusterlabs3.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - diff --git a/src/_assets/images/gradient.png b/src/_assets/images/gradient.png deleted file mode 100644 index 5a8db24..0000000 Binary files a/src/_assets/images/gradient.png and /dev/null differ diff --git a/src/_assets/images/labs-wide.svg b/src/_assets/images/labs-wide.svg deleted file mode 100644 index 78bf09c..0000000 --- a/src/_assets/images/labs-wide.svg +++ /dev/null @@ -1,141 +0,0 @@ - - - - diff --git a/src/_assets/images/pacemaker-notext.svg b/src/_assets/images/pacemaker-notext.svg deleted file mode 100644 index a450e9f..0000000 --- a/src/_assets/images/pacemaker-notext.svg +++ /dev/null @@ -1,248 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/_assets/images/pacemaker.png b/src/_assets/images/pacemaker.png deleted file mode 100644 index 6622d3f..0000000 Binary files a/src/_assets/images/pacemaker.png and /dev/null differ diff --git a/src/_assets/images/stars.jpg b/src/_assets/images/stars.jpg deleted file mode 100644 index 06c6e91..0000000 Binary files a/src/_assets/images/stars.jpg and /dev/null differ diff --git a/src/_assets/images/summit-2017.jpg b/src/_assets/images/summit-2017.jpg deleted file mode 100644 index 8b7dfaa..0000000 Binary files a/src/_assets/images/summit-2017.jpg and /dev/null differ diff --git a/src/_assets/javascripts/html5up.js b/src/_assets/javascripts/html5up.js deleted file mode 100644 index 09a6b14..0000000 --- a/src/_assets/javascripts/html5up.js +++ /dev/null @@ -1,285 +0,0 @@ -/* - Editorial by HTML5 UP - html5up.net | @ajlkn - Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) -*/ - -(function($) { - - skel.breakpoints({ - xlarge: '(max-width: 1680px)', - large: '(max-width: 1280px)', - medium: '(max-width: 980px)', - small: '(max-width: 736px)', - xsmall: '(max-width: 480px)', - 'xlarge-to-max': '(min-width: 1681px)', - 'small-to-xlarge': '(min-width: 481px) and (max-width: 1680px)' - }); - - $(function() { - - var $window = $(window), - $head = $('head'), - $body = $('body'); - - // Disable animations/transitions ... - - // ... until the page has loaded. - $body.addClass('is-loading'); - - $window.on('load', function() { - setTimeout(function() { - $body.removeClass('is-loading'); - }, 100); - }); - - // ... when resizing. - var resizeTimeout; - - $window.on('resize', function() { - - // Mark as resizing. - $body.addClass('is-resizing'); - - // Unmark after delay. - clearTimeout(resizeTimeout); - - resizeTimeout = setTimeout(function() { - $body.removeClass('is-resizing'); - }, 100); - - }); - - // Fix: Placeholder polyfill. - $('form').placeholder(); - - // Prioritize "important" elements on medium. - skel.on('+medium -medium', function() { - $.prioritize( - '.important\\28 medium\\29', - skel.breakpoint('medium').active - ); - }); - - // Fixes. - - // Object fit images. - if (!skel.canUse('object-fit') - || skel.vars.browser == 'safari') - $('.image.object').each(function() { - - var $this = $(this), - $img = $this.children('img'); - - // Hide original image. - $img.css('opacity', '0'); - - // Set background. - $this - .css('background-image', 'url("' + $img.attr('src') + '")') - .css('background-size', $img.css('object-fit') ? $img.css('object-fit') : 'cover') - .css('background-position', $img.css('object-position') ? $img.css('object-position') : 'center'); - - }); - - // Sidebar. - var $sidebar = $('#sidebar'), - $sidebar_inner = $sidebar.children('.inner'); - - // Inactive by default on <= large. - skel - .on('+large', function() { - $sidebar.addClass('inactive'); - }) - .on('-large !large', function() { - $sidebar.removeClass('inactive'); - }); - - // Hack: Workaround for Chrome/Android scrollbar position bug. - if (skel.vars.os == 'android' - && skel.vars.browser == 'chrome') - $('') - .appendTo($head); - - // Toggle. - if (skel.vars.IEVersion > 9) { - - $('Toggle') - .appendTo($sidebar) - .on('click', function(event) { - - // Prevent default. - event.preventDefault(); - event.stopPropagation(); - - // Toggle. - $sidebar.toggleClass('inactive'); - - }); - - } - - // Events. - - // Link clicks. - $sidebar.on('click', 'a', function(event) { - - // >large? Bail. - if (!skel.breakpoint('large').active) - return; - - // Vars. - var $a = $(this), - href = $a.attr('href'), - target = $a.attr('target'); - - // Prevent default. - event.preventDefault(); - event.stopPropagation(); - - // Check URL. - if (!href || href == '#' || href == '') - return; - - // Hide sidebar. - $sidebar.addClass('inactive'); - - // Redirect to href. - setTimeout(function() { - - if (target == '_blank') - window.open(href); - else - window.location.href = href; - - }, 500); - - }); - - // Prevent certain events inside the panel from bubbling. - $sidebar.on('click touchend touchstart touchmove', function(event) { - - // >large? Bail. - if (!skel.breakpoint('large').active) - return; - - // Prevent propagation. - event.stopPropagation(); - - }); - - // Hide panel on body click/tap. - $body.on('click touchend', function(event) { - - // >large? Bail. - if (!skel.breakpoint('large').active) - return; - - // Deactivate. - $sidebar.addClass('inactive'); - - }); - - // Scroll lock. - // Note: If you do anything to change the height of the sidebar's content, be sure to - // trigger 'resize.sidebar-lock' on $window so stuff doesn't get out of sync. - - $window.on('load.sidebar-lock', function() { - - var sh, wh, st; - - // Reset scroll position to 0 if it's 1. - if ($window.scrollTop() == 1) - $window.scrollTop(0); - - $window - .on('scroll.sidebar-lock', function() { - - var x, y; - - // IE<10? Bail. - if (skel.vars.IEVersion < 10) - return; - - // <=large? Bail. - if (skel.breakpoint('large').active) { - - $sidebar_inner - .data('locked', 0) - .css('position', '') - .css('top', ''); - - return; - - } - - // Calculate positions. - x = Math.max(sh - wh, 0); - y = Math.max(0, $window.scrollTop() - x); - - // Lock/unlock. - if ($sidebar_inner.data('locked') == 1) { - - if (y <= 0) - $sidebar_inner - .data('locked', 0) - .css('position', '') - .css('top', ''); - else - $sidebar_inner - .css('top', -1 * x); - - } - else { - - if (y > 0) - $sidebar_inner - .data('locked', 1) - .css('position', 'fixed') - .css('top', -1 * x); - - } - - }) - .on('resize.sidebar-lock', function() { - - // Calculate heights. - wh = $window.height(); - sh = $sidebar_inner.outerHeight() + 30; - - // Trigger scroll. - $window.trigger('scroll.sidebar-lock'); - - }) - .trigger('resize.sidebar-lock'); - - }); - - // Menu. - var $menu = $('#menu'), - $menu_openers = $menu.children('ul').find('.opener'); - - // Openers. - $menu_openers.each(function() { - - var $this = $(this); - - $this.on('click', function(event) { - - // Prevent default. - event.preventDefault(); - - // Toggle. - $menu_openers.not($this).removeClass('active'); - $this.toggleClass('active'); - - // Trigger resize (sidebar lock). - $window.triggerHandler('resize.sidebar-lock'); - - }); - - }); - - }); - -})(jQuery); diff --git a/src/_assets/javascripts/ie/html5shiv.js b/src/_assets/javascripts/ie/html5shiv.js deleted file mode 100644 index dcf351c..0000000 --- a/src/_assets/javascripts/ie/html5shiv.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - HTML5 Shiv v3.6.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed -*/ -(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); -a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; -c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="t |
- This document has been retired. See the "Access Control Lists" chapter of - "Pacemaker Explained" in the Pacemaker - documentation set instead. -
-- Most of the documentation listed here was generated from the Pacemaker - sources. -
- -- If you're new to Pacemaker or clustering in general, the best place to - start is Clusters from Scratch, which walks you step-by-step through - the installation and configuration of a high-availability cluster with - Pacemaker. It even makes common configuration mistakes so that it can - demonstrate how to fix them. -
- -- On the other hand, if you're looking for an exhaustive reference of all - of Pacemaker's options and features, try Pacemaker Explained. It's - dry, but should have the answers you're looking for. -
- -- There is also a project wiki - with examples, how-to guides, and other information that doesn't make it - into the manuals. -
- -man(1) pages | -[html] | -
Configuring Fencing with crmsh | -[html] | -
$desc
\n"; - } - $build = file_get_contents("$base/build-$version.txt"); - if (!empty($build)) { - echo "$build
\n"; - } - } - - function sphinx_docs_for_version($base, $version) { - echo "" . str_replace("_", " ", $book) . " | \n"; - echo ""; - - foreach ($formats as $format) { - $format_name = basename($format); - if (strncmp($format_name, "build-", 6) !== 0) { - if ($format_name == "pdf") { - $link = "$format/$book.pdf"; - } else { - $link = "$format/"; - } - echo " [" . $format_name . "]"; - } - } - echo " | \n"; - echo "
'.str_replace("_", " ", $b)." ($lang) | "; - - echo ''; - foreach (glob("$base/$lang/Pacemaker/$version/epub/$b/*.epub") as $filename) { - echo " [epub]"; - } - foreach (glob("$base/$lang/Pacemaker/$version/pdf/$b/*.pdf") as $filename) { - echo " [pdf]"; - } - foreach (glob("$base/$lang/Pacemaker/$version/html/$b/index.html") as $filename) { - echo " [html]"; - } - foreach (glob("$base/$lang/Pacemaker/$version/html-single/$b/index.html") as $filename) { - echo " [html-single]"; - } - foreach (glob("$base/$lang/Pacemaker/$version/txt/$b/*.txt") as $filename) { - echo " [txt]"; - } - echo " |
- "The definitive open-source high-availability stack for the Linux - platform builds upon the Pacemaker cluster resource manager." - -- LINUX Journal, - "Ahead - of the Pack: the Pacemaker High-Availability Stack" -- - -
- Pacemaker has been around since - 2004 - and is a collaborative effort by the ClusterLabs community, including - full-time developers with - Red Hat - and SuSE. -
-- Pacemaker ships with most modern Linux distributions and has been - deployed in many critical environments including Deutsche - Flugsicherung GmbH - (DFS) - which uses Pacemaker to ensure - its air traffic - control systems are always available. -
-- Andrew Beekhof was - Pacemaker's original author and long-time project lead. The current - project lead is Ken Gaillot. -
-- Pacemaker ships with a set of command-line tools to assist you - in managing your cluster. Their manual pages are all linked - above. Here are more details about the most important tools: -
-The crm_mon command - allows you to monitor your cluster's status and - configuration. Its output includes the number of nodes, - uname, uuid, status, the resources configured in your - cluster, and the current status of each. The output of - crm_mon - can be displayed at the console or printed into an XML or HTML - file. When provided with a cluster configuration file - without the status section, - crm_mon - creates an overview of nodes and resources as specified - in the file. See crm_mon(8) - for a detailed introduction to this tool's usage and - command syntax. -
-The cibadmin command is - the low-level administrative command for manipulating - the Pacemaker CIB. It can be used to dump all or part of - the CIB, update all or part of it, modify all or part of - it, delete the entire CIB, or perform miscellaneous CIB - administrative operations. See - cibadmin(8) for a - detailed introduction - to this tool's usage and command syntax. -
-The crm_diff command - assists you in creating and applying XML patches. This - can be useful for visualizing the changes between two - versions of the cluster configuration or saving changes - so they can be applied at a later time - using - cibadmin(8). - See - crm_diff(8) for a - detailed introduction to this tool's usage and command - syntax. -
-The crm_verify command - checks the configuration database (CIB) for consistency - and other problems. It can check a file containing the - configuration or connect to a running cluster. It - reports two classes of problems. Errors must be fixed - before Pacemaker can work properly while warning - resolution is up to the administrator. - crm_verify assists in - creating new or modified configurations. You can take a - local copy of a CIB in the running cluster, edit it, - validate it - using crm_verify , then - put the new configuration into effect using - cibadmin - . See - crm_verify(8) - for a detailed introduction to this tool's usage and - command syntax. -
-The crm_attribute - command lets you query and manipulate node attributes - and cluster configuration options that are used in the - CIB. See crm_attribute(8) - for a detailed introduction to this tool's usage and - command syntax.
-The crm_resource - command performs various resource-related actions on the - cluster. It lets you modify the definition of configured - resources, start and stop resources, or delete and - migrate resources between - nodes. See - crm_resource(8) - for a detailed introduction to this tool's usage and - command syntax.
-The crm_failcount - command queries the number of failures per resource on a - given node. This tool can also be used to reset the - failcount, allowing the resource to again run on nodes - where it had failed too often. - See - crm_failcount(8) - for a detailed introduction to this tool's usage and - command syntax.
-The crm_standby command - can manipulate a node's standby attribute. Any node in - standby mode is no longer eligible to host resources and - any resources that are there must be moved. Standby mode - can be useful for performing maintenance tasks, such as - kernel updates. Remove the standby attribute from the - node as it should become a fully active member of the - cluster again. See - crm_standby(8) - for a detailed introduction to this tool's usage and - command syntax. -
-- -
- - - | -- - - | -- - - | -
- - - -
- -- Pacemaker ships as part of the Red Hat - High Availability Add-on. - The easiest way to try it out on RHEL is to install it from the - Scientific Linux - or CentOS repositories. -
-- If you are already running CentOS or Scientific Linux, you can skip this step. Otherwise, to teach the machine where to find the CentOS packages, run: -
-
-[ALL] # cat <
- Next we use yum to install pacemaker and some other - necessary packages we will need: -
--[ALL] # yum install pacemaker cman pcs ccs resource-agents -
- -- The supported stack on RHEL6 is based on CMAN, so thats - what Pacemaker uses too. -
- -- We now create a CMAN cluster and populate it with some - nodes. Note that the name cannot exceed 15 characters - (we'll use 'pacemaker1'). -
--[ONE] # ccs -f /etc/cluster/cluster.conf --createcluster pacemaker1 - -[ONE] # ccs -f /etc/cluster/cluster.conf --addnode node1 -[ONE] # ccs -f /etc/cluster/cluster.conf --addnode node2 -
- -- Next we need to teach CMAN how to send it's fencing - requests to Pacemaker. We do this regardless of whether - or not fencing is enabled within Pacemaker. -
--[ONE] # ccs -f /etc/cluster/cluster.conf --addfencedev pcmk agent=fence_pcmk - -[ONE] # ccs -f /etc/cluster/cluster.conf --addmethod pcmk-redirect node1 -[ONE] # ccs -f /etc/cluster/cluster.conf --addmethod pcmk-redirect node2 - -[ONE] # ccs -f /etc/cluster/cluster.conf --addfenceinst pcmk node1 pcmk-redirect port=node1 -[ONE] # ccs -f /etc/cluster/cluster.conf --addfenceinst pcmk node2 pcmk-redirect port=node2 -
-- Now copy /etc/cluster/cluster.conf to all - the other nodes that will be part of the cluster. -
- -- CMAN was originally written for rgmanager and assumes the - cluster should not start until the node has - quorum, - so before we try to start the cluster, we need to disable - this behavior: -
--[ALL] # echo "CMAN_QUORUM_TIMEOUT=0" >> /etc/sysconfig/cman -
-- Now, on each machine, run: -
--[ALL] # service cman start -[ALL] # service pacemaker start -
- -- The original cluster shell (crmsh) is no - longer available on RHEL. To help people make the - transition there is - a - quick reference guide for those wanting to know what - the pcs equivalent is for various crmsh commands. -
- -- With so many devices and possible topologies, it is nearly - impossible to include Fencing in a document like this. - For now we will disable it. -
--[ONE] # pcs property set stonith-enabled=false -
-- One of the most common ways to deploy Pacemaker is in a - 2-node configuration. However quorum as a concept makes - no sense in this scenario (because you only have it when - more than half the nodes are available), so we'll disable - it too. -
--[ONE] # pcs property set no-quorum-policy=ignore -
-- For demonstration purposes, we will force the cluster to - move services after a single failure: -
--[ONE] # pcs resource defaults migration-threshold=1 -
- -- Lets add a cluster service, we'll choose one doesn't - require any configuration and works everywhere to make - things easy. Here's the command: -
--[ONE] # pcs resource create my_first_svc Dummy op monitor interval=120s -
-- "my_first_svc" is the name the service - will be known as. -
-- "ocf:pacemaker:Dummy" tells Pacemaker - which script to use - (Dummy - - an agent that's useful as a template and for guides like - this one), which namespace it is in (pacemaker) and what - standard it conforms to (OCF). -
-- "op monitor interval=120s" tells Pacemaker to - check the health of this service every 2 minutes by - calling the agent's monitor action. -
-- You should now be able to see the service running using: -
--[ONE] # pcs status -
-- or -
--[ONE] # crm_mon -1 -
- -- We can simulate an error by telling the service to stop - directly (without telling the cluster): -
--[ONE] # crm_resource --resource my_first_svc --force-stop -
-- If you now run crm_mon in interactive - mode (the default), you should see (within the monitor - interval - 2 minutes) the cluster notice - that my_first_svc failed and move it to - another node. -
--
- Pacemaker ships as part of the Red Hat - High Availability Add-on. - The easiest way to try it out on RHEL is to install it from the - Scientific Linux - or CentOS repositories. -
-- If you are already running CentOS or Scientific Linux, you can skip this step. Otherwise, to teach the machine where to find the CentOS packages, run: -
-
-[ALL] # cat <
- Next we use yum to install pacemaker and some other - necessary packages we will need: -
--[ALL] # yum install pacemaker pcs resource-agents -
- -- The supported stack on RHEL7 is based on Corosync 2, so thats - what Pacemaker uses too. -
- -- First make sure that pcs daemon is running on every node: -
-- [ALL] # systemctl start pcsd.service - [ALL] # systemctl enable pcsd.service -
- -- Then we set up the authentication needed for pcs. -
--[ALL] # echo CHANGEME | passwd --stdin hacluster -[ONE] # pcs cluster auth node1 node2 -u hacluster -p CHANGEME --force -
- -- We now create a cluster and populate it with some nodes. - Note that the name cannot exceed 15 characters (we'll use - 'pacemaker1'). -
--[ONE] # pcs cluster setup --force --name pacemaker1 node1 node2 -
- --[ONE] # pcs cluster start --all -
- -- With so many devices and possible topologies, it is nearly - impossible to include Fencing in a document like this. - For now we will disable it. -
--[ONE] # pcs property set stonith-enabled=false -
-- One of the most common ways to deploy Pacemaker is in a - 2-node configuration. However quorum as a concept makes - no sense in this scenario (because you only have it when - more than half the nodes are available), so we'll disable - it too. -
--[ONE] # pcs property set no-quorum-policy=ignore -
-- For demonstration purposes, we will force the cluster to - move services after a single failure: -
--[ONE] # pcs resource defaults migration-threshold=1 -
- -- Lets add a cluster service, we'll choose one doesn't - require any configuration and works everywhere to make - things easy. Here's the command: -
--[ONE] # pcs resource create my_first_svc Dummy op monitor interval=120s -
-- "my_first_svc" is the name the service - will be known as. -
-- "ocf:pacemaker:Dummy" tells Pacemaker - which script to use - (Dummy - - an agent that's useful as a template and for guides like - this one), which namespace it is in (pacemaker) and what - standard it conforms to (OCF). -
-- "op monitor interval=120s" tells Pacemaker to - check the health of this service every 2 minutes by - calling the agent's monitor action. -
-- You should now be able to see the service running using: -
--[ONE] # pcs status -
-- or -
--[ONE] # crm_mon -1 -
- -- We can simulate an error by telling the service to stop - directly (without telling the cluster): -
--[ONE] # crm_resource --resource my_first_svc --force-stop -
-- If you now run crm_mon in interactive - mode (the default), you should see (within the monitor - interval of 2 minutes) the cluster notice - that my_first_svc failed and move it to - another node. -
--
- Pacemaker ships as part of the - SUSE High - Availability Extension. To install, follow the provided - documentation. It is also available in openSUSE Leap and openSUSE - Tumbleweed (for openSUSE, see the SLES 12 Quickstart guide. -
- -- The supported stack on SLES11 is based on Corosync/OpenAIS. -
- -- To get started, install the cluster stack on all nodes. -
--[ALL] # zypper install ha-cluster-bootstrap -
- -- First we initialize the cluster on the first machine (node1): -
--[ONE] # ha-cluster-init -
- -- Now we can join the cluster from the second machine (node2): -
--[ONE] # ha-cluster-join -c node1 -
- -- These two steps create and start a basic cluster together with the - HAWK web interface. If given - additional arguments, ha-cluster-init can also configure - STONITH and OCFS2 as part of initial configuration. -
-- For more details on ha-cluster-init, see the output of - ha-cluster-init --help. -
- -- For demonstration purposes, we will force the cluster to - move services after a single failure: -
--[ONE] # crm configure property migration-threshold=1 -
- -- Lets add a cluster service, we'll choose one doesn't - require any configuration and works everywhere to make - things easy. Here's the command: -
--[ONE] # crm configure primitive my_first_svc ocf:pacemaker:Dummy op monitor interval=120s -
-- "my_first_svc" is the name the service - will be known as. -
-- "ocf:pacemaker:Dummy" tells Pacemaker - which script to use - (Dummy - - an agent that's useful as a template and for guides like - this one), which namespace it is in (pacemaker) and what - standard it conforms to - (OCF). -
-- "op monitor interval=120s" tells Pacemaker to - check the health of this service every 2 minutes by - calling the agent's monitor action. -
-- You should now be able to see the service running using: -
--[ONE] # crm status -
- -- We can simulate an error by telling the service stop - directly (without telling the cluster): -
--[ONE] # crm_resource --resource my_first_svc --force-stop -
-- If you now run crm_mon in interactive - mode (the default), you should see (within the monitor - interval - 2 minutes) the cluster notice - that my_first_svc failed and move it to - another node. -
-- You can also watch the transition from the HAWK dashboard, by going - to https://node1:7630. -
--
- Pacemaker ships as part of the - SUSE High - Availability Extension. To install, follow the provided - documentation. It is also available in openSUSE Leap and openSUSE - Tumbleweed. -
- -- The supported stack on SLES12 is based on Corosync 2.x. -
- -- To get started, install the cluster stack on all nodes. -
--[ALL] # zypper install ha-cluster-bootstrap -
- -- First we initialize the cluster on the first machine (node1): -
--[ONE] # ha-cluster-init -
- -- Now we can join the cluster from the second machine (node2): -
--[TWO] # ha-cluster-join -c node1 -
- -- These two steps create and start a basic cluster together with the - HAWK web interface. If given - additional arguments, ha-cluster-init can also configure - STONITH, OCFS2 and an administration IP address as part of initial - configuration. It is also possible to choose whether to use multicast - or unicast for corosync communication. -
-- For more details on ha-cluster-init, see the output of - ha-cluster-init --help. -
- -- For demonstration purposes, we will force the cluster to - move services after a single failure: -
--[ONE] # crm configure property migration-threshold=1 -
- -- Lets add a cluster service, we'll choose one doesn't - require any configuration and works everywhere to make - things easy. Here's the command: -
--[ONE] # crm configure primitive my_first_svc Dummy op monitor interval=120s -
-- "my_first_svc" is the name the service - will be known as. -
-- "Dummy" tells Pacemaker - which script to use - (Dummy - - an agent that's useful as a template and for guides like - this one), which namespace it is in (pacemaker) and what - standard it conforms to (OCF). -
-- "op monitor interval=120s" tells Pacemaker to - check the health of this service every 2 minutes by - calling the agent's monitor action. -
-- You should now be able to see the service running using: -
--[ONE] # crm status -
- -- We can simulate an error by telling the service stop - directly (without telling the cluster): -
--[ONE] # crm_resource --resource my_first_svc --force-stop -
-- If you now run crm_mon in interactive - mode (the default), you should see (within the monitor - interval - 2 minutes) the cluster notice - that my_first_svc failed and move it to - another node. -
-- You can also watch the transition from the HAWK dashboard, by going - to https://node1:7630. -
--
- Ubuntu appears to have switched to Corosync 2 for it's LTS releases. -
-- We use aptitude to install pacemaker and some other - necessary packages we will need: -
--[ALL] # aptitude install pacemaker corosync fence-agents -
- -- Since the pcs tool from RHEL does not exist on Ubuntu, we - well create the corosync configuration file on both machines - manually: -
-
-[ALL] # cat <
- On each machine, run: -
--[ALL] # service pacemaker start -
- -- With so many devices and possible topologies, it is nearly - impossible to include Fencing in a document like this. - For now we will disable it. -
--[ONE] # crm configure property stonith-enabled=false -
-- One of the most common ways to deploy Pacemaker is in a - 2-node configuration. However quorum as a concept makes - no sense in this scenario (because you only have it when - more than half the nodes are available), so we'll disable - it too. -
--[ONE] # crm configure property no-quorum-policy=ignore -
-- For demonstration purposes, we will force the cluster to - move services after a single failure: -
--[ONE] # crm configure property migration-threshold=1 -
- -- Lets add a cluster service, we'll choose one doesn't - require any configuration and works everywhere to make - things easy. Here's the command: -
--[ONE] # crm configure primitive my_first_svc ocf:pacemaker:Dummy op monitor interval=120s -
-- "my_first_svc" is the name the service - will be known as. -
-- "ocf:pacemaker:Dummy" tells Pacemaker - which script to use - (Dummy - - an agent that's useful as a template and for guides like - this one), which namespace it is in (pacemaker) and what - standard it conforms to - (OCF). -
-- "op monitor interval=120s" tells Pacemaker to - check the health of this service every 2 minutes by - calling the agent's monitor action. -
-- You should now be able to see the service running using: -
--[ONE] # crm_mon -1 -
- -- We can simulate an error by telling the service stop - directly (without telling the cluster): -
--[ONE] # crm_resource --resource my_first_svc --force-stop -
-- If you now run crm_mon in interactive - mode (the default), you should see (within the monitor - interval - 2 minutes) the cluster notice - that my_first_svc failed and move it to - another node. -
--
- We have a quickstart edition for each major distro. To - continue, select the distribution you'll be using: -
- Now that all distributions have standardized on Corosync 2 or - greater as the underlying cluster layer, the differences are - minimal. -
-- However, in the past, Pacemaker also supported Corosync 1 (with or - without CMAN) as well as Heartbeat. Different distributions - supported different cluster layers, requiring different set-up. - We call each combination of Pacemaker and cluster layer a "stack". -
-- For example, on RHEL6 the supported stack is based on CMAN - which has APIs Pacemaker can use to obtain the membership - and quroum information it needs. Although CMAN uses - Corosync underneath, it is configured via cluster.conf and - Pacemaker is started as a separate init script. -
-- However SLES11 doesn't ship CMAN, so its users configure - corosync.conf directly and enable a custom plugin that - gets loaded into Corosync (because Corosync 1.4 doesn't - have the quorum and membership APIs needed by Pacemaker). - This plugin also starts Pacemaker automatically when - Corosync is started. -
-- To confuse things further, SLES users start Corosync with - the openAIS init script because it used to be part of that - project. -
-- See this - post for a longer discussion on the different stack - options and how they relate to cluster filesystems in particular. -
-