<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://cc.practices.tools/wiki/index.php?action=history&amp;feed=atom&amp;title=Installing_octomode</id>
	<title>Installing octomode - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://cc.practices.tools/wiki/index.php?action=history&amp;feed=atom&amp;title=Installing_octomode"/>
	<link rel="alternate" type="text/html" href="http://cc.practices.tools/wiki/index.php?title=Installing_octomode&amp;action=history"/>
	<updated>2026-05-25T04:15:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>http://cc.practices.tools/wiki/index.php?title=Installing_octomode&amp;diff=5598&amp;oldid=prev</id>
		<title>Manetta: /* How to install octomode? */</title>
		<link rel="alternate" type="text/html" href="http://cc.practices.tools/wiki/index.php?title=Installing_octomode&amp;diff=5598&amp;oldid=prev"/>
		<updated>2026-04-07T13:31:47Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;How to install octomode?&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 13:31, 7 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l13&quot;&gt;Line 13:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 13:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  $ sudo su&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  $ sudo su&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  # cd /opt/&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  # cd /opt/&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  # git clone https://git.vvvvvvaria.org/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;varia&lt;/del&gt;/octomode.git&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  # git clone https://git.vvvvvvaria.org/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;CC&lt;/ins&gt;/octomode.git&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Step 2: Make an octomode system user===  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Step 2: Make an octomode system user===  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wikicc:diff:1.41:old-5546:rev-5598:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Manetta</name></author>
	</entry>
	<entry>
		<id>http://cc.practices.tools/wiki/index.php?title=Installing_octomode&amp;diff=5546&amp;oldid=prev</id>
		<title>Manetta: Created page with &quot;&#039;&#039;Installation notes for octomode.&#039;&#039;  ==How to install octomode?==  The code we use + an installation guide can be found here: https://git.vvvvvvaria.org/CC/octomode  A more expanded installation guide can be found below, written in the context of rosa in March 2022: https://hub.vvvvvvaria.org/rosa/  ===Step 1: Download the octomode code from the Varia git===   First go to the location where you want to install octomode. This should be outside of the public webserver...&quot;</title>
		<link rel="alternate" type="text/html" href="http://cc.practices.tools/wiki/index.php?title=Installing_octomode&amp;diff=5546&amp;oldid=prev"/>
		<updated>2026-03-25T12:24:38Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;#039;&amp;#039;Installation notes for &lt;a href=&quot;/wiki/Octomode&quot; title=&quot;Octomode&quot;&gt;octomode&lt;/a&gt;.&amp;#039;&amp;#039;  ==How to install octomode?==  The code we use + an installation guide can be found here: https://git.vvvvvvaria.org/CC/octomode  A more expanded installation guide can be found below, written in the context of rosa in March 2022: https://hub.vvvvvvaria.org/rosa/  ===Step 1: Download the octomode code from the Varia git===   First go to the location where you want to install octomode. This should be outside of the public webserver...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;Installation notes for [[octomode]].&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==How to install octomode?==&lt;br /&gt;
&lt;br /&gt;
The code we use + an installation guide can be found here: https://git.vvvvvvaria.org/CC/octomode&lt;br /&gt;
&lt;br /&gt;
A more expanded installation guide can be found below, written in the context of rosa in March 2022: https://hub.vvvvvvaria.org/rosa/&lt;br /&gt;
&lt;br /&gt;
===Step 1: Download the octomode code from the Varia git=== &lt;br /&gt;
&lt;br /&gt;
First go to the location where you want to install octomode. This should be outside of the public webserver folders, as we will have to save an API key of the etherpad at some point, and you don’t want to share that key in public. Also, switch to the root user for this step. &lt;br /&gt;
&lt;br /&gt;
 $ sudo su&lt;br /&gt;
 # cd /opt/&lt;br /&gt;
 # git clone https://git.vvvvvvaria.org/varia/octomode.git&lt;br /&gt;
&lt;br /&gt;
===Step 2: Make an octomode system user=== &lt;br /&gt;
&lt;br /&gt;
We will make an “octomode” user on the server to run octomode with this user. In this way we can restrict the access of this user to the rest of the server. It’s a way to make sure that the pads in octomode cannot be used to write code in a specific way, that it can be executed on the server. &lt;br /&gt;
&lt;br /&gt;
Make a system user called “octomode”. &lt;br /&gt;
&lt;br /&gt;
 # useradd --system --no-create-home --shell=/sbin/nologin octomode &lt;br /&gt;
&lt;br /&gt;
Give read and write access + ownership to the &amp;lt;code&amp;gt;/opt/octomode&amp;lt;/code&amp;gt; folder to the octomode user. &lt;br /&gt;
&lt;br /&gt;
 # chown -R octomode:octomode /opt/octomode&lt;br /&gt;
&lt;br /&gt;
 # chmod -R u+rw /opt/octomode&lt;br /&gt;
&lt;br /&gt;
To handle the limited folder access, i’m not sure what to do. &lt;br /&gt;
&lt;br /&gt;
Maybe a so called &amp;lt;code&amp;gt;chroot&amp;lt;/code&amp;gt; can be used? &lt;br /&gt;
&lt;br /&gt;
Asking for advice here: https://git.vvvvvvaria.org/varia/octomode/issues/2#issuecomment-757&lt;br /&gt;
&lt;br /&gt;
===Step 3: Get the API key of the etherpad you want to use=== &lt;br /&gt;
&lt;br /&gt;
This can be a local one which is running on the same server, or an etherpad that is running somewhere else. &lt;br /&gt;
&lt;br /&gt;
 # cat /opt/etherpad/APIKEY.txt&lt;br /&gt;
&lt;br /&gt;
If you&amp;#039;re using a newer version of etherpad, the &amp;lt;code&amp;gt;APIKEY.txt&amp;lt;/code&amp;gt; is not used anymore for accessing the API. But you can still enable it!&lt;br /&gt;
&lt;br /&gt;
 # sudo /opt/etherpad/settings.json&lt;br /&gt;
&lt;br /&gt;
Change the following line: &lt;br /&gt;
&lt;br /&gt;
 &amp;quot;authenticationMethod&amp;quot;: &amp;quot;${AUTHENTICATION_METHOD:sso}&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
into this:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;authenticationMethod&amp;quot;: &amp;quot;${AUTHENTICATION_METHOD:apikey}&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
Restart etherpad, and the &amp;lt;code&amp;gt;APIKEY.txt&amp;lt;/code&amp;gt; should be generated again.&lt;br /&gt;
&lt;br /&gt;
 # systemctl restart etherpad&lt;br /&gt;
&lt;br /&gt;
Copy the key and save it somewhere temporary.&lt;br /&gt;
&lt;br /&gt;
===Step 4: configure octomode===&lt;br /&gt;
&lt;br /&gt;
To configure octomode, save the following configuration settings as to a file called &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OCTOMODE_APPLICATION_ROOT=XXX&lt;br /&gt;
OCTOMODE_PORTNUMBER=XXX&lt;br /&gt;
OCTOMODE_PAD_URL=XXX&lt;br /&gt;
OCTOMODE_PAD_API_URL=XXX&lt;br /&gt;
OCTOMODE_PAD_API_KEY=XXX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # cd /opt/octomode/&lt;br /&gt;
 # nano .env&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OCTOMODE_PAD_API_KEY&amp;#039;&amp;#039;&amp;#039;: &amp;#039;&amp;#039;required&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;no default&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OCTOMODE_APPLICATION_ROOT&amp;#039;&amp;#039;&amp;#039;: &amp;#039;&amp;#039;optional&amp;#039;&amp;#039;, default: &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OCTOMODE_PORTNUMBER&amp;#039;&amp;#039;&amp;#039;: &amp;#039;&amp;#039;optional&amp;#039;&amp;#039;, default: &amp;lt;code&amp;gt;5001&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OCTOMODE_PAD_URL&amp;#039;&amp;#039;&amp;#039;: &amp;#039;&amp;#039;required&amp;#039;&amp;#039;, default: &amp;lt;code&amp;gt;https://cc.practices.tools/pad/&amp;lt;/code&amp;gt; (you need API access to this pad instance)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OCTOMODE_PAD_API_URL&amp;#039;&amp;#039;&amp;#039;: &amp;#039;&amp;#039;required&amp;#039;&amp;#039;, default: &amp;lt;code&amp;gt;https://cc.practices.tools/pad/api/1.2.15/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;: you must provide a value for &amp;lt;code&amp;gt;OCTOMODE_PAD_API_KEY&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OCTOMODE_PAD_URL&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;OCTOMODE_PAD_API_URL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can also change the “PORTNUMBER”, this is the port at which octomode will be running. You can change it to any port number that is not used yet on the server. &lt;br /&gt;
&lt;br /&gt;
Close and save the &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; file with &amp;lt;code&amp;gt;CTRL+X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ENTER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Step 5: Install the dependencies that octomode uses=== &lt;br /&gt;
&lt;br /&gt;
First make sure that &amp;lt;code&amp;gt;pip3&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;pandoc&amp;lt;/code&amp;gt; is installed. &lt;br /&gt;
&lt;br /&gt;
On debian you can install it by running: &lt;br /&gt;
&lt;br /&gt;
 # apt install python3-venv pandoc&lt;br /&gt;
&lt;br /&gt;
There is a Makefile in the octomode folder, which can be used to install the dependencies. &lt;br /&gt;
&lt;br /&gt;
First navigate to the octomode folder and then run: &lt;br /&gt;
&lt;br /&gt;
 # cd /opt/octomode&lt;br /&gt;
 # make setup&lt;br /&gt;
&lt;br /&gt;
Change the ownership of the installed dependencies to octomode. &lt;br /&gt;
&lt;br /&gt;
 # chown -R octomode:octomode .venv&lt;br /&gt;
&lt;br /&gt;
===Step 6: Try to run octomode, to see if it works!=== &lt;br /&gt;
&lt;br /&gt;
 # make local&lt;br /&gt;
&lt;br /&gt;
If you are currently in the same local network as rosa, you can visit rosa’s ip address on port 5001. &lt;br /&gt;
&lt;br /&gt;
http://192.168.178.58:5001 &lt;br /&gt;
&lt;br /&gt;
It could be, that the etherpads in the iframes are blocked because of a cross-site header...&lt;br /&gt;
&lt;br /&gt;
If you are trying to use an etherpad that runs on the same server, try to switch your &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; settings to the same ip-adress or domain name.&lt;br /&gt;
&lt;br /&gt;
Try to visit all the different “modes”: &amp;lt;code&amp;gt;pad&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;stylesheet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;html&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;pdf&amp;lt;/code&amp;gt;, to make sure that they all work. &lt;br /&gt;
&lt;br /&gt;
You can stop the application with &amp;lt;code&amp;gt;CTRL+C&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Step 7: Run octomode as a background service=== &lt;br /&gt;
&lt;br /&gt;
Octomode is written in Flask, a python library to make web applications. It needs to run all the time in order to be available for people to use. We will make a systemd &amp;lt;code&amp;gt;.service&amp;lt;/code&amp;gt; file for this. https://blog.miguelgrinberg.com/post/running-a-flask-application-as-a-service-with-systemd &lt;br /&gt;
&lt;br /&gt;
Make a &amp;lt;code&amp;gt;.service&amp;lt;/code&amp;gt; file for octomode: &lt;br /&gt;
&lt;br /&gt;
 # nano /etc/systemd/system/octomode.service &lt;br /&gt;
&lt;br /&gt;
Paste the following configurations in the file: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit] &lt;br /&gt;
Description=Collective PDF rendering environment After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
User=octomode  &lt;br /&gt;
WorkingDirectory=/opt/octomode     &lt;br /&gt;
ExecStart=make local&lt;br /&gt;
Restart=always&lt;br /&gt;
 &lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload the systemd daemon: &lt;br /&gt;
&lt;br /&gt;
 # systemctl daemon-reload &lt;br /&gt;
&lt;br /&gt;
Enable octomode as a service:&lt;br /&gt;
&lt;br /&gt;
 # systemctl enable octomode &lt;br /&gt;
&lt;br /&gt;
And start the octomode service. &lt;br /&gt;
&lt;br /&gt;
 # systemctl start octomode &lt;br /&gt;
&lt;br /&gt;
Check if it works by visiting http://192.168.178.58:5001/ again!&lt;br /&gt;
&lt;br /&gt;
===Step 8: Connect octomode to an URL===&lt;br /&gt;
&lt;br /&gt;
To access octomode through an URL, like https://rosa.vvvvvvaria.org/octomode/, a mapping is needed to route octomode’s port 5001 to the URL that will be used. In nginx, we can use a proxy_jump for this. &lt;br /&gt;
&lt;br /&gt;
Open the nginx configuration file. &lt;br /&gt;
&lt;br /&gt;
 # cd /etc/nginx/sites-enabled &lt;br /&gt;
 # nano default &lt;br /&gt;
&lt;br /&gt;
Add the following setting to the nginx file. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
location /octomode { &lt;br /&gt;
    proxy_pass http://127.0.0.1:5001; &lt;br /&gt;
    auth_basic &amp;quot;Hello! This is the CC version of octomode, octomode-as-a-service for a trusted peers-to-peers network.&amp;quot;;&lt;br /&gt;
    auth_basic_user_file /etc/nginx/.htpasswd;&lt;br /&gt;
} &lt;br /&gt;
# Serve the /static/ folder nginx (instead of Flask) &lt;br /&gt;
# as this Flask installation runs outside the root URL &lt;br /&gt;
location ^~ /static/ { &lt;br /&gt;
    alias /opt/octomode/static/; &lt;br /&gt;
    autoindex off;&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At CC we share a password between a trusted peers-to-peers network, which you have to generate to make above configurations with the &amp;lt;code&amp;gt;auth_basic&amp;lt;/code&amp;gt; settings work.&lt;br /&gt;
&lt;br /&gt;
For this, you can follow: https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/&lt;br /&gt;
&lt;br /&gt;
Change the permissions of the &amp;lt;code&amp;gt;/opt/octomode/static/&amp;lt;/code&amp;gt; folder, as this folder will be served by nginx. &lt;br /&gt;
&lt;br /&gt;
 # chown -R www-data:www-data /opt/octomode/static/ &lt;br /&gt;
 # chmod -R g+w /opt/octomode/static/ &lt;br /&gt;
&lt;br /&gt;
Check if you configuarion is oke. &lt;br /&gt;
&lt;br /&gt;
 # nginx -t &lt;br /&gt;
&lt;br /&gt;
If so, then reload nginx. &lt;br /&gt;
&lt;br /&gt;
 # systemctl reload nginx &lt;br /&gt;
&lt;br /&gt;
To test it, run:&lt;br /&gt;
&lt;br /&gt;
 # make action&lt;br /&gt;
&lt;br /&gt;
This will first check if you already install gunicorn in the .venv folder, and after that run octomode with gunicorn and not the built-in Flask dev server.&lt;br /&gt;
&lt;br /&gt;
And lastly, change your systemd background service file, to switch to &amp;lt;code&amp;gt;make action&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 # nano /etc/systemd/system/octomode.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Collective PDF rendering environment After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
User=octomode&lt;br /&gt;
WorkingDirectory=/opt/octomode&lt;br /&gt;
ExecStart=make action&lt;br /&gt;
Restart=always&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See if it works by visiting http://192.168.178.58/octomode/ or https://rosa.vvvvvvaria.org/octomode/.&lt;br /&gt;
&lt;br /&gt;
==Octomode default templates==&lt;br /&gt;
&lt;br /&gt;
===PAD.md===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
title: octomode&lt;br /&gt;
language: en&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
&lt;br /&gt;
                                      |      &lt;br /&gt;
  __   __ _|_  __   _  _  _    __   __|   _  &lt;br /&gt;
 /  \_/    |  /  \_/ |/ |/ |  /  \_/  |  |/  &lt;br /&gt;
 \__/ \___/|_/\__/   |  |  |_/\__/ \_/|_/|__/&lt;br /&gt;
                                             &lt;br /&gt;
  &lt;br /&gt;
  This document is opened in octomode.&lt;br /&gt;
&lt;br /&gt;
  pad          : all materials for the PDF are collected here (written in Markdown)&lt;br /&gt;
  stylesheet   : all CSS rules for the PDF are collected here (written in CSS)&lt;br /&gt;
  html         : render the structure of the lay out as a HTML (with PyPandoc)&lt;br /&gt;
                 [note] this view does not render any styling!&lt;br /&gt;
  pdf          : render the lay out as a PDF (with Paged.js)&lt;br /&gt;
&lt;br /&gt;
  https://git.vvvvvvaria.org/cc/octomode&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
This pad is hosted by CC (creative crowds), a server that we share for doing&lt;br /&gt;
collective research on the entanglements of tools, cultures and infrastructure. &lt;br /&gt;
&lt;br /&gt;
How can this server be available AND unstable, public AND being paid for,&lt;br /&gt;
free to be used AND situated, a production environment AND in transformation?&lt;br /&gt;
&lt;br /&gt;
While surfing the contradictions, we are formulting collective guidelines for &lt;br /&gt;
engaging with this server, which you can find at: https://cc.practices.tools&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;section id=&amp;quot;cover&amp;quot;&amp;gt;&lt;br /&gt;
# *in octomode* { #title }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;section id=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
Octomode is a collective editing space for PDF making, using Etherpad, Paged.js and Flask.&lt;br /&gt;
&lt;br /&gt;
Inspired by the multi-centered, tentacular cognition capabilities of the octopus, we imagined a space in which the artificial boundaries of writing and design can be crossed; where writing, editing and designing can be done in one environment simultaneously, allowing the format to influence the matter and vice-versa. &lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
Edit this text in the PAD view.&lt;br /&gt;
Edit the styling in the STYLESHEET view. &lt;br /&gt;
Preview the page in the HTML view.&lt;br /&gt;
Render it on pages in the PDF view.&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PAD.css===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@charset &amp;quot;utf-8&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
@page{&lt;br /&gt;
    size: A5;&lt;br /&gt;
    margin: 10mm 20mm 25mm 20mm;&lt;br /&gt;
&lt;br /&gt;
    @bottom-center{&lt;br /&gt;
        content: counter(page);&lt;br /&gt;
        font-family: monospace;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
body{&lt;br /&gt;
    font-size: 12px;&lt;br /&gt;
    line-height: 1.5;&lt;br /&gt;
    color: #822b01;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ------------------------------------ cover */&lt;br /&gt;
&lt;br /&gt;
@page:first{&lt;br /&gt;
    background-color: #f3c6ff;&lt;br /&gt;
    color: #822b01;&lt;br /&gt;
}&lt;br /&gt;
section#cover{&lt;br /&gt;
    break-after: always;&lt;br /&gt;
}&lt;br /&gt;
section#cover h1#title{&lt;br /&gt;
    font-size: 300%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ------------------------------------ main */&lt;br /&gt;
&lt;br /&gt;
section#main pre{&lt;br /&gt;
    color: magenta;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Manetta</name></author>
	</entry>
</feed>