<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://agora.nasqueron.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=2001%3A470%3A0%3A0%3A0%3A0%3A0%3A0%2F32</id>
	<title>Nasqueron Agora - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://agora.nasqueron.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=2001%3A470%3A0%3A0%3A0%3A0%3A0%3A0%2F32"/>
	<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/Special:Contributions/2001:470:0:0:0:0:0:0/32"/>
	<updated>2026-09-03T04:32:40Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.47.0-alpha</generator>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire&amp;diff=607</id>
		<title>Operations grimoire</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire&amp;diff=607"/>
		<updated>2017-01-15T08:09:20Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:818A:558B:64C0:D7B7: /* Appendices */ alphabetic order ; + /External services&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the Nasqueron operations grimoire (NOG).&lt;br /&gt;
&lt;br /&gt;
== Infrastructure ==&lt;br /&gt;
* [[/Docker engine]]&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
=== Identity management ===&lt;br /&gt;
* [[/Login]] (Auth Grove)&lt;br /&gt;
&lt;br /&gt;
=== Collaborative tools ===&lt;br /&gt;
* [[/Dæghrefn]] (eggdrop)&lt;br /&gt;
* [[/DevCentral]] (Phabricator)&lt;br /&gt;
* [[/Etherpad]]&lt;br /&gt;
* [[/Mumble]]&lt;br /&gt;
&lt;br /&gt;
=== CI/CD ===&lt;br /&gt;
* [[/Broker]]&lt;br /&gt;
* [[/Jenkins]]&lt;br /&gt;
* [[/Notifications center]]&lt;br /&gt;
* [[/Vault]]&lt;br /&gt;
&lt;br /&gt;
== Other web sites ==&lt;br /&gt;
* [[/Sites on Eglide]]&lt;br /&gt;
* [[/Sites on Ysul]]&lt;br /&gt;
== Services configuration ==&lt;br /&gt;
&#039;&#039;This section contains general information not related to a specific service.&#039;&#039;&lt;br /&gt;
* [[/SSL certificates]] (Let&#039;s encrypt / letsencrypt)&lt;br /&gt;
&lt;br /&gt;
== Checklists ==&lt;br /&gt;
=== Docker ===&lt;br /&gt;
* [[/Restart a Docker engine]]&lt;br /&gt;
* [[/Dwellers to DevCentral]]&lt;br /&gt;
* [[/Git operations in production containers]]&lt;br /&gt;
&lt;br /&gt;
=== Salt ===&lt;br /&gt;
* [[/Deploy with Salt]]&lt;br /&gt;
* [[/Create and revoke user accounts on Salt servers]]&lt;br /&gt;
&lt;br /&gt;
== Appendices ==&lt;br /&gt;
* [[/Contacts]]&lt;br /&gt;
* [[/Evaluated products]]&lt;br /&gt;
* [[/External services]]&lt;br /&gt;
* [[/Policies]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Reference]]&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:818A:558B:64C0:D7B7</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire&amp;diff=603</id>
		<title>Operations grimoire</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire&amp;diff=603"/>
		<updated>2017-01-15T07:16:47Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:818A:558B:64C0:D7B7: /* Appendices */ +/Evaluated products&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the Nasqueron operations grimoire (NOG).&lt;br /&gt;
&lt;br /&gt;
== Infrastructure ==&lt;br /&gt;
* [[/Docker engine]]&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
=== Identity management ===&lt;br /&gt;
* [[/Login]] (Auth Grove)&lt;br /&gt;
&lt;br /&gt;
=== Collaborative tools ===&lt;br /&gt;
* [[/Dæghrefn]] (eggdrop)&lt;br /&gt;
* [[/DevCentral]] (Phabricator)&lt;br /&gt;
* [[/Etherpad]]&lt;br /&gt;
* [[/Mumble]]&lt;br /&gt;
&lt;br /&gt;
=== CI/CD ===&lt;br /&gt;
* [[/Broker]]&lt;br /&gt;
* [[/Jenkins]]&lt;br /&gt;
* [[/Notifications center]]&lt;br /&gt;
* [[/Vault]]&lt;br /&gt;
&lt;br /&gt;
== Other web sites ==&lt;br /&gt;
* [[/Sites on Eglide]]&lt;br /&gt;
* [[/Sites on Ysul]]&lt;br /&gt;
== Services configuration ==&lt;br /&gt;
&#039;&#039;This section contains general information not related to a specific service.&#039;&#039;&lt;br /&gt;
* [[/SSL certificates]] (Let&#039;s encrypt / letsencrypt)&lt;br /&gt;
&lt;br /&gt;
== Checklists ==&lt;br /&gt;
=== Docker ===&lt;br /&gt;
* [[/Restart a Docker engine]]&lt;br /&gt;
* [[/Dwellers to DevCentral]]&lt;br /&gt;
* [[/Git operations in production containers]]&lt;br /&gt;
&lt;br /&gt;
=== Salt ===&lt;br /&gt;
* [[/Deploy with Salt]]&lt;br /&gt;
* [[/Create and revoke user accounts on Salt servers]]&lt;br /&gt;
&lt;br /&gt;
== Appendices ==&lt;br /&gt;
* [[/Policies]]&lt;br /&gt;
* [[/Contacts]]&lt;br /&gt;
* [[/Evaluated products]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Reference]]&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:818A:558B:64C0:D7B7</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Ysul&amp;diff=581</id>
		<title>Ysul</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Ysul&amp;diff=581"/>
		<updated>2016-12-24T12:50:19Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:1961:6B57:682:8423: /* Services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Ysul&#039;&#039;&#039; is an FreeBSD 10 server instance installed on [[Stormshear]].&lt;br /&gt;
&lt;br /&gt;
== Basic information ==&lt;br /&gt;
* &#039;&#039;&#039;IP:&#039;&#039;&#039;&lt;br /&gt;
** 212.83.187.132&lt;br /&gt;
** DN42 still to configure&lt;br /&gt;
** 2001:470:1f13:9e1:0:c0ff:ee:1 (Hurricane Electric)&lt;br /&gt;
** 177.27.26.33 (Drake)&lt;br /&gt;
* &#039;&#039;&#039;Hostname:&#039;&#039;&#039; ysul.nasqueron.org&lt;br /&gt;
* &#039;&#039;&#039;Homepage:&#039;&#039;&#039; http://ysul.nasqueron.org/&lt;br /&gt;
* &#039;&#039;&#039;Configuration:&#039;&#039;&#039;Should have access to 3.5 GB RAM and 4 core, burstable on request to 8 cores/+-6 Gb (to be negotiated according [[Dwellers]] use). Currently 2.5 GB / 1 core.&lt;br /&gt;
* &#039;&#039;&#039;OS:&#039;&#039;&#039; FreeBSD 10&lt;br /&gt;
* &#039;&#039;&#039;ISP:&#039;&#039;&#039; [http://www.online.net Online] (FR)&lt;br /&gt;
* &#039;&#039;&#039;Network:&#039;&#039;&#039; Illiad (FR)&lt;br /&gt;
* &#039;&#039;&#039;Status:&#039;&#039;&#039; Installing.&lt;br /&gt;
* &#039;&#039;&#039;Policy:&#039;&#039;&#039; Access for any Nasqueron or Wolfplex project, access for general public seeking a development purpose shell account or a staging environment.&lt;br /&gt;
* &#039;&#039;&#039;Started:&#039;&#039;&#039; 2014-07-06&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
* SSH (*:22)&lt;br /&gt;
* Nginx (*:80), see [[Operations grimoire/Sites on Ysul]]&lt;br /&gt;
* Mumble (*:64738)&lt;br /&gt;
&lt;br /&gt;
=== Ports table ===&lt;br /&gt;
&lt;br /&gt;
The table doesn&#039;t include dgram and streams (e.g. socket files).&lt;br /&gt;
&lt;br /&gt;
If you start a new service or want to make reservations for a port or a port range for occasional services (e.g. a range of ports for DCC transfers on a IRC bot or client), indicate them here.&lt;br /&gt;
&lt;br /&gt;
If you wish to check the table is accurate, &amp;lt;code&amp;gt;sockstat | grep &amp;quot;*:&amp;quot;&amp;lt;/code&amp;gt; could be helpful.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;Service&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Application&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Port&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Listening to&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|SSH||sshd||22||world||&lt;br /&gt;
|-&lt;br /&gt;
|DNS||unbound||53||localhost||A distinct world DNS server will be soon installed (through djbdns?)&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=1|Web  &lt;br /&gt;
|rowspan=1|nginx&lt;br /&gt;
||80||world||Currently IPv4 only&lt;br /&gt;
|-&lt;br /&gt;
|Identd||oidentd||113||world||&lt;br /&gt;
|-&lt;br /&gt;
|Logging||syslogd||514||world||&lt;br /&gt;
|-&lt;br /&gt;
|MySQL||mysqld||3306||world||MariaDB 5.5&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=2|Mumble&lt;br /&gt;
|rowspan=2|murmurd&lt;br /&gt;
|64738||world||&lt;br /&gt;
|-&lt;br /&gt;
|6502||localhost||ZeroC Ice socket&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Decentralized networks peers ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!rowspan=2|Interface&lt;br /&gt;
!rowspan=2|Peer name&lt;br /&gt;
!colspan=2|Pipeline network&lt;br /&gt;
!colspan=3|Decentralized network&lt;br /&gt;
!rowspan=2|Remote contact&lt;br /&gt;
!rowspan=2|Notes&lt;br /&gt;
|-&lt;br /&gt;
! Local IP&lt;br /&gt;
! Remote IP&lt;br /&gt;
! Network&lt;br /&gt;
! Local IP&lt;br /&gt;
! Remote IP&lt;br /&gt;
|-&lt;br /&gt;
|gre0||Ubald||212.83.187.33||213.189.173.103||[[Drake]]||172.27.26.33||172.27.26.30||Dereckson||Remote IP is dynamic&lt;br /&gt;
|-&lt;br /&gt;
|gre1||Dwellers||212.83.187.33||212.129.32.223||[[Drake]]||172.27.26.33||172.27.26.49||Dereckson&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Ysul]]&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:1961:6B57:682:8423</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=How_to_contribute_code&amp;diff=577</id>
		<title>How to contribute code</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=How_to_contribute_code&amp;diff=577"/>
		<updated>2016-11-12T02:40:11Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:80E6:B029:8213:E8A1: /* Accept a revision */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This guide explains how to contribute code to a Nasqueron project.&lt;br /&gt;
&lt;br /&gt;
We use Phabricator for tasks and code reviews, our instance is called DevCentral and is accessible at {{PhabricatorInstance}}.&lt;br /&gt;
&lt;br /&gt;
In a nutshell, to submit a change, you need to clone the relevant repository, create a new branch, commit and send this commit to our code review server. Pull requests on GitHub could be fine for trivial hit and run patches, but if you add a new feature, use our code review server.&lt;br /&gt;
&lt;br /&gt;
== Clone the repository ==&lt;br /&gt;
On DevCentral, go to [{{PhabricatorInstance}}/diffusion/ Diffusion]. Each repository will offer you a clone command.&lt;br /&gt;
&lt;br /&gt;
For example, it could be:&lt;br /&gt;
 git clone ssh://git@github.com/nasqueron/someproject&lt;br /&gt;
&lt;br /&gt;
Internal projects are directly hosted on DevCentral. In this case, you need to [{{PhabricatorInstance}}/settings/panel/ssh/ add your SSH key to the settings].&lt;br /&gt;
&lt;br /&gt;
If the repository is on GitHub but not on DevCentral, please request it to be added. For that, create a task on DevCentral and add DevCentral as project You can use the priority Unbreak now! if you already have a change to review, high if you plan to do it in the next 12 hours, normal for 24 hours, low for one week.&lt;br /&gt;
&lt;br /&gt;
== Code something ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: table; margin: 1em; padding: 0.5em 1.5em; border: 4px solid #aaa; background-color: #f9f9f9;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Never work in Git master branch&#039;&#039;&#039;, when you are submitting new code.&lt;br /&gt;
&lt;br /&gt;
Always create a new branch for each change, code feature or bug fix.&lt;br /&gt;
&lt;br /&gt;
The master branch is only to merge changes, not to work.&lt;br /&gt;
&lt;br /&gt;
Trust us, you want to code and have fun, not to spend an evening to fix your Git repositories merging infinite conflicts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remember: One new change, one new branch.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To fix a bug, or code a new feature, three operations are needed:&lt;br /&gt;
# code it&lt;br /&gt;
# commit it&lt;br /&gt;
# review it&lt;br /&gt;
&lt;br /&gt;
=== Code it ===&lt;br /&gt;
&lt;br /&gt;
Before to start to code, create a new branch:&lt;br /&gt;
&lt;br /&gt;
 git checkout -b feature/something-awesome&lt;br /&gt;
&lt;br /&gt;
If you fix a bug, use the number of the bug on DevCentral:&lt;br /&gt;
&lt;br /&gt;
 git checkout -b bug/T434&lt;br /&gt;
&lt;br /&gt;
Then code something, test it, reread it.&lt;br /&gt;
&lt;br /&gt;
=== Commit it ===&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready, you can commit it.&lt;br /&gt;
&lt;br /&gt;
Your commit message should use the following format:&lt;br /&gt;
&lt;br /&gt;
* a title, as short as possible, with 43 max characters recommended, 55 characters as soft limit, 72 as hard limit&lt;br /&gt;
* some paragraphs, but wrap lines &amp;lt; 72 characters. You can extend at 80 (soft limit) or 100 (hard limit) if really needed.&lt;br /&gt;
&lt;br /&gt;
The title should be at imperative, not followed by a final dot.&lt;br /&gt;
&lt;br /&gt;
The paragraphs should focus to explain why this change is needed.&lt;br /&gt;
&lt;br /&gt;
See http://chris.beams.io/posts/git-commit/ for more best practices.&lt;br /&gt;
&lt;br /&gt;
=== Review it ===&lt;br /&gt;
 arc diff&lt;br /&gt;
&lt;br /&gt;
This will send your change on DevCentral, and allow the review process to start.&lt;br /&gt;
&lt;br /&gt;
When you use `arc diff`, Arcanist will try to guess what change you want to offer. If you&#039;ve committed in a branch, it will guess correctly you want to submit the diff between master and this branch (your commit).&lt;br /&gt;
&lt;br /&gt;
You&#039;ll find more information about this on [https://secure.phabricator.com/book/phabricator/article/arcanist_diff/ the Phabricator documentation].&lt;br /&gt;
&lt;br /&gt;
Once reviewed, your change will be live in the master repository. Cheers!&lt;br /&gt;
&lt;br /&gt;
=== Edit a change ===&lt;br /&gt;
&lt;br /&gt;
To edit the change, amend the relevant commit.&lt;br /&gt;
&lt;br /&gt;
  git checkout &amp;lt;the relevant branch&amp;gt;&lt;br /&gt;
  [change something]&lt;br /&gt;
  git add &amp;lt;the files modified&amp;gt;&lt;br /&gt;
  git commit --amend&lt;br /&gt;
  arc diff&lt;br /&gt;
&lt;br /&gt;
If arc complain, try:&lt;br /&gt;
&lt;br /&gt;
  arc diff --update &amp;lt;differential id without D prefix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also use the web interface: Differential allows you to submit a patch to amend your change.&lt;br /&gt;
&lt;br /&gt;
In this case, you edit the files, run `git diff` and copy/paste the result on Phabricator.&lt;br /&gt;
&lt;br /&gt;
=== You can now go on to code ===&lt;br /&gt;
&lt;br /&gt;
Meanwhile review, you can go to another branch and go on to work.&lt;br /&gt;
&lt;br /&gt;
If this change is independent, your new branch must start at master, not at your previous branch:&lt;br /&gt;
&lt;br /&gt;
 git checkout master&lt;br /&gt;
 git checkout -b feature/another-awesome-change&lt;br /&gt;
&lt;br /&gt;
But when your change depends of the previous one, you create a new branch from the last:&lt;br /&gt;
 git checkout -b feature/the-next-change&lt;br /&gt;
&lt;br /&gt;
Then again, code, commit, and send to review with arc diff.&lt;br /&gt;
&lt;br /&gt;
== Review code ==&lt;br /&gt;
&lt;br /&gt;
=== Where are reviews and what can I do there? ===&lt;br /&gt;
&lt;br /&gt;
Reviews are accessible at [{{PhabricatorInstance}}/differential Differential].&lt;br /&gt;
&lt;br /&gt;
In the bottom of a revision page, you&#039;ll find a action menu to accept a revision or request changes.&lt;br /&gt;
&lt;br /&gt;
You can also comment inline, clicking on line numbers.&lt;br /&gt;
&lt;br /&gt;
Everyone can offer comment.&lt;br /&gt;
&lt;br /&gt;
=== Accept a revision ===&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: table; margin: 1em; padding: 0.5em 1.5em; border: 4px solid #aaa; background-color: #f9f9f9;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t self review&#039;&#039;&#039;, ie don&#039;t accept your own revisions.&lt;br /&gt;
&lt;br /&gt;
Consider to &#039;&#039;&#039;land accepted revisions immediately&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: for Salt, that works slightly differently: a test deployment is required before landing, and self review is allowed when a member of the team is alone, and the matter trivial or urgent.&lt;br /&gt;
&lt;br /&gt;
==== What does that mean? ====&lt;br /&gt;
&lt;br /&gt;
An accepted revision is a revision ready to be integrated into the code base (the goal of the CI process), and so to be sent to production environment.&lt;br /&gt;
&lt;br /&gt;
Some projects trigger automatically a new deployment step after a commit has been integrated, for example the Docker images are all configured to rebuild a new image from the latest tag. Websites like https://docker.nasqueron.org/ or https://assets.nasqueron.org/ are also automatically updated.&lt;br /&gt;
&lt;br /&gt;
By accepting a revision, you express your confidence it&#039;s ready and sounds safe to deploy.&lt;br /&gt;
&lt;br /&gt;
Does your project have special guidelines for code review?&lt;br /&gt;
* If so, follow them.&lt;br /&gt;
* If not, any member considering themself a member of the project can accept any revision from another project member.&lt;br /&gt;
&lt;br /&gt;
Next step is to land the accepted revision. This currently requires &amp;lt;code&amp;gt;arc land&amp;lt;/code&amp;gt;, but we&#039;re working to allow to land from the web UI.&lt;br /&gt;
&lt;br /&gt;
==== Merge the revision to master ====&lt;br /&gt;
In Phabricator language, that&#039;s called &#039;&#039;land the revision&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Use a clean and up-to-date master: &amp;lt;code&amp;gt;git fetch &amp;amp;&amp;amp; git checkout master &amp;amp;&amp;amp; git reset --hard origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
# Get the patch: &amp;lt;code&amp;gt;arc patch D300&amp;lt;/code&amp;gt;&lt;br /&gt;
# Merge the patch to master: &amp;lt;code&amp;gt;arc land&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The differential UI gives the next step in the header.&lt;br /&gt;
&lt;br /&gt;
==== After the merge ====&lt;br /&gt;
&lt;br /&gt;
Stay reachable and watch the post commit actions (e.g. does the Docker image has been successfully built on Docker Hub?). Be ready to use &amp;lt;code&amp;gt;git revert&amp;lt;/code&amp;gt; to revert the change if something is wrong.&lt;br /&gt;
&lt;br /&gt;
=== When can I self review? ===&lt;br /&gt;
&lt;br /&gt;
Self review is frowned upon, but in two cases it could be needed:&lt;br /&gt;
* when there is an emergency, for example to fix a security issue, when no one in duty can be found;&lt;br /&gt;
* when you&#039;re alone on your project, and can&#039;t find someone to review.&lt;br /&gt;
&lt;br /&gt;
=== How to revert a change? ===&lt;br /&gt;
&lt;br /&gt;
A change revert is a commit:&lt;br /&gt;
* you can automatically create by &amp;lt;code&amp;gt;git revert &amp;lt;commit-ish&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* you craft manually, like any other change&lt;br /&gt;
&lt;br /&gt;
Then, you follow the exact same instructions you would for a regular change: send to the code review, review it, land it.&lt;br /&gt;
&lt;br /&gt;
The revision should be accepted by:&lt;br /&gt;
* the original commit author if present at deployment time&lt;br /&gt;
* someone you work with to solve currently the issue if the author isn&#039;t there&lt;br /&gt;
* yourself if you&#039;re alone&lt;br /&gt;
&lt;br /&gt;
The review should contain a comment about what is broken in the reverted commit, excepted if there is already such information in Audit or Differential.&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
* http://www.unixwiz.net/techtips/ssh-agent-forwarding.html&lt;br /&gt;
&lt;br /&gt;
[[Category:Reference]]&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:80E6:B029:8213:E8A1</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=How_to_contribute_code&amp;diff=576</id>
		<title>How to contribute code</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=How_to_contribute_code&amp;diff=576"/>
		<updated>2016-11-12T02:39:27Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:80E6:B029:8213:E8A1: /* Accept a revision */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This guide explains how to contribute code to a Nasqueron project.&lt;br /&gt;
&lt;br /&gt;
We use Phabricator for tasks and code reviews, our instance is called DevCentral and is accessible at {{PhabricatorInstance}}.&lt;br /&gt;
&lt;br /&gt;
In a nutshell, to submit a change, you need to clone the relevant repository, create a new branch, commit and send this commit to our code review server. Pull requests on GitHub could be fine for trivial hit and run patches, but if you add a new feature, use our code review server.&lt;br /&gt;
&lt;br /&gt;
== Clone the repository ==&lt;br /&gt;
On DevCentral, go to [{{PhabricatorInstance}}/diffusion/ Diffusion]. Each repository will offer you a clone command.&lt;br /&gt;
&lt;br /&gt;
For example, it could be:&lt;br /&gt;
 git clone ssh://git@github.com/nasqueron/someproject&lt;br /&gt;
&lt;br /&gt;
Internal projects are directly hosted on DevCentral. In this case, you need to [{{PhabricatorInstance}}/settings/panel/ssh/ add your SSH key to the settings].&lt;br /&gt;
&lt;br /&gt;
If the repository is on GitHub but not on DevCentral, please request it to be added. For that, create a task on DevCentral and add DevCentral as project You can use the priority Unbreak now! if you already have a change to review, high if you plan to do it in the next 12 hours, normal for 24 hours, low for one week.&lt;br /&gt;
&lt;br /&gt;
== Code something ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: table; margin: 1em; padding: 0.5em 1.5em; border: 4px solid #aaa; background-color: #f9f9f9;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Never work in Git master branch&#039;&#039;&#039;, when you are submitting new code.&lt;br /&gt;
&lt;br /&gt;
Always create a new branch for each change, code feature or bug fix.&lt;br /&gt;
&lt;br /&gt;
The master branch is only to merge changes, not to work.&lt;br /&gt;
&lt;br /&gt;
Trust us, you want to code and have fun, not to spend an evening to fix your Git repositories merging infinite conflicts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remember: One new change, one new branch.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To fix a bug, or code a new feature, three operations are needed:&lt;br /&gt;
# code it&lt;br /&gt;
# commit it&lt;br /&gt;
# review it&lt;br /&gt;
&lt;br /&gt;
=== Code it ===&lt;br /&gt;
&lt;br /&gt;
Before to start to code, create a new branch:&lt;br /&gt;
&lt;br /&gt;
 git checkout -b feature/something-awesome&lt;br /&gt;
&lt;br /&gt;
If you fix a bug, use the number of the bug on DevCentral:&lt;br /&gt;
&lt;br /&gt;
 git checkout -b bug/T434&lt;br /&gt;
&lt;br /&gt;
Then code something, test it, reread it.&lt;br /&gt;
&lt;br /&gt;
=== Commit it ===&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready, you can commit it.&lt;br /&gt;
&lt;br /&gt;
Your commit message should use the following format:&lt;br /&gt;
&lt;br /&gt;
* a title, as short as possible, with 43 max characters recommended, 55 characters as soft limit, 72 as hard limit&lt;br /&gt;
* some paragraphs, but wrap lines &amp;lt; 72 characters. You can extend at 80 (soft limit) or 100 (hard limit) if really needed.&lt;br /&gt;
&lt;br /&gt;
The title should be at imperative, not followed by a final dot.&lt;br /&gt;
&lt;br /&gt;
The paragraphs should focus to explain why this change is needed.&lt;br /&gt;
&lt;br /&gt;
See http://chris.beams.io/posts/git-commit/ for more best practices.&lt;br /&gt;
&lt;br /&gt;
=== Review it ===&lt;br /&gt;
 arc diff&lt;br /&gt;
&lt;br /&gt;
This will send your change on DevCentral, and allow the review process to start.&lt;br /&gt;
&lt;br /&gt;
When you use `arc diff`, Arcanist will try to guess what change you want to offer. If you&#039;ve committed in a branch, it will guess correctly you want to submit the diff between master and this branch (your commit).&lt;br /&gt;
&lt;br /&gt;
You&#039;ll find more information about this on [https://secure.phabricator.com/book/phabricator/article/arcanist_diff/ the Phabricator documentation].&lt;br /&gt;
&lt;br /&gt;
Once reviewed, your change will be live in the master repository. Cheers!&lt;br /&gt;
&lt;br /&gt;
=== Edit a change ===&lt;br /&gt;
&lt;br /&gt;
To edit the change, amend the relevant commit.&lt;br /&gt;
&lt;br /&gt;
  git checkout &amp;lt;the relevant branch&amp;gt;&lt;br /&gt;
  [change something]&lt;br /&gt;
  git add &amp;lt;the files modified&amp;gt;&lt;br /&gt;
  git commit --amend&lt;br /&gt;
  arc diff&lt;br /&gt;
&lt;br /&gt;
If arc complain, try:&lt;br /&gt;
&lt;br /&gt;
  arc diff --update &amp;lt;differential id without D prefix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also use the web interface: Differential allows you to submit a patch to amend your change.&lt;br /&gt;
&lt;br /&gt;
In this case, you edit the files, run `git diff` and copy/paste the result on Phabricator.&lt;br /&gt;
&lt;br /&gt;
=== You can now go on to code ===&lt;br /&gt;
&lt;br /&gt;
Meanwhile review, you can go to another branch and go on to work.&lt;br /&gt;
&lt;br /&gt;
If this change is independent, your new branch must start at master, not at your previous branch:&lt;br /&gt;
&lt;br /&gt;
 git checkout master&lt;br /&gt;
 git checkout -b feature/another-awesome-change&lt;br /&gt;
&lt;br /&gt;
But when your change depends of the previous one, you create a new branch from the last:&lt;br /&gt;
 git checkout -b feature/the-next-change&lt;br /&gt;
&lt;br /&gt;
Then again, code, commit, and send to review with arc diff.&lt;br /&gt;
&lt;br /&gt;
== Review code ==&lt;br /&gt;
&lt;br /&gt;
=== Where are reviews and what can I do there? ===&lt;br /&gt;
&lt;br /&gt;
Reviews are accessible at [{{PhabricatorInstance}}/differential Differential].&lt;br /&gt;
&lt;br /&gt;
In the bottom of a revision page, you&#039;ll find a action menu to accept a revision or request changes.&lt;br /&gt;
&lt;br /&gt;
You can also comment inline, clicking on line numbers.&lt;br /&gt;
&lt;br /&gt;
Everyone can offer comment.&lt;br /&gt;
&lt;br /&gt;
=== Accept a revision ===&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: table; margin: 1em; padding: 0.5em 1.5em; border: 4px solid #aaa; background-color: #f9f9f9;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t self review&#039;&#039;&#039;, ie don&#039;t accept your own revisions.&lt;br /&gt;
&lt;br /&gt;
Consider to &#039;&#039;&#039;land accepted revisions immediately&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: the operations repository work slightly differently: a tesqt deployment is required before landing, self review allowed when a member of the team is alone, and the matter trivial or urgent.&lt;br /&gt;
&lt;br /&gt;
==== What does that mean? ====&lt;br /&gt;
&lt;br /&gt;
An accepted revision is a revision ready to be integrated into the code base (the goal of the CI process), and so to be sent to production environment.&lt;br /&gt;
&lt;br /&gt;
Some projects trigger automatically a new deployment step after a commit has been integrated, for example the Docker images are all configured to rebuild a new image from the latest tag. Websites like https://docker.nasqueron.org/ or https://assets.nasqueron.org/ are also automatically updated.&lt;br /&gt;
&lt;br /&gt;
By accepting a revision, you express your confidence it&#039;s ready and sounds safe to deploy.&lt;br /&gt;
&lt;br /&gt;
Does your project have special guidelines for code review?&lt;br /&gt;
* If so, follow them.&lt;br /&gt;
* If not, any member considering themself a member of the project can accept any revision from another project member.&lt;br /&gt;
&lt;br /&gt;
Next step is to land the accepted revision. This currently requires &amp;lt;code&amp;gt;arc land&amp;lt;/code&amp;gt;, but we&#039;re working to allow to land from the web UI.&lt;br /&gt;
&lt;br /&gt;
==== Merge the revision to master ====&lt;br /&gt;
In Phabricator language, that&#039;s called &#039;&#039;land the revision&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Use a clean and up-to-date master: &amp;lt;code&amp;gt;git fetch &amp;amp;&amp;amp; git checkout master &amp;amp;&amp;amp; git reset --hard origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
# Get the patch: &amp;lt;code&amp;gt;arc patch D300&amp;lt;/code&amp;gt;&lt;br /&gt;
# Merge the patch to master: &amp;lt;code&amp;gt;arc land&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The differential UI gives the next step in the header.&lt;br /&gt;
&lt;br /&gt;
==== After the merge ====&lt;br /&gt;
&lt;br /&gt;
Stay reachable and watch the post commit actions (e.g. does the Docker image has been successfully built on Docker Hub?). Be ready to use &amp;lt;code&amp;gt;git revert&amp;lt;/code&amp;gt; to revert the change if something is wrong.&lt;br /&gt;
&lt;br /&gt;
=== When can I self review? ===&lt;br /&gt;
&lt;br /&gt;
Self review is frowned upon, but in two cases it could be needed:&lt;br /&gt;
* when there is an emergency, for example to fix a security issue, when no one in duty can be found;&lt;br /&gt;
* when you&#039;re alone on your project, and can&#039;t find someone to review.&lt;br /&gt;
&lt;br /&gt;
=== How to revert a change? ===&lt;br /&gt;
&lt;br /&gt;
A change revert is a commit:&lt;br /&gt;
* you can automatically create by &amp;lt;code&amp;gt;git revert &amp;lt;commit-ish&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* you craft manually, like any other change&lt;br /&gt;
&lt;br /&gt;
Then, you follow the exact same instructions you would for a regular change: send to the code review, review it, land it.&lt;br /&gt;
&lt;br /&gt;
The revision should be accepted by:&lt;br /&gt;
* the original commit author if present at deployment time&lt;br /&gt;
* someone you work with to solve currently the issue if the author isn&#039;t there&lt;br /&gt;
* yourself if you&#039;re alone&lt;br /&gt;
&lt;br /&gt;
The review should contain a comment about what is broken in the reverted commit, excepted if there is already such information in Audit or Differential.&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
* http://www.unixwiz.net/techtips/ssh-agent-forwarding.html&lt;br /&gt;
&lt;br /&gt;
[[Category:Reference]]&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:80E6:B029:8213:E8A1</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/Deploy_with_Salt&amp;diff=575</id>
		<title>Operations grimoire/Deploy with Salt</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/Deploy_with_Salt&amp;diff=575"/>
		<updated>2016-11-07T20:24:39Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:3113:262:4553:BBAF: /* Salt commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Where to work? ==&lt;br /&gt;
* We deploy from Ysul using:&lt;br /&gt;
** /opt/nasqueron-operations as our local copy of rOPS, authoritative for Salt&lt;br /&gt;
** /opt/staging for web application content&lt;br /&gt;
* You need to belong to the &amp;lt;code&amp;gt;salt&amp;lt;/code&amp;gt; group to be able to control Salt&lt;br /&gt;
* You need to belong to the &amp;lt;code&amp;gt;deploy&amp;lt;/code&amp;gt; group to be able to update /opt/staging (salt is a member of deploy)&lt;br /&gt;
* You want this alias: &amp;lt;code&amp;gt;alias salt sudo -u salt salt&amp;lt;/code&amp;gt; (tcsh syntax)&lt;br /&gt;
* Check salt-master is run, if not &amp;lt;code&amp;gt;service salt-master start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Deployment workflow ==&lt;br /&gt;
=== Apply a new Salt state ===&lt;br /&gt;
# On your laptop, prepare and upload a change to Differential against rOPS repository&lt;br /&gt;
# Get the change on Ysul: &amp;lt;code&amp;gt;arc patch D607&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ask Salt to apply the change&lt;br /&gt;
# Log on #nasqueron-operations something like &amp;lt;code&amp;gt;[Eglide] New user account: amj (D607)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Once working, you can merge it to master&lt;br /&gt;
=== Deploy a web site ===&lt;br /&gt;
# Commit as needed&lt;br /&gt;
# Go to /opt/staging relevant subdirectory and fetch code&lt;br /&gt;
# Ask Salt to apply the matching state (if in doubt, a full run is &amp;lt;code&amp;gt;salt &#039;*&#039; state.highstate&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Salt commands ==&lt;br /&gt;
To apply one state or a directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;salt eglide state.apply roles/shellserver/users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To apply all:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;salt eglide state.highstate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace &amp;lt;code&amp;gt;eglide&amp;lt;/code&amp;gt; by the server name, or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to target all machines.&lt;br /&gt;
&lt;br /&gt;
When you&#039;ve a new state, ensure it&#039;s called from &amp;lt;code&amp;gt;top.sls&amp;lt;code&amp;gt; file, as the repository root.&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:3113:262:4553:BBAF</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=How_to_contribute_code&amp;diff=569</id>
		<title>How to contribute code</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=How_to_contribute_code&amp;diff=569"/>
		<updated>2016-10-15T16:07:45Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:D11B:848D:2A93:2B8F: /* Edit a change */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This guide explains how to contribute code to a Nasqueron project.&lt;br /&gt;
&lt;br /&gt;
We use Phabricator for tasks and code reviews, our instance is called DevCentral and is accessible at {{PhabricatorInstance}}.&lt;br /&gt;
&lt;br /&gt;
In a nutshell, to submit a change, you need to clone the relevant repository, create a new branch, commit and send this commit to our code review server. Pull requests on GitHub could be fine for trivial hit and run patches, but if you add a new feature, use our code review server.&lt;br /&gt;
&lt;br /&gt;
== Clone the repository ==&lt;br /&gt;
On DevCentral, go to [{{PhabricatorInstance}}/diffusion/ Diffusion]. Each repository will offer you a clone command.&lt;br /&gt;
&lt;br /&gt;
For example, it could be:&lt;br /&gt;
 git clone ssh://git@github.com/nasqueron/someproject&lt;br /&gt;
&lt;br /&gt;
Internal projects are directly hosted on DevCentral. In this case, you need to [{{PhabricatorInstance}}/settings/panel/ssh/ add your SSH key to the settings].&lt;br /&gt;
&lt;br /&gt;
If the repository is on GitHub but not on DevCentral, please request it to be added. For that, create a task on DevCentral and add DevCentral as project You can use the priority Unbreak now! if you already have a change to review, high if you plan to do it in the next 12 hours, normal for 24 hours, low for one week.&lt;br /&gt;
&lt;br /&gt;
== Code something ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: table; margin: 1em; padding: 0.5em 1.5em; border: 4px solid #aaa; background-color: #f9f9f9;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Never work in Git master branch&#039;&#039;&#039;, when you are submitting new code.&lt;br /&gt;
&lt;br /&gt;
Always create a new branch for each change, code feature or bug fix.&lt;br /&gt;
&lt;br /&gt;
The master branch is only to merge changes, not to work.&lt;br /&gt;
&lt;br /&gt;
Trust us, you want to code and have fun, not to spend an evening to fix your Git repositories merging infinite conflicts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remember: One new change, one new branch.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To fix a bug, or code a new feature, three operations are needed:&lt;br /&gt;
# code it&lt;br /&gt;
# commit it&lt;br /&gt;
# review it&lt;br /&gt;
&lt;br /&gt;
=== Code it ===&lt;br /&gt;
&lt;br /&gt;
Before to start to code, create a new branch:&lt;br /&gt;
&lt;br /&gt;
 git checkout -b feature/something-awesome&lt;br /&gt;
&lt;br /&gt;
If you fix a bug, use the number of the bug on DevCentral:&lt;br /&gt;
&lt;br /&gt;
 git checkout -b bug/T434&lt;br /&gt;
&lt;br /&gt;
Then code something, test it, reread it.&lt;br /&gt;
&lt;br /&gt;
=== Commit it ===&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready, you can commit it.&lt;br /&gt;
&lt;br /&gt;
Your commit message should use the following format:&lt;br /&gt;
&lt;br /&gt;
* a title, as short as possible, with 43 max characters recommended, 55 characters as soft limit, 72 as hard limit&lt;br /&gt;
* some paragraphs, but wrap lines &amp;lt; 72 characters. You can extend at 80 (soft limit) or 100 (hard limit) if really needed.&lt;br /&gt;
&lt;br /&gt;
The title should be at imperative, not followed by a final dot.&lt;br /&gt;
&lt;br /&gt;
The paragraphs should focus to explain why this change is needed.&lt;br /&gt;
&lt;br /&gt;
See http://chris.beams.io/posts/git-commit/ for more best practices.&lt;br /&gt;
&lt;br /&gt;
=== Review it ===&lt;br /&gt;
 arc diff&lt;br /&gt;
&lt;br /&gt;
This will send your change on DevCentral, and allow the review process to start.&lt;br /&gt;
&lt;br /&gt;
When you use `arc diff`, Arcanist will try to guess what change you want to offer. If you&#039;ve committed in a branch, it will guess correctly you want to submit the diff between master and this branch (your commit).&lt;br /&gt;
&lt;br /&gt;
You&#039;ll find more information about this on [https://secure.phabricator.com/book/phabricator/article/arcanist_diff/ the Phabricator documentation].&lt;br /&gt;
&lt;br /&gt;
Once reviewed, your change will be live in the master repository. Cheers!&lt;br /&gt;
&lt;br /&gt;
=== Edit a change ===&lt;br /&gt;
&lt;br /&gt;
To edit the change, amend the relevant commit.&lt;br /&gt;
&lt;br /&gt;
  git checkout &amp;lt;the relevant branch&amp;gt;&lt;br /&gt;
  [change something]&lt;br /&gt;
  git add &amp;lt;the files modified&amp;gt;&lt;br /&gt;
  git commit --amend&lt;br /&gt;
  arc diff&lt;br /&gt;
&lt;br /&gt;
If arc complain, try:&lt;br /&gt;
&lt;br /&gt;
  arc diff --update &amp;lt;differential id without D prefix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also use the web interface: Differential allows you to submit a patch to amend your change.&lt;br /&gt;
&lt;br /&gt;
In this case, you edit the files, run `git diff` and copy/paste the result on Phabricator.&lt;br /&gt;
&lt;br /&gt;
=== You can now go on to code ===&lt;br /&gt;
&lt;br /&gt;
Meanwhile review, you can go to another branch and go on to work.&lt;br /&gt;
&lt;br /&gt;
If this change is independent, your new branch must start at master, not at your previous branch:&lt;br /&gt;
&lt;br /&gt;
 git checkout master&lt;br /&gt;
 git checkout -b feature/another-awesome-change&lt;br /&gt;
&lt;br /&gt;
But when your change depends of the previous one, you create a new branch from the last:&lt;br /&gt;
 git checkout -b feature/the-next-change&lt;br /&gt;
&lt;br /&gt;
Then again, code, commit, and send to review with arc diff.&lt;br /&gt;
&lt;br /&gt;
== Review code ==&lt;br /&gt;
&lt;br /&gt;
=== Where are reviews and what can I do there? ===&lt;br /&gt;
&lt;br /&gt;
Reviews are accessible at [{{PhabricatorInstance}}/differential Differential].&lt;br /&gt;
&lt;br /&gt;
In the bottom of a revision page, you&#039;ll find a action menu to accept a revision or request changes.&lt;br /&gt;
&lt;br /&gt;
You can also comment inline, clicking on line numbers.&lt;br /&gt;
&lt;br /&gt;
Everyone can offer comment.&lt;br /&gt;
&lt;br /&gt;
=== Accept a revision ===&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: table; margin: 1em; padding: 0.5em 1.5em; border: 4px solid #aaa; background-color: #f9f9f9;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t self review&#039;&#039;&#039;, ie don&#039;t accept your own revisions.&lt;br /&gt;
&lt;br /&gt;
Consider to &#039;&#039;&#039;land accepted revisions immediately&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== What does that mean? ====&lt;br /&gt;
&lt;br /&gt;
An accepted revision is a revision ready to be integrated into the code base (the goal of the CI process), and so to be sent to production environment.&lt;br /&gt;
&lt;br /&gt;
Some projects trigger automatically a new deployment step after a commit has been integrated, for example the Docker images are all configured to rebuild a new image from the latest tag. Websites like https://docker.nasqueron.org/ or https://assets.nasqueron.org/ are also automatically updated.&lt;br /&gt;
&lt;br /&gt;
By accepting a revision, you express your confidence it&#039;s ready and sounds safe to deploy.&lt;br /&gt;
&lt;br /&gt;
Does your project have special guidelines for code review?&lt;br /&gt;
* If so, follow them.&lt;br /&gt;
* If not, any member considering themself a member of the project can accept any revision from another project member.&lt;br /&gt;
&lt;br /&gt;
Next step is to land the accepted revision. This currently requires &amp;lt;code&amp;gt;arc land&amp;lt;/code&amp;gt;, but we&#039;re working to allow to land from the web UI.&lt;br /&gt;
&lt;br /&gt;
==== Merge the revision to master ====&lt;br /&gt;
In Phabricator language, that&#039;s called &#039;&#039;land the revision&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Use a clean and up-to-date master: &amp;lt;code&amp;gt;git fetch &amp;amp;&amp;amp; git checkout master &amp;amp;&amp;amp; git reset --hard origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
# Get the patch: &amp;lt;code&amp;gt;arc patch D300&amp;lt;/code&amp;gt;&lt;br /&gt;
# Merge the patch to master: &amp;lt;code&amp;gt;arc land&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The differential UI gives the next step in the header.&lt;br /&gt;
&lt;br /&gt;
==== After the merge ====&lt;br /&gt;
&lt;br /&gt;
Stay reachable and watch the post commit actions (e.g. does the Docker image has been successfully built on Docker Hub?). Be ready to use &amp;lt;code&amp;gt;git revert&amp;lt;/code&amp;gt; to revert the change if something is wrong.&lt;br /&gt;
&lt;br /&gt;
=== When can I self review? ===&lt;br /&gt;
&lt;br /&gt;
Self review is frowned upon, but in two cases it could be needed:&lt;br /&gt;
* when there is an emergency, for example to fix a security issue, when no one in duty can be found;&lt;br /&gt;
* when you&#039;re alone on your project, and can&#039;t find someone to review.&lt;br /&gt;
&lt;br /&gt;
=== How to revert a change? ===&lt;br /&gt;
&lt;br /&gt;
A change revert is a commit:&lt;br /&gt;
* you can automatically create by &amp;lt;code&amp;gt;git revert &amp;lt;commit-ish&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* you craft manually, like any other change&lt;br /&gt;
&lt;br /&gt;
Then, you follow the exact same instructions you would for a regular change: send to the code review, review it, land it.&lt;br /&gt;
&lt;br /&gt;
The revision should be accepted by:&lt;br /&gt;
* the original commit author if present at deployment time&lt;br /&gt;
* someone you work with to solve currently the issue if the author isn&#039;t there&lt;br /&gt;
* yourself if you&#039;re alone&lt;br /&gt;
&lt;br /&gt;
The review should contain a comment about what is broken in the reverted commit, excepted if there is already such information in Audit or Differential.&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
* http://www.unixwiz.net/techtips/ssh-agent-forwarding.html&lt;br /&gt;
&lt;br /&gt;
[[Category:Reference]]&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:D11B:848D:2A93:2B8F</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=PuTTY_with_SSH_key_tutorial&amp;diff=568</id>
		<title>PuTTY with SSH key tutorial</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=PuTTY_with_SSH_key_tutorial&amp;diff=568"/>
		<updated>2016-10-08T18:17:15Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:5542:B7B7:D9B5:6E65: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial shows how to generate a new SSH key, then configure a PuTTY session to use it.&lt;br /&gt;
&lt;br /&gt;
== What&#039;s this? ==&lt;br /&gt;
&lt;br /&gt;
To login to the server, instead of a password, you use a key.&lt;br /&gt;
&lt;br /&gt;
This key is divided in two parts:&lt;br /&gt;
* the public key, you give freely (you can publish it on your webpage for example) where you need to have an access&lt;br /&gt;
* the private key, you keep very safely and privately for you and only you&lt;br /&gt;
&lt;br /&gt;
The public key is more like a login, the privave key more like a password.&lt;br /&gt;
&lt;br /&gt;
== Generate a new SSH key ==&lt;br /&gt;
PuTTY ships a software to generate a key, PuTTYGen. You can download it on http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 1.&#039;&#039;&#039; Run it, and you&#039;ve this screen. Click on the generate button.&lt;br /&gt;
&lt;br /&gt;
[[File:PuTTY_Key_Generator_2.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 2.&#039;&#039;&#039; Move the mouse to generate some randomness. That will be used to generate a random key, a key we can&#039;t guess.&lt;br /&gt;
&lt;br /&gt;
[[File:PuTTY_Key_Generator.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3.&#039;&#039;&#039; Copy/paste the content of first textarea (ssh-rsa ...): this is your public key.&lt;br /&gt;
&lt;br /&gt;
Save safely where you want the key (&amp;quot;Save private key&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
If you set a password, the key will be encrypted, and a password asked each time you use the key.&lt;br /&gt;
&lt;br /&gt;
[[File:PuTTY_Key_Generator_3.png]]&lt;br /&gt;
&lt;br /&gt;
== Configure a PuTTY session to log in with a SSH key ==&lt;br /&gt;
&lt;br /&gt;
[[File:Session_Panel_on_PuTTY.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Data_Panel_on_PuTTY.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Authentication_Panel_on_PuTTY.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Session_Panel_on_PuTTY_2.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Session_Panel_on_PuTTY_3.png]]&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:5542:B7B7:D9B5:6E65</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=PuTTY_with_SSH_key_tutorial&amp;diff=567</id>
		<title>PuTTY with SSH key tutorial</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=PuTTY_with_SSH_key_tutorial&amp;diff=567"/>
		<updated>2016-10-08T17:51:59Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:5542:B7B7:D9B5:6E65: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial shows how to generate a new SSH key, then configure a PuTTY session to use it.&lt;br /&gt;
&lt;br /&gt;
== Generate a new SSH key ==&lt;br /&gt;
[[File:PuTTY_Key_Generator_2.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:PuTTY_Key_Generator.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:PuTTY_Key_Generator_3.png]]&lt;br /&gt;
&lt;br /&gt;
== Configure a PuTTY session to log in with a SSH key ==&lt;br /&gt;
&lt;br /&gt;
[[File:Session_Panel_on_PuTTY.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Data_Panel_on_PuTTY.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Authentication_Panel_on_PuTTY.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Session_Panel_on_PuTTY_2.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Session_Panel_on_PuTTY_3.png]]&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:5542:B7B7:D9B5:6E65</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/Deploy_with_Salt&amp;diff=566</id>
		<title>Operations grimoire/Deploy with Salt</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/Deploy_with_Salt&amp;diff=566"/>
		<updated>2016-09-12T05:03:05Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:E8A0:AB13:681B:5C9F: /* Deployment workflow */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Where to work? ==&lt;br /&gt;
* We deploy from Ysul using:&lt;br /&gt;
** /opt/nasqueron-operations as our local copy of rOPS, authoritative for Salt&lt;br /&gt;
** /opt/staging for web application content&lt;br /&gt;
* You need to belong to the &amp;lt;code&amp;gt;salt&amp;lt;/code&amp;gt; group to be able to control Salt&lt;br /&gt;
* You need to belong to the &amp;lt;code&amp;gt;deploy&amp;lt;/code&amp;gt; group to be able to update /opt/staging (salt is a member of deploy)&lt;br /&gt;
* You want this alias: &amp;lt;code&amp;gt;alias salt sudo -u salt salt&amp;lt;/code&amp;gt; (tcsh syntax)&lt;br /&gt;
* Check salt-master is run, if not &amp;lt;code&amp;gt;service salt-master start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Deployment workflow ==&lt;br /&gt;
=== Apply a new Salt state ===&lt;br /&gt;
# On your laptop, prepare and upload a change to Differential against rOPS repository&lt;br /&gt;
# Get the change on Ysul: &amp;lt;code&amp;gt;arc patch D607&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ask Salt to apply the change&lt;br /&gt;
# Log on #nasqueron-operations something like &amp;lt;code&amp;gt;[Eglide] New user account: amj (D607)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Once working, you can merge it to master&lt;br /&gt;
=== Deploy a web site ===&lt;br /&gt;
# Commit as needed&lt;br /&gt;
# Go to /opt/staging relevant subdirectory and fetch code&lt;br /&gt;
# Ask Salt to apply the matching state (if in doubt, a full run is &amp;lt;code&amp;gt;salt &#039;*&#039; state.highstate&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Salt commands ==&lt;br /&gt;
To apply one state or a directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;salt eglide state.apply roles/shellserver/users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To apply all:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;salt eglide state.highstate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace &amp;lt;code&amp;gt;eglide&amp;lt;code&amp;gt; by the server name, or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to target all machines.&lt;br /&gt;
&lt;br /&gt;
When you&#039;ve a new state, ensure it&#039;s called from &amp;lt;code&amp;gt;top.sls&amp;lt;code&amp;gt; file, as the repository root.&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:E8A0:AB13:681B:5C9F</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/Deploy_with_Salt&amp;diff=565</id>
		<title>Operations grimoire/Deploy with Salt</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/Deploy_with_Salt&amp;diff=565"/>
		<updated>2016-09-12T05:00:27Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:E8A0:AB13:681B:5C9F: /* Deployment workflow */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Where to work? ==&lt;br /&gt;
* We deploy from Ysul using:&lt;br /&gt;
** /opt/nasqueron-operations as our local copy of rOPS, authoritative for Salt&lt;br /&gt;
** /opt/staging for web application content&lt;br /&gt;
* You need to belong to the &amp;lt;code&amp;gt;salt&amp;lt;/code&amp;gt; group to be able to control Salt&lt;br /&gt;
* You need to belong to the &amp;lt;code&amp;gt;deploy&amp;lt;/code&amp;gt; group to be able to update /opt/staging (salt is a member of deploy)&lt;br /&gt;
* You want this alias: &amp;lt;code&amp;gt;alias salt sudo -u salt salt&amp;lt;/code&amp;gt; (tcsh syntax)&lt;br /&gt;
* Check salt-master is run, if not &amp;lt;code&amp;gt;service salt-master start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Deployment workflow ==&lt;br /&gt;
# On your laptop, prepare and upload a change to Differential against rOPS repository&lt;br /&gt;
# Get the change on Ysul: &amp;lt;code&amp;gt;arc patch D607&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ask Salt to apply the change&lt;br /&gt;
# Log on #nasqueron-operations something like &amp;lt;code&amp;gt;[Eglide] New user account: amj (D607)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Once working, you can merge it to master&lt;br /&gt;
&lt;br /&gt;
== Salt commands ==&lt;br /&gt;
To apply one state or a directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;salt eglide state.apply roles/shellserver/users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To apply all:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;salt eglide state.highstate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace &amp;lt;code&amp;gt;eglide&amp;lt;code&amp;gt; by the server name, or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to target all machines.&lt;br /&gt;
&lt;br /&gt;
When you&#039;ve a new state, ensure it&#039;s called from &amp;lt;code&amp;gt;top.sls&amp;lt;code&amp;gt; file, as the repository root.&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:E8A0:AB13:681B:5C9F</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/Deploy_with_Salt&amp;diff=564</id>
		<title>Operations grimoire/Deploy with Salt</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/Deploy_with_Salt&amp;diff=564"/>
		<updated>2016-09-12T05:00:09Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:E8A0:AB13:681B:5C9F: /* Where to work? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Where to work? ==&lt;br /&gt;
* We deploy from Ysul using:&lt;br /&gt;
** /opt/nasqueron-operations as our local copy of rOPS, authoritative for Salt&lt;br /&gt;
** /opt/staging for web application content&lt;br /&gt;
* You need to belong to the &amp;lt;code&amp;gt;salt&amp;lt;/code&amp;gt; group to be able to control Salt&lt;br /&gt;
* You need to belong to the &amp;lt;code&amp;gt;deploy&amp;lt;/code&amp;gt; group to be able to update /opt/staging (salt is a member of deploy)&lt;br /&gt;
* You want this alias: &amp;lt;code&amp;gt;alias salt sudo -u salt salt&amp;lt;/code&amp;gt; (tcsh syntax)&lt;br /&gt;
* Check salt-master is run, if not &amp;lt;code&amp;gt;service salt-master start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Deployment workflow ==&lt;br /&gt;
# On your laptop, prepare and upload a change to Differential against rOPS repository&lt;br /&gt;
# Get the change on Ysul: &amp;lt;code&amp;gt;arc patch D607&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ask Salt to apply the change&lt;br /&gt;
# Log on #nasqueron-operations something like &amp;lt;code&amp;gt;[Eglide] New user account: amj (D607)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Once working, you can merge it to master&lt;br /&gt;
&lt;br /&gt;
== Salt commands ==&lt;br /&gt;
To apply one state or a directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;salt eglide state.apply roles/shellserver/users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To apply all:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;salt eglide state.highstate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace &amp;lt;code&amp;gt;eglide&amp;lt;code&amp;gt; by the server name, or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to target all machines.&lt;br /&gt;
&lt;br /&gt;
When you&#039;ve a new state, ensure it&#039;s called from &amp;lt;code&amp;gt;top.sls&amp;lt;code&amp;gt; file, as the repository root.&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:E8A0:AB13:681B:5C9F</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/Deploy_with_Salt&amp;diff=563</id>
		<title>Operations grimoire/Deploy with Salt</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/Deploy_with_Salt&amp;diff=563"/>
		<updated>2016-09-12T04:59:29Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:E8A0:AB13:681B:5C9F: /* Where to work? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Where to work? ==&lt;br /&gt;
* We deploy from Ysul using:&lt;br /&gt;
** /opt/nasqueron-operations as our local copy of rOPS, authoritative for Salt&lt;br /&gt;
** /opt/stating for web application content&lt;br /&gt;
* You need to belong to the &amp;lt;code&amp;gt;salt&amp;lt;/code&amp;gt; group&lt;br /&gt;
* You want this alias: &amp;lt;code&amp;gt;alias salt sudo -u salt salt&amp;lt;/code&amp;gt; (tcsh syntax)&lt;br /&gt;
* Check salt-master is run, if not &amp;lt;code&amp;gt;service salt-master start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Deployment workflow ==&lt;br /&gt;
# On your laptop, prepare and upload a change to Differential against rOPS repository&lt;br /&gt;
# Get the change on Ysul: &amp;lt;code&amp;gt;arc patch D607&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ask Salt to apply the change&lt;br /&gt;
# Log on #nasqueron-operations something like &amp;lt;code&amp;gt;[Eglide] New user account: amj (D607)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Once working, you can merge it to master&lt;br /&gt;
&lt;br /&gt;
== Salt commands ==&lt;br /&gt;
To apply one state or a directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;salt eglide state.apply roles/shellserver/users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To apply all:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;salt eglide state.highstate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace &amp;lt;code&amp;gt;eglide&amp;lt;code&amp;gt; by the server name, or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to target all machines.&lt;br /&gt;
&lt;br /&gt;
When you&#039;ve a new state, ensure it&#039;s called from &amp;lt;code&amp;gt;top.sls&amp;lt;code&amp;gt; file, as the repository root.&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:E8A0:AB13:681B:5C9F</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/Sites_on_Ysul&amp;diff=562</id>
		<title>Operations grimoire/Sites on Ysul</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/Sites_on_Ysul&amp;diff=562"/>
		<updated>2016-09-12T04:57:51Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:E8A0:AB13:681B:5C9F: Created page with &amp;quot;Sites on Ysul are deployed to /var/wwwroot.  Four processes are known: * through custom deployment script (e.g. Zed, Nasqueron Tools) * through Git (e.g. www.espace-win.org ar...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sites on Ysul are deployed to /var/wwwroot.&lt;br /&gt;
&lt;br /&gt;
Four processes are known:&lt;br /&gt;
* through custom deployment script (e.g. Zed, Nasqueron Tools)&lt;br /&gt;
* through Git (e.g. www.espace-win.org archive)&lt;br /&gt;
* through Jenkins task (e.g. dæghrefn.nasqueron.org)&lt;br /&gt;
* without any deployment workflow&lt;br /&gt;
&lt;br /&gt;
To deploy a Jenkins-powered site, just commit to master and the deploy job will run automatically.&lt;br /&gt;
&lt;br /&gt;
For other sites, reach Dereckson for guidance and support.&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:E8A0:AB13:681B:5C9F</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/Sites_on_Eglide&amp;diff=561</id>
		<title>Operations grimoire/Sites on Eglide</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/Sites_on_Eglide&amp;diff=561"/>
		<updated>2016-09-12T04:53:43Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:E8A0:AB13:681B:5C9F: Created page with &amp;quot;Sites on Eglide are fully managed through Salt configuration.  == www.eglide.org == # On the Salt master, go to /opt/staging/wwwroot/eglide.org # Pull new code through &amp;lt;code&amp;gt;g...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sites on Eglide are fully managed through Salt configuration.&lt;br /&gt;
&lt;br /&gt;
== www.eglide.org ==&lt;br /&gt;
# On the Salt master, go to /opt/staging/wwwroot/eglide.org&lt;br /&gt;
# Pull new code through &amp;lt;code&amp;gt;git fetch &amp;amp;&amp;amp; git log HEAD..origin/master&amp;lt;/code&amp;gt; and if changes are as expected &amp;lt;code&amp;gt;git rebase master&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Run &amp;lt;code&amp;gt;salt eglide state.apply roles/shellserver/eglide-website&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:E8A0:AB13:681B:5C9F</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire&amp;diff=560</id>
		<title>Operations grimoire</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire&amp;diff=560"/>
		<updated>2016-09-12T04:51:07Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:E8A0:AB13:681B:5C9F: /* Services configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the Nasqueron operations grimoire (NOG).&lt;br /&gt;
&lt;br /&gt;
== Infrastructure ==&lt;br /&gt;
* [[/Docker engine]]&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
=== Identity management ===&lt;br /&gt;
* [[/Login]] (Auth Grove)&lt;br /&gt;
&lt;br /&gt;
=== Collaborative tools ===&lt;br /&gt;
* [[/Dæghrefn]] (eggdrop)&lt;br /&gt;
* [[/DevCentral]] (Phabricator)&lt;br /&gt;
* [[/Etherpad]]&lt;br /&gt;
&lt;br /&gt;
=== CI/CD ===&lt;br /&gt;
* [[/Broker]]&lt;br /&gt;
* [[/Jenkins]]&lt;br /&gt;
* [[/Notifications center]]&lt;br /&gt;
* [[/Vault]]&lt;br /&gt;
&lt;br /&gt;
== Other web sites ==&lt;br /&gt;
* [[/Sites on Eglide]]&lt;br /&gt;
* [[/Sites on Ysul]]&lt;br /&gt;
== Services configuration ==&lt;br /&gt;
&#039;&#039;This section contains general information not related to a specific service.&#039;&#039;&lt;br /&gt;
* [[/SSL certificates]] (Let&#039;s encrypt / letsencrypt)&lt;br /&gt;
&lt;br /&gt;
== Checklists ==&lt;br /&gt;
=== Docker ===&lt;br /&gt;
* [[/Restart a Docker engine]]&lt;br /&gt;
* [[/Dwellers to DevCentral]]&lt;br /&gt;
* [[/Git operations in production containers]]&lt;br /&gt;
&lt;br /&gt;
=== Salt ===&lt;br /&gt;
* [[/Deploy with Salt]]&lt;br /&gt;
* [[/Create and revoke user accounts on Salt servers]]&lt;br /&gt;
&lt;br /&gt;
== Appendices ==&lt;br /&gt;
* [[/Policies]]&lt;br /&gt;
* [[/Contacts]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Reference]]&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:E8A0:AB13:681B:5C9F</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Poem&amp;diff=559</id>
		<title>Poem</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Poem&amp;diff=559"/>
		<updated>2016-09-05T21:20:28Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:985C:4F3C:AB66:5056: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;-moz-column-width: 20em;&amp;quot;&amp;gt;I was born in a water moon. Some people, especially its inhabitants, called it a planet, but as it was only a little over two hundred kilometres in diameter, &#039;moon&#039; seems the more accurate term. The moon was made entirely of water, by which I mean it was a globe that not only had no land, but no rock either, a sphere with no solid core at all, just liquid water, all the way down to the very centre of the globe.&lt;br /&gt;
&lt;br /&gt;
If it had been much bigger the moon would have had a core of ice, for water, though supposedly incompressible, is not entirely so, and will change under extremes of pressure to become ice. (If you are used to living on a planet where ice floats on the surface of water, this seems odd and even wrong, but nevertheless it is the case.) The moon was not quite of a size for an ice core to form, and therefore one could, if one was sufficiently hardy, and adequately proof against the water pressure, make one&#039;s way down, through the increasing weight of water above, to the very centre of the moon.&lt;br /&gt;
&lt;br /&gt;
Where a strange thing happened.&lt;br /&gt;
&lt;br /&gt;
For here, at the very centre of this watery globe, there seemed to be no gravity. There was colossal pressure, certainly, pressing in from every side, but one was in effect weightless (on the outside of a planet, moon or other body, watery or not, one is always being pulled towards its centre; once at its centre one is being pulled equally in all directions), and indeed the pressure around one was, for the same reason, not quite as great as one might have expected it to be, given the mass of water that the moon was made up from.&lt;br /&gt;
&lt;br /&gt;
This was, of course,—&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Iain M. Banks&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Divide by site ==&lt;br /&gt;
&lt;br /&gt;
;Paragraph 1&lt;br /&gt;
* &#039;&#039;I was born in a water moon&#039;&#039; -&amp;gt; free&lt;br /&gt;
* &#039;&#039;Some people, especially its inhabitants, called it a planet&#039;&#039; -&amp;gt; [[Planet|planet.]]&lt;br /&gt;
* &#039;&#039;But as it was only a little over two hundred kilometres in diameter, &#039;moon&#039; seems the more accurate term.&#039;&#039; -&amp;gt; free&lt;br /&gt;
* &#039;&#039;The moon was made entirely of water&#039;&#039; -&amp;gt; free&lt;br /&gt;
* &#039;&#039;by which I mean it was a globe that not only had no land, but no rock either&#039;&#039; -&amp;gt; free&lt;br /&gt;
* &#039;&#039;a sphere with no solid core at all&#039;&#039; -&amp;gt; databases&lt;br /&gt;
* &#039;&#039;just liquid water, all the way down to the very centre of the globe.&#039;&#039; -&amp;gt; blog&lt;br /&gt;
&lt;br /&gt;
;Paragraph 2&lt;br /&gt;
* &#039;&#039;If it had been much bigger the moon would have had a core of ice&#039;&#039; -&amp;gt; devcentral&lt;br /&gt;
* &#039;&#039;for water, though supposedly incompressible, is not entirely so&#039;&#039; -&amp;gt; tools&lt;br /&gt;
* &#039;&#039;and will change under extremes of pressure to become ice.&#039;&#039; -&amp;gt; free (for a crytography tool?)&lt;br /&gt;
* &#039;&#039;If you are used to living on a planet&#039;&#039; -&amp;gt; free&lt;br /&gt;
* &#039;&#039;where ice floats on the surface of water&#039;&#039; -&amp;gt; forum&lt;br /&gt;
* &#039;&#039;this seems odd and even wrong, but nevertheless it is the case.&#039;&#039; -&amp;gt; server log&lt;br /&gt;
* &#039;&#039;The moon was not quite of a size for an ice core to form&#039;&#039; -&amp;gt; free&lt;br /&gt;
* &#039;&#039;and therefore one could, if one was sufficiently hardy, and adequately proof against the water pressure, make one&#039;s way down&#039;&#039; -&amp;gt; docker&lt;br /&gt;
* &#039;&#039;through the increasing weight of water above&#039;&#039; -&amp;gt; free&lt;br /&gt;
* &#039;&#039;to the very centre of the moon.&#039;&#039; -&amp;gt; free&lt;br /&gt;
&lt;br /&gt;
[[Category:Nasqueron documentation]]&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:985C:4F3C:AB66:5056</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/Etherpad&amp;diff=555</id>
		<title>Operations grimoire/Etherpad</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/Etherpad&amp;diff=555"/>
		<updated>2016-08-25T00:45:16Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:6589:819A:61D0:B540: /* Upgrade code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Shared between Nasqueron and Wolfplex ==&lt;br /&gt;
The same Etherpad installation is served at two domains:&lt;br /&gt;
* https://pad.wolfplex.be/&lt;br /&gt;
* https://pad.nasqueron.org/&lt;br /&gt;
&lt;br /&gt;
== Upgrade code ==&lt;br /&gt;
&lt;br /&gt;
The easiest way is to spin a new container.&lt;br /&gt;
&lt;br /&gt;
You can also upgrade code in the live container, updating Git code then restarting Node:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
$ docker exec -it etherpad bash&lt;br /&gt;
$ git pull&lt;br /&gt;
…&lt;br /&gt;
Updating 2e81b39..45266f9&lt;br /&gt;
…&lt;br /&gt;
$ logout&lt;br /&gt;
$ docker restart etherpad&lt;br /&gt;
$ docker logs etherpad&lt;br /&gt;
…&lt;br /&gt;
[2016-08-25 00:40:24.711] [INFO] console - Your Etherpad version is 1.6.0 (45266f9)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check the two versions match.&lt;br /&gt;
&lt;br /&gt;
Note most recent code lives in the develop branch, not the master one.&lt;br /&gt;
&lt;br /&gt;
== Launch container ==&lt;br /&gt;
&amp;lt;code&amp;gt;run-pad&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source script available at https://devcentral.nasqueron.org/P210.&lt;br /&gt;
&lt;br /&gt;
== Maintenance scripts ==&lt;br /&gt;
&lt;br /&gt;
There are scripts to delete a pad or to repair a corrupted pad.&lt;br /&gt;
&lt;br /&gt;
There are documented at https://github.com/ether/etherpad-lite/wiki/Getting-to-know-the-tools-in-bin&lt;br /&gt;
&lt;br /&gt;
== Past known issues ==&lt;br /&gt;
=== Instability ===&lt;br /&gt;
When a copy/paste was done, server could crash.&lt;br /&gt;
&lt;br /&gt;
This has been fixed by switching database to utf8mb4_bin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
ALTER DATABASE `etherpad` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;&lt;br /&gt;
ALTER TABLE `etherpad.store` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Missing plugins ===&lt;br /&gt;
The installation requires two plugins, provided as npm packages:&lt;br /&gt;
* ep_ether-o-meter&lt;br /&gt;
* ep_author_neat&lt;br /&gt;
&lt;br /&gt;
We now install them in &amp;lt;code&amp;gt;run-pad&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PLUGINS=&amp;quot;ep_ether-o-meter ep_author_neat&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for plugin in $PLUGINS; do&lt;br /&gt;
        docker exec $INSTANCE npm install $plugin&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== API key issue ===&lt;br /&gt;
http://www.wolfplex.be/pad/ could be empty. When that occurs, the API key on this site diverges from ours.&lt;br /&gt;
&lt;br /&gt;
They store their API on Ysul at &amp;lt;code&amp;gt;/var/wwwroot/wolfplex.be/.dat/secrets-api.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Normally, this is now handled by the following line from run-pad script:&lt;br /&gt;
&amp;lt;code&amp;gt;docker cp /data/etherpad/APIKEY.txt $INSTANCE:opt/etherpad-lite/APIKEY.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Configuration as code}}&lt;br /&gt;
{{Vault secrets migration}}&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:6589:819A:61D0:B540</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/Etherpad&amp;diff=554</id>
		<title>Operations grimoire/Etherpad</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/Etherpad&amp;diff=554"/>
		<updated>2016-08-25T00:43:54Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:6589:819A:61D0:B540: /* Upgrade code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Shared between Nasqueron and Wolfplex ==&lt;br /&gt;
The same Etherpad installation is served at two domains:&lt;br /&gt;
* https://pad.wolfplex.be/&lt;br /&gt;
* https://pad.nasqueron.org/&lt;br /&gt;
&lt;br /&gt;
== Upgrade code ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
$ docker exec -it etherpad bash&lt;br /&gt;
$ git pull&lt;br /&gt;
…&lt;br /&gt;
Updating 2e81b39..45266f9&lt;br /&gt;
…&lt;br /&gt;
$ logout&lt;br /&gt;
$ docker restart etherpad&lt;br /&gt;
$ docker logs etherpad&lt;br /&gt;
…&lt;br /&gt;
[2016-08-25 00:40:24.711] [INFO] console - Your Etherpad version is 1.6.0 (45266f9)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check the two versions match.&lt;br /&gt;
&lt;br /&gt;
== Launch container ==&lt;br /&gt;
&amp;lt;code&amp;gt;run-pad&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source script available at https://devcentral.nasqueron.org/P210.&lt;br /&gt;
&lt;br /&gt;
== Maintenance scripts ==&lt;br /&gt;
&lt;br /&gt;
There are scripts to delete a pad or to repair a corrupted pad.&lt;br /&gt;
&lt;br /&gt;
There are documented at https://github.com/ether/etherpad-lite/wiki/Getting-to-know-the-tools-in-bin&lt;br /&gt;
&lt;br /&gt;
== Past known issues ==&lt;br /&gt;
=== Instability ===&lt;br /&gt;
When a copy/paste was done, server could crash.&lt;br /&gt;
&lt;br /&gt;
This has been fixed by switching database to utf8mb4_bin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
ALTER DATABASE `etherpad` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;&lt;br /&gt;
ALTER TABLE `etherpad.store` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Missing plugins ===&lt;br /&gt;
The installation requires two plugins, provided as npm packages:&lt;br /&gt;
* ep_ether-o-meter&lt;br /&gt;
* ep_author_neat&lt;br /&gt;
&lt;br /&gt;
We now install them in &amp;lt;code&amp;gt;run-pad&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PLUGINS=&amp;quot;ep_ether-o-meter ep_author_neat&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for plugin in $PLUGINS; do&lt;br /&gt;
        docker exec $INSTANCE npm install $plugin&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== API key issue ===&lt;br /&gt;
http://www.wolfplex.be/pad/ could be empty. When that occurs, the API key on this site diverges from ours.&lt;br /&gt;
&lt;br /&gt;
They store their API on Ysul at &amp;lt;code&amp;gt;/var/wwwroot/wolfplex.be/.dat/secrets-api.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Normally, this is now handled by the following line from run-pad script:&lt;br /&gt;
&amp;lt;code&amp;gt;docker cp /data/etherpad/APIKEY.txt $INSTANCE:opt/etherpad-lite/APIKEY.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Configuration as code}}&lt;br /&gt;
{{Vault secrets migration}}&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:6589:819A:61D0:B540</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/Etherpad&amp;diff=553</id>
		<title>Operations grimoire/Etherpad</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/Etherpad&amp;diff=553"/>
		<updated>2016-08-25T00:43:14Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:6589:819A:61D0:B540: /* Launch container */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Shared between Nasqueron and Wolfplex ==&lt;br /&gt;
The same Etherpad installation is served at two domains:&lt;br /&gt;
* https://pad.wolfplex.be/&lt;br /&gt;
* https://pad.nasqueron.org/&lt;br /&gt;
&lt;br /&gt;
== Upgrade code ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
$ docker exec -it etherpad bash&lt;br /&gt;
$ git pull&lt;br /&gt;
…&lt;br /&gt;
Updating 2e81b39..45266f9&lt;br /&gt;
…&lt;br /&gt;
$ logout&lt;br /&gt;
$ docker restart etherpad&lt;br /&gt;
$ docker logs etherpad&lt;br /&gt;
…&lt;br /&gt;
00:42:24 &amp;lt;+Dereckson&amp;gt; [2016-08-25 00:40:24.711] [INFO] console - Your Etherpad version is 1.6.0 (45266f9)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check the two versions match.&lt;br /&gt;
&lt;br /&gt;
== Launch container ==&lt;br /&gt;
&amp;lt;code&amp;gt;run-pad&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source script available at https://devcentral.nasqueron.org/P210.&lt;br /&gt;
&lt;br /&gt;
== Maintenance scripts ==&lt;br /&gt;
&lt;br /&gt;
There are scripts to delete a pad or to repair a corrupted pad.&lt;br /&gt;
&lt;br /&gt;
There are documented at https://github.com/ether/etherpad-lite/wiki/Getting-to-know-the-tools-in-bin&lt;br /&gt;
&lt;br /&gt;
== Past known issues ==&lt;br /&gt;
=== Instability ===&lt;br /&gt;
When a copy/paste was done, server could crash.&lt;br /&gt;
&lt;br /&gt;
This has been fixed by switching database to utf8mb4_bin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
ALTER DATABASE `etherpad` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;&lt;br /&gt;
ALTER TABLE `etherpad.store` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Missing plugins ===&lt;br /&gt;
The installation requires two plugins, provided as npm packages:&lt;br /&gt;
* ep_ether-o-meter&lt;br /&gt;
* ep_author_neat&lt;br /&gt;
&lt;br /&gt;
We now install them in &amp;lt;code&amp;gt;run-pad&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PLUGINS=&amp;quot;ep_ether-o-meter ep_author_neat&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for plugin in $PLUGINS; do&lt;br /&gt;
        docker exec $INSTANCE npm install $plugin&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== API key issue ===&lt;br /&gt;
http://www.wolfplex.be/pad/ could be empty. When that occurs, the API key on this site diverges from ours.&lt;br /&gt;
&lt;br /&gt;
They store their API on Ysul at &amp;lt;code&amp;gt;/var/wwwroot/wolfplex.be/.dat/secrets-api.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Normally, this is now handled by the following line from run-pad script:&lt;br /&gt;
&amp;lt;code&amp;gt;docker cp /data/etherpad/APIKEY.txt $INSTANCE:opt/etherpad-lite/APIKEY.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Configuration as code}}&lt;br /&gt;
{{Vault secrets migration}}&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:6589:819A:61D0:B540</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/Notifications_center&amp;diff=552</id>
		<title>Operations grimoire/Notifications center</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/Notifications_center&amp;diff=552"/>
		<updated>2016-08-24T01:03:56Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:F980:7449:6E00:B7F8: /* Upgrade a live container */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The notifications centers is an HTTP to HTTP and HTTP to AMQP gateway for our CI infrastructure.&lt;br /&gt;
&lt;br /&gt;
It allows to receive events from GitHub, Docker Hub and Phabricator, and send them to a RabbitMQ broker (white-rabbit) or Phabricator.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* [[Operations grimoire/Docker engine|Docker engine]]&lt;br /&gt;
* [[Operations grimoire/RabbitMQ|RabbitMQ broker]]&lt;br /&gt;
&lt;br /&gt;
== Run it ==&lt;br /&gt;
=== Start a new container ===&lt;br /&gt;
&amp;lt;code&amp;gt;run-notifications&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Upgrade a live container ===&lt;br /&gt;
# Enter notifications container as app user : &amp;lt;code&amp;gt;docker exec -it --user=app notifications bash&amp;lt;/code&amp;gt;&lt;br /&gt;
# Check we&#039;re on the master branch and the history is clean&lt;br /&gt;
# Update code rebasing the production branch against origin/master&lt;br /&gt;
# If composer has been touched, &amp;lt;code&amp;gt;composer update&amp;lt;/code&amp;gt; (could be faster to docker pull, stop this container and start a new container)&lt;br /&gt;
# If entered as root, fix ownership with &amp;lt;code&amp;gt;chown -R app:app /var/wwwroot/default&amp;lt;/code&amp;gt;&lt;br /&gt;
# Restart PHP FPM with &amp;lt;code&amp;gt;sv restart php-fpm&amp;lt;/code&amp;gt;&lt;br /&gt;
# Run &amp;lt;code&amp;gt;php optimize&amp;lt;/code&amp;gt; to refresh compiled class&lt;br /&gt;
# Restart again PHP FPM with &amp;lt;code&amp;gt;sv restart php-fpm&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For longer upgrade, you can put the application in maintenance mode with &amp;lt;code&amp;gt;php artisan down&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If preferences are updated (in the code or by us), update the cache: &amp;lt;code&amp;gt;php artisan config:cache &amp;amp;&amp;amp; sv restart php-fpm&amp;lt;/code&amp;gt; is needed.&lt;br /&gt;
&lt;br /&gt;
=== How to rebase against master? ===&lt;br /&gt;
&lt;br /&gt;
# update master to match origin/master&lt;br /&gt;
# rebase production against master&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
$ git fetch&lt;br /&gt;
$ git checkout master&lt;br /&gt;
$ git rebase origin/master&lt;br /&gt;
$ git checkout production&lt;br /&gt;
$ git rebase master&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there is a merge conflict:&lt;br /&gt;
&lt;br /&gt;
# Edit the conflict files&lt;br /&gt;
# &amp;lt;code&amp;gt;git add &amp;lt;edited files&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git rebase --continue&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configure it ==&lt;br /&gt;
=== Add a new GitHub organization ===&lt;br /&gt;
# Generate a random string to be used as a secret token shared between GitHub and the notifications center&lt;br /&gt;
# On Dwellers, add credentials to /data/notifications/storage/app/credentials.json&lt;br /&gt;
# On GitHub, go to organization settings, then Webhooks, e.g. https://github.com/organizations/acme/settings/hooks&lt;br /&gt;
# Add webhook:&lt;br /&gt;
## URL should be https://notifications.nasqueron.org/gate/GitHub/Acme where Acme is the ucfirst name of the organization account&lt;br /&gt;
## Your secret token go to secret field&lt;br /&gt;
## Switch from push events to &amp;quot;Send me everything&amp;quot;.&lt;br /&gt;
## Let default settings: active, SSL verification, application/json&lt;br /&gt;
# Run the CLI client to receive notifications (`notifications` on Ysul, require to be in the `notifications` group, editable through /etc/group)&lt;br /&gt;
# GitHub will then fire immediately a ping, check in recent deliveries it&#039;s 200&lt;br /&gt;
# Fix and redeliver it if not&lt;br /&gt;
# Check in the CLI you&#039;ve got a correct reply, e.g. [16:36:13] &amp;lt;Eglide/orgz&amp;gt; « Anything added dilutes everything else. » — GitHub Webhooks ping zen aphorism.&lt;br /&gt;
&lt;br /&gt;
For payload delivery code returned by notifications.nasqueron.org, a 500 means probably a JSON syntax error in credentials.json, a 403 tokens don&#039;t match, note the center doesn&#039;t verify token if an empty string is left in the config (or you made a typo to the property).&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
# [https://devcentral.nasqueron.org/diffusion/NOTIF/ Source code]&lt;br /&gt;
# [https://devcentral.nasqueron.org/tag/notifications_center/ DevCentral board]&lt;br /&gt;
&lt;br /&gt;
{{Configuration as Code}}&lt;br /&gt;
{{Vault secrets migration}}&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:F980:7449:6E00:B7F8</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/Notifications_center&amp;diff=551</id>
		<title>Operations grimoire/Notifications center</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/Notifications_center&amp;diff=551"/>
		<updated>2016-08-24T01:00:33Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:F980:7449:6E00:B7F8: /* Upgrade a live container */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The notifications centers is an HTTP to HTTP and HTTP to AMQP gateway for our CI infrastructure.&lt;br /&gt;
&lt;br /&gt;
It allows to receive events from GitHub, Docker Hub and Phabricator, and send them to a RabbitMQ broker (white-rabbit) or Phabricator.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* [[Operations grimoire/Docker engine|Docker engine]]&lt;br /&gt;
* [[Operations grimoire/RabbitMQ|RabbitMQ broker]]&lt;br /&gt;
&lt;br /&gt;
== Run it ==&lt;br /&gt;
=== Start a new container ===&lt;br /&gt;
&amp;lt;code&amp;gt;run-notifications&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Upgrade a live container ===&lt;br /&gt;
# Enter notifications container as app user : &amp;lt;code&amp;gt;docker exec -it --user=app notifications bash&amp;lt;/code&amp;gt;&lt;br /&gt;
# Check we&#039;re on the master branch and the history is clean&lt;br /&gt;
# Update code rebasing the production branch against origin/master&lt;br /&gt;
# If composer has been touched, &amp;lt;code&amp;gt;composer update&amp;lt;/code&amp;gt; (could be faster to docker pull, stop this container and start a new container)&lt;br /&gt;
# If entered as root, fix ownership with &amp;lt;code&amp;gt;chown -R app:app /var/wwwroot/default&amp;lt;/code&amp;gt;&lt;br /&gt;
# Restart PHP FPM with &amp;lt;code&amp;gt;sv restart php-fpm&amp;lt;/code&amp;gt;&lt;br /&gt;
# Run &amp;lt;code&amp;gt;php optimize&amp;lt;/code&amp;gt; to refresh compiled class&lt;br /&gt;
# Restart again PHP FPM with &amp;lt;code&amp;gt;sv restart php-fpm&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For longer upgrade, you can put the application in maintenance mode with &amp;lt;code&amp;gt;php artisan down&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If preferences are updated (in the code or by us), &amp;lt;code&amp;gt;php artisan config:clear&amp;lt;/code&amp;gt; is needed.&lt;br /&gt;
&lt;br /&gt;
=== How to rebase against master? ===&lt;br /&gt;
&lt;br /&gt;
# update master to match origin/master&lt;br /&gt;
# rebase production against master&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
$ git fetch&lt;br /&gt;
$ git checkout master&lt;br /&gt;
$ git rebase origin/master&lt;br /&gt;
$ git checkout production&lt;br /&gt;
$ git rebase master&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there is a merge conflict:&lt;br /&gt;
&lt;br /&gt;
# Edit the conflict files&lt;br /&gt;
# &amp;lt;code&amp;gt;git add &amp;lt;edited files&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git rebase --continue&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configure it ==&lt;br /&gt;
=== Add a new GitHub organization ===&lt;br /&gt;
# Generate a random string to be used as a secret token shared between GitHub and the notifications center&lt;br /&gt;
# On Dwellers, add credentials to /data/notifications/storage/app/credentials.json&lt;br /&gt;
# On GitHub, go to organization settings, then Webhooks, e.g. https://github.com/organizations/acme/settings/hooks&lt;br /&gt;
# Add webhook:&lt;br /&gt;
## URL should be https://notifications.nasqueron.org/gate/GitHub/Acme where Acme is the ucfirst name of the organization account&lt;br /&gt;
## Your secret token go to secret field&lt;br /&gt;
## Switch from push events to &amp;quot;Send me everything&amp;quot;.&lt;br /&gt;
## Let default settings: active, SSL verification, application/json&lt;br /&gt;
# Run the CLI client to receive notifications (`notifications` on Ysul, require to be in the `notifications` group, editable through /etc/group)&lt;br /&gt;
# GitHub will then fire immediately a ping, check in recent deliveries it&#039;s 200&lt;br /&gt;
# Fix and redeliver it if not&lt;br /&gt;
# Check in the CLI you&#039;ve got a correct reply, e.g. [16:36:13] &amp;lt;Eglide/orgz&amp;gt; « Anything added dilutes everything else. » — GitHub Webhooks ping zen aphorism.&lt;br /&gt;
&lt;br /&gt;
For payload delivery code returned by notifications.nasqueron.org, a 500 means probably a JSON syntax error in credentials.json, a 403 tokens don&#039;t match, note the center doesn&#039;t verify token if an empty string is left in the config (or you made a typo to the property).&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
# [https://devcentral.nasqueron.org/diffusion/NOTIF/ Source code]&lt;br /&gt;
# [https://devcentral.nasqueron.org/tag/notifications_center/ DevCentral board]&lt;br /&gt;
&lt;br /&gt;
{{Configuration as Code}}&lt;br /&gt;
{{Vault secrets migration}}&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:F980:7449:6E00:B7F8</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/Notifications_center&amp;diff=550</id>
		<title>Operations grimoire/Notifications center</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/Notifications_center&amp;diff=550"/>
		<updated>2016-08-23T19:53:30Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:F980:7449:6E00:B7F8: /* Upgrade a live container */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The notifications centers is an HTTP to HTTP and HTTP to AMQP gateway for our CI infrastructure.&lt;br /&gt;
&lt;br /&gt;
It allows to receive events from GitHub, Docker Hub and Phabricator, and send them to a RabbitMQ broker (white-rabbit) or Phabricator.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* [[Operations grimoire/Docker engine|Docker engine]]&lt;br /&gt;
* [[Operations grimoire/RabbitMQ|RabbitMQ broker]]&lt;br /&gt;
&lt;br /&gt;
== Run it ==&lt;br /&gt;
=== Start a new container ===&lt;br /&gt;
&amp;lt;code&amp;gt;run-notifications&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Upgrade a live container ===&lt;br /&gt;
# Enter notifications container as app user : &amp;lt;code&amp;gt;docker exec -it --user=app notifications bash&amp;lt;/code&amp;gt;&lt;br /&gt;
# Check we&#039;re on the master branch and the history is clean&lt;br /&gt;
# Update code rebasing the production branch against origin/master&lt;br /&gt;
# If composer has been touched, &amp;lt;code&amp;gt;composer update&amp;lt;/code&amp;gt; (could be faster to docker pull, stop this container and start a new container)&lt;br /&gt;
# If entered as root, fix ownership with &amp;lt;code&amp;gt;chown -R app:app /var/wwwroot/default&amp;lt;/code&amp;gt;&lt;br /&gt;
# Restart PHP FPM with &amp;lt;code&amp;gt;sv restart php-fpm&amp;lt;/code&amp;gt;&lt;br /&gt;
# Run &amp;lt;code&amp;gt;php optimize&amp;lt;/code&amp;gt; to refresh compiled class&lt;br /&gt;
# Restart again PHP FPM with &amp;lt;code&amp;gt;sv restart php-fpm&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For longer upgrade, you can put the application in maintenance mode with &amp;lt;code&amp;gt;php artisan down&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== How to rebase against master? ===&lt;br /&gt;
&lt;br /&gt;
# update master to match origin/master&lt;br /&gt;
# rebase production against master&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
$ git fetch&lt;br /&gt;
$ git checkout master&lt;br /&gt;
$ git rebase origin/master&lt;br /&gt;
$ git checkout production&lt;br /&gt;
$ git rebase master&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there is a merge conflict:&lt;br /&gt;
&lt;br /&gt;
# Edit the conflict files&lt;br /&gt;
# &amp;lt;code&amp;gt;git add &amp;lt;edited files&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git rebase --continue&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configure it ==&lt;br /&gt;
=== Add a new GitHub organization ===&lt;br /&gt;
# Generate a random string to be used as a secret token shared between GitHub and the notifications center&lt;br /&gt;
# On Dwellers, add credentials to /data/notifications/storage/app/credentials.json&lt;br /&gt;
# On GitHub, go to organization settings, then Webhooks, e.g. https://github.com/organizations/acme/settings/hooks&lt;br /&gt;
# Add webhook:&lt;br /&gt;
## URL should be https://notifications.nasqueron.org/gate/GitHub/Acme where Acme is the ucfirst name of the organization account&lt;br /&gt;
## Your secret token go to secret field&lt;br /&gt;
## Switch from push events to &amp;quot;Send me everything&amp;quot;.&lt;br /&gt;
## Let default settings: active, SSL verification, application/json&lt;br /&gt;
# Run the CLI client to receive notifications (`notifications` on Ysul, require to be in the `notifications` group, editable through /etc/group)&lt;br /&gt;
# GitHub will then fire immediately a ping, check in recent deliveries it&#039;s 200&lt;br /&gt;
# Fix and redeliver it if not&lt;br /&gt;
# Check in the CLI you&#039;ve got a correct reply, e.g. [16:36:13] &amp;lt;Eglide/orgz&amp;gt; « Anything added dilutes everything else. » — GitHub Webhooks ping zen aphorism.&lt;br /&gt;
&lt;br /&gt;
For payload delivery code returned by notifications.nasqueron.org, a 500 means probably a JSON syntax error in credentials.json, a 403 tokens don&#039;t match, note the center doesn&#039;t verify token if an empty string is left in the config (or you made a typo to the property).&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
# [https://devcentral.nasqueron.org/diffusion/NOTIF/ Source code]&lt;br /&gt;
# [https://devcentral.nasqueron.org/tag/notifications_center/ DevCentral board]&lt;br /&gt;
&lt;br /&gt;
{{Configuration as Code}}&lt;br /&gt;
{{Vault secrets migration}}&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:F980:7449:6E00:B7F8</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire&amp;diff=487</id>
		<title>Operations grimoire</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire&amp;diff=487"/>
		<updated>2016-07-24T14:08:05Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:B4A6:641E:A23:C344: New section for SSL certificates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the Nasqueron operations grimoire (NOG).&lt;br /&gt;
&lt;br /&gt;
== Infrastructure ==&lt;br /&gt;
* [[/Docker engine]]&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
=== Identity management ===&lt;br /&gt;
* [[/Login]] (Auth Grove)&lt;br /&gt;
&lt;br /&gt;
=== CI/CD ===&lt;br /&gt;
* [[/Broker]]&lt;br /&gt;
* [[/DevCentral]] (Phabricator)&lt;br /&gt;
* [[/Jenkins]]&lt;br /&gt;
* [[/Notifications center]]&lt;br /&gt;
* [[/Vault]]&lt;br /&gt;
&lt;br /&gt;
== Services configuration ==&lt;br /&gt;
&#039;&#039;This section contains general information not related to a specific service.&#039;&#039;&lt;br /&gt;
* [[/SSL certificates]] (Let&#039;s encrypt / letsencrypt)&lt;br /&gt;
&lt;br /&gt;
== Checklists ==&lt;br /&gt;
* [[/Restart a Docker engine]]&lt;br /&gt;
&lt;br /&gt;
== Appendices ==&lt;br /&gt;
* [[/Policies]]&lt;br /&gt;
* [[/Contacts]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Reference]]&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:B4A6:641E:A23:C344</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=NOG&amp;diff=475</id>
		<title>NOG</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=NOG&amp;diff=475"/>
		<updated>2016-07-22T11:32:44Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:8DAB:104C:2FD3:B875: Redirected page to Operations grimoire&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Operations grimoire]]&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:8DAB:104C:2FD3:B875</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=IRC&amp;diff=429</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=IRC&amp;diff=429"/>
		<updated>2015-12-21T21:22:28Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:BC7C:A61F:5017:4900: /* Wearg groups */ #nasqueron-ops→ #nasqueron-ops-logs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== List of channels ==&lt;br /&gt;
&lt;br /&gt;
; In the primary Nasqueron space&lt;br /&gt;
&lt;br /&gt;
Note : Freenode doesn&#039;t currently allow (well... since 2010 actually) new group registration, so we currently can&#039;t assign nasqueron/ cloaks etc.&lt;br /&gt;
&lt;br /&gt;
* #nasqueron-ops - discussions about operations, infrastructure, any action performed on a server must be logged on this channel&lt;br /&gt;
* #nasqueron-pentacle - testing and operational control of the bots (Dæghrefn, Wearg, etc.), not really used for other beings than bots&lt;br /&gt;
&lt;br /&gt;
; By project&lt;br /&gt;
&lt;br /&gt;
* #tasacora - cartography project [[Tasacora]]&lt;br /&gt;
&lt;br /&gt;
; Other channels were Nasqueron stuff are discussed&lt;br /&gt;
&lt;br /&gt;
* #wolfplex - currently also given as support channel in a lot of documentation&lt;br /&gt;
* #fauve&lt;br /&gt;
* #wikipedia-fr - rare, but some discussions about Dæghrefn or tools.nasqueron.org occurs&lt;br /&gt;
&lt;br /&gt;
== Wearg groups ==&lt;br /&gt;
&lt;br /&gt;
Some channels want notifications about new commits, tasks, etc.&lt;br /&gt;
&lt;br /&gt;
* #nasqueron-ops-logs - nasqueron.ops.* and nasqueron.docker.*&lt;br /&gt;
* #tasacora - nasqueron.tasacora.*&lt;br /&gt;
&lt;br /&gt;
== Create a new channel ==&lt;br /&gt;
&lt;br /&gt;
=== Where to list it? ===&lt;br /&gt;
* on this page&lt;br /&gt;
* a task should be filled on DevCentral against Dæghrefn project to notify the new channel, so we can configure the bot to manage ChanServ access there too&lt;br /&gt;
&lt;br /&gt;
=== ChanServ configuration ===&lt;br /&gt;
&lt;br /&gt;
    REGISTER #nasqueron-quux&lt;br /&gt;
    SET #nasqueron-quux MLOCK&lt;br /&gt;
    TEMPLATE #nasqueron-quux botadmin +*&lt;br /&gt;
    TEMPLATE #nasqueron-quux botop -*+vVoOti&lt;br /&gt;
    TEMPLATE #nasqueron-quux member -*+vVoti&lt;br /&gt;
    ACCESS #nasqueron-quux ADD Daeghrefn botadmin&lt;br /&gt;
&lt;br /&gt;
=== Channel log ===&lt;br /&gt;
&lt;br /&gt;
Normally, a channel is not publicly logged. But in some cases, it&#039;s interesting to enable this feature on purely technical channels.&lt;br /&gt;
&lt;br /&gt;
If the channel is logged, you must do both of these:&lt;br /&gt;
&lt;br /&gt;
* document it in the topic&lt;br /&gt;
* add an autojoin message, for example through ChanServ: SET #nasqueron-quux ENTRYMSG &amp;quot;This channel is publicly logged.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
We consider the publication of logs to the DevCentral chatlog application to qualify as &amp;quot;publicly logged&amp;quot;, regardless of the project-as-ACLs or the space where the log is.&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:BC7C:A61F:5017:4900</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=IRC&amp;diff=428</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=IRC&amp;diff=428"/>
		<updated>2015-12-16T14:04:42Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:C89B:92BA:BAB6:2930: ChanServ configuration, notes about channel log&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== List of channels ==&lt;br /&gt;
&lt;br /&gt;
; In the primary Nasqueron space&lt;br /&gt;
&lt;br /&gt;
Note : Freenode doesn&#039;t currently allow (well... since 2010 actually) new group registration, so we currently can&#039;t assign nasqueron/ cloaks etc.&lt;br /&gt;
&lt;br /&gt;
* #nasqueron-ops - discussions about operations, infrastructure, any action performed on a server must be logged on this channel&lt;br /&gt;
* #nasqueron-pentacle - testing and operational control of the bots (Dæghrefn, Wearg, etc.), not really used for other beings than bots&lt;br /&gt;
&lt;br /&gt;
; By project&lt;br /&gt;
&lt;br /&gt;
* #tasacora - cartography project [[Tasacora]]&lt;br /&gt;
&lt;br /&gt;
; Other channels were Nasqueron stuff are discussed&lt;br /&gt;
&lt;br /&gt;
* #wolfplex - currently also given as support channel in a lot of documentation&lt;br /&gt;
* #fauve&lt;br /&gt;
* #wikipedia-fr - rare, but some discussions about Dæghrefn or tools.nasqueron.org occurs&lt;br /&gt;
&lt;br /&gt;
== Wearg groups ==&lt;br /&gt;
&lt;br /&gt;
Some channels want notifications about new commits, tasks, etc.&lt;br /&gt;
&lt;br /&gt;
* #nasqueron-ops - nasqueron.ops.* and nasqueron.docker.*&lt;br /&gt;
* #tasacora - nasqueron.tasacora.*&lt;br /&gt;
&lt;br /&gt;
== Create a new channel ==&lt;br /&gt;
&lt;br /&gt;
=== Where to list it? ===&lt;br /&gt;
* on this page&lt;br /&gt;
* a task should be filled on DevCentral against Dæghrefn project to notify the new channel, so we can configure the bot to manage ChanServ access there too&lt;br /&gt;
&lt;br /&gt;
=== ChanServ configuration ===&lt;br /&gt;
&lt;br /&gt;
    REGISTER #nasqueron-quux&lt;br /&gt;
    SET #nasqueron-quux MLOCK&lt;br /&gt;
    TEMPLATE #nasqueron-quux botadmin +*&lt;br /&gt;
    TEMPLATE #nasqueron-quux botop -*+vVoOti&lt;br /&gt;
    TEMPLATE #nasqueron-quux member -*+vVoti&lt;br /&gt;
    ACCESS #nasqueron-quux ADD Daeghrefn botadmin&lt;br /&gt;
&lt;br /&gt;
=== Channel log ===&lt;br /&gt;
&lt;br /&gt;
Normally, a channel is not publicly logged. But in some cases, it&#039;s interesting to enable this feature on purely technical channels.&lt;br /&gt;
&lt;br /&gt;
If the channel is logged, you must do both of these:&lt;br /&gt;
&lt;br /&gt;
* document it in the topic&lt;br /&gt;
* add an autojoin message, for example through ChanServ: SET #nasqueron-quux ENTRYMSG &amp;quot;This channel is publicly logged.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
We consider the publication of logs to the DevCentral chatlog application to qualify as &amp;quot;publicly logged&amp;quot;, regardless of the project-as-ACLs or the space where the log is.&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:C89B:92BA:BAB6:2930</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=User:Dereckson/Notes_2015-08-11&amp;diff=411</id>
		<title>User:Dereckson/Notes 2015-08-11</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=User:Dereckson/Notes_2015-08-11&amp;diff=411"/>
		<updated>2015-08-11T17:38:46Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:1D60:A6E9:DF4C:61D3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Définition formelle de la récursivité ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Source:&#039;&#039; rama&lt;br /&gt;
&lt;br /&gt;
La récursion se compose de deux choses :&lt;br /&gt;
&lt;br /&gt;
# une façon de passer de l&#039;étape N à l&#039;étape N+1 (en fonction de l&#039;étapge N, voire d&#039;autres étapes antérieures)&lt;br /&gt;
# un ancrage (i.e. la première occurrence)&lt;br /&gt;
&lt;br /&gt;
la démonstration par récurrence se résume ainsi à &amp;quot;je prouve que si $PROPERTY est vraie pour x_(n), elle est vrai pour n_(n+1), ET j&#039;exhibe un cas x_0 pour lequel c&#039;est vrai ; c&#039;est donc vrai pour tout x_n avec n entre 0 et l&#039;infini&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Approche intuitive de la récursivité ==&lt;br /&gt;
&lt;br /&gt;
La récursivité est une fonction qui s&#039;appelle elle-même.&lt;br /&gt;
&lt;br /&gt;
Si tu as un Android, l&#039;application AirDroid permet de prendre une photo, en l&#039;afficher la caméra sur l&#039;écran. Photographie l&#039;écran qui affiche la photographie et tu obtiendras quelque chose comme ceci :&lt;br /&gt;
&lt;br /&gt;
[[File:Recursivity intuitive.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Copier un tableau en C++ ==&lt;br /&gt;
&lt;br /&gt;
http://nadeausoftware.com/articles/2012/05/c_c_tip_how_copy_memory_quickly#Method1Loopwitharrayindexes&lt;br /&gt;
&lt;br /&gt;
== Exercices ==&lt;br /&gt;
&lt;br /&gt;
Refaire la factorielle, findmin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Calculer par récursivité la somme des nombres d&#039;un tableau&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
int* findsum (int[] numbers, int size)&lt;br /&gt;
&lt;br /&gt;
e.g. findsum([1, 4, 7, 26], 4)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Déterminer si un chaîne de caractères est ou non un palindrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
bool isPalindrome (char[] word, int len);&lt;br /&gt;
&lt;br /&gt;
e.g. isPalindrome (&amp;quot;kayak&amp;quot;, 5) -&amp;gt; true&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:1D60:A6E9:DF4C:61D3</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=User:Dereckson/Notes_2015-08-11&amp;diff=410</id>
		<title>User:Dereckson/Notes 2015-08-11</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=User:Dereckson/Notes_2015-08-11&amp;diff=410"/>
		<updated>2015-08-11T17:17:35Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:1D60:A6E9:DF4C:61D3: /* Exercices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Définition formelle de la récursivité ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Source:&#039;&#039; rama&lt;br /&gt;
&lt;br /&gt;
La récursion se compose de deux choses :&lt;br /&gt;
&lt;br /&gt;
# une façon de passer de l&#039;étape N à l&#039;étape N+1 (en fonction de l&#039;étapge N, voire d&#039;autres étapes antérieures)&lt;br /&gt;
# un ancrage (i.e. la première occurrence)&lt;br /&gt;
&lt;br /&gt;
la démonstration par récurrence se résume ainsi à &amp;quot;je prouve que si $PROPERTY est vraie pour x_(n), elle est vrai pour n_(n+1), ET j&#039;exhibe un cas x_0 pour lequel c&#039;est vrai ; c&#039;est donc vrai pour tout x_n avec n entre 0 et l&#039;infini&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Copier un tableau en C++ ==&lt;br /&gt;
&lt;br /&gt;
http://nadeausoftware.com/articles/2012/05/c_c_tip_how_copy_memory_quickly#Method1Loopwitharrayindexes&lt;br /&gt;
&lt;br /&gt;
== Exercices ==&lt;br /&gt;
&lt;br /&gt;
Refaire la factorielle, findmin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Calculer par récursivité la somme des nombres d&#039;un tableau&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
int* findsum (int[] numbers, int size)&lt;br /&gt;
&lt;br /&gt;
e.g. findsum([1, 4, 7, 26], 4)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Déterminer si un chaîne de caractères est ou non un palindrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
bool isPalindrome (char[] word, int len);&lt;br /&gt;
&lt;br /&gt;
e.g. isPalindrome (&amp;quot;kayak&amp;quot;, 5) -&amp;gt; true&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:1D60:A6E9:DF4C:61D3</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=User:Dereckson/Notes_2015-08-11&amp;diff=409</id>
		<title>User:Dereckson/Notes 2015-08-11</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=User:Dereckson/Notes_2015-08-11&amp;diff=409"/>
		<updated>2015-08-11T17:17:21Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:1D60:A6E9:DF4C:61D3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Définition formelle de la récursivité ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Source:&#039;&#039; rama&lt;br /&gt;
&lt;br /&gt;
La récursion se compose de deux choses :&lt;br /&gt;
&lt;br /&gt;
# une façon de passer de l&#039;étape N à l&#039;étape N+1 (en fonction de l&#039;étapge N, voire d&#039;autres étapes antérieures)&lt;br /&gt;
# un ancrage (i.e. la première occurrence)&lt;br /&gt;
&lt;br /&gt;
la démonstration par récurrence se résume ainsi à &amp;quot;je prouve que si $PROPERTY est vraie pour x_(n), elle est vrai pour n_(n+1), ET j&#039;exhibe un cas x_0 pour lequel c&#039;est vrai ; c&#039;est donc vrai pour tout x_n avec n entre 0 et l&#039;infini&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Copier un tableau en C++ ==&lt;br /&gt;
&lt;br /&gt;
http://nadeausoftware.com/articles/2012/05/c_c_tip_how_copy_memory_quickly#Method1Loopwitharrayindexes&lt;br /&gt;
&lt;br /&gt;
== Exercices ==&lt;br /&gt;
&lt;br /&gt;
Refaire la factorielle, findmin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Calculer par récursivité la somme des nombres d&#039;un tableau&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
int* findsum (int[] numbers, int size)&lt;br /&gt;
&lt;br /&gt;
e.g. findsum([1, 4, 7, 26], 4)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Déterminer si un chaîne de caractères est ou non un palindrome.&lt;br /&gt;
&lt;br /&gt;
bool isPalindrome (char[] word, int len);&lt;br /&gt;
&lt;br /&gt;
e.g. isPalindrome (&amp;quot;kayak&amp;quot;, 5) -&amp;gt; true&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:1D60:A6E9:DF4C:61D3</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=User:Dereckson/Notes_2015-08-11&amp;diff=408</id>
		<title>User:Dereckson/Notes 2015-08-11</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=User:Dereckson/Notes_2015-08-11&amp;diff=408"/>
		<updated>2015-08-11T17:01:18Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:1D60:A6E9:DF4C:61D3: Created page with &amp;quot;== Définition formelle de la récursivité ==  &amp;#039;&amp;#039;Source:&amp;#039;&amp;#039; rama  La récursion se compose de deux choses :  # une façon de passer de l&amp;#039;étape N à l&amp;#039;étape N+1 (en fonction...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Définition formelle de la récursivité ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Source:&#039;&#039; rama&lt;br /&gt;
&lt;br /&gt;
La récursion se compose de deux choses :&lt;br /&gt;
&lt;br /&gt;
# une façon de passer de l&#039;étape N à l&#039;étape N+1 (en fonction de l&#039;étapge N, voire d&#039;autres étapes antérieures)&lt;br /&gt;
# un ancrage (i.e. la première occurrence)&lt;br /&gt;
&lt;br /&gt;
la démonstration par récurrence se résume ainsi à &amp;quot;je prouve que si $PROPERTY est vraie pour x_(n), elle est vrai pour n_(n+1), ET j&#039;exhibe un cas x_0 pour lequel c&#039;est vrai ; c&#039;est donc vrai pour tout x_n avec n entre 0 et l&#039;infini&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Copier un tableau en C++ ==&lt;br /&gt;
&lt;br /&gt;
http://nadeausoftware.com/articles/2012/05/c_c_tip_how_copy_memory_quickly#Method1Loopwitharrayindexes&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:1D60:A6E9:DF4C:61D3</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Dwellers&amp;diff=312</id>
		<title>Dwellers</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Dwellers&amp;diff=312"/>
		<updated>2014-11-03T15:40:13Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:0:0:0:4: /* Shipyard */ Provides a shipyard instance to manage Dwellers (and potentially other Docker installation) at http://dwellers.nasqueron.org:30080&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Dwellers&#039;&#039;&#039; is an VMWare EXSi instance installed on [[Stormshear]].&lt;br /&gt;
&lt;br /&gt;
The goal of this server is to provide a Docker / OpenShift / Geard CentOS PaaS service.&lt;br /&gt;
&lt;br /&gt;
== Basic information ==&lt;br /&gt;
* &#039;&#039;&#039;IPs:&#039;&#039;&#039;&lt;br /&gt;
** 212.129.32.223&lt;br /&gt;
** 2001:470:1f13:ce7:ca5:cade:fab:1e&lt;br /&gt;
* &#039;&#039;&#039;Hostname:&#039;&#039;&#039; dwellers.nasqueron.org&lt;br /&gt;
* &#039;&#039;&#039;Homepage:&#039;&#039;&#039; http://dwellers.nasqueron.org/&lt;br /&gt;
* &#039;&#039;&#039;Configuration:&#039;&#039;&#039;Access to 3.5 GB RAM and 4 core, burstable on request to 8 cores/+-6 Gb (to be negotiated according [[Ysul]] use)&lt;br /&gt;
* &#039;&#039;&#039;OS:&#039;&#039;&#039; CentOS 7&lt;br /&gt;
* &#039;&#039;&#039;ISP:&#039;&#039;&#039; [http://www.online.net Online] (FR)&lt;br /&gt;
* &#039;&#039;&#039;Network:&#039;&#039;&#039; Illiad (FR)&lt;br /&gt;
* &#039;&#039;&#039;Status:&#039;&#039;&#039; Installing.&lt;br /&gt;
* &#039;&#039;&#039;Policy:&#039;&#039;&#039; Access for any Nasqueron or Wolfplex project&lt;br /&gt;
* &#039;&#039;&#039;Started:&#039;&#039;&#039; 2014-07-13&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
* SSH (*:22)&lt;br /&gt;
* Docker&lt;br /&gt;
* OpenShift&lt;br /&gt;
&lt;br /&gt;
== Containers ==&lt;br /&gt;
=== Ports table ===&lt;br /&gt;
Ø indicates an unmapped port. In such cases, it&#039;s accessible logging in Dwellers, and connecting locally to the current mutable container IP variable and the immutable specified port.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;Container name&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Container image&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Prefix&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Service&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Internal port&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;External port&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Dwellers Shipyard&lt;br /&gt;
| shipyard/shipyard&lt;br /&gt;
| 30&lt;br /&gt;
| Apache||80||30080&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=3| phabricator.nasqueron.org&lt;br /&gt;
|rowspan=3| yesnault/docker-phabricator:latest&lt;br /&gt;
|rowspan=3| 31&lt;br /&gt;
| SSH||22||Ø&lt;br /&gt;
|-&lt;br /&gt;
| Apache||80||31080&lt;br /&gt;
|-&lt;br /&gt;
| MySQL||3306||Ø&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=3| forum.nasqueron.org&lt;br /&gt;
|rowspan=3| provided by the project Discuss docker image&lt;br /&gt;
|rowspan=3| 32&lt;br /&gt;
| SSH||22||Ø&lt;br /&gt;
|-&lt;br /&gt;
| Apache||80||32080&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|Others services like redis are still to document&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=2| bugzilla.espace-win.org&lt;br /&gt;
|rowspan=2| dklawren/docker-bugzilla&lt;br /&gt;
|rowspan=2| 33&lt;br /&gt;
| SSH||22||Ø&lt;br /&gt;
|-&lt;br /&gt;
| Apache||80||33080&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== phabricator.nasqueron.org ===&lt;br /&gt;
&#039;&#039;&#039;Port prefix:&#039;&#039;&#039; 31&lt;br /&gt;
&lt;br /&gt;
Provides a Phabricator instance for Nasqueron projects at [http://phabricator.nasqueron.org http://phabricator.nasqueron.org].&lt;br /&gt;
&lt;br /&gt;
To run a new container:&lt;br /&gt;
    docker run -p 31080:80 nasqueron-phabricator&lt;br /&gt;
&lt;br /&gt;
=== Shipyard ===&lt;br /&gt;
&#039;&#039;&#039;Port prefix:&#039;&#039;&#039; 30&lt;br /&gt;
&lt;br /&gt;
Provides a shipyard instance to manage Dwellers (and potentially other Docker installation) at http://dwellers.nasqueron.org:30080&lt;br /&gt;
&lt;br /&gt;
To run RethinkDB for the storage and launch shipyard:&lt;br /&gt;
     docker run -it -d --name shipyard-rethinkdb-data --entrypoint /bin/bash shipyard/rethinkdb -l&lt;br /&gt;
     docker run -it -P -d --name shipyard-rethinkdb --volumes-from shipyard-rethinkdb-data shipyard/rethinkdb&lt;br /&gt;
     docker run -it -p 30080:8080 -d --name shipyard --link shipyard-rethinkdb:rethinkdb shipyard/shipyard&lt;br /&gt;
&lt;br /&gt;
To control shipyard instance, launch the CLI (also in a container):&lt;br /&gt;
     docker run -it shipyard/shipyard-cli&lt;br /&gt;
&lt;br /&gt;
Documentation is at http://shipyard-project.com/docs/usage/cli/&lt;br /&gt;
&lt;br /&gt;
== Troubleshoot ==&lt;br /&gt;
=== How to point a domain here? ===&lt;br /&gt;
For your domains:&lt;br /&gt;
* subdomain.domain.tld A 212.129.32.223&lt;br /&gt;
* subdomain.domain.tld AAAA 2001:470:1f13:ce7:ca5:cade:fab:1e&lt;br /&gt;
&lt;br /&gt;
To request a DNS update for domains using extensively the Nasqueron servers infrastructure:&lt;br /&gt;
* subdomain.nasqueron.org CNAME www3.nasqueron.org&lt;br /&gt;
* subdomain.espace-win.org CNAME www2.espace-win.org&lt;br /&gt;
&lt;br /&gt;
=== How to access by SSH to an instance? ===&lt;br /&gt;
See the ports table to check if a port is assigned. We don&#039;t assign port if there is no reason general public got access to the VM by SSH. We assign port each time a stable address is needed (for example to talk with a Git server)&lt;br /&gt;
&lt;br /&gt;
If the port is mapped:&lt;br /&gt;
&lt;br /&gt;
    ssh -p &amp;lt;port&amp;gt; username@dwellers.nasqueron.org&lt;br /&gt;
&lt;br /&gt;
If the port is unmapped, you can from Dwellers:&lt;br /&gt;
&lt;br /&gt;
    docker ps&lt;br /&gt;
    docker inspect &amp;lt;instance id&amp;gt; #gets the local IP&lt;br /&gt;
    ssh &amp;lt;IP 172.*&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== No network at boot time ===&lt;br /&gt;
Access the machine on the hypervisor, then:&lt;br /&gt;
&lt;br /&gt;
;Check the interface is up:&lt;br /&gt;
    ip addr&lt;br /&gt;
    ifup ens192 # to bring it up&lt;br /&gt;
&lt;br /&gt;
;If you&#039;ve reset the configuration and need to add again the IP:&lt;br /&gt;
    ip addr 212.129.32.223/32 dev ens192&lt;br /&gt;
&lt;br /&gt;
;Routing is probably the issue:&lt;br /&gt;
    ip route add 62.210.76.1 dev ens192&lt;br /&gt;
    ip route add default via 62.210.76.1&lt;br /&gt;
&lt;br /&gt;
;Same for the case we can ping/ssh (slowly) from [[Ysul]] but not from the world:&lt;br /&gt;
    ip route change 62.210.76.1 dev ens192&lt;br /&gt;
    ip route change default via 62.210.76.1&lt;br /&gt;
&lt;br /&gt;
;Reconfigure the IPv6 tunnel&lt;br /&gt;
    ip tunnel del he-ipv6&lt;br /&gt;
    ip tunnel add he-ipv6 mode sit remote 216.66.84.42 local 212.129.32.223 ttl 255&lt;br /&gt;
    ip link set he-ipv6 up&lt;br /&gt;
    ip addr add 2001:470:1f12:ce7::2/64 dev he-ipv6&lt;br /&gt;
    ip addr add 2001:470:1f13:ce7:ca5:cade:fab:1e/64 dev he-ipv6&lt;br /&gt;
    ip route change ::/0 dev he-ipv6&lt;br /&gt;
&lt;br /&gt;
=== A port on the host doesn&#039;t reply (but does in Docker) ===&lt;br /&gt;
You can reset the iptables configuration. A script has been provided for that.&lt;br /&gt;
&lt;br /&gt;
    # systemctl stop docker&lt;br /&gt;
    # [[reset-iptables]]&lt;br /&gt;
    # systemctl start docker&lt;br /&gt;
&lt;br /&gt;
[[Category:Dwellers]]&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:0:0:0:4</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Dwellers&amp;diff=311</id>
		<title>Dwellers</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Dwellers&amp;diff=311"/>
		<updated>2014-11-03T15:39:03Z</updated>

		<summary type="html">&lt;p&gt;2001:470:1F13:D91:0:0:0:4: /* Containers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Dwellers&#039;&#039;&#039; is an VMWare EXSi instance installed on [[Stormshear]].&lt;br /&gt;
&lt;br /&gt;
The goal of this server is to provide a Docker / OpenShift / Geard CentOS PaaS service.&lt;br /&gt;
&lt;br /&gt;
== Basic information ==&lt;br /&gt;
* &#039;&#039;&#039;IPs:&#039;&#039;&#039;&lt;br /&gt;
** 212.129.32.223&lt;br /&gt;
** 2001:470:1f13:ce7:ca5:cade:fab:1e&lt;br /&gt;
* &#039;&#039;&#039;Hostname:&#039;&#039;&#039; dwellers.nasqueron.org&lt;br /&gt;
* &#039;&#039;&#039;Homepage:&#039;&#039;&#039; http://dwellers.nasqueron.org/&lt;br /&gt;
* &#039;&#039;&#039;Configuration:&#039;&#039;&#039;Access to 3.5 GB RAM and 4 core, burstable on request to 8 cores/+-6 Gb (to be negotiated according [[Ysul]] use)&lt;br /&gt;
* &#039;&#039;&#039;OS:&#039;&#039;&#039; CentOS 7&lt;br /&gt;
* &#039;&#039;&#039;ISP:&#039;&#039;&#039; [http://www.online.net Online] (FR)&lt;br /&gt;
* &#039;&#039;&#039;Network:&#039;&#039;&#039; Illiad (FR)&lt;br /&gt;
* &#039;&#039;&#039;Status:&#039;&#039;&#039; Installing.&lt;br /&gt;
* &#039;&#039;&#039;Policy:&#039;&#039;&#039; Access for any Nasqueron or Wolfplex project&lt;br /&gt;
* &#039;&#039;&#039;Started:&#039;&#039;&#039; 2014-07-13&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
* SSH (*:22)&lt;br /&gt;
* Docker&lt;br /&gt;
* OpenShift&lt;br /&gt;
&lt;br /&gt;
== Containers ==&lt;br /&gt;
=== Ports table ===&lt;br /&gt;
Ø indicates an unmapped port. In such cases, it&#039;s accessible logging in Dwellers, and connecting locally to the current mutable container IP variable and the immutable specified port.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;Container name&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Container image&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Prefix&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Service&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Internal port&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;External port&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Dwellers Shipyard&lt;br /&gt;
| shipyard/shipyard&lt;br /&gt;
| 30&lt;br /&gt;
| Apache||80||30080&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=3| phabricator.nasqueron.org&lt;br /&gt;
|rowspan=3| yesnault/docker-phabricator:latest&lt;br /&gt;
|rowspan=3| 31&lt;br /&gt;
| SSH||22||Ø&lt;br /&gt;
|-&lt;br /&gt;
| Apache||80||31080&lt;br /&gt;
|-&lt;br /&gt;
| MySQL||3306||Ø&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=3| forum.nasqueron.org&lt;br /&gt;
|rowspan=3| provided by the project Discuss docker image&lt;br /&gt;
|rowspan=3| 32&lt;br /&gt;
| SSH||22||Ø&lt;br /&gt;
|-&lt;br /&gt;
| Apache||80||32080&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|Others services like redis are still to document&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=2| bugzilla.espace-win.org&lt;br /&gt;
|rowspan=2| dklawren/docker-bugzilla&lt;br /&gt;
|rowspan=2| 33&lt;br /&gt;
| SSH||22||Ø&lt;br /&gt;
|-&lt;br /&gt;
| Apache||80||33080&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== phabricator.nasqueron.org ===&lt;br /&gt;
&#039;&#039;&#039;Port prefix:&#039;&#039;&#039; 31&lt;br /&gt;
&lt;br /&gt;
Provides a Phabricator instance for Nasqueron projects at [http://phabricator.nasqueron.org http://phabricator.nasqueron.org].&lt;br /&gt;
&lt;br /&gt;
To run a new container:&lt;br /&gt;
    docker run -p 31080:80 nasqueron-phabricator&lt;br /&gt;
&lt;br /&gt;
=== Shipyard ===&lt;br /&gt;
&#039;&#039;&#039;Port prefix:&#039;&#039;&#039; 30&lt;br /&gt;
&lt;br /&gt;
Run RethinkDB for the storage and launch shipyard:&lt;br /&gt;
     docker run -it -d --name shipyard-rethinkdb-data --entrypoint /bin/bash shipyard/rethinkdb -l&lt;br /&gt;
     docker run -it -P -d --name shipyard-rethinkdb --volumes-from shipyard-rethinkdb-data shipyard/rethinkdb&lt;br /&gt;
     docker run -it -p 30080:8080 -d --name shipyard --link shipyard-rethinkdb:rethinkdb shipyard/shipyard&lt;br /&gt;
&lt;br /&gt;
To control shipyard instance, launch the CLI (also in a container):&lt;br /&gt;
     docker run -it shipyard/shipyard-cli&lt;br /&gt;
&lt;br /&gt;
Documentation is at http://shipyard-project.com/docs/usage/cli/&lt;br /&gt;
&lt;br /&gt;
== Troubleshoot ==&lt;br /&gt;
=== How to point a domain here? ===&lt;br /&gt;
For your domains:&lt;br /&gt;
* subdomain.domain.tld A 212.129.32.223&lt;br /&gt;
* subdomain.domain.tld AAAA 2001:470:1f13:ce7:ca5:cade:fab:1e&lt;br /&gt;
&lt;br /&gt;
To request a DNS update for domains using extensively the Nasqueron servers infrastructure:&lt;br /&gt;
* subdomain.nasqueron.org CNAME www3.nasqueron.org&lt;br /&gt;
* subdomain.espace-win.org CNAME www2.espace-win.org&lt;br /&gt;
&lt;br /&gt;
=== How to access by SSH to an instance? ===&lt;br /&gt;
See the ports table to check if a port is assigned. We don&#039;t assign port if there is no reason general public got access to the VM by SSH. We assign port each time a stable address is needed (for example to talk with a Git server)&lt;br /&gt;
&lt;br /&gt;
If the port is mapped:&lt;br /&gt;
&lt;br /&gt;
    ssh -p &amp;lt;port&amp;gt; username@dwellers.nasqueron.org&lt;br /&gt;
&lt;br /&gt;
If the port is unmapped, you can from Dwellers:&lt;br /&gt;
&lt;br /&gt;
    docker ps&lt;br /&gt;
    docker inspect &amp;lt;instance id&amp;gt; #gets the local IP&lt;br /&gt;
    ssh &amp;lt;IP 172.*&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== No network at boot time ===&lt;br /&gt;
Access the machine on the hypervisor, then:&lt;br /&gt;
&lt;br /&gt;
;Check the interface is up:&lt;br /&gt;
    ip addr&lt;br /&gt;
    ifup ens192 # to bring it up&lt;br /&gt;
&lt;br /&gt;
;If you&#039;ve reset the configuration and need to add again the IP:&lt;br /&gt;
    ip addr 212.129.32.223/32 dev ens192&lt;br /&gt;
&lt;br /&gt;
;Routing is probably the issue:&lt;br /&gt;
    ip route add 62.210.76.1 dev ens192&lt;br /&gt;
    ip route add default via 62.210.76.1&lt;br /&gt;
&lt;br /&gt;
;Same for the case we can ping/ssh (slowly) from [[Ysul]] but not from the world:&lt;br /&gt;
    ip route change 62.210.76.1 dev ens192&lt;br /&gt;
    ip route change default via 62.210.76.1&lt;br /&gt;
&lt;br /&gt;
;Reconfigure the IPv6 tunnel&lt;br /&gt;
    ip tunnel del he-ipv6&lt;br /&gt;
    ip tunnel add he-ipv6 mode sit remote 216.66.84.42 local 212.129.32.223 ttl 255&lt;br /&gt;
    ip link set he-ipv6 up&lt;br /&gt;
    ip addr add 2001:470:1f12:ce7::2/64 dev he-ipv6&lt;br /&gt;
    ip addr add 2001:470:1f13:ce7:ca5:cade:fab:1e/64 dev he-ipv6&lt;br /&gt;
    ip route change ::/0 dev he-ipv6&lt;br /&gt;
&lt;br /&gt;
=== A port on the host doesn&#039;t reply (but does in Docker) ===&lt;br /&gt;
You can reset the iptables configuration. A script has been provided for that.&lt;br /&gt;
&lt;br /&gt;
    # systemctl stop docker&lt;br /&gt;
    # [[reset-iptables]]&lt;br /&gt;
    # systemctl start docker&lt;br /&gt;
&lt;br /&gt;
[[Category:Dwellers]]&lt;/div&gt;</summary>
		<author><name>2001:470:1F13:D91:0:0:0:4</name></author>
	</entry>
</feed>