summaryrefslogtreecommitdiff
path: root/docs/en/details
diff options
context:
space:
mode:
authorMicah Anderson <micah@riseup.net>2016-11-04 10:54:28 -0400
committerMicah Anderson <micah@riseup.net>2016-11-04 10:54:28 -0400
commit34a381efa8f6295080c843f86bfa07d4e41056af (patch)
tree9282cf5d4c876688602705a7fa0002bc4a810bde /docs/en/details
parent0a72bc6fd292bf9367b314fcb0347c4d35042f16 (diff)
parent5821964ff7e16ca7aa9141bd09a77d355db492a9 (diff)
Merge branch 'develop'
Diffstat (limited to 'docs/en/details')
-rw-r--r--docs/en/details/development.html226
-rw-r--r--docs/en/details/development/index.html226
-rw-r--r--docs/en/details/faq.html213
-rw-r--r--docs/en/details/faq/index.html213
-rw-r--r--docs/en/details/ports.html209
-rw-r--r--docs/en/details/ports/index.html209
-rw-r--r--docs/en/details/under-the-hood.html168
-rw-r--r--docs/en/details/under-the-hood/index.html168
8 files changed, 1632 insertions, 0 deletions
diff --git a/docs/en/details/development.html b/docs/en/details/development.html
new file mode 100644
index 00000000..a21d426b
--- /dev/null
+++ b/docs/en/details/development.html
@@ -0,0 +1,226 @@
+<!DOCTYPE html>
+<html lang='en'>
+<head>
+<title>
+Development - LEAP Platform Documentation
+</title>
+<meta content='width=device-width, initial-scale=1.0' name='viewport'>
+<meta charset='UTF-8'>
+<base href="" />
+<style>
+ body {
+ background: #444;
+ display: flex;
+ flex-direction: row;
+ padding: 10px;
+ margin: 0px;
+ }
+ #sidebar {
+ flex: 0 0 250px;
+ background: white;
+ margin-right: 10px;
+ padding: 20px;
+ }
+ #sidebar ul {
+ list-style-type: none;
+ padding-left: 0px;
+ margin: 0;
+ }
+ #sidebar li { padding: 4px }
+ #sidebar li a { text-decoration: none }
+ #sidebar li.active { background: #444 }
+ #sidebar li.active a { color: white }
+ #sidebar li.level1 { padding-left: 20px }
+ #sidebar li.level2 { padding-left: 40px }
+ #main {
+ flex: 1 1 auto;
+ background: white;
+ padding: 20px;
+ }
+ #title-box {
+ padding-bottom: 20px;
+ border-bottom: 5px solid #eee;
+ }
+ #title-box h1 {
+ margin-top: 0px;
+ }
+ pre {
+ padding: 10px;
+ background: #eef;
+ }
+ code {
+ background: #eef;
+ }
+ table {border-collapse: collapse}
+ table td {
+ border: 1px solid #ccc;
+ padding: 4px;
+ vertical-align: top;
+ }
+</style>
+</head>
+<body>
+<div id='sidebar'>
+<ul>
+<li class=''>
+<a href='../../index.html'>Home</a>
+</li>
+<li class=' level0'>
+<a class='' href='../guide.html'>Guide</a>
+</li>
+<li class=' level0'>
+<a class='' href='../tutorials.html'>Tutorials</a>
+</li>
+<li class=' level0'>
+<a class='' href='../services.html'>Services</a>
+</li>
+<li class=' level0'>
+<a class='' href='../upgrading.html'>Upgrading</a>
+</li>
+<li class=' level0'>
+<a class='' href='../troubleshooting.html'>Troubleshooting</a>
+</li>
+<li class='semi-active level0'>
+<a class='' href='../details.html'>Details</a>
+</li>
+<li class=' level1'>
+<a class='' href='faq.html'>FAQ</a>
+</li>
+<li class='active level1'>
+<a class='' href='development.html'>Development</a>
+</li>
+<li class=' level1'>
+<a class='' href='ports.html'>Ports</a>
+</li>
+<li class=' level1'>
+<a class='' href='under-the-hood.html'>Under the hood</a>
+</li>
+</ul>
+</div>
+<div id='main'>
+<div id='title-box'>
+<h1>Development</h1>
+
+<div id='summary'>Getting started with making changes to the LEAP platform</div>
+</div>
+<div id='content-box'>
+<div id="TOC"><ol>
+ <li>
+ <a href="development/index.html#installing-leap_cli">Installing leap_cli</a>
+ <ol>
+ <li>
+ <a href="development/index.html#from-gem-for-a-single-user">From gem, for a single user</a>
+ </li>
+ <li>
+ <a href="development/index.html#from-gem-system-wide">From gem, system wide</a>
+ </li>
+ <li>
+ <a href="development/index.html#as-a-gem-built-from-source">As a gem, built from source</a>
+ </li>
+ <li>
+ <a href="development/index.html#the-develop-branch-from-source-for-a-single-user">The “develop” branch from source, for a single user</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="development/index.html#running-different-leap_cli-versions">Running different leap_cli versions</a>
+ <ol>
+ <li>
+ <a href="development/index.html#if-installed-as-a-gem">If installed as a gem</a>
+ </li>
+ <li>
+ <a href="development/index.html#if-running-from-source">If running from source</a>
+ </li>
+ </ol>
+ </li>
+</ol></div>
+
+<h2><a name="installing-leap_cli"></a>Installing leap_cli</h2>
+
+<h3><a name="from-gem-for-a-single-user"></a>From gem, for a single user</h3>
+
+<p>Install the latest:</p>
+
+<pre><code>gem install --user-install leap_cli
+</code></pre>
+
+<p>Or install a particular version:</p>
+
+<pre><code>gem install --version 1.8 --user-install leap_cli
+</code></pre>
+
+<p>Add the &ndash;user-install directory to your path:</p>
+
+<pre><code>[ $(which ruby) ] &amp;&amp; PATH="$PATH:$(ruby -e 'puts Gem.user_dir')/bin"
+</code></pre>
+
+<h3><a name="from-gem-system-wide"></a>From gem, system wide</h3>
+
+<p>Install the latest:</p>
+
+<pre><code>sudo gem install leap_cli
+</code></pre>
+
+<p>Install a particular version:</p>
+
+<pre><code>sudo gem install leap_cli --version 1.8
+</code></pre>
+
+<h3><a name="as-a-gem-built-from-source"></a>As a gem, built from source</h3>
+
+<pre><code>sudo apt-get install ruby ruby-dev rake
+git clone https://leap.se/git/leap_cli.git
+cd leap_cli
+git checkout develop
+rake build
+sudo rake install
+</code></pre>
+
+<h3><a name="the-develop-branch-from-source-for-a-single-user"></a>The “develop” branch from source, for a single user</h3>
+
+<pre><code>sudo apt-get install ruby ruby-dev rake
+git clone https://leap.se/git/leap_cli.git
+cd leap_cli
+git checkout develop
+</code></pre>
+
+<p>Then do one of the following to be able to run <code>leap</code> command:</p>
+
+<pre><code>cd leap_cli
+PATH=$PATH:`pwd`/bin
+alias leap="`pwd`/bin/leap"
+ln -s `pwd`/bin/leap ~/bin/leap
+</code></pre>
+
+<p>In practice, of course, you would put aliases or PATH modifications in a shell startup file.</p>
+
+<p>You can also clone from <a href="https://github.com/leap/leap_cli">https://github.com/leap/leap_cli</a></p>
+
+<h2><a name="running-different-leap_cli-versions"></a>Running different leap_cli versions</h2>
+
+<h3><a name="if-installed-as-a-gem"></a>If installed as a gem</h3>
+
+<p>With rubygems, you can always specify the gem version as the first argument to any executable installed by rubygems. For example:</p>
+
+<pre><code>sudo gem install leap_cli --version 1.7.2
+sudo gem install leap_cli --version 1.8
+leap _1.7.2_ --version
+=&gt; leap 1.7.2, ruby 2.1.2
+leap _1.8_ --version
+=&gt; leap 1.8, ruby 2.1.2
+</code></pre>
+
+<h3><a name="if-running-from-source"></a>If running from source</h3>
+
+<p>Alternately, if you are running from source, you can alias different commands:</p>
+
+<pre><code>git clone https://leap.se/git/leap_cli.git
+cd leap_cli
+git checkout develop
+alias leap_develop="`pwd`/bin/leap`
+</code></pre>
+
+</div>
+</div>
+</body>
+</html>
diff --git a/docs/en/details/development/index.html b/docs/en/details/development/index.html
new file mode 100644
index 00000000..92506b09
--- /dev/null
+++ b/docs/en/details/development/index.html
@@ -0,0 +1,226 @@
+<!DOCTYPE html>
+<html lang='en'>
+<head>
+<title>
+Development - LEAP Platform Documentation
+</title>
+<meta content='width=device-width, initial-scale=1.0' name='viewport'>
+<meta charset='UTF-8'>
+<base href="" />
+<style>
+ body {
+ background: #444;
+ display: flex;
+ flex-direction: row;
+ padding: 10px;
+ margin: 0px;
+ }
+ #sidebar {
+ flex: 0 0 250px;
+ background: white;
+ margin-right: 10px;
+ padding: 20px;
+ }
+ #sidebar ul {
+ list-style-type: none;
+ padding-left: 0px;
+ margin: 0;
+ }
+ #sidebar li { padding: 4px }
+ #sidebar li a { text-decoration: none }
+ #sidebar li.active { background: #444 }
+ #sidebar li.active a { color: white }
+ #sidebar li.level1 { padding-left: 20px }
+ #sidebar li.level2 { padding-left: 40px }
+ #main {
+ flex: 1 1 auto;
+ background: white;
+ padding: 20px;
+ }
+ #title-box {
+ padding-bottom: 20px;
+ border-bottom: 5px solid #eee;
+ }
+ #title-box h1 {
+ margin-top: 0px;
+ }
+ pre {
+ padding: 10px;
+ background: #eef;
+ }
+ code {
+ background: #eef;
+ }
+ table {border-collapse: collapse}
+ table td {
+ border: 1px solid #ccc;
+ padding: 4px;
+ vertical-align: top;
+ }
+</style>
+</head>
+<body>
+<div id='sidebar'>
+<ul>
+<li class=''>
+<a href='../../../index.html'>Home</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../guide.html'>Guide</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../tutorials.html'>Tutorials</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../services.html'>Services</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../upgrading.html'>Upgrading</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../troubleshooting.html'>Troubleshooting</a>
+</li>
+<li class='semi-active level0'>
+<a class='' href='../../details.html'>Details</a>
+</li>
+<li class=' level1'>
+<a class='' href='../faq.html'>FAQ</a>
+</li>
+<li class='active level1'>
+<a class='' href='../development.html'>Development</a>
+</li>
+<li class=' level1'>
+<a class='' href='../ports.html'>Ports</a>
+</li>
+<li class=' level1'>
+<a class='' href='../under-the-hood.html'>Under the hood</a>
+</li>
+</ul>
+</div>
+<div id='main'>
+<div id='title-box'>
+<h1>Development</h1>
+
+<div id='summary'>Getting started with making changes to the LEAP platform</div>
+</div>
+<div id='content-box'>
+<div id="TOC"><ol>
+ <li>
+ <a href="index.html#installing-leap_cli">Installing leap_cli</a>
+ <ol>
+ <li>
+ <a href="index.html#from-gem-for-a-single-user">From gem, for a single user</a>
+ </li>
+ <li>
+ <a href="index.html#from-gem-system-wide">From gem, system wide</a>
+ </li>
+ <li>
+ <a href="index.html#as-a-gem-built-from-source">As a gem, built from source</a>
+ </li>
+ <li>
+ <a href="index.html#the-develop-branch-from-source-for-a-single-user">The “develop” branch from source, for a single user</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="index.html#running-different-leap_cli-versions">Running different leap_cli versions</a>
+ <ol>
+ <li>
+ <a href="index.html#if-installed-as-a-gem">If installed as a gem</a>
+ </li>
+ <li>
+ <a href="index.html#if-running-from-source">If running from source</a>
+ </li>
+ </ol>
+ </li>
+</ol></div>
+
+<h2><a name="installing-leap_cli"></a>Installing leap_cli</h2>
+
+<h3><a name="from-gem-for-a-single-user"></a>From gem, for a single user</h3>
+
+<p>Install the latest:</p>
+
+<pre><code>gem install --user-install leap_cli
+</code></pre>
+
+<p>Or install a particular version:</p>
+
+<pre><code>gem install --version 1.8 --user-install leap_cli
+</code></pre>
+
+<p>Add the &ndash;user-install directory to your path:</p>
+
+<pre><code>[ $(which ruby) ] &amp;&amp; PATH="$PATH:$(ruby -e 'puts Gem.user_dir')/bin"
+</code></pre>
+
+<h3><a name="from-gem-system-wide"></a>From gem, system wide</h3>
+
+<p>Install the latest:</p>
+
+<pre><code>sudo gem install leap_cli
+</code></pre>
+
+<p>Install a particular version:</p>
+
+<pre><code>sudo gem install leap_cli --version 1.8
+</code></pre>
+
+<h3><a name="as-a-gem-built-from-source"></a>As a gem, built from source</h3>
+
+<pre><code>sudo apt-get install ruby ruby-dev rake
+git clone https://leap.se/git/leap_cli.git
+cd leap_cli
+git checkout develop
+rake build
+sudo rake install
+</code></pre>
+
+<h3><a name="the-develop-branch-from-source-for-a-single-user"></a>The “develop” branch from source, for a single user</h3>
+
+<pre><code>sudo apt-get install ruby ruby-dev rake
+git clone https://leap.se/git/leap_cli.git
+cd leap_cli
+git checkout develop
+</code></pre>
+
+<p>Then do one of the following to be able to run <code>leap</code> command:</p>
+
+<pre><code>cd leap_cli
+PATH=$PATH:`pwd`/bin
+alias leap="`pwd`/bin/leap"
+ln -s `pwd`/bin/leap ~/bin/leap
+</code></pre>
+
+<p>In practice, of course, you would put aliases or PATH modifications in a shell startup file.</p>
+
+<p>You can also clone from <a href="https://github.com/leap/leap_cli">https://github.com/leap/leap_cli</a></p>
+
+<h2><a name="running-different-leap_cli-versions"></a>Running different leap_cli versions</h2>
+
+<h3><a name="if-installed-as-a-gem"></a>If installed as a gem</h3>
+
+<p>With rubygems, you can always specify the gem version as the first argument to any executable installed by rubygems. For example:</p>
+
+<pre><code>sudo gem install leap_cli --version 1.7.2
+sudo gem install leap_cli --version 1.8
+leap _1.7.2_ --version
+=&gt; leap 1.7.2, ruby 2.1.2
+leap _1.8_ --version
+=&gt; leap 1.8, ruby 2.1.2
+</code></pre>
+
+<h3><a name="if-running-from-source"></a>If running from source</h3>
+
+<p>Alternately, if you are running from source, you can alias different commands:</p>
+
+<pre><code>git clone https://leap.se/git/leap_cli.git
+cd leap_cli
+git checkout develop
+alias leap_develop="`pwd`/bin/leap`
+</code></pre>
+
+</div>
+</div>
+</body>
+</html>
diff --git a/docs/en/details/faq.html b/docs/en/details/faq.html
new file mode 100644
index 00000000..331e1968
--- /dev/null
+++ b/docs/en/details/faq.html
@@ -0,0 +1,213 @@
+<!DOCTYPE html>
+<html lang='en'>
+<head>
+<title>
+FAQ - LEAP Platform Documentation
+</title>
+<meta content='width=device-width, initial-scale=1.0' name='viewport'>
+<meta charset='UTF-8'>
+<base href="" />
+<style>
+ body {
+ background: #444;
+ display: flex;
+ flex-direction: row;
+ padding: 10px;
+ margin: 0px;
+ }
+ #sidebar {
+ flex: 0 0 250px;
+ background: white;
+ margin-right: 10px;
+ padding: 20px;
+ }
+ #sidebar ul {
+ list-style-type: none;
+ padding-left: 0px;
+ margin: 0;
+ }
+ #sidebar li { padding: 4px }
+ #sidebar li a { text-decoration: none }
+ #sidebar li.active { background: #444 }
+ #sidebar li.active a { color: white }
+ #sidebar li.level1 { padding-left: 20px }
+ #sidebar li.level2 { padding-left: 40px }
+ #main {
+ flex: 1 1 auto;
+ background: white;
+ padding: 20px;
+ }
+ #title-box {
+ padding-bottom: 20px;
+ border-bottom: 5px solid #eee;
+ }
+ #title-box h1 {
+ margin-top: 0px;
+ }
+ pre {
+ padding: 10px;
+ background: #eef;
+ }
+ code {
+ background: #eef;
+ }
+ table {border-collapse: collapse}
+ table td {
+ border: 1px solid #ccc;
+ padding: 4px;
+ vertical-align: top;
+ }
+</style>
+</head>
+<body>
+<div id='sidebar'>
+<ul>
+<li class=''>
+<a href='../../index.html'>Home</a>
+</li>
+<li class=' level0'>
+<a class='' href='../guide.html'>Guide</a>
+</li>
+<li class=' level0'>
+<a class='' href='../tutorials.html'>Tutorials</a>
+</li>
+<li class=' level0'>
+<a class='' href='../services.html'>Services</a>
+</li>
+<li class=' level0'>
+<a class='' href='../upgrading.html'>Upgrading</a>
+</li>
+<li class=' level0'>
+<a class='' href='../troubleshooting.html'>Troubleshooting</a>
+</li>
+<li class='semi-active level0'>
+<a class='' href='../details.html'>Details</a>
+</li>
+<li class='active level1'>
+<a class='' href='faq.html'>FAQ</a>
+</li>
+<li class=' level1'>
+<a class='' href='development.html'>Development</a>
+</li>
+<li class=' level1'>
+<a class='' href='ports.html'>Ports</a>
+</li>
+<li class=' level1'>
+<a class='' href='under-the-hood.html'>Under the hood</a>
+</li>
+</ul>
+</div>
+<div id='main'>
+<div id='title-box'>
+<h1>Frequently asked questions</h1>
+
+<div id='summary'>Frequently Asked Questions</div>
+</div>
+<div id='content-box'>
+<div id="TOC"><ol>
+ <li>
+ <a href="faq/index.html#apt">APT</a>
+ <ol>
+ <li>
+ <a href="faq/index.html#what-do-i-do-when-unattended-upgrades-fail">What do I do when unattended upgrades fail?</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="faq/index.html#puppet">Puppet</a>
+ <ol>
+ <li>
+ <a href="faq/index.html#where-do-i-find-the-time-a-server-was-last-deployed">Where do i find the time a server was last deployed ?</a>
+ </li>
+ <li>
+ <a href="faq/index.html#what-resources-are-touched-by-puppetleap_platform-servicespackagesfiles-etc">What resources are touched by puppet/leap_platform (services/packages/files etc.) ?</a>
+ </li>
+ <li>
+ <a href="faq/index.html#how-can-i-customize-the-leap_platform-puppet-manifests">How can i customize the leap_platform puppet manifests ?</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="faq/index.html#facter">Facter</a>
+ <ol>
+ <li>
+ <a href="faq/index.html#how-can-i-see-custom-facts-distributed-by-leap_platform-on-a-node">How can i see custom facts distributed by leap_platform on a node ?</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="faq/index.html#etc">Etc</a>
+ <ol>
+ <li>
+ <a href="faq/index.html#how-do-i-change-the-domain-of-my-provider">How do i change the domain of my provider ?</a>
+ </li>
+ </ol>
+ </li>
+</ol></div>
+
+<h1><a name="apt"></a>APT</h1>
+
+<h2><a name="what-do-i-do-when-unattended-upgrades-fail"></a>What do I do when unattended upgrades fail?</h2>
+
+<p>When you receive notification e-mails with a subject of &lsquo;unattended-upgrades result for $machinename&rsquo;, that means that some package couldn&rsquo;t be automatically upgraded and needs manual interaction. The reasons vary, so you have to be careful. Most often you can simply login to the affected machine and run <code>apt-get dist-upgrade</code>.</p>
+
+<h1><a name="puppet"></a>Puppet</h1>
+
+<h2><a name="where-do-i-find-the-time-a-server-was-last-deployed"></a>Where do i find the time a server was last deployed ?</h2>
+
+<p>Run:</p>
+
+<pre><code>leap history FILTER
+</code></pre>
+
+<p>This will tail the log file <code>/var/log/leap/deploy-summary.log</code>.</p>
+
+<p>If that command fails, you can manually check the puppet state file on the node indicates the last puppetrun:</p>
+
+<pre><code>ls -la /var/lib/puppet/state/state.yaml
+</code></pre>
+
+<h2><a name="what-resources-are-touched-by-puppetleap_platform-servicespackagesfiles-etc"></a>What resources are touched by puppet/leap_platform (services/packages/files etc.) ?</h2>
+
+<p>Log into your server and issue:</p>
+
+<pre><code>grep -v '!ruby/sym' /var/lib/puppet/state/state.yaml | sed 's/\"//' | sort
+</code></pre>
+
+<h2><a name="how-can-i-customize-the-leap_platform-puppet-manifests"></a>How can i customize the leap_platform puppet manifests ?</h2>
+
+<p>You can create custom puppet modules under <code>files/puppet</code>.
+The custom puppet entry point is in class &lsquo;custom&rsquo; which can be put into
+<code>files/puppet/modules/custom/manifests/init.pp</code>. This class gets automatically included
+by site_config::default, which is applied to all nodes.</p>
+
+<p>Of cause you can also create a different git branch and change whatever you want, if you are
+familiar wit git.</p>
+
+<h1><a name="facter"></a>Facter</h1>
+
+<h2><a name="how-can-i-see-custom-facts-distributed-by-leap_platform-on-a-node"></a>How can i see custom facts distributed by leap_platform on a node ?</h2>
+
+<p>On the server, export the FACTERLIB env. variable to include the path of the custom fact in question:</p>
+
+<pre><code>export FACTERLIB=/var/lib/puppet/lib/facter:/srv/leap/puppet/modules/stdlib/lib/facter/
+facter
+</code></pre>
+
+<h1><a name="etc"></a>Etc</h1>
+
+<h2><a name="how-do-i-change-the-domain-of-my-provider"></a>How do i change the domain of my provider ?</h2>
+
+<ul>
+<li>First of all, you need to have access to the nameserver config of your new domain.</li>
+<li>Update domain in provider.json</li>
+<li>remove all ca and cert files: <code>rm files/cert/* files/ca/*</code></li>
+<li>create ca, csr and certs : <code>leap cert ca; leap cert csr; leap cert dh; leap cert update</code></li>
+<li>deploy</li>
+</ul>
+
+
+</div>
+</div>
+</body>
+</html>
diff --git a/docs/en/details/faq/index.html b/docs/en/details/faq/index.html
new file mode 100644
index 00000000..9db1398e
--- /dev/null
+++ b/docs/en/details/faq/index.html
@@ -0,0 +1,213 @@
+<!DOCTYPE html>
+<html lang='en'>
+<head>
+<title>
+FAQ - LEAP Platform Documentation
+</title>
+<meta content='width=device-width, initial-scale=1.0' name='viewport'>
+<meta charset='UTF-8'>
+<base href="" />
+<style>
+ body {
+ background: #444;
+ display: flex;
+ flex-direction: row;
+ padding: 10px;
+ margin: 0px;
+ }
+ #sidebar {
+ flex: 0 0 250px;
+ background: white;
+ margin-right: 10px;
+ padding: 20px;
+ }
+ #sidebar ul {
+ list-style-type: none;
+ padding-left: 0px;
+ margin: 0;
+ }
+ #sidebar li { padding: 4px }
+ #sidebar li a { text-decoration: none }
+ #sidebar li.active { background: #444 }
+ #sidebar li.active a { color: white }
+ #sidebar li.level1 { padding-left: 20px }
+ #sidebar li.level2 { padding-left: 40px }
+ #main {
+ flex: 1 1 auto;
+ background: white;
+ padding: 20px;
+ }
+ #title-box {
+ padding-bottom: 20px;
+ border-bottom: 5px solid #eee;
+ }
+ #title-box h1 {
+ margin-top: 0px;
+ }
+ pre {
+ padding: 10px;
+ background: #eef;
+ }
+ code {
+ background: #eef;
+ }
+ table {border-collapse: collapse}
+ table td {
+ border: 1px solid #ccc;
+ padding: 4px;
+ vertical-align: top;
+ }
+</style>
+</head>
+<body>
+<div id='sidebar'>
+<ul>
+<li class=''>
+<a href='../../../index.html'>Home</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../guide.html'>Guide</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../tutorials.html'>Tutorials</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../services.html'>Services</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../upgrading.html'>Upgrading</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../troubleshooting.html'>Troubleshooting</a>
+</li>
+<li class='semi-active level0'>
+<a class='' href='../../details.html'>Details</a>
+</li>
+<li class='active level1'>
+<a class='' href='../faq.html'>FAQ</a>
+</li>
+<li class=' level1'>
+<a class='' href='../development.html'>Development</a>
+</li>
+<li class=' level1'>
+<a class='' href='../ports.html'>Ports</a>
+</li>
+<li class=' level1'>
+<a class='' href='../under-the-hood.html'>Under the hood</a>
+</li>
+</ul>
+</div>
+<div id='main'>
+<div id='title-box'>
+<h1>Frequently asked questions</h1>
+
+<div id='summary'>Frequently Asked Questions</div>
+</div>
+<div id='content-box'>
+<div id="TOC"><ol>
+ <li>
+ <a href="index.html#apt">APT</a>
+ <ol>
+ <li>
+ <a href="index.html#what-do-i-do-when-unattended-upgrades-fail">What do I do when unattended upgrades fail?</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="index.html#puppet">Puppet</a>
+ <ol>
+ <li>
+ <a href="index.html#where-do-i-find-the-time-a-server-was-last-deployed">Where do i find the time a server was last deployed ?</a>
+ </li>
+ <li>
+ <a href="index.html#what-resources-are-touched-by-puppetleap_platform-servicespackagesfiles-etc">What resources are touched by puppet/leap_platform (services/packages/files etc.) ?</a>
+ </li>
+ <li>
+ <a href="index.html#how-can-i-customize-the-leap_platform-puppet-manifests">How can i customize the leap_platform puppet manifests ?</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="index.html#facter">Facter</a>
+ <ol>
+ <li>
+ <a href="index.html#how-can-i-see-custom-facts-distributed-by-leap_platform-on-a-node">How can i see custom facts distributed by leap_platform on a node ?</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="index.html#etc">Etc</a>
+ <ol>
+ <li>
+ <a href="index.html#how-do-i-change-the-domain-of-my-provider">How do i change the domain of my provider ?</a>
+ </li>
+ </ol>
+ </li>
+</ol></div>
+
+<h1><a name="apt"></a>APT</h1>
+
+<h2><a name="what-do-i-do-when-unattended-upgrades-fail"></a>What do I do when unattended upgrades fail?</h2>
+
+<p>When you receive notification e-mails with a subject of &lsquo;unattended-upgrades result for $machinename&rsquo;, that means that some package couldn&rsquo;t be automatically upgraded and needs manual interaction. The reasons vary, so you have to be careful. Most often you can simply login to the affected machine and run <code>apt-get dist-upgrade</code>.</p>
+
+<h1><a name="puppet"></a>Puppet</h1>
+
+<h2><a name="where-do-i-find-the-time-a-server-was-last-deployed"></a>Where do i find the time a server was last deployed ?</h2>
+
+<p>Run:</p>
+
+<pre><code>leap history FILTER
+</code></pre>
+
+<p>This will tail the log file <code>/var/log/leap/deploy-summary.log</code>.</p>
+
+<p>If that command fails, you can manually check the puppet state file on the node indicates the last puppetrun:</p>
+
+<pre><code>ls -la /var/lib/puppet/state/state.yaml
+</code></pre>
+
+<h2><a name="what-resources-are-touched-by-puppetleap_platform-servicespackagesfiles-etc"></a>What resources are touched by puppet/leap_platform (services/packages/files etc.) ?</h2>
+
+<p>Log into your server and issue:</p>
+
+<pre><code>grep -v '!ruby/sym' /var/lib/puppet/state/state.yaml | sed 's/\"//' | sort
+</code></pre>
+
+<h2><a name="how-can-i-customize-the-leap_platform-puppet-manifests"></a>How can i customize the leap_platform puppet manifests ?</h2>
+
+<p>You can create custom puppet modules under <code>files/puppet</code>.
+The custom puppet entry point is in class &lsquo;custom&rsquo; which can be put into
+<code>files/puppet/modules/custom/manifests/init.pp</code>. This class gets automatically included
+by site_config::default, which is applied to all nodes.</p>
+
+<p>Of cause you can also create a different git branch and change whatever you want, if you are
+familiar wit git.</p>
+
+<h1><a name="facter"></a>Facter</h1>
+
+<h2><a name="how-can-i-see-custom-facts-distributed-by-leap_platform-on-a-node"></a>How can i see custom facts distributed by leap_platform on a node ?</h2>
+
+<p>On the server, export the FACTERLIB env. variable to include the path of the custom fact in question:</p>
+
+<pre><code>export FACTERLIB=/var/lib/puppet/lib/facter:/srv/leap/puppet/modules/stdlib/lib/facter/
+facter
+</code></pre>
+
+<h1><a name="etc"></a>Etc</h1>
+
+<h2><a name="how-do-i-change-the-domain-of-my-provider"></a>How do i change the domain of my provider ?</h2>
+
+<ul>
+<li>First of all, you need to have access to the nameserver config of your new domain.</li>
+<li>Update domain in provider.json</li>
+<li>remove all ca and cert files: <code>rm files/cert/* files/ca/*</code></li>
+<li>create ca, csr and certs : <code>leap cert ca; leap cert csr; leap cert dh; leap cert update</code></li>
+<li>deploy</li>
+</ul>
+
+
+</div>
+</div>
+</body>
+</html>
diff --git a/docs/en/details/ports.html b/docs/en/details/ports.html
new file mode 100644
index 00000000..273781e0
--- /dev/null
+++ b/docs/en/details/ports.html
@@ -0,0 +1,209 @@
+<!DOCTYPE html>
+<html lang='en'>
+<head>
+<title>
+Ports - LEAP Platform Documentation
+</title>
+<meta content='width=device-width, initial-scale=1.0' name='viewport'>
+<meta charset='UTF-8'>
+<base href="" />
+<style>
+ body {
+ background: #444;
+ display: flex;
+ flex-direction: row;
+ padding: 10px;
+ margin: 0px;
+ }
+ #sidebar {
+ flex: 0 0 250px;
+ background: white;
+ margin-right: 10px;
+ padding: 20px;
+ }
+ #sidebar ul {
+ list-style-type: none;
+ padding-left: 0px;
+ margin: 0;
+ }
+ #sidebar li { padding: 4px }
+ #sidebar li a { text-decoration: none }
+ #sidebar li.active { background: #444 }
+ #sidebar li.active a { color: white }
+ #sidebar li.level1 { padding-left: 20px }
+ #sidebar li.level2 { padding-left: 40px }
+ #main {
+ flex: 1 1 auto;
+ background: white;
+ padding: 20px;
+ }
+ #title-box {
+ padding-bottom: 20px;
+ border-bottom: 5px solid #eee;
+ }
+ #title-box h1 {
+ margin-top: 0px;
+ }
+ pre {
+ padding: 10px;
+ background: #eef;
+ }
+ code {
+ background: #eef;
+ }
+ table {border-collapse: collapse}
+ table td {
+ border: 1px solid #ccc;
+ padding: 4px;
+ vertical-align: top;
+ }
+</style>
+</head>
+<body>
+<div id='sidebar'>
+<ul>
+<li class=''>
+<a href='../../index.html'>Home</a>
+</li>
+<li class=' level0'>
+<a class='' href='../guide.html'>Guide</a>
+</li>
+<li class=' level0'>
+<a class='' href='../tutorials.html'>Tutorials</a>
+</li>
+<li class=' level0'>
+<a class='' href='../services.html'>Services</a>
+</li>
+<li class=' level0'>
+<a class='' href='../upgrading.html'>Upgrading</a>
+</li>
+<li class=' level0'>
+<a class='' href='../troubleshooting.html'>Troubleshooting</a>
+</li>
+<li class='semi-active level0'>
+<a class='' href='../details.html'>Details</a>
+</li>
+<li class=' level1'>
+<a class='' href='faq.html'>FAQ</a>
+</li>
+<li class=' level1'>
+<a class='' href='development.html'>Development</a>
+</li>
+<li class='active level1'>
+<a class='' href='ports.html'>Ports</a>
+</li>
+<li class=' level1'>
+<a class='' href='under-the-hood.html'>Under the hood</a>
+</li>
+</ul>
+</div>
+<div id='main'>
+<div id='title-box'>
+<h1>Ports</h1>
+
+<div id='summary'>The required open ports for different services.</div>
+</div>
+<div id='content-box'>
+<div id="TOC"><ol>
+ <li>
+ <a href="ports/index.html#publicly-open-ports">Publicly open ports</a>
+ </li>
+ <li>
+ <a href="ports/index.html#privately-open-ports">Privately open ports</a>
+ </li>
+</ol></div>
+
+<p>There are many different ports that must be open in order for the LEAP platform to work. Some ports must be <em>publicly open</em>, meaning that these should be accessible from the public internet. Other ports are <em>privately open</em>, meaning that they must be accessible to sysadmins or to the other nodes in the provider&rsquo;s infrastructure.</p>
+
+<p>Every node already includes a host-based firewall. However, if your network has its own firewall, you need to make sure that these ports are not blocked.</p>
+
+<h2><a name="publicly-open-ports"></a>Publicly open ports</h2>
+
+<table class="table table-striped">
+<tr>
+ <th>Name</th>
+ <th>Node Type</th>
+ <th>Default</th>
+ <th>Notes</th>
+</tr>
+<tr>
+ <td>SMTP</td>
+ <td>mx</td>
+ <td>25</td>
+ <td>This is required for all server-to-server SMTP email relay. This is not configurable.</td>
+</tr>
+<tr>
+ <td>HTTP</td>
+ <td>webapp</td>
+ <td>80</td>
+ <td>Although no actual services are available over port 80, it should be unblocked so that the web app can redirect to port 443. This is not configurable.</td>
+</tr>
+<tr>
+ <td>HTTPS</td>
+ <td>webapp</td>
+ <td>443</td>
+ <td>The web application is available over this port. This is not configurable.</td>
+</tr>
+<tr>
+ <td>SMTPS</td>
+ <td>mx</td>
+ <td>465</td>
+ <td>The client uses this port to submit outgoing email messages via SMTP over TLS. There is no easy way to change this, although you can create a custom <code>files/service-definitions/v1/smtp-service.json.erb</code> to do so. This will be changed to port 443 in the future.</td>
+</tr>
+<tr>
+ <td>Soledad</td>
+ <td>soledad</td>
+ <td>2323</td>
+ <td>The client uses this port to synchronize its storage data. This can be changed via the configuration property <code>soledad.port</code>. This will be changed to port 443 in the future.</td>
+</tr>
+<tr>
+ <td>Nicknym</td>
+ <td>webapp</td>
+ <td>6425</td>
+ <td>The client uses this port for discovering public keys. This can be changed via the configuration property <code>nickserver.port</code>. This will be changed to port 443 in the future.</td>
+</tr>
+<tr>
+ <td>OpenVPN</td>
+ <td>openvpn</td>
+ <td>80, 443, 53, 1194</td>
+ <td>By default, OpenVPN gateways will listen on all those ports. This can be changed via the configuration property <code>openvpn.ports</code>. Note that these ports must be open for <code>openvpn.gateway_address</code>, not for <code>ip_address</code>.</td>
+</tr>
+<tr>
+ <td>API</td>
+ <td>webapp</td>
+ <td>4430</td>
+ <td>Currently, the provider API is accessible via this port. In the future, the default will be changed to 443. For now, this can be changed via the configuration property <code>api.port</code>.</td>
+</tr>
+</table>
+
+
+<h2><a name="privately-open-ports"></a>Privately open ports</h2>
+
+<table class="table table-striped">
+<tr>
+ <th>Name</th>
+ <th>Node Type</th>
+ <th>Default</th>
+ <th>Notes</th>
+</tr>
+<tr>
+ <td>SSH</td>
+ <td>all</td>
+ <td>22</td>
+ <td>This is the port that the sshd is bound to for the node. You can modify this using the configuration property <code>ssh.port</code>. It is important that this port is never blocked, or you will lose access to deploy to this node.</td>
+</tr>
+<tr>
+ <td>Stunnel</td>
+ <td>all</td>
+ <td>10000-20000</td>
+ <td>This is the range of ports that might be used for the encrypted stunnel connections between two nodes. These port numbers are automatically generated, but will fall somewhere in the specified range.</td>
+</tr>
+</table>
+
+
+
+
+</div>
+</div>
+</body>
+</html>
diff --git a/docs/en/details/ports/index.html b/docs/en/details/ports/index.html
new file mode 100644
index 00000000..8f738e77
--- /dev/null
+++ b/docs/en/details/ports/index.html
@@ -0,0 +1,209 @@
+<!DOCTYPE html>
+<html lang='en'>
+<head>
+<title>
+Ports - LEAP Platform Documentation
+</title>
+<meta content='width=device-width, initial-scale=1.0' name='viewport'>
+<meta charset='UTF-8'>
+<base href="" />
+<style>
+ body {
+ background: #444;
+ display: flex;
+ flex-direction: row;
+ padding: 10px;
+ margin: 0px;
+ }
+ #sidebar {
+ flex: 0 0 250px;
+ background: white;
+ margin-right: 10px;
+ padding: 20px;
+ }
+ #sidebar ul {
+ list-style-type: none;
+ padding-left: 0px;
+ margin: 0;
+ }
+ #sidebar li { padding: 4px }
+ #sidebar li a { text-decoration: none }
+ #sidebar li.active { background: #444 }
+ #sidebar li.active a { color: white }
+ #sidebar li.level1 { padding-left: 20px }
+ #sidebar li.level2 { padding-left: 40px }
+ #main {
+ flex: 1 1 auto;
+ background: white;
+ padding: 20px;
+ }
+ #title-box {
+ padding-bottom: 20px;
+ border-bottom: 5px solid #eee;
+ }
+ #title-box h1 {
+ margin-top: 0px;
+ }
+ pre {
+ padding: 10px;
+ background: #eef;
+ }
+ code {
+ background: #eef;
+ }
+ table {border-collapse: collapse}
+ table td {
+ border: 1px solid #ccc;
+ padding: 4px;
+ vertical-align: top;
+ }
+</style>
+</head>
+<body>
+<div id='sidebar'>
+<ul>
+<li class=''>
+<a href='../../../index.html'>Home</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../guide.html'>Guide</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../tutorials.html'>Tutorials</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../services.html'>Services</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../upgrading.html'>Upgrading</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../troubleshooting.html'>Troubleshooting</a>
+</li>
+<li class='semi-active level0'>
+<a class='' href='../../details.html'>Details</a>
+</li>
+<li class=' level1'>
+<a class='' href='../faq.html'>FAQ</a>
+</li>
+<li class=' level1'>
+<a class='' href='../development.html'>Development</a>
+</li>
+<li class='active level1'>
+<a class='' href='../ports.html'>Ports</a>
+</li>
+<li class=' level1'>
+<a class='' href='../under-the-hood.html'>Under the hood</a>
+</li>
+</ul>
+</div>
+<div id='main'>
+<div id='title-box'>
+<h1>Ports</h1>
+
+<div id='summary'>The required open ports for different services.</div>
+</div>
+<div id='content-box'>
+<div id="TOC"><ol>
+ <li>
+ <a href="index.html#publicly-open-ports">Publicly open ports</a>
+ </li>
+ <li>
+ <a href="index.html#privately-open-ports">Privately open ports</a>
+ </li>
+</ol></div>
+
+<p>There are many different ports that must be open in order for the LEAP platform to work. Some ports must be <em>publicly open</em>, meaning that these should be accessible from the public internet. Other ports are <em>privately open</em>, meaning that they must be accessible to sysadmins or to the other nodes in the provider&rsquo;s infrastructure.</p>
+
+<p>Every node already includes a host-based firewall. However, if your network has its own firewall, you need to make sure that these ports are not blocked.</p>
+
+<h2><a name="publicly-open-ports"></a>Publicly open ports</h2>
+
+<table class="table table-striped">
+<tr>
+ <th>Name</th>
+ <th>Node Type</th>
+ <th>Default</th>
+ <th>Notes</th>
+</tr>
+<tr>
+ <td>SMTP</td>
+ <td>mx</td>
+ <td>25</td>
+ <td>This is required for all server-to-server SMTP email relay. This is not configurable.</td>
+</tr>
+<tr>
+ <td>HTTP</td>
+ <td>webapp</td>
+ <td>80</td>
+ <td>Although no actual services are available over port 80, it should be unblocked so that the web app can redirect to port 443. This is not configurable.</td>
+</tr>
+<tr>
+ <td>HTTPS</td>
+ <td>webapp</td>
+ <td>443</td>
+ <td>The web application is available over this port. This is not configurable.</td>
+</tr>
+<tr>
+ <td>SMTPS</td>
+ <td>mx</td>
+ <td>465</td>
+ <td>The client uses this port to submit outgoing email messages via SMTP over TLS. There is no easy way to change this, although you can create a custom <code>files/service-definitions/v1/smtp-service.json.erb</code> to do so. This will be changed to port 443 in the future.</td>
+</tr>
+<tr>
+ <td>Soledad</td>
+ <td>soledad</td>
+ <td>2323</td>
+ <td>The client uses this port to synchronize its storage data. This can be changed via the configuration property <code>soledad.port</code>. This will be changed to port 443 in the future.</td>
+</tr>
+<tr>
+ <td>Nicknym</td>
+ <td>webapp</td>
+ <td>6425</td>
+ <td>The client uses this port for discovering public keys. This can be changed via the configuration property <code>nickserver.port</code>. This will be changed to port 443 in the future.</td>
+</tr>
+<tr>
+ <td>OpenVPN</td>
+ <td>openvpn</td>
+ <td>80, 443, 53, 1194</td>
+ <td>By default, OpenVPN gateways will listen on all those ports. This can be changed via the configuration property <code>openvpn.ports</code>. Note that these ports must be open for <code>openvpn.gateway_address</code>, not for <code>ip_address</code>.</td>
+</tr>
+<tr>
+ <td>API</td>
+ <td>webapp</td>
+ <td>4430</td>
+ <td>Currently, the provider API is accessible via this port. In the future, the default will be changed to 443. For now, this can be changed via the configuration property <code>api.port</code>.</td>
+</tr>
+</table>
+
+
+<h2><a name="privately-open-ports"></a>Privately open ports</h2>
+
+<table class="table table-striped">
+<tr>
+ <th>Name</th>
+ <th>Node Type</th>
+ <th>Default</th>
+ <th>Notes</th>
+</tr>
+<tr>
+ <td>SSH</td>
+ <td>all</td>
+ <td>22</td>
+ <td>This is the port that the sshd is bound to for the node. You can modify this using the configuration property <code>ssh.port</code>. It is important that this port is never blocked, or you will lose access to deploy to this node.</td>
+</tr>
+<tr>
+ <td>Stunnel</td>
+ <td>all</td>
+ <td>10000-20000</td>
+ <td>This is the range of ports that might be used for the encrypted stunnel connections between two nodes. These port numbers are automatically generated, but will fall somewhere in the specified range.</td>
+</tr>
+</table>
+
+
+
+
+</div>
+</div>
+</body>
+</html>
diff --git a/docs/en/details/under-the-hood.html b/docs/en/details/under-the-hood.html
new file mode 100644
index 00000000..9b7853e3
--- /dev/null
+++ b/docs/en/details/under-the-hood.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html lang='en'>
+<head>
+<title>
+Under the hood - LEAP Platform Documentation
+</title>
+<meta content='width=device-width, initial-scale=1.0' name='viewport'>
+<meta charset='UTF-8'>
+<base href="" />
+<style>
+ body {
+ background: #444;
+ display: flex;
+ flex-direction: row;
+ padding: 10px;
+ margin: 0px;
+ }
+ #sidebar {
+ flex: 0 0 250px;
+ background: white;
+ margin-right: 10px;
+ padding: 20px;
+ }
+ #sidebar ul {
+ list-style-type: none;
+ padding-left: 0px;
+ margin: 0;
+ }
+ #sidebar li { padding: 4px }
+ #sidebar li a { text-decoration: none }
+ #sidebar li.active { background: #444 }
+ #sidebar li.active a { color: white }
+ #sidebar li.level1 { padding-left: 20px }
+ #sidebar li.level2 { padding-left: 40px }
+ #main {
+ flex: 1 1 auto;
+ background: white;
+ padding: 20px;
+ }
+ #title-box {
+ padding-bottom: 20px;
+ border-bottom: 5px solid #eee;
+ }
+ #title-box h1 {
+ margin-top: 0px;
+ }
+ pre {
+ padding: 10px;
+ background: #eef;
+ }
+ code {
+ background: #eef;
+ }
+ table {border-collapse: collapse}
+ table td {
+ border: 1px solid #ccc;
+ padding: 4px;
+ vertical-align: top;
+ }
+</style>
+</head>
+<body>
+<div id='sidebar'>
+<ul>
+<li class=''>
+<a href='../../index.html'>Home</a>
+</li>
+<li class=' level0'>
+<a class='' href='../guide.html'>Guide</a>
+</li>
+<li class=' level0'>
+<a class='' href='../tutorials.html'>Tutorials</a>
+</li>
+<li class=' level0'>
+<a class='' href='../services.html'>Services</a>
+</li>
+<li class=' level0'>
+<a class='' href='../upgrading.html'>Upgrading</a>
+</li>
+<li class=' level0'>
+<a class='' href='../troubleshooting.html'>Troubleshooting</a>
+</li>
+<li class='semi-active level0'>
+<a class='' href='../details.html'>Details</a>
+</li>
+<li class=' level1'>
+<a class='' href='faq.html'>FAQ</a>
+</li>
+<li class=' level1'>
+<a class='' href='development.html'>Development</a>
+</li>
+<li class=' level1'>
+<a class='' href='ports.html'>Ports</a>
+</li>
+<li class='active level1'>
+<a class='' href='under-the-hood.html'>Under the hood</a>
+</li>
+</ul>
+</div>
+<div id='main'>
+<div id='title-box'>
+<h1>Under the hood</h1>
+
+<div id='summary'>Various implementation details.</div>
+</div>
+<div id='content-box'>
+<div id="TOC"><ol>
+ <li>
+ <a href="under-the-hood/index.html#puppet-details">Puppet Details</a>
+ <ol>
+ <li>
+ <a href="under-the-hood/index.html#tags">Tags</a>
+ <ol>
+ <li>
+ <a href="under-the-hood/index.html#doing-faster-partial-deploys">Doing faster partial deploys</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+</ol></div>
+
+<p>This page contains various details on the how the platform is implemented. You can safely ignore this page, although it may be useful if you plan to make modifications to the platform.</p>
+
+<h1><a name="puppet-details"></a>Puppet Details</h1>
+
+<h2><a name="tags"></a>Tags</h2>
+
+<p>Tags are beeing used to deploy different classes.</p>
+
+<ul>
+<li>leap_base: site_config::default (configure hostname + resolver, sshd, )</li>
+<li>leap_slow: site_config::slow (slow: apt-get update, apt-get dist-upgrade)</li>
+<li>leap_service: cofigure platform service (openvpn, couchdb, etc.)</li>
+</ul>
+
+
+<p>You can pass any combination of tags, i.e. use</p>
+
+<ul>
+<li>&ldquo;&ndash;tags leap_base,leap_slow,leap_service&rdquo; (DEFAULT): Deploy all</li>
+<li>&ldquo;&ndash;tags leap_service&rdquo;: Only deploy service(s) (useful for debugging/development)</li>
+<li>&ldquo;&ndash;tags leap_base&rdquo;: Only deploy basic configuration (again, useful for debugging/development)</li>
+</ul>
+
+
+<h3><a name="doing-faster-partial-deploys"></a>Doing faster partial deploys</h3>
+
+<p>If you only change a tiny bit on the platform puppet recipes, you could achieve a
+<em>much</em> faster deploy specifying the resource tag you changed.
+i.e. you changed the way rsyslog config snippets for LEAP logfiles are created
+in <code>puppet/modules/leap/manifests/logfile.pp</code>. This <code>define</code> resource will get tagged
+automatically with <code>leap::logfile</code> and you can deploy the change with:</p>
+
+<pre><code>leap deploy *NODE* --fast --tags=leap::logfile
+</code></pre>
+
+<p>or, if you just want</p>
+
+<pre><code>leap deploy --tags=dist_upgrade
+</code></pre>
+
+<p>See <a href="http://docs.puppetlabs.com/puppet/2.7/reference/lang_tags.html">http://docs.puppetlabs.com/puppet/2.7/reference/lang_tags.html</a> for puppet tag usage.</p>
+
+</div>
+</div>
+</body>
+</html>
diff --git a/docs/en/details/under-the-hood/index.html b/docs/en/details/under-the-hood/index.html
new file mode 100644
index 00000000..e75503f5
--- /dev/null
+++ b/docs/en/details/under-the-hood/index.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html lang='en'>
+<head>
+<title>
+Under the hood - LEAP Platform Documentation
+</title>
+<meta content='width=device-width, initial-scale=1.0' name='viewport'>
+<meta charset='UTF-8'>
+<base href="" />
+<style>
+ body {
+ background: #444;
+ display: flex;
+ flex-direction: row;
+ padding: 10px;
+ margin: 0px;
+ }
+ #sidebar {
+ flex: 0 0 250px;
+ background: white;
+ margin-right: 10px;
+ padding: 20px;
+ }
+ #sidebar ul {
+ list-style-type: none;
+ padding-left: 0px;
+ margin: 0;
+ }
+ #sidebar li { padding: 4px }
+ #sidebar li a { text-decoration: none }
+ #sidebar li.active { background: #444 }
+ #sidebar li.active a { color: white }
+ #sidebar li.level1 { padding-left: 20px }
+ #sidebar li.level2 { padding-left: 40px }
+ #main {
+ flex: 1 1 auto;
+ background: white;
+ padding: 20px;
+ }
+ #title-box {
+ padding-bottom: 20px;
+ border-bottom: 5px solid #eee;
+ }
+ #title-box h1 {
+ margin-top: 0px;
+ }
+ pre {
+ padding: 10px;
+ background: #eef;
+ }
+ code {
+ background: #eef;
+ }
+ table {border-collapse: collapse}
+ table td {
+ border: 1px solid #ccc;
+ padding: 4px;
+ vertical-align: top;
+ }
+</style>
+</head>
+<body>
+<div id='sidebar'>
+<ul>
+<li class=''>
+<a href='../../../index.html'>Home</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../guide.html'>Guide</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../tutorials.html'>Tutorials</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../services.html'>Services</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../upgrading.html'>Upgrading</a>
+</li>
+<li class=' level0'>
+<a class='' href='../../troubleshooting.html'>Troubleshooting</a>
+</li>
+<li class='semi-active level0'>
+<a class='' href='../../details.html'>Details</a>
+</li>
+<li class=' level1'>
+<a class='' href='../faq.html'>FAQ</a>
+</li>
+<li class=' level1'>
+<a class='' href='../development.html'>Development</a>
+</li>
+<li class=' level1'>
+<a class='' href='../ports.html'>Ports</a>
+</li>
+<li class='active level1'>
+<a class='' href='../under-the-hood.html'>Under the hood</a>
+</li>
+</ul>
+</div>
+<div id='main'>
+<div id='title-box'>
+<h1>Under the hood</h1>
+
+<div id='summary'>Various implementation details.</div>
+</div>
+<div id='content-box'>
+<div id="TOC"><ol>
+ <li>
+ <a href="index.html#puppet-details">Puppet Details</a>
+ <ol>
+ <li>
+ <a href="index.html#tags">Tags</a>
+ <ol>
+ <li>
+ <a href="index.html#doing-faster-partial-deploys">Doing faster partial deploys</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+</ol></div>
+
+<p>This page contains various details on the how the platform is implemented. You can safely ignore this page, although it may be useful if you plan to make modifications to the platform.</p>
+
+<h1><a name="puppet-details"></a>Puppet Details</h1>
+
+<h2><a name="tags"></a>Tags</h2>
+
+<p>Tags are beeing used to deploy different classes.</p>
+
+<ul>
+<li>leap_base: site_config::default (configure hostname + resolver, sshd, )</li>
+<li>leap_slow: site_config::slow (slow: apt-get update, apt-get dist-upgrade)</li>
+<li>leap_service: cofigure platform service (openvpn, couchdb, etc.)</li>
+</ul>
+
+
+<p>You can pass any combination of tags, i.e. use</p>
+
+<ul>
+<li>&ldquo;&ndash;tags leap_base,leap_slow,leap_service&rdquo; (DEFAULT): Deploy all</li>
+<li>&ldquo;&ndash;tags leap_service&rdquo;: Only deploy service(s) (useful for debugging/development)</li>
+<li>&ldquo;&ndash;tags leap_base&rdquo;: Only deploy basic configuration (again, useful for debugging/development)</li>
+</ul>
+
+
+<h3><a name="doing-faster-partial-deploys"></a>Doing faster partial deploys</h3>
+
+<p>If you only change a tiny bit on the platform puppet recipes, you could achieve a
+<em>much</em> faster deploy specifying the resource tag you changed.
+i.e. you changed the way rsyslog config snippets for LEAP logfiles are created
+in <code>puppet/modules/leap/manifests/logfile.pp</code>. This <code>define</code> resource will get tagged
+automatically with <code>leap::logfile</code> and you can deploy the change with:</p>
+
+<pre><code>leap deploy *NODE* --fast --tags=leap::logfile
+</code></pre>
+
+<p>or, if you just want</p>
+
+<pre><code>leap deploy --tags=dist_upgrade
+</code></pre>
+
+<p>See <a href="http://docs.puppetlabs.com/puppet/2.7/reference/lang_tags.html">http://docs.puppetlabs.com/puppet/2.7/reference/lang_tags.html</a> for puppet tag usage.</p>
+
+</div>
+</div>
+</body>
+</html>