diff options
| -rw-r--r-- | .footer.html | 4 | ||||
| -rw-r--r-- | 404.html | 2 | ||||
| -rw-r--r-- | auth.html | 4 | ||||
| -rw-r--r-- | bat.html | 4 | ||||
| -rw-r--r-- | bitcoin.html | 2 | ||||
| -rw-r--r-- | calibre.html | 131 | ||||
| -rw-r--r-- | certbot.html | 23 | ||||
| -rw-r--r-- | cgi.html | 268 | ||||
| -rw-r--r-- | cgit.html | 143 | ||||
| -rw-r--r-- | coturn.html | 93 | ||||
| -rw-r--r-- | cron.html | 2 | ||||
| -rw-r--r-- | crypto.html | 2 | ||||
| -rw-r--r-- | dns.html | 3 | ||||
| -rw-r--r-- | domain.html | 9 | ||||
| -rw-r--r-- | donate-bitcoin.html | 23 | ||||
| -rw-r--r-- | donate-monero.html | 23 | ||||
| -rw-r--r-- | ejabberd.html | 188 | ||||
| -rw-r--r-- | federation.html | 2 | ||||
| -rw-r--r-- | gemini.html | 2 | ||||
| -rw-r--r-- | git.html | 4 | ||||
| -rw-r--r-- | gitea.html | 2 | ||||
| -rw-r--r-- | html.html | 2 | ||||
| -rw-r--r-- | html2.html | 2 | ||||
| -rw-r--r-- | html4.html | 2 | ||||
| -rw-r--r-- | i2p.html | 101 | ||||
| -rw-r--r-- | index.html | 66 | ||||
| -rw-r--r-- | irc.html | 2 | ||||
| -rw-r--r-- | jitsi.html | 130 | ||||
| -rw-r--r-- | maintenance.html | 4 | ||||
| -rw-r--r-- | matrix.html | 54 | ||||
| -rw-r--r-- | monero.html | 2 | ||||
| -rw-r--r-- | nextcloud.html | 60 | ||||
| -rw-r--r-- | nginx.html | 19 | ||||
| -rw-r--r-- | openalias.html | 10 | ||||
| -rw-r--r-- | page-quality.html | 185 | ||||
| -rw-r--r-- | peertube.html | 222 | ||||
| -rw-r--r-- | pix/calibre.png | bin | 0 -> 17440 bytes | |||
| -rw-r--r-- | pix/calibre/calibre-1.png | bin | 0 -> 5823 bytes | |||
| -rw-r--r-- | pix/calibre/calibre-2.png | bin | 0 -> 15884 bytes | |||
| -rw-r--r-- | pix/cgit.svg | 58 | ||||
| -rw-r--r-- | pix/ejabberd-admin.jpg | bin | 0 -> 22266 bytes | |||
| -rw-r--r-- | pix/ejabberd-login.jpg | bin | 0 -> 18399 bytes | |||
| -rw-r--r-- | pix/element.svg | 6 | ||||
| -rw-r--r-- | pix/i2p.svg | 98 | ||||
| -rw-r--r-- | pix/itoopie.svg | 1 | ||||
| -rw-r--r-- | pix/jitsi-01.webp | bin | 0 -> 14998 bytes | |||
| -rw-r--r-- | pix/jitsi.svg | 650 | ||||
| -rw-r--r-- | pix/landchad.gif | bin | 0 -> 15127 bytes | |||
| -rw-r--r-- | pix/matrix.svg | 48 | ||||
| -rw-r--r-- | pix/peertube-login.jpg | bin | 0 -> 76446 bytes | |||
| -rw-r--r-- | pix/peertube.svg | 118 | ||||
| -rw-r--r-- | pix/pleroma.svg | 2 | ||||
| -rw-r--r-- | pix/webrtc.svg | 16 | ||||
| -rw-r--r-- | pleroma.html | 2 | ||||
| -rw-r--r-- | rss-bridge.html | 2 | ||||
| -rw-r--r-- | rss.xml | 861 | ||||
| -rw-r--r-- | rsync.html | 4 | ||||
| -rw-r--r-- | selfhosting.html | 120 | ||||
| -rw-r--r-- | server.html | 5 | ||||
| -rw-r--r-- | sshkeys.html | 2 | ||||
| -rw-r--r-- | standalone.html | 2 | ||||
| -rw-r--r-- | style.css | 40 | ||||
| -rw-r--r-- | template.html | 2 | ||||
| -rw-r--r-- | tor.html | 38 | ||||
| -rw-r--r-- | ufw.html | 4 | ||||
| -rw-r--r-- | xmpp.html | 83 |
66 files changed, 3803 insertions, 154 deletions
diff --git a/.footer.html b/.footer.html index 2edcf80..2d33ffb 100644 --- a/.footer.html +++ b/.footer.html @@ -2,6 +2,6 @@ Because Everyone should be an Internet LandChad.</br> <a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a> <a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a> -<a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a> -<a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a> +<a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a> +<a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a> <a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a> @@ -22,6 +22,6 @@ will feature all new pages and significant changes. </p> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> @@ -114,9 +114,9 @@ <p>Reload nginx and you're good to go!</p> - <strong>Contributor</strong> - <a href="https://tomfasano.xyz" target="_blank">tomfasano.xyz</a> + <strong>Contributor</strong> - <a href="https://tomfasano.co" target="_blank">tomfasano.co</a> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> @@ -57,7 +57,7 @@ <img src="pix/brave-02.png" alt="channel choices"> <p> Once you select what to add, you will have to verify that you own that website/channel via various methods. - You can add DNS settings to Epik/your registrar for a website, which is generally the most consistent way for websites. + You can add DNS settings to your registrar for a website, which is generally the most consistent way for websites. </p> <h2>Using Uphold or Gemini for payouts</h2> <p> @@ -87,6 +87,6 @@ Tip buttons will appear on many other social media sites, for example Github commits, projects and comments by users. </p> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/bitcoin.html b/bitcoin.html index 81fc641..7872291 100644 --- a/bitcoin.html +++ b/bitcoin.html @@ -97,6 +97,6 @@ Bitcoin users will know how to scan and use them. </p> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/calibre.html b/calibre.html new file mode 100644 index 0000000..7f4a6c6 --- /dev/null +++ b/calibre.html @@ -0,0 +1,131 @@ +<!DOCTYPE html> +<html lang=en> + <head> + <title>Setting up a Calibre library server – LandChad.net</title> + <meta charset="utf-8"/> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> + <link rel='stylesheet' type='text/css' href='style.css'> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel='alternate' type='application/rss+xml' title='Land Chad RSS' href='/rss.xml'> + </head> +<body> + <header><h1>Setting up a Calibre library server</h1></header> + <nav></nav> + <main> + <img src="pix/calibre.png" alt="Calibre logo" class=titleimg> + <p> + The Calibre library server is a great way to store your eBooks. + It allows you to: + </p> + <ul> + <li>Share your books with others.</li> + <li>Easily transfer your books between devices and access them from anywhere.</li> + </ul> + + <h2>Installation</h2> + + <p>Install the Calibre package. + You might also want rsync to upload books.</p> + + <pre><code>apt install -y calibre rsync +mkdir /opt/calibre</code></pre> + + <p> + Either upload your existing library using <code>rsync</code>. For example to <code>/opt/calibre/</code>. + <pre><code>cd ~/Documents +rsync -avuP <strong>your-library-dir</strong> root@<strong>example.org</strong>:/opt/calibre/</code></pre> + + <p> + Or create a library and add a book to it: + </p> + +<pre><code>cd /opt/calibre +calibredb add <strong>book.epub</strong> --with-library <strong>your-library</strong></code></pre> + + <aside> + <p> + For more information about the <code>calibredb</code> command see <code>man calibredb</code>. + </p> + </aside> + + <p> + Add a new user to protect your server: + </p> + + <pre><code>calibre-server --manage-users</code></pre> + + <h2>Creating a service</h2> + + <p> + Create a new file <code>/etc/systemd/system/calibre-server.service</code> and add the following: + </p> + +<pre><code>[Unit] +Description=Calibre library server +After=network.target + +[Service] +Type=simple +User=root +Group=root +ExecStart=/usr/bin/calibre-server --enable-auth --enable-local-write /opt/calibre/your_library --listen-on 127.0.0.1 + +[Install] +WantedBy=multi-user.target +</code></pre> + <aside> + <p> + You can change the port with the <code>--port</code> prefix. Additional information <code>man calibre-server</code>. + </p> + </aside> + + <p> + Issue <code>systemctl daemon-reload</code> to apply the changes. + </p> + + <p> + Enable and start the service. + </p> + +<pre><code>systemctl enable calibre-server +systemctl start calibre-server</code></pre> + + <h2>A reverse proxy with Nginx</h2> + + <p> + Create a new file <code>/etc/nginx/sites-available/calibre</code> and enter the following: + </p> + +<pre><code>server { + listen 80; + client_max_body_size 64M; # to upload large books + server_name <strong>calibre.example.org</strong> ; + + location / { + proxy_pass http://127.0.0.1:8080; + } +}</code></pre> + + <p>Issue a Let's Encrypt certificate. <a href="certbot.html">Detailed instructions and additional information</a>.</p> + + <pre><code>certbot --nginx</code></pre> + + <p>Now just go to <strong>calibre.example.org</strong>. The server will request an username and a password.</p> + + <a href="pix/calibre-1.png"> + <img src="pix/calibre/calibre-1.png" alt="calibre"> + </a> + + <p>After login you will see something like this.</p> + + <a href="pix/calibre-1.png"> + <img src="pix/calibre/calibre-2.png" alt="calibre"> + </a> + + <h2>Contribution</h2> + <li>Author: rflx – <a href="https://rflx.xyz">website</a> -- XMR: <code class=crypto>48T5XpHTXAZ5Nn8YCypA4aWn1ffQLHJkFGDArXQB6cmrP6cqLY72cu7CR2iq2MmL5Ndu3d47e5MKjGpL4prYgdrTCFAHD9c</code> + </li> + </main> +<footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> +</body> +</html> diff --git a/certbot.html b/certbot.html index f632b98..72351f2 100644 --- a/certbot.html +++ b/certbot.html @@ -14,12 +14,12 @@ <main> <p> Once you have a website, it is extremely important to enable encrypted connections over HTTPS/SSL. - You might have no idea what that means, but it's easy to do how we've already <a href="nginx.html">set our server up</a>. + You might have no idea what that means, but it's easy to do now that we've <a href="nginx.html">set our web server up</a>. </p> <p> Certbot is a program that automatically creates and deploys the certificates that allow encrypted connections. - It used to be a pain (and often expensive) to do this, but now it's all free and automatic. + It used to be painful (and often expensive) to do this, but now it's all free and automatic. </p> <h2>Why is encryption important?</h2> @@ -62,7 +62,7 @@ ufw allow 443</code></pre> <p> The command will ask you for your email. - This is so when the certificates need to be renewed in three months, you will get a email about it. + This is so when the certificates need to be renewed in three months, you will get an email about it. You can set the certificates to renew automatically, but it's a good idea to check it the first time to ensure it renewed properly. You can avoid giving your email by running the command with the <code>--register-unsafely-without-email</code> option as well. </p> @@ -129,8 +129,21 @@ ufw allow 443</code></pre> For more on cron and crontabs please <a href="cron.html">click here!</a> </p> - <span class=next><a href="html.html">Next: Use HTML to Make Simple Webpages</a></span> + <span class=prev><a href="nginx.html">Previous: Set up a webserver.</a></span> + <!-- <span class=next><a href="html.html">Next: Use HTML to Make Simple Webpages</a></span> --> + + <span class=next>You've reached the end of the basic course!</span> + + <p> + You now have a live website on the internet. + You can add to it what you wish. + </p> + + <p> + As you add content to your site, there are many other things you can also install linked on <a href="index.html">the main page</a>, + and many more improvements, tweaks and bonuses. + </p> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/cgi.html b/cgi.html new file mode 100644 index 0000000..e1c210b --- /dev/null +++ b/cgi.html @@ -0,0 +1,268 @@ +<!DOCTYPE html> +<html lang=en> + <head> + <title>Server-Side Scripting with CGI</title> + <meta charset="utf-8"/> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> + <link rel='stylesheet' type='text/css' href='style.css'> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel='alternate' type='application/rss+xml' title='Land Chad RSS' href='/rss.xml'> + </head> +<body> + <header><h1>Server-Side Scripting with CGI</h1></header> + <nav></nav> + <main> + <p> + The basic website tutorial here describes how to set up a static + website — one that just serves HTML files saved on your server, + and until you change something manually, the same content will be served + each time a given page is requested. This is perfectly enough for most + personal website needs. This is how blogs should be implemented, instead + of relying on bloatware like WordPress! + </p> + + <p> + But sometimes you genuinely <i>do</i> need something more. You need your + website to serve different contents depending on the time, on who the + requester is, on the contents of a database, or maybe process user input + from a form. + </p> + + <h2>CGI</h2> + <p> + CGI, or the Common Gateway Interface, is a specification to allow you, + the server owner, to program your web server using pretty much any + programming language you might know. The specification is almost as old + as the Internet itself and for a long time CGI scripting was the primary + method of creating dynamic websites. + </p> + + <p> + CGI is a very simple specification indeed. You write a script in your + favorite language, the script receives input about the request in + environment variables, and whatever you print to the standard output + will be the response. Most likely, though, you will want to use a + library for your language of choice that makes a lot of this + request/response handling simpler (e.g. parsing query parameters for + you, setting appropriate headers, etc.). + </p> + + <h3>Limitations of CGI</h3> + <p> + While in theory you could implement any sort of functionality with CGI + scripts, it's going to get difficult managing a lot of separate scripts + if they're supposed to be working in tandem to implement a dynamic + website. If you want to build a full out web application, you'd probably + be better off learning a web framework than gluing together Perl + scripts. + </p> + + <p> + That said, just as most of the web could be replaced with static + websites, much of the remaining non-static web could be replaced with a + few simple scripts, rather than bloated Ruby on Rails or Django + applications. + </p> + + <h2>Let's write a CGI script!</h2> + + <p> + We'll implement a simple example CGI script. I'll use Ruby for this + tutorial, but you'll be able to follow along even if you don't know + Ruby, just treat it as pseudocode then find a CGI library for your + language. + </p> + + <h3>The working example</h3> + + <p> + Our working example will be the Lazy Calculator. Yeah, you're probably + tired of seeing calculator examples in every programming tutorial, but + have you ever implemented one that takes the weekends off? + </p> + + <p> + Here's how it will work. When in a browser you submit a request to your + website like + </p> + + <pre><code>example.com/calculator.html?a=10&b=32</code></pre> + + <p> + you will receive a page with the result of the addition of 10 and 32: + 42. + </p> + + <p> + <i>Unless</i> you send your request on a weekend. Then the website will + respond with + </p> + + <pre><code>I don't get paid to work on weekends! Come back Monday.</code></pre> + + <p> + This example will show a few things that CGI scripts can do that you + wouldn't have been able to get using just file hosting in your + web server: + + <ul> + <li> getting inputs from the user; </li> + <li> + getting external information (here just the system time, but you + could imagine instead connecting to a database); + </li> + <li> using the above to create dynamic output. </li> + </ul> + + <h3>The code</h3> + + <p> + Here's an implementation of the lazy calculator as a Ruby CGI script: + </p> + + <pre><code>#!/bin/env ruby + +require 'cgi' +require 'date' + +cgi = CGI.new +today = Date::today + +a = cgi["a"].to_i +b = cgi["b"].to_i + +if today.saturday? || today.sunday? + cgi.out do + "I don't get paid to work on weekends! Come back Monday." + end +else + cgi.out do + (a + b).to_s + end +end</code></pre> + + <p> + Let's go through what's happening here. + </p> + + <h3>The shebang line</h3> + <p> + CGI works by pointing your web server to an executable program. A Ruby + or Python script by itself is not immediately executable by a computer. + But on Unix-like systems you can specify the program that will be able + to execute your file in its first line if it starts with <code>#!</code> + (known as the shebang; read more about it on + <a href="https://en.wikipedia.org/wiki/Shebang_(Unix)">Wikipedia</a>). + </p> + + <p> + So if you're going to be using a scripting language, you'll probably + need the appropriate shebang line at the top of your script. If you use + a compiled language, you'll just point your web server to the compiled + executable binary. + </p> + + <h3>Query parameters</h3> + <p> + The next interesting lines of code are where we set the variables + <code>a</code> and <code>b</code>. Here we are getting user inputs from + the request. + </p> + + <p> + In the example request we mentioned above + (<code>example.com/calculator.html?a=10&b=32</code>), the part + starting from the question mark, <code>?a=10&b=32</code>, is the + <i>query string</i>. This is how users can submit parameters with their + web requests. Usually these parameters are set by e.g. a form on your + website, but in our simple example we'll be just manually manipulating + the URL. + </p> + + <p> + The query string contains key-value pairs. The Ruby CGI library makes + them available in the <code>CGI</code> object it provides. We just need + to index it with the desired key, and we'll get the corresponding value. + </p> + + <h3>Wrapping it up</h3> + <p> + The remaining parts of the code should be pretty self-explanatory. We + get today's date, check if it's a Saturday or a Sunday, and depending on + that, we instruct the CGI library to output either the answer, or a + "come back later" message. + </p> + + <p> + The Ruby library by default returns an HTML response, so we really + should have wrapped our outputs in some <code>html</code>, + <code>body</code>, etc. tags. Alternatively, we could have specified + that the response is just plain text with + </p> + + <pre><code>cgi.out 'text/plain' do</code></pre> + + <p> + In general, your CGI library will probably have ways of specifying all + sorts of HTTP response headers, like status code, content type, etc. + </p> + + <h2>Making it work</h2> + <p> + We have a CGI script, now let's point our web server to it. + </p> + + <h3>Installing FastCGI</h3> + + <p> + If you're using Nginx, install <code>fcgiwrap</code>: + </p> + + <pre><code>apt install fcgiwrap</code></pre> + + <p> + This installs the necessary packages for Nginx to use FastCGI — a + layer between your web server and CGI script that allows for faster + handling of scripts than if the web server had to handle it all by + itself. + </p> + + <p> + Other web servers will probably have a similarly simple way of enabling + FastCGI, or you can look into other methods for launching CGI scripts. + </p> + + <h3>Nginx configuration</h3> + <p> + In the configuration file for your website, add something like the + following: + </p> + +<pre><code>location /calculator.html { + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME /usr/local/bin/lazy-calculator.rb; + fastcgi_param QUERY_STRING $query_string; + fastcgi_pass unix:/run/fcgiwrap.socket; +}</code></pre> + + <p> + <code>fastcgi_param</code> directives specify various parameters for + FastCGI. <code>SCRIPT_FILENAME</code> should point to your executable. + For <code>QUERY_STRING</code>, we just copy Nginx's + <code>$query_string</code> variable. You might want to pass other + information to your CGI script as well, see for example + <a href="https://wiki.debian.org/nginx/FastCGI">the Debian wiki</a> for + a more detailed example, including pointing to an entire directory of + CGI scripts, rather than adding each one by hand to your web server + config. + </p> + + <h2>Contribution</h2> + <ul> + <li>Martin Chrzanowski -- <a + href="https://m-chrzan.xyz">website</a>, <a href="https://m-chrzan.xyz/donate.html">donate</a></li> + </ul> + </main> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> +</body> +</html> diff --git a/cgit.html b/cgit.html new file mode 100644 index 0000000..b750a48 --- /dev/null +++ b/cgit.html @@ -0,0 +1,143 @@ +<!DOCTYPE html> +<html lang=en> + +<head> + <title>Setting up Cgit – LandChad.net</title> + <meta charset="utf-8" /> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> + <link rel='stylesheet' type='text/css' href='style.css'> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel='alternate' type='application/rss+xml' title='Land Chad RSS' href='/rss.xml'> +</head> + +<body> + <header> + <h1>Setting up Cgit</h1> + <img src="pix/cgit.svg" class="titleimg"> + </header> + <main> + <p> + Once you have your server hosting your git repositories, you might want to allow others to browse + your repositories on the web. Cgit is a Free Software that allows browsing git repositories through + the web. </p> + + <p> + Note that Cgit is a read-only frontend for Git repositories and doesn't have issues, pull requests + or user management. If that's what you want, consider installing Gitea instead.</p> + + <h2>Installing cgit and fcgiwrap</h2> + <h3>Install fcgiwrap</h3> + <p> + NGINX doesn't have the capability to run CGI scripts by itself, it depends on an intermediate layer + like fcgiwrap to run CGI scripts like cgit:</p> + + <pre><code>apt install fcgiwrap</code></pre> + + <p>And now we can install cgit itself with:</p> + + <pre><code>apt install cgit</code></pre> + + <h2>Setting up NGINX</h2> + <p> + You should have an NGINX server running with a TLS certificate by now. Add the following configuration + to your server to pass the requests to Cgit, while serving static files directly:</p> + + <pre><code>server { + listen 443 ssl; + listen [::]:443 ssl; + ssl_certificate /etc/ssl/nginx/<strong>git.example.org</strong>.crt; + ssl_certificate_key /etc/ssl/nginx/<strong>git.example.org</strong>.key; + server_name <strong>git.example.org</strong>; + + root /usr/share/cgit ; + try_files $uri @cgit ; + + location @cgit { + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME /usr/lib/cgit/cgit.cgi; + fastcgi_param PATH_INFO $request_uri; + fastcgi_param QUERY_STRING $query_string; + fastcgi_pass unix:/run/fcgiwrap.socket; + } +}</code></pre> + + <p>Then get NGINX to reload your configuration.</p> + + <h2>Configuring cgit</h2> + <p>You've got cgit up and running now, but you'll probably see it without any style and without any repository. + To change this, we need to configure Cgit to our liking, by editing <code>/etc/cgitrc</code>. + </p> + + <pre><code>css=/cgit.css +logo=/cgit.svg +virtual-root=/ + +# Title and description shown on top of each page +root-title=<strong>Chad's git server</strong> +root-desc=<strong>A web interface to LandChad's git repositories, powered by Cgit</strong> + +# The location where git repos are stored on the server +scan-path=/srv/git/</code></pre> + + <p>This configuration assumes you followed the <a href="/git">git hosting guide</a> and store your repositories + on the <code>/srv/git/</code> directory.</p> + + <p>Cgit's configuration allows changing many settings, as documented on the cgitrc(5) manpage installed with + Cgit.</p> + + <h3>Changing the displayed repository owner</h3> + + <p>Cgit's main page shows each repo's owner, which is "git" in case you followed the git hosting guide, but you + might want to change the name to yours. Cgit shows the owner's system name, so you need to modify the git + user + to give it your name:</p> + + <pre><code>usermod -c "<strong>Your Name</strong>" git</code></pre> + + <h3>Changing the repository description</h3> + + <p>Navigate to your bare repository on the server and edit the <code>description</code> file inside it</p> + + <h3>Displaying the repository idle time</h3> + + <p>To do this, we need to create a post-receive hook for each repository that updates the file cgit uses + to determine the idle time. Inside your repository, create a file <code>hooks/post-receive</code> and add + the following contents:</p> + + <pre><code>#!/bin/sh + +agefile="$(git rev-parse --git-dir)"/info/web/last-modified + +mkdir -p "$(dirname "$agefile")" && +git for-each-ref \ + --sort=-authordate --count=1 \ + --format='%(authordate:iso8601)' \ + >"$agefile"</code></pre> + + <p>And give it execution permissions with:</p> + + <pre><code>chmod +x hooks/post-receive</code></pre> + + <p>Next time you push to that repository, the idle time should reset and show the correct value.</p> + + <h2>Contribution</h2> + <ul> + <li>Ariel Costas – <a href="https://costas.dev">website</a>, <a + href="https://costas.dev/donations/">donations</a></li> + </ul> + </main> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a + href="index.html"> + <li><img src="pix/chad.gif" alt="chad"></li> + </a><a href="rss.xml"> + <li><img src="pix/rss.svg" alt="RSS"></li> + </a><a href="pix/btc.png"> + <li><img src="pix/btc.svg" alt="BTC"></li> + </a><a href="pix/xmr.png"> + <li><img src="pix/xmr.svg" alt="XMR"></li> + </a><a href="https://github.com/lukesmithxyz/landchad"> + <li><img src="pix/git.svg" alt="Github"></li> + </a></footer> +</body> + +</html> diff --git a/coturn.html b/coturn.html new file mode 100644 index 0000000..6bbd89e --- /dev/null +++ b/coturn.html @@ -0,0 +1,93 @@ +<!DOCTYPE html> +<html lang=en> + <head> + <title>Coturn – LandChad.net</title> + <meta charset="utf-8"/> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> + <link rel='stylesheet' type='text/css' href='style.css'> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel='alternate' type='application/rss+xml' title='Land Chad RSS' href='/rss.xml'> + </head> +<body> + <header><h1>Coturn</h1></header> + <nav></nav> + <main> + + <img class=titleimg src="pix/webrtc.svg" alt="WebRTC logo"> + + <p><a href="https://github.com/coturn/coturn">Coturn</a> is a libre <strong>STUN</strong> and <strong>TURN</strong> server software that allows users of chat protcols (Such as <a href="xmpp.html">XMPP</a> and <a href="matrix.html">Matrix</a>) to perform WebRTC <strong>voice and video calls</strong> despite them being behind NATs.</p> + + <p>Almost every self-hosted voice and video conferencing program (such as <a href="jitsi.html">Jitsi</a> and <a href="nextcloud.html">Nextcloud's</a> Talk app) will <strong>require</strong> Coturn or some other equivalent turnserver to function properly.</p> + + <h2>Installation</h2> + + <p>Coturn is available in the Debian repositories:</p> + + <pre><code>apt install coturn</code></pre> + + <h2>Configuration</h2> + + <h3>Base configuration</h3> + + <p>Coturn's configuration file is <code>/etc/turnserver.conf</code>. There are a few aspects that need to be changed in order to get a fully-functioning turnserver.</p> + + <p>Here is an example of some sane defaults:</p> + + <pre><code>server-name=<strong>turn.example.org</strong> +realm=<strong>turn.example.org</strong> +listening-ip=<strong>your_public_ip</strong> + +listening-port=3478 +min-port=10000 +max-port=20000 + +## The "verbose" option is useful for debugging issues +verbose</code></pre> + + <h3>Authentication</h3> + + <p>There are two options for authentication on a turnserver:</p> + <ol> + <li><strong>Usernames</strong> and <strong>passwords,</strong></li> + <li>or <strong>authentication secrets.</strong></li> + </ol> + + <p>Depending on what self-hosted service is being used in conjunction with Coturn, you may need one or the other of these two options.</p> + + <h4>Usernames and Passwords</h4> + + <p>To utilize username and password authentication with Coturn, add the following configuration in <code>turnserver.conf</code>:</p> + + <pre><code>lt-cred-mech +user=<strong>username</strong>:<strong>password</strong></code></pre> + + <h4>Authentication Secrets</h4> + + <p>To utilize authentication secrets with Coturn, add the following configuration in <code>turnserver.conf</code>:</p> + + <pre><code>use-auth-secret +static-auth-secret=<strong>your_auth_secret</strong></code></pre> + + <h2>TURNS (TLS Encryption)</h2> + + <p>Some self-hosted services (such as Matrix and XMPP) may support the use of <strong>TURNS:</strong> An encrypted version of TURN, which allows for WebRTC connections to be established with the use of an encrypted TLS tunnel, just like HTTPS allows for encrypted viewing of websites.</p> + + <p>To utilize TURNS, certificates need to be declared for <strong>turn.example.org</strong> in <code>turnserver.conf</code>: + <pre><code>cert=/etc/letsencrypt/live/<strong>turn.example.org</strong>/fullchain.pem +pkey=/etc/letsencrypt/live/<strong>turn.example.org</strong>/privkey.pem</pre></code> + + <h2>Starting Coturn</h2> + + <p>After all configuration changes are complete, Coturn can be started with its systemd daemon:</p> + + <pre><code>systemctl restart coturn</code></pre> + + <p>Congratulations! You've successfully setup a Coturn server!</p> + + <hr> + <p><em>Written by <a href="https://denshi.org">Denshi.</a> Donate Monero <a href="https://denshi.org/donate.html">here</a> <a href="https://denshi.org/images/monero.jpg">[QR]</a></em></p> + + </main> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> +</body> +</html> @@ -169,6 +169,6 @@ </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/crypto.html b/crypto.html index b3c314f..9302e56 100644 --- a/crypto.html +++ b/crypto.html @@ -82,5 +82,5 @@ </ul> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> @@ -121,8 +121,9 @@ You can also run the command <code>host</code> if you have it, which will list both IPv4 and IPv6 addresses for a domain name. </p> + <span class=prev><a href="server.html">Previous: Get a server.</a></span> <span class=next><a href="nginx.html">Next: Setting up the Webserver</a></span> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/domain.html b/domain.html index 283c37d..a246c2e 100644 --- a/domain.html +++ b/domain.html @@ -82,7 +82,7 @@ <p>Now we will get a server to host your website on.</p> - <span class=next><a href="server.html">Next: Get a Server</a></span> + <span class=next><a href="server.html">Next: Get a Server.</a></span> <hr> @@ -118,6 +118,8 @@ If you don't want to use Epik, use a registrar based in Russia or China or a country more sympathetic to political criticism. </p> + <p>Here are some registrars to explicitly avoid:</p> + <ul> <li>GoDaddy – People always want to go here because it's so well advertized. @@ -126,7 +128,7 @@ </li> <li>NearlyFreeSpeech – People have signed up for this minor registrar because of its name that's actually tongue-and-cheek. I will let <a href="https://web.archive.org/web/20210121022350/https://blog.nearlyfreespeech.net/2021/01/19/free-speech-in-2021">this post of theirs</a> speak for itself. Register a domain here only if you want to have it seized.</li> - <li>Google, Amazon – Maybe this is obvious, but if you are trying to escape the control of Google or Amazon, it is a very self-defeating thing to register your domain with them.</li> + <li>Google, Amazon – Maybe this is obvious, but if you are trying to escape the control of Google or Amazon, it is a very self-defeating thing to register your domain with them. Sites like Parler figured this out the hard way.</li> </ul> <p> @@ -136,8 +138,9 @@ Registrars without principled policies maintain the right to seize your domain name on their whim. Don't think for a minute that this doesn't apply to you. </p> + <span class=next><a href="server.html">Next: Get a Server.</a></span> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/donate-bitcoin.html b/donate-bitcoin.html new file mode 100644 index 0000000..a5bc901 --- /dev/null +++ b/donate-bitcoin.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html lang=en> + <head> + <title>Donate Bitcoin – LandChad.net</title> + <meta charset="utf-8"/> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> + <link rel='stylesheet' type='text/css' href='style.css'> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel='alternate' type='application/rss+xml' title='Land Chad RSS' href='/rss.xml'> + </head> +<body> + <header><h1>Donate Bitcoin</h1></header> + <nav></nav> + <main> + <p>Donate Bitcoin to LandChad.net at the address below:</p> + <p><code>bc1q78m8m73pxdxl6fsup3ywexhjuq3rtclhmxdr5h</code></p> + <p>You may also simply type in <code>landchad.net</code> in most wallets and it will resolve to this address as well.</p> + <p>Here is a QR code for the address:</p> + <img style="max-height:250px" src="pix/btc.png" alt="Bitcoin QR Code"> + </main> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> +</body> +</html> diff --git a/donate-monero.html b/donate-monero.html new file mode 100644 index 0000000..6e0ae35 --- /dev/null +++ b/donate-monero.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html lang=en> + <head> + <title>Donate Monero – LandChad.net</title> + <meta charset="utf-8"/> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> + <link rel='stylesheet' type='text/css' href='style.css'> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel='alternate' type='application/rss+xml' title='Land Chad RSS' href='/rss.xml'> + </head> +<body> + <header><h1>Donate Monero</h1></header> + <nav></nav> + <main> + <p>Donate Monero to LandChad.net at the address below:</p> + <p><code>84RXmrsE7ffCe1ADprxLMHRpmyhZuWYScDR4YghE8pFRFSyLtiZFYwD6EPijVzD3aZiEpg57MfHEr1pGJNPXyJgENMnWrSh</code></p> + <p>You may also simply type in <code>landchad.net</code> in most wallets and it will resolve to this address as well.</p> + <p>Here is a QR code for the address:</p> + <img style="max-height:250px" src="pix/xmr.png" alt="Monero QR Code"> + </main> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> +</body> +</html> diff --git a/ejabberd.html b/ejabberd.html new file mode 100644 index 0000000..b758e77 --- /dev/null +++ b/ejabberd.html @@ -0,0 +1,188 @@ +<!DOCTYPE html> +<html lang=en> + <head> + <title>XMPP Server (ejabberd) – LandChad.net</title> + <meta charset="utf-8"/> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> + <link rel='stylesheet' type='text/css' href='style.css'> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel='alternate' type='application/rss+xml' title='Land Chad RSS' href='/rss.xml'> + </head> +<body> + <header><h1>XMPP Server (ejabberd)</h1></header> + <nav></nav> + <main> + + <img class=titleimg src="pix/xmpp.svg" alt="XMPP logo and icon"> + + <p> + <a href="https://ejabberd.im">Ejabberd</a> is a server for the XMPP protocol written in Erlang. + It's easier to configure and setup than <a href="xmpp.html">Prosody</a> due to having most of its modules built-in and pre-configured by default. + </p> + + <h2>Prerequisites</h2> + <h3>Subdomains</h3> + <p> + Ejabberd presumes that you have already created all the <strong>required and optional subdomains</strong> for its operation prior to running it. + </p> + + <p>Depending on the usecase, you may need any or all of the following domains for XMPP functionality:<p> + <ul> + <li><strong>example.org</strong> - Your XMPP hostname</li> + <li><strong>conference.example.org</strong> - For Multi User Chats (MUCs)</li> + <li><strong>upload.example.org</strong> - For file upload support</li> + <li><strong>proxy.example.org</strong> - For SOCKS5 proxy support</li> + <li><strong>pubsub.example.org</strong> - For publish-subscribe support</li> + </ul> + + <p>This guide will assume <strong>all these subdomains</strong> have been created.</p> + + <h2>Installation</h2> + <p>Ejabberd is available in the Debian repositories:</p> + <pre><code>apt install ejabberd</code></pre> + + <h2>Configuration</h2> + <p>The ejabberd server is configured in <code>/etc/ejabberd/ejabberd.yml</code>. Changes are only applied by restarting the ejabberd daemon in systemd:</p> + <pre><code>systemctl restart ejabberd</code></pre> + + <h3>Hostnames</h3> + <p>The <strong>XMPP hostname</strong> is specified in the <code>hosts</code> section of <code>ejabberd.yml</code>:</p> + + <pre><code>hosts: + - <strong>example.org</strong></code></pre> + + <h3>Certificates</h3> + <p>Unlike <a href="https://prosody.im">Prosody,</a> ejabberd doesn't come equipped with a script that can automatically copy over the relevant certificates to a directory where the ejabberd user can read them.</p> + + <p>One way of organizing certificates for ejabberd is to have them stored in <code>/etc/ejabberd/certs</code>, with each domain having a separate directory for both the fullchain cert and private key.</p> + + <p>Using certbot, this process can be easily automated with this one-liner:</p> + <pre><code>$DOMAIN=<strong>subdomain.example.org</strong> +certbot --nginx -d $DOMAIN certonly; mkdir /etc/ejabberd/certs/$DOMAIN; cp /etc/letsencrypt/live/$DOMAIN/fullchain.pem /etc/ejabberd/certs/$DOMAIN; cp /etc/letsencrypt/live/$DOMAIN/privkey.pem /etc/ejabberd/certs/$DOMAIN</code></pre> + + <p>This should be ran with your XMPP hostname <strong>(example.org)</strong> and repeated for all your desired subdomains.</p> + + <p>To enable the use of all these certificates in ejabberd, the following configuration is necessary:</p> + + <pre><code>certfiles: + - "/etc/ejabberd/certs/*/*.pem"</code></pre> + + <h3>Admin User</h3> + + <p>The <strong>admin user</strong> can be specified in <code>ejabberd.yml</code> under the <code>acl</code> section:</p> + + <pre><code>acl: + admin: + user: <strong>admin</strong></code></pre> + + <p>This would make <strong>admin@example.org</strong> the user with administrator privileges.</p> + + <h3>Message Archives</h3> + + <p>The ejabberd server supports keeping archives of messages through its <code>mod_mam</code> module. This can be enabled by uncommenting the following lines:</p> + + <pre><code>mod_mam: + assume_mam_usage: true + default: always</code></pre> + + <h2>Database</h2> + <h3>Why use a database?</h3> + <p>In the <code>mod_mam</code> section of the ejabberd config file, the following message is in comments:</p> + + <pre><code>mod_mam: + ## Mnesia is limited to 2GB, better to use an <strong>SQL backend</strong> + ## For small servers SQLite is a good fit and is very easy + ## to configure. Uncomment this when you have SQL configured: + ## <strong>db_type: sql</strong></code></pre> + + <p>As these comments imply, an <strong>SQL backend</strong> is strongly recommended if you wish to use your ejabberd server for anything more than just testing. Ejabberd supports <strong>MySQL, SQLite</strong> and <strong>PostgreSQL.</strong></p> + + <p>While all of those are suitable choices, the best database system to use is PostgreSQL. It's the same database backend used by <a href="peertube.html">PeerTube</a> and <a href="matrix.html">Matrix,</a> making it the most convenient option if you're already running those too.</p> + + <h3>Installing PostgreSQL</h3> + + <p>PostgreSQL is available in the Debian repositories:</p> + <pre><code>apt install postgresql</code></pre> + + <p>Start the PostgreSQL daemon to begin using it:</p> + <pre><code>systemctl start postgresql</code></pre> + + <h3>Creating the Database</h3> + <p>To create the database, first create a PostgreSQL user for ejabberd:</p> + + <pre><code>su -c "createuser --pwprompt ejabberd" postgres</code></pre> + + <p>Then, create the database and make <code>ejabberd</code> its owner:</p> + + <pre><code>su -c "psql -c 'CREATE DATABASE ejabberd OWNER ejabberd;'" postgres</code></pre> + + <h3>Importing Database Scheme</h3> + + <p>Ejabberd doesn't create the database scheme by default; It has to be imported into the database before use.</p> + + <pre><code>su -c "curl -s https://raw.githubusercontent.com/processone/ejabberd/master/sql/pg.sql | psql ejabberd" postgres</code></pre> + + <h3>Configuring ejabberd to use PostgreSQL</h3> + <p>Finally, add the following configuration to <code>ejabberd.yml</code>:</p> + + <pre><code>sql_type: pgsql +sql_server: "localhost" +sql_database: <strong>"ejabberd"</strong> +sql_username: <strong>"ejabberd"</strong> +sql_password: <strong>"psql_password"</strong></code></pre> + + <p>Once you've ensured your database name, username and password are all correct, enable SQL storage for <code>mod_mam</code>:</p> + + <pre><code>mod_mam: + ## (Other parameters) + db_type: <strong>sql</strong></code></pre> + + <h2>Using ejabberd</h2> + <h3>Registering the Admin User</h3> + <p>To begin using ejabberd, firstly start the ejabberd daemon:</p> + + <pre><code>systemctl restart ejabberd</code></pre> + + <p>Then, using <code>ejabberdctl</code> as the ejabberd user, register the admin user which is set in <code>ejabberd.yml</code>:</p> + + <pre><code>su -c "ejabberdctl register <strong>admin example.org password</strong>" ejabberd</code></pre> + + <p>This will create the user <strong>admin@example.org.</strong></p> + + <h3>Using the Web Interface</h3> + + <p>By default, ejabberd has a web interface accessible from <strong>http://example.org:5280/admin</strong>. When accessing this interface, you will be prompted for the admin credentials:</p> + + <img src="pix/ejabberd-login.jpg" height="260px"> + + <p>After signing in with the admin credentials, you will be able to manage your ejabberd server from this web interface:</p> + + <img src="pix/ejabberd-admin.jpg" height="300px"> + + <h2>TURN & STUN for Calls</h2> + + <p>Ejabberd supports the <strong>TURN</strong> and <strong>STUN</strong> protocols to allow internet users behind NATs to perform voice and video calls with other XMPP users.</p> + + <p>Firstly, setup a TURN and STUN server with <a href="coturn.html">Coturn,</a> using an <strong>authentication secret.</strong></p> + + <p>Then, edit <code>mod_stun_disco</code> to contain the appropriate information for your turnserver:</p> + + <pre><code> mod_stun_disco: + secret: <strong>"your_auth_secret"</strong> + services: + - + host: <strong>turn.example.org</strong> + type: stun + - + host: <strong>turn.example.org</strong> + type: turn</code></pre> + +<p>And with that, you've successfully setup your ejabberd XMPP server!</p> + + <hr> + <p><em>Written by <a href="https://denshi.org">Denshi.</a> Donate Monero <a href="https://denshi.org/donate.html">here</a> <a href="https://denshi.org/images/monero.jpg">[QR]</a></em></p> + + </main> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> +</body> +</html> diff --git a/federation.html b/federation.html index e60614a..0d4ec94 100644 --- a/federation.html +++ b/federation.html @@ -66,6 +66,6 @@ This is also used by other software like <a href="https://joinpeertube.org/">PeerTube</a> (which is a self-hosted YouTube-equivalent), <a href="https://friendi.ca/">Friendica</a> (Facebook equivalent) </p> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/gemini.html b/gemini.html index 6bfbe75..923a454 100644 --- a/gemini.html +++ b/gemini.html @@ -98,6 +98,6 @@ systemctl start agate</code></pre> <p><em>Written by <a href="https://nihar.page">nihar.page</a></em></p> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> @@ -182,9 +182,9 @@ mkdir git</code></pre> <h2>Contribution</h2> <ul> <li>Martin Chrzanowski -- <a - href="https://m-chrzan.xyz">website</a>, <a href="https://m-chrzan.xyz/crypto.html">donate</a></li> + href="https://m-chrzan.xyz">website</a>, <a href="https://m-chrzan.xyz/donate.html">donate</a></li> </ul> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> @@ -104,6 +104,6 @@ server { <li><a href="https://phire.cc">phire</a></li> </ul> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> @@ -195,6 +195,6 @@ We can make bold, italic, underlined or struck through text with more HTML tags: <span class=next><a href="html2.html">Next: Images and Links in HTML</a></span> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> @@ -22,6 +22,6 @@ <<++>> <span class=next><a href="<++>">Next:<++></a></span> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> @@ -94,6 +94,6 @@ <span class=next><a href="css.html">Next: Styling with CSS</a></span> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/i2p.html b/i2p.html new file mode 100644 index 0000000..775bea1 --- /dev/null +++ b/i2p.html @@ -0,0 +1,101 @@ +<!DOCTYPE html> +<html lang=en> + <head> + <title>Mirror your site over I2P</title> + <meta charset="utf-8"/> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> + <link rel='stylesheet' type='text/css' href='style.css'> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel='alternate' type='application/rss+xml' title='Land Chad RSS' href='/rss.xml'> + </head> + <body> + <header><h1>Mirror Your Site Over I2P</h1></header> + <nav></nav> + <main> + <img class=titleimg src="pix/i2p.svg" alt="I2P logo"> + <p> + Now you have a website, why not offer it in a private alternative such as the Invisible Internet? + </p> + + <h2>Setting up I2P</h2> + <p> + There are 2 main I2P implementations, I2P and i2pd, we are using i2pd in this + guide because it's easier to use in servers. + </p> + <h3>Installing I2P</h3> + + <p> + i2pd is in most repos, in debian/ubuntu you can install it simply + with <pre><code>apt install i2pd</code></pre> + </p> + + <h3>Enabling I2P</h3> + <p> + We are going to create a user for i2pd, because i2pd finds the configuration + files in its home directory. And it's easier (and more tidy) to have it in a separate user: + </p> + <pre><code>useradd -m i2p -s /bin/bash +su -l i2p +mkdir ~/.i2pd +cd ~/.i2pd</code></pre> + + <p> + Now that you're in ~/.i2pd, you have to create a file named + "tunnels.conf". Which is the config file for every hidden service you're + offering over I2P, the content should be like this: + </p> + <pre><code>[<strong>example</strong>] +type = http +host = 127.0.0.1 +port = 8080 +keys = <strong>example.dat</strong></code></pre> + + <h3>Getting your I2P Hostname</h3> + + <p> + Then, run <code>/usr/sbin/i2pd --daemon</code> to start i2pd and we can retreive our I2P hostname. + </p> + + <p> + This can be done in lynx or a command-line browser by going to <code>http://127.0.0.1:7070/?page=i2p_tunnels</code> to get your I2P hostname. + </p> + <p> + You + can also run these commands to find your hostname: + </p> + <pre><code>printf "%s.b32.i2p\n" $(head -c 391 /home/i2p/.i2pd/<strong>example.dat</strong> |sha256sum|xxd -r -p | base32 |sed s/=//g | tr A-Z a-z)</code></pre> + + <h2>Adding the Nginx Config</h2> + <p> + From here, the steps are almost identical to setting up a normal website configuration file. + Follow the steps as if you were making a new website on the webserver + <a href="nginx.html">tutorial</a> up until the server block of code. Instead, paste this: + </p> + + <pre><code>server { +listen 127.0.0.1:8080 ; +root /var/www/<strong>example</strong> ; +index index.html ; +}</code></pre> + + <aside> + <h4>Clarifications<h4> + <p> + Nginx will listen in port 8080, but i2pd will forward your port + 8080 to the i2p site port 80. This way you don't have to deal with server names or anything like that + </p> + </aside> + <p> + From here we are almost done, all we have to do is enable the site and reload nginx which is also covered in <a href="nginx.html#enable">the webserver tutorial</a>. + </p> + + <h3>Update regularly!</h3> + + <p>Make sure to update I2P on a regular basis by running:</p> + <pre><code>apt update && apt install i2pd</code></pre> + <p><strong>Contributor</strong> - <a href="https://qorg11.net" target="_blank">qorg11</a></p> + + </main> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + </body> +</html> @@ -9,6 +9,10 @@ <link rel='alternate' type='application/rss+xml' title='Land Chad RSS' href='/rss.xml'> </head> +<style> +img { border: none ;} +</style> + <body> <header><h1>Chad's Guide to Starting Your Own Website</h1></header> <nav></nav> @@ -51,32 +55,43 @@ <li><a href="maintenance.html">How to Maintain a Server.</a></li> <li><a href="sshkeys.html">Use your SSH keys to prevent hacking.</a></li> <li><a href="cron.html">Schedule tasks with Crontabs/Cronjobs.</a></li> - <li><a href="tor.html">Mirror your site on <img src="pix/tor.svg">Tor.</a></li> + <li><a href="cgi.html">Server side scripting with CGI</a></li> <li><a href="auth.html">Password-protecting Webpages (HTTP Authentication)</a></li> <li><a href="ufw.html">Using ufw as a firewall.</a></li> <li><a href="gemini.html">Create a Gemini Capsule.</a></li> <li><a href="standalone.html">Standalone Certbot Certificates</a></li> + <li><a href="selfhosting.html">Selfhosting on your own server at home</a> </ul> <h3 id=platform>"Build your own platform!"</h3> - <ul class=ll> - <li><a href="git.html">Host your own <img src="pix/git.svg"><code>git</code> repositories</a></li> - <li><a href="xmpp.html">Private and Encrypted Chat with <img src="pix/xmpp.svg" alt="xmpp logo">XMPP</a></li> - <li><a href="pleroma.html">Pleroma, a federated Twitter-like Microblogging Site</a></li> - <li><a href="nextcloud.html">Setting up a <img src="pix/nextcloud.svg">Nextcloud Instance (file hosting and more)</a></li> - <li><a href="gitea.html">Setting up <img src="pix/gitea.svg">Gitea</a></li> - <li><a href="irc.html">Creating your own chat server with <img src="pix/irc.svg">IRC</a></li> - <li><a href="rss-bridge.html">RSS Bridge: Create RSS Feeds for Mainstream Social Media</a></li> - </ul> + + <p>Host your own services, social media and more.</p> + + <dl class=ll> + <dt><a href="xmpp.html"><img src="pix/xmpp.svg" alt="xmpp logo"> XMPP</a></dt><dd>Minimalist and federated chat server</dd> + <dt><a href="pleroma.html"><img src="pix/pleroma.svg" alt="Pleroma logo"> Pleroma</a></dt><dd>A federated Twitter-like microblogging site</dd> + <dt><a href="peertube.html"><img src="pix/peertube.svg" alt="peertube logo"> PeerTube</a></dt><dd>A federated YouTube-like video site</dd> + <dt><a href="nextcloud.html"><img src="pix/nextcloud.svg"> Nextcloud</a></dt><dd>Setting up a Nextcloud Instance (file hosting and more)</dd> + <dt><a href="jitsi.html"><img src="pix/jitsi.svg" alt="Jitsi logo"> Jitsi</a></dt><dd>Free and easy video conferencing</dd> + <dt><a href="git.html"><img src="pix/git.svg"> git</a></dt><dd>Version control software on your own server</dd> + <dt><a href="cgit.html"><img src="pix/cgit.svg"> Cgit</a></dt><dd>A hyperfast web frontend for git repositories</dd> + <dt><a href="gitea.html"><img src="pix/gitea.svg"> Gitea</a></dt><dd>A fully-featured git and issue tracking site</dd> + <dt><a href="irc.html"><img src="pix/irc.svg"> IRC</a></dt><dd>Installing and managing a classic internet relay chat server</dd> + <dt><a href="rss-bridge.html">RSS Bridge</a></dt><dd>Creating RSS feeds for social media sites</dd> + <dt><a href="matrix.html"><img src="pix/element.svg" alt="Element logo">Matrix</a></dt><dd>An easy-to-use, free and federated chat and channel server.</dd> + <dt><a href="calibre.html"><img src="pix/calibre.png"> Calibre</a></dt><dd>A library server</dd> + <dt><a href="i2p.html"><img src="pix/itoopie.svg" alt="Itoopie">I2P</a></dt><dd>Host your site on a private and peer-to-peer internet layer.</dd> + <dt><a href="tor.html"><img src="pix/tor.svg">Tor</a></dt><dd>Host your site on private onion-routing.</dd> + </dl> <h3 id=crypto>Accepting Cryptocurrency Tips</h3> - <ul class=ll> - <li><a href="crypto.html">The Case for Crypto for Normal People</a></li> - <li><a href="bitcoin.html">Accept <img src="pix/btc.svg" alt="btc logo">Bitcoin (BTC) donations</a></li> - <li><a href="monero.html">Accept <img src="pix/xmr.svg" alt="xmr logo">Monero (XMR) donations for superior privacy</a></li> - <li><a href="openalias.html">OpenAlias to make crypto easy</a></li> - <li><a href="bat.html"><img src="pix/bat.svg">Basic Attention Token (BAT)</a></li> - </ul> + <dl class=ll> + <dt><a href="crypto.html">Why crypto?</a></dt><dd>The case for crypto for normal people</dd> + <dt><a href="bitcoin.html"><img src="pix/btc.svg" alt="btc logo"> Bitcoin</a></dt><dd>Accept Bitcoin (BTC) donations</dd> + <dt><a href="monero.html"><img src="pix/xmr.svg" alt="xmr logo"> Monero</a></dt><dd>Accept Monero (XMR) donations for superior privacy</dd> + <dt><a href="openalias.html">OpenAlias</a></dt><dd>OpenAlias to make crypto easy</dd> + <dt><a href="bat.html"><img src="pix/bat.svg"> BAT</a></dt><dd>Receive donations via the Brave browser</dd> + </dl> <h2>In the Works...</h2> @@ -90,9 +105,7 @@ <ul> <li>Full HTML tutorial</li> <li>Full CSS tutorial</li> - <li>Setting up an Email server</li> <li>RSS feeds</li> - <li>Matrix (federated chat)</li> <li>SearX (search engine)</li> </ul> @@ -101,24 +114,27 @@ <p> There are other articles not currently under construction which we would like to add the LandChad.net. If you have experience with any of these, you may submit an article for review on <a href="https://github.com/lukesmithxyz/landchad">the Github</a>. - Please include directions for Debian 10 as default. + Please include directions for Debian 11 as default. Abstain from using containerization (Docker, etc.). Attempt to follow the same settings as other articles here. </p> <ul> - <li><a href="https://btcpayserver.org/">BTCPay</a></li> + <li><a href="https://btcpayserver.org/">BTCPay</a> (Docker install permitted only in this case.)</li> <li>Email webclients</li> <li>Simple static site generators</li> - <li>Calibre (library server)</li> - <li><a href="https://joinpeertube.org/">PeerTube</a> (like YouTube)</li> <li><a href="https://www.ejabberd.im/">XMPP ejabberd</a></li> <li><a href="https://movim.eu/">Movim for XMPP</a></li> + <li>Nitter</li> </ul> <h2>Support LandChad.net</h2> + <p>Help advertize this site by adding this banner with a link on your website:</p> + + <a href="https://landchad.net"><img src="pix/landchad.gif" alt="LandChad.net"></a> + <p> No ads, trackers or trash on this site. We are funded by doing good and earning gratitude. @@ -126,7 +142,7 @@ </p> <ul class=ll> - <li>When setting up a website, use our linked affiliate links, like <a href="https://www.vultr.com/?ref=8384069-6G">to Vultr</a>.</li> + <li>When setting up a website, use our linked affiliate links, like to <a href="https://www.vultr.com/?ref=8384069-6G">Vultr</a> or <a href="https://my.frantech.ca/aff.php?aff=3886">Frantech/BuyVM</a> for a VPS.</li> <li>If you enjoy a guest article, the author's donation links may be included at the bottom of the page.</li> <li>Donate crypto to the long-term LandChad maintenance and expansion fund:</li> </ul> @@ -150,6 +166,6 @@ <!--TAGLIST--> </main> - <!-- <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> --> + <!-- <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> --> </body> </html> @@ -796,6 +796,6 @@ systemctl start ergo</code></pre> <p><i>Written by <a href="https://termer.net/">Termer</a></i></p> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/jitsi.html b/jitsi.html new file mode 100644 index 0000000..3fd42e0 --- /dev/null +++ b/jitsi.html @@ -0,0 +1,130 @@ +<!-- <!DOCTYPE html> --> +<html lang="en"> + <head> + <title>Jitsi Video Chat – LandChad.net</title> + <meta charset="utf-8" /> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> + <link rel="stylesheet" type="text/css" href="style.css" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <link rel="alternate" type="application/rss+xml" title="Land Chad RSS" href="/rss.xml" /> + </head> + <body> + <header><h1>Jitsi Video Chat</h1></header> + <nav></nav> + <main> + <img src="pix/jitsi.svg" alt="Jitsi" class=titleimg> + <p> + <dfn>Jitsi</dfn> is a set of open-source projects that allows you to easily build and deploy secure video conferencing solutions. + </p> + <p> + Is really easy to install, and also a really good private, federated and libre alternative to Zoom or other video conferencing software. + You can create calls just by typing the URL, and loging-in is not necessary. + </p> + + <h2>Dependencies and Installation</h2> + + <p>First, install some dependencies:</p> + + <pre><code>apt install gpg apt-transport-https nginx python3-certbot-nginx</code></pre> + + <p>Jitsi has its own package repository, so let's add it.</p> + + <pre class=wide><code>curl https://download.jitsi.org/jitsi-key.gpg.key | gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg +echo 'deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/' > /etc/apt/sources.list.d/jitsi-stable.list +apt update -y</code></pre> + + <p> + Ok. So now we can install Jitsi, but before we do that, let's setup the firewall <code>ufw</code>, in case you + have it enabled, and the SSL certificate. + </p> + + <h2>Enable Required Ports</h2> + + <p>If you are using <a href="ufw.html">ufw</a> or another firewall, there are several ports we need to ensure are open:</p> + <pre><code>ufw allow 80/tcp +ufw allow 443/tcp +ufw allow 10000/udp +ufw allow 3478/udp +ufw allow 5349/tcp +ufw enable</code></pre> + + <p>For your information, these allow the following:</p> + + <ul> + <li>80 TCP – Certbot.</li> + <li>443 TCP – General access to Jitsi Meet.</li> + <li>10000 UDP – General network video/audio communications.</li> + <li>3478 UDP – Quering the stun server (coturn, optional, needs config.js change to enable it).</li> + <li> + 5349 TCP – Fallback network video/audio communications over TCP (when UDP is blocked for example), served by coturn. + </li> + </ul> + + <h2>SSL certificate</h2> + + <p> + I'll be using <a href="./certbot.html" target="blank">certbot</a> and + <a href="./nginx.html" target="blank">Nginx</a> to generate a certificate + for the Jitsi subdomain to allow encrypted connections. + </p> + + <pre><code>certbot --nginx certonly -d <strong>meet.example.org</strong></code></pre> + + <p> + We will not create an Nginx config file for Jitsi because the Jitsi package we will be installing will do that automatically. + </p> + + <h2>Installation</h2> + + <p>To begin the installation process, just run:</p> + <pre><code>apt install jitsi-meet</code></pre> + + <p> + It will ask you for your <code><strong>hostname</strong></code + >; there you'll need to input the subdomain you have just added to Nginx, like + <code><strong>meet.example.org</strong></code>. + </p> + + <p>For the SSL certificate, choose <code>I want to use my own certificate</code>.</p> + + <p> + When it ask you for the certification key and cert files, input + <code>/etc/letsencrypt/live/<strong>meet.example.org</strong>/privkey.pem</code> and + <code>/etc/letsencrypt/live/<strong>meet.example.org</strong>/fullchain.pem</code> respectively. + </p> + + <h2>Using Jitsi</h2> + + <img src="pix/jitsi-01.webp" alt="Jitsi once installed"> + + <p>Jitsi can be used in a browser by then just going to <code>meet.example.org</code>.</p> + + <p>Note that there are also Jitsi clients for all major platforms:</p> + + <ul> + <li><a href="https://desktop.jitsi.org/Main/Download.html">Desktop</a> (Windows, MacOS, GNU/Linux)</li> + <li>Android (<a href="https://f-droid.org/en/packages/org.jitsi.meet/">F-Droid</a> and <a href="https://play.google.com/store/apps/details?id=org.jitsi.meet">Google Play</a>)</li> + <li><a href="https://apps.apple.com/us/app/jitsi-meet/id1165103905">iPhone/iOS</a></li> + </ul> + + <p> + <strong>When using a Jitsi app for the first time, remember to go to the "Settings" menu and change your server name to the Jitsi site you just created.</strong> + </p> + + <p>When you create a video chatroom, its address will appear as <code><strong>meet.example.org/yourvideochatname</strong></code> and can be shared as such.</p> + + <h2>More info</h2> + + <p> + This article is based on <a href="https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart" target="blank">the original documentation</a>. There you can find more details and configurations. + </p> + + <ul> + <li>Written by <a href="https://josefabio.com" target="blank">Jose Fabio.</a> Donate Monero: <code class="crypto">484RLdsXQCDGSthNatGApRPTyqcCbM3PkM97axXezEuPZppimXmwWegiF3Et4BHBgjWR7sVXuEUoAeVNpBiVznhoDLqLV7j</code> <a href="https://josefabio.com/figures/monero.jpg" class="crypto" target="blank">[QR]</a></li> + <li>Edited and revised by <a href="https://lukesmith.xyz">Luke</a>.</li> + </ul> + </main> + + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + </body> +</html> diff --git a/maintenance.html b/maintenance.html index d3d9cb3..328f0a8 100644 --- a/maintenance.html +++ b/maintenance.html @@ -14,7 +14,7 @@ <main> <p>Here are some important topics you should be familiar with whenever you are managing a server.</p> - <h2>Keep packages up to date.</h2> + <h2 id="update">Keep packages up to date.</h2> <p>All GNU/Linux distributions use package managers to easily be able to install and update packages without manually downloading them. On Debian, which we use here for these tutorial the package manager is <code>apt-get</code> or <code>apt</code> for short. </p> @@ -120,6 +120,6 @@ nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx /usr/share/man <p> </p> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/matrix.html b/matrix.html index 47898f8..32da2da 100644 --- a/matrix.html +++ b/matrix.html @@ -12,12 +12,13 @@ <header><h1>Matrix Synapse Server</h1></header> <nav></nav> <main> + <img src="pix/matrix.svg" alt="Matrix Synapse Logo" class=titleimg> <p>Matrix is easy-to-use, decentralized and encrypted private chat software. Matrix is federated, meaning that with a Matrix account on any server, including your own, you can talk to any other Matrix account on the internet, similar to email. Matrix also allows fully end-to-end encrypted group chats. </p> - <p><strong>Synapse</strong> is the name of the default Matrix server. It is written in Python.</p> + <p><strong>Synapse</strong> is the name of the default Matrix server. It is written in Python. While it is requires somewhat more system resources than <a href="xmpp.html">an XMPP server</a>, it makes up for that in being very accessible to non-technical users.</p> <h2>Installation</h2> @@ -39,7 +40,7 @@ apt install matrix-synapse-py3</code></pre> </p> <pre><code>server { - server_name matrix.<strong>example.org</strong> ; + server_name matrix.<strong>example.org</strong> ; listen 80; listen [::]:80; location / { @@ -50,7 +51,7 @@ apt install matrix-synapse-py3</code></pre> proxy_set_header X-Forwarded-For $remote_addr; client_max_body_size <strong>50M</strong> ; } - location /.well-known/matrix/client { + location /.well-known/matrix/server { return 200 '{"m.homeserver": {"base_url": "https://matrix.<strong>example.org</strong>"}}'; default_type application/json; add_header Access-Control-Allow-Origin *; @@ -75,13 +76,56 @@ systemctl reload nginx</code></pre> <h2>Configuration</h2> + <h3>Read the config file</h3> + <p> The configuration file for Matrix is in <code>/etc/matrix-synapse/homeserver.yaml</code>. It is well documented and commented, so you can read about the settings, but let's change the essential ones here. </p> - <p><strong>This article isn't finished. Deal with basic settings and registering accounts.</strong></p> + <p> + Make what changes you want and run <code>systemctl reload matrix-synapse</code> to make the system configuration active. + </p> + + <h3>Create an administrator account</h3> + + <p>If you allow open registration on your server in the configuration file, you can create an account through Element or another Matrix client, but you are probably going to want an official admin account to use. + To make one, simply run the following command, which will then give you several choices for creating a user, among which will be the ability to make it an admin. + </p> + + <pre><code>register_new_matrix_user -c homeserver.yaml http://localhost:8008</code></pre> + + <h2>Using Matrix with <img src="pix/element.svg" alt="Element Matrix logo">Element</h2> + + <p> + There are many different <a href="https://matrix.org/clients/">clients</a> that can be used on desktops or phones to chat on your Matrix server, but the most popular and most widely vetted is <img src="pix/element.svg" alt="Element logo">Element. + </p> + + <p>Get Element to access your Matrix server:</p> + + <ul> + <li>Mobile: + <ul> + <li><a href="https://f-droid.org/packages/im.vector.app/">F-droid</a></li> + <li><a href="https://play.google.com/store/apps/details?id=im.vector.app">Google Play</a></li> + <li><a href="https://apps.apple.com/app/vector/id1083446067">Apple App Store</a></li> + </ul> + </li> + <li>Real computer: + <ul> + <li>GNU/Linux: You know how to install it.</li> + <li><a href="https://packages.riot.im/desktop/install/win32/x64/Element%20Setup.exe">Windows</a></li> + <li><a href="https://packages.riot.im/desktop/install/macos/Element.dmg">Mac</a></li> + </ul> + </li> + </ul> + + <p> + Note also that Element has a web client (i.e. a version that can be accessed on your own website) that is also easy to install on an Nginx server, + although that will be covered in another article. + </p> + </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/monero.html b/monero.html index 498a28e..1cc086f 100644 --- a/monero.html +++ b/monero.html @@ -106,6 +106,6 @@ </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/nextcloud.html b/nextcloud.html index 2ba4472..274d854 100644 --- a/nextcloud.html +++ b/nextcloud.html @@ -17,8 +17,6 @@ <p><a href="https://nextcloud.com" target="_blank"><img src="pix/nextcloud.svg" alt="logo">Nextcloud</a> is a free and open source solution for cloud storage. However it can also do other things, such as manage your email, notes, calender, tasks, and can even connect to the Fediverse (think Mastodon and Pleroma). Pretty much every service that Google has to offer has a much better alternative as a Nextcloud app and this is a must-have for anyone wanting to get away from Google services but still wants a traditional cloud experience (in the likes of Google Services, anyways).</p> <h2 id="instructions">Instructions</h2> - <p>First, we need to obtain a shell prompt by ssh-ing (remote machines or local machines) or just logging in (local machines). A traditional ssh might look like this if the domain you wished to ssh into is <code>landchad.net</code>:</p> - <pre><code>ssh root@landchad.net</code></pre> <p>We should upgrade the system and then install packages that we might need. Run the following command:</p> <pre><code>apt-get full-upgrade -y && sudo apt-get install mariadb-server php-mysql php php-gd php-mbstring php-dom php-curl php-zip php-simplexml php-xml php-fpm -y</code></pre> <p>Next, we need to set up our SQL database by running a Secure Installation and creating the tables that will store data that Nextcloud will need. Run the following command:</p> @@ -40,31 +38,27 @@ EXIT;</code></pre> <p>Now we need to configure PHP. Let's start my making sure that the PHP user is set to <code>www-data</code> and if that is not the case, add the <code>www-data</code> user if needed and set the correct variable in <code>nginx.conf</code>. Make sure this line is at the beginning of <code>/etc/nginx/nginx.conf</code>.</p> <pre><code>user www-data;</code></pre> <p>Check for the <code>www-data</code> user by running <code>id -u www-data</code>. If a number is output from that command, then the www-data user exists. If not. add the user simply by running <code>useradd www-data</code></p> - <p>Next, we need to ensure that we have SSL certificates generated for your website. If you have not already done this, refer to <a href="certbot.html">this guide</a>. Although having SSL for your site is not required, it is highly recommended that you have it or you will risk attackers being able to steal passwords and data.</p> + <p>Next, we need to ensure that we have SSL certificates generated for your website. If you have not already done this, refer to <a href="certbot.html">this guide</a>.</p> <p>In <code>/etc/nginx/sites-available/</code> we need to make a new configuration for Nextcloud (example: <code>/etc/nginx/sites-available/nextcloud</code>). Create it and open it, modify, and add the following lines:</p> - <pre><code>upstream php-handler { - server unix:/var/run/php/php7.4-fpm.sock; + <pre class=wide><code>upstream php-handler { + server unix:/var/run/php/php<strong>7.4</strong>-fpm.sock; server 127.0.0.1:9000; } server { listen 80; listen [::]:80; - server_name <strong>yourwebsite.com</strong>; + server_name <strong>example.org</strong>; - location /nextcloud { - return 301 https://$server_name$request_uri; - } + return 301 https://$server_name$request_uri; } server { - - <strong># If you have SSL ready for your website (DO NOT use Nextcloud without HTTPS, you will risk data leaks including passwords and files), use these lines:</strong> listen 443 ssl http2; listen [::]:443 ssl http2; - server_name <strong>yourwebsite.com</strong>; - ssl_certificate /etc/ssl/nginx/<strong>yourwebsite.com</strong>.crt; - ssl_certificate_key /etc/ssl/nginx/<strong>yourwebsite.com</strong>.key; + server_name <strong>example.org</strong>; + ssl_certificate /etc/letsencrypt/live/<strong>example.org</strong>/fullchain.pem ; + ssl_certificate_key /etc/letsencrypt/live/<strong>example.org</strong>/privkey.pem ; root /var/www; @@ -168,22 +162,22 @@ server { chmod -R 755 /var/www/nextcloud</code> </pre> <p>Start and enable the php-fpm and the mariadb services (the name of the php-fpm service may have a version number ahead of it, use bash's tab autocomplete to help you out with that):</p> - <pre><code>systemctl enable php-fpm -systemctl start php-fpm + <pre><code>systemctl enable php<strong>7.4</strong>-fpm +systemctl start php<strong>7.4</strong>-fpm systemctl enable mariadb systemctl start mariadb</code></pre> <p>Reload the nginx service:</p> <pre><code>systemctl reload nginx</code></pre> - <p>Now we need to head to Nextcloud's web interface. Go to your web browser and go to your website, but go to the subdirectory "nextcloud" instead. For example, if your domain is landchad.net and you have set up HTTPS then go to <code>https://landchad.net/nextcloud</code>. This will launch the configuration wizard.</p> + <p>Now we need to head to Nextcloud's web interface. Go to your web browser and go to your website, but go to the subdirectory "nextcloud" instead. Go to <code>https://<strong>example.org</strong>/nextcloud</code>. This will launch the configuration wizard.</p> <ul> - <li>Choose an admin username and secure password. - <li>Leave Data folder at the default value unless it is incorrect. - <li>For Database user, enter the user you set for the SQL database. - <li>For Database password, enter the password you chose for the new user in MariaDB. - <li>For Database name, enter: nextcloud - <li>Leave "localhost" as "localhost". - <li>Click Finish + <li>Choose an admin username and secure password.</li> + <li>Leave Data folder at the default value unless it is incorrect.</li> + <li>For Database user, enter the user you set for the SQL database.</li> + <li>For Database password, enter the password you chose for the new user in MariaDB.</li> + <li>For Database name, enter: <code>nextcloud</code></li> + <li>Leave "localhost" as "localhost".</li> + <li>Click Finish.</li> </ul> <p>Congratulations, you have set up your own Nextcloud instance.</p> @@ -192,13 +186,13 @@ systemctl start mariadb</code></pre> <p>Now you may be wondering: What do I do now? Here are some suggestions:</p> <ul> - <li>Rice your Nextcloud instance by changing your themeing and installing new themes and plugins in Settings in the Nextcloud Web Interface. - <li>Install the Nextcloud Client on your personal computer and sync your files to your instance. - <li>Install the Nextcloud App on your mobile device and sync your files to your instance. - <li>Set up your email account on the Nextcloud Mail app on the web interface to view and sync your email there (just like Gmail). - <li>Schedule events with Nextcloud Calender. - <li>Write notes in Markdown inside the Nextcloud Notes web and mobile app. - <li>Set the Nextcloud Dashboard as your web browser's homepage (it is pretty nice). + <li>Rice your Nextcloud instance by changing your themeing and installing new themes and plugins in Settings in the Nextcloud Web Interface.</li> + <li>Install the Nextcloud Client on your personal computer and sync your files to your instance.</li> + <li>Install the Nextcloud App on your mobile device and sync your files to your instance.</li> + <li>Set up your email account on the Nextcloud Mail app on the web interface to view and sync your email there (just like Gmail).</li> + <li>Schedule events with Nextcloud Calender.</li> + <li>Write notes in Markdown inside the Nextcloud Notes web and mobile app.</li> + <li>Set the Nextcloud Dashboard as your web browser's homepage (it is pretty nice).</li> </ul> <p>Enjoy your cloud services in freedom.</p> @@ -207,9 +201,7 @@ systemctl start mariadb</code></pre> <p><em>Written by <a href="https://github.com/MattMadness">Matthew "Madness" Evan</a></em></p> - <!--<span class=next><a href="<++>">Next:<++></a></span>--!> - </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> @@ -13,7 +13,7 @@ <nav></nav> <main> <p>At this point, we should have a domain name and a server and the domain name should direct to the IP address of the server with DNS records. - As I said in previous articles, the instructions I will give will be for <strong>Debian 10</strong>. + As I said in previous articles, the instructions I will give will be for <strong>Debian</strong>. In this article, other distributions might work a little differently.</p> <h2>Logging in to the server</h2> @@ -48,7 +48,7 @@ </p> </aside> - <h2>Installing the Webserver: NGINX</h2> + <h2>Installing the Webserver: Nginx</h2> <p> If the program runs without an error, <code>ssh</code> has now logged you into your server. @@ -217,6 +217,16 @@ Port 80 is the canonical webserver port, while 443 is the port used for encrypte We will certainly need that for the next page. </p> +<h2>Nginx security hint</h2> + +<p>By default, Nginx and most other webservers automatically show their version number on error pages. +It's a good idea to disable this from happening because if an exploit comes out for your server software, someone could exploit it. Open the main Nginx config file <code>/etc/nginx/nginx.conf</code> and find the line <code># server_tokens off;</code>. Uncomment it, and reload Nginx. +</p> + +<p> +Remember to <a href="maintenance.html#update">keep your server software up to date</a> to get the latest security fixes! +</p> + <h2>We now have running website!</h2> <p> @@ -230,9 +240,10 @@ Note the "Not secure" notification. The next brief step is securing encrypted connections to your website. </p> -<span class=next><a href="certbot.html">Next: Enabling Encrypted Connections</a></span> + <span class=prev><a href="dns.html">Previous: Set up DNS.</a></span> + <span class=next><a href="certbot.html">Next: Enabling Encrypted Connections.</a></span> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/openalias.html b/openalias.html index dd11629..b78bdfd 100644 --- a/openalias.html +++ b/openalias.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html lang=en> <head> - <title>Open Alias – LandChad.net</title> + <title>OpenAlias – LandChad.net</title> <meta charset="utf-8"/> <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> <link rel='stylesheet' type='text/css' href='style.css'> @@ -9,7 +9,7 @@ <link rel='alternate' type='application/rss+xml' title='Land Chad RSS' href='/rss.xml'> </head> <body> - <header><h1>Open Alias</h1></header> + <header><h1>OpenAlias</h1></header> <nav></nav> <main> @@ -47,9 +47,7 @@ <h2>Let's do it.</h2> - <p> - Open up your domain registar (<a href="https://www.epik.com/?affid=we2ro7sa6">Epik</a>, if you have religiously followed our tutorials) and open up your DNS settings for the website you would like to add. - </p> + <p>Open up your domain registar and open up your DNS settings for the website you would like to add.</p> <p> Open the <strong>TXT record</strong> section. @@ -118,6 +116,6 @@ </p> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/page-quality.html b/page-quality.html new file mode 100644 index 0000000..c3f26d1 --- /dev/null +++ b/page-quality.html @@ -0,0 +1,185 @@ +<!DOCTYPE html> +<html lang=en> + <head> + <title>Page Quality – example.org</title> + <meta charset="utf-8"/> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> + <link rel='stylesheet' type='text/css' href='style.css'> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel='alternate' type='application/rss+xml' title='Land Chad RSS' href='/rss.xml'> + </head> +<body> + <header><h1>Page Quality</h1></header> + <nav></nav> + <main> + <p> + After you've deployed your website, you may want to consider improving its performance, accessibility, and search-engine optimization (SEO). + Doing so can help make your website more user-friendly and increase its page rank in search results. + Luckily, Google provides a <a href="https://web.dev/measure" target="_blank" rel="noopener noreferrer">measurement tool</a> to help you improve these aspects. + Start by entering your website's URL and click the <em>Run Audit</em> button (it will take 5-10 seconds to generate the report). + </p> + + <p> + Once the report has finished, you'll be greeted by a score for four different categories: <em>Performance</em>, <em>Accessibility</em>, <em>Best Practices</em>, and <em>SEO</em>. + A lot of the tests listed are self-explanatory, and Google provides you with articles to help you pass them. + Below are some easy ways to improve your scores, some specific to the nginx configuration used in the <a href="nginx.html">landchad website tutorial.</a> + </p> + + <h2>Performance</h2> + + <h3>Serving static assets with an efficient cache policy</h3> + + <p> + Serving your files with an efficient cache policy will allow the user's browser to cache files such as pictures and CSS so that the browser doesn't need to fetch these files each time the page is visited. + It's very easy to set this up in nginx. + Just paste the following within the server block of your website's configuration file: + </p> + + <pre><code># Media: images, icons, video, audio, HTC +location ~* \.(?:jpg|jpeg|gif|png|ico|svg|webp)$ { + expires 1M; + access_log off; + # max-age must be in seconds + add_header Cache-Control "max-age=2629746, public"; +} + +# CSS and Javascript +location ~* \.(?:css|js)$ { + expires 1y; + access_log off; + add_header Cache-Control "max-age=31556952, public"; +}</code></pre> + + <p> + You can add more types of file extensions (mp3, mp4, ogg) as you see fit. + </p> + + <p> + If you're changing your CSS files a lot, caching could keep repeat users from getting the most up-to-date stylesheet. + To combat this, you can version your stylesheets like so: + </p> + + <pre><code><link rel="stylesheet" type="text/css" href="style.css<strong>?v=1.0.0</strong>"></code></pre> + + <p> + Just increase the version number whenever you update your stylesheet, and the browser will re-update its cache. + </p> + + <h3>Enable text compression</h3> + + <p> + Another easy addition to your websites configuration file. + Enabling text compression is easy and will save bandwidth for users. + Simply paste the following within the server block of your website's configuration file: + </p> + +<pre><code>gzip on; +gzip_min_length 1100; +gzip_buffers 4 32k; +gzip_types text/plain application/x-javascript text/xml text/css; +gzip_vary on; +</code></pre> + + <p> + After reloading nginx, you can test if compression is working by opening your browsers developer tools and going to the network tab. + Refresh your website with the network tab, click on the item with your URL and look at the response headers. + You should see <code>Content-Encoding: gzip</code> as one of the headers displayed. + </p> + + <h3>Properly sizing images</h3> + + <p> + If you've put images on your webpage, you've most definitely gotten this warning. + To pass this audit, you'll need to scale your images down using a tool like gimp or imagemagick to a size appropriate for your website. + It doesn't make much sense to serve a high-res image for images that are rendered much smaller on a webpage. + </p> + + <p> + Once you've scaled your image down, you can use a tool like <code>cwebp</code> to convert your images into the .webp format, a format specifically created for serving bandwidth concious images. + </p> + + <p> + First, you'll have to install the webp package: + </p> + + <pre><code>apt install webp</code></pre> + + <p> + Now you can easily convert your images to webp (keep in mind that it's much more effective to first size your images appropriately before this). + Using the below command, you can specify the quality of the photo with the <code>q</code> option. + I typically shoot for a quality in the range of 60-80, depending on the image and how large it will be displayed on the webpage. + </p> + + <pre><code>cwebp -q 80 your-photo.png -o your-photo.webp</code></pre> + + <p> + You can now check the difference in size of the images using <code>ls</code>. + </p> + + <pre><code>ls -lh your-photo*</code></pre> + + <p> + After utilizing webp images, the audit typically goes away, but if you didn't scale your image properly before hand, it may still linger. + </p> + + <h2>Accessibility</h2> + + <h3>Image elements do not have [alt] attributes</h3> + + <p> + It may seem silly to add <code>alt</code> attributes to images, but it helps screen readers convey images to users and can help page rank as a result. + The <code>alt</code> attribute should simply describe the image being displayed. + </p> + + <pre><code><img src="img/cabin.webp" <strong>alt="A cabin nestled between pine trees"</strong>></code></pre> + + <h2>SEO</h2> + + <h3>Document does not have a meta description</h3> + + <p> + Adding meta descriptions to your webpage allow for web-crawlers and bots to easily determine what content your website contains. + Just like on other online platforms, you can give your webpage a long list of keywords to help increase the chance someone stumbles upon your site from a search engine. + You don't need to add all of the below meta tags to pass the audit, only add what's necessary. + </p> + + <pre><code> +// Instructions for web scrapers +<meta name="robots" content="index, follow"> + +<meta name="description" content="<strong>your website description</strong>>"> +<meta name="keywords" content="<strong>your, keywords, here</strong>"> +<meta name="author" content="<strong>your name</strong>>"> + +// Facebook specific standard, but many websites use this so it has become almost standard to include +<meta property="og:site_name" content="<strong>Site Name</strong>"> +<meta name="twitter:domain" property="twitter:domain" content="<strong>example.org</strong>"> +<meta name="og:title" property="og:title" content="<strong>Site Name</strong>"> +<meta property="og:description" content="<strong>your website description</strong>"> +<meta name="twitter:description" property="twitter:description" content="<strong>your website description</strong>"> +<meta name="og:image" content="<strong>https://link-to-an-image-that-represents-your-site</strong>"> + +// below is for twitter sharing previews, you can test this at: +// cards-dev.twitter.com +<meta property="twitter:card" content="<strong>https://link-to-an-image-that-represents-your-site</strong>"> +<meta name="twitter:image:src" property="twitter:image:src" content="<strong>https://link-to-an-image-that-represents-your-site</strong>"> +<meta name="twitter:image" property="twitter:image" content="<strong>https://link-to-an-image-that-represents-your-site</strong>"> +<meta name="og:image:alt" property="og:image:alt" content="<strong>alt text for your image</strong>>"> + +<meta property="og:url" content="<strong>example.org</strong>"> +<meta property="og:type" content="website"> + +// If you have accounts on twitter or facebook that are relevant to your site +<meta property="fb:admins" content="<strong>facebook group</strong>" > +<meta name="twitter:site" property="twitter:site" content="<strong>@yourTwitterHandle</strong>"> +<meta name="twitter:creator" property="twitter:creator" content="<strong>@yourTwitterHandle</strong>>"> + </code></pre> + <hr> + + <p> + <em>Written by <a href="https://mccor.xyz">Jacob.</a> Donate Monero <a href="https://mccor.xyz">here.</a></em> + </p> + </main> + <footer><a href="https://example.org">example.org</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> +</body> +</html> diff --git a/peertube.html b/peertube.html new file mode 100644 index 0000000..1921821 --- /dev/null +++ b/peertube.html @@ -0,0 +1,222 @@ +<!DOCTYPE html> +<html lang=en> + <head> + <title>PeerTube Instance – LandChad.net</title> + <meta charset="utf-8"/> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> + <link rel='stylesheet' type='text/css' href='style.css'> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel='alternate' type='application/rss+xml' title='Land Chad RSS' href='/rss.xml'> + </head> +<body> + <header><h1>PeerTube Instance</h1></header> + <nav></nav> + <main> + + <img class=titleimg src="pix/peertube.svg" alt="PeerTube logo"> + + <p>PeerTube is a self-hosted and (optionally) federated video sharing platform that saves bandwith on videos the more people watch. + PeerTube instances can follow each other to share videos and grow the federated network, + but you can always keep your instance to yourself if you choose to.</p> + + <h2>Note on Bandwidth</h2> + + <p> + Video sharing is the most bandwidth intensive thing on the internet! + If you plan on just having a small personal site with a few viewers and friends, that won't be a big concern, + but most VPS providers like Vultr have caps on how much bandwidth can be used within a month without being throttled. + This level is far beyond what most sites need, but it might be an issue with a video site! + </p> + + <p> + So if you plan on having a big video-sharing PeerTube site, it's a good idea to host it with a provider that offers infinite bandwidth. + I strongly recommend getting a separate VPS with <a href="https://my.frantech.ca/aff.php?aff=3886">Frantech/BuyVM</a>. + They have unmetered bandwidth, extremely cheap block storage for hosting many, many videos and they even have a good record of being censorship resistant. + </p> + + <h2>Prerequisites</h2> + + <p><strong>Most</strong> of PeerTube's dependencies can be installed with this command:</p> + + <pre><code>apt install -y curl sudo unzip vim ffmpeg postgresql postgresql-contrib g++ make redis-server git python-dev cron wget</code></pre> + + <p>It's also important to start all associated daemons:</p> + + <pre><code>systemctl start postgresql redis</code></pre> + + <p>PeerTube also requires <strong>NodeJS 14</strong> and <strong>yarn</strong> which cannot be installed from the Debian repositories. This means they have to be installed from separate, external repos:</p> + + <pre><code>curl -fsSL https://deb.nodesource.com/setup_14.x | bash - +apt install -y nodejs +npm install --global yarn</code></pre> + + <p>Now we create a PeerTube user to run and handle PeerTube with the proper permissions:</p> + + <pre><code>useradd -m -d /var/www/peertube -s /bin/bash -p peertube peertube</code></pre> + + <h2>Database</h2> + + <p>PeerTube requires a PostgreSQL database to function. To create it, first make a new Postgres user named PeerTube:</p> + + <pre><code>su -l postgres +createuser -P peertube +createdb -O peertube -E UTF8 -T template0 peertube_prod +psql -c "CREATE EXTENSION pg_trgm;" peertube_prod +psql -c "CREATE EXTENSION unaccent;" peertube_prod +exit</code></pre> + + <p>Be sure to <strong>make note of your Postgres user password,</strong> as it will be needed later when setting up PeerTube.</p> + + <h2>Installation</h2> + + <p>Using <code>su -l</code>, we will become the PeerTube user to create the required directories and download and install PeerTube itself with the proper permissions. + First, we create the required directories.</p> + + <pre><code>su -l peertube +mkdir config storage versions +chmod 750 config</code></pre> + + <h3>Downloading PeerTube</h3> + <p>Still as the PeerTube user, we can now check for the most recent PeerTube versions number, download and install it in the newly created <code>versiond</code> directory.</p> + <pre class=wide><code>VERSION=$(curl -s https://api.github.com/repos/chocobozzz/peertube/releases/latest | grep tag_name | cut -d '"' -f 4) +cd /var/www/peertube/versions +wget "https://github.com/Chocobozzz/PeerTube/releases/download/${VERSION}/peertube-${VERSION}.zip" +unzip peertube-${VERSION}.zip +rm peertube-${VERSION}.zip</code></pre> + + <h3>Installation via Yarn</h3> + +<p>The downloaded release can then be symbolically linked to <code>/var/www/peertube/peertube-latest</code> and <strong>yarn</strong> is used to install PeerTube:</p> + +<pre><code>cd /var/www/peertube +ln -s versions/peertube-${VERSION} ./peertube-latest +cd ./peertube-latest +yarn install --production --pure-lockfile</code></pre> + + <h2>Configuration</h2> + + <p>PeerTube's default config file can be copied over to <code>/var/www/peertube/config/production.yaml</code> so it can actually be used:</p> + + <p>Note that we are still running these as the PeerTube user (having run <code>su -l peertube</code>).</p> + + <pre><code>cd /var/www/peertube +cp peertube-latest/config/production.yaml.example config/production.yaml</code></pre> + + <p>Now the <code>production.yaml</code> file must be edited in the following ways:</p> + + <p>First, add the hostname:</p> + + <pre><code>webserver: + https: true + hostname: <strong>'example.org'</strong> + port: 443</code></pre> + + <p>Then, the database:</p> + + <pre><code>database: + hostname: 'localhost' + port: 5432 + ssl: false + suffix: '_prod' + username: <strong>'peertube'</strong> + password: <strong>'your_password'</strong> + pool: + max: 5</code></pre> + + <p>An email to generate the admin user:</p> + + <pre><code>admin: + # Used to generate the root user at first startup + # And to receive emails from the contact form + email: <strong>'chad@example.org'</strong></code></pre> + + <p>And <strong>optionally,</strong> email server information:</p> + + <pre><code>smtp: + # smtp or sendmail + transport: smtp + # Path to sendmail command. Required if you use sendmail transport + sendmail: null + hostname: <strong>mail.example.org</strong> + port: 465 # If you use StartTLS: 587 + username: <strong>your_email_username</strong> + password: <strong>your_email_password</strong> + tls: true # If you use StartTLS: false + disable_starttls: false + ca_file: null # Used for self signed certificates + from_address: <strong>'admin@example.org'</strong></code></pre> + + <p>At this point, we have done all we need to do as the PeerTube user. Run <code>exit</code> or press <code>Ctrl-d</code> to log out and return to the root prompt where we will configure Nginx and other system settings.</p> + + <h2>Certbot</h2> + + <p>First, we will want a Certbot SSL certificate to encrypt connections to our PeerTube instance. + Just run the following:</p> + + <pre><code>certbot --nginx -d <strong>peertube.example.org</strong> certonly</code></pre> + + <h2>Nginx</h2> + + <p>PeerTube includes an Nginx configuration that can be copied over to <code>/etc/nginx/sites-available:</code> + + <pre><code>cp /var/www/peertube/peertube-latest/support/nginx/peertube /etc/nginx/sites-available/peertube</code></pre> + + <p>Because the PeerTube config is so long, it's recommended to use <code>sed</code> to modify the contents of the file, + replacing <code>${WEBSERVER_HOST}</code> with your hostname, + and <code>$(PEERTUBE_HOST)</code> with your localhost and port, which by default should be <code>127.0.0.1:9000</code>: + + <pre><code>sed -i 's/${WEBSERVER_HOST}/<strong>example.org</strong>/g' /etc/nginx/sites-available/peertube +sed -i 's/${PEERTUBE_HOST}/127.0.0.1:9000/g' /etc/nginx/sites-available/peertube</code></pre> + + <p>Once you're happy with the Nginx config file, link it to <code>sites-enabled</code> to activate it:</p> + + <pre><code>ln -s /etc/nginx/sites-available/peertube /etc/nginx/sites-enabled/peertube</code></pre> + + <h2>Running PeerTube</h2> + + <p>A config file for a systemd daemon is included in PeerTube and can be setup and started like so:</p> + + <pre><code>cp /var/www/peertube/peertube-latest/support/systemd/peertube.service /etc/systemd/system/ +systemctl daemon-reload +systemctl start peertube</pre></code> + + <p> + PeerTube will take a momemnt to start, but after it does, you can check its status with <code>systemctl status peertube</code> and at this point, your PeerTube site should be live! + </p> + + <h2>Using PeerTube</h2> + + <p>To set a password for your admin user, run:</p> + + <pre><code>cd /var/www/peertube/peertube-latest +NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run reset-password -- -u root</code></pre> + + <p>Login to your PeerTube instance using the admin email specified in your <code>production.yaml</code> file and the admin password you just set.</p> + + <img src="pix/peertube-login.jpg" height=400px> + + <p>Once logged in, it's recommended to create a separate user without admin privileges for uploading videos to PeerTube. + This can be done easily from the users tab in the administration section.</p> + + <p>Enjoy your PeerTube instance!</p> + + <hr> + + <h2>Updating PeerTube</h2> + + <p>PeerTube is constantly adding new features, so it's a good idea to <a href="https://github.com/Chocobozzz/PeerTube/blob/develop/CHANGELOG.md">check for new updates</a> and add them if you wish. Just in the past year, they have added livestreaming and more.</p> + + <p>Updating is fairly easy now since an <code>upgrade.sh</code> script has been added. Just run:</p> + + <pre><code>cd /var/www/peertube/peertube-latest/scripts && sudo -H -u peertube ./upgrade.sh</code></pre> + + <p> + Although check the <a href="https://github.com/Chocobozzz/PeerTube/blob/develop/CHANGELOG.md">changelog</a> to see if there are additional manual requirements for particular updates. + </p> + + <hr> + <p><em>Written by <a href="https://denshi.org">Denshi.</a> Donate Monero <a href="https://denshi.org/donate.html">here</a> <a href="https://denshi.org/images/monero.jpg">[QR]</a></em></p> + </main> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> +</body> +</html> diff --git a/pix/calibre.png b/pix/calibre.png Binary files differnew file mode 100644 index 0000000..81adc85 --- /dev/null +++ b/pix/calibre.png diff --git a/pix/calibre/calibre-1.png b/pix/calibre/calibre-1.png Binary files differnew file mode 100644 index 0000000..cf767e0 --- /dev/null +++ b/pix/calibre/calibre-1.png diff --git a/pix/calibre/calibre-2.png b/pix/calibre/calibre-2.png Binary files differnew file mode 100644 index 0000000..e0c76ba --- /dev/null +++ b/pix/calibre/calibre-2.png diff --git a/pix/cgit.svg b/pix/cgit.svg new file mode 100644 index 0000000..72eafa6 --- /dev/null +++ b/pix/cgit.svg @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" + "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> + +<svg xmlns="http://www.w3.org/2000/svg" + viewBox="0 0 96 64"> + <path id="cgit" + fill="#9e1212" + d="M 44.00,3.00 + C 44.00,3.00 44.00,8.00 44.00,8.00 + 44.00,8.00 49.00,8.00 49.00,8.00 + 49.00,8.00 49.00,3.00 49.00,3.00 + 49.00,3.00 44.00,3.00 44.00,3.00 Z + M 60.00,9.00 + C 60.00,9.00 60.00,16.00 60.00,16.00 + 60.00,16.00 56.00,16.00 56.00,16.00 + 56.00,16.00 56.02,19.98 56.02,19.98 + 56.02,19.98 59.98,20.00 59.98,20.00 + 59.98,20.00 60.00,37.00 60.00,37.00 + 60.00,39.99 59.69,44.16 61.74,46.57 + 64.65,50.00 76.35,50.00 79.26,46.57 + 81.32,44.16 80.99,40.00 81.00,37.00 + 81.00,37.00 76.06,37.06 76.06,37.06 + 76.24,39.83 76.03,41.32 75.03,42.59 + 73.56,44.38 66.99,45.07 65.50,41.50 + 64.15,38.26 64.96,24.11 64.96,19.98 + 64.96,19.98 81.09,20.00 81.09,20.00 + 81.09,20.00 81.00,16.00 81.00,16.00 + 81.00,16.00 65.00,16.00 65.00,16.00 + 65.00,16.00 65.00,9.00 65.00,9.00 + 65.00,9.00 60.00,9.00 60.00,9.00 Z + M 29.00,47.09 + C 29.25,50.45 28.52,54.06 26.65,55.52 + 20.83,58.74 10.73,56.80 12.00,51.09 + 12.00,51.09 7.00,51.00 7.00,51.00 + 7.17,53.91 7.21,56.35 9.43,58.46 + 13.06,62.20 27.71,62.00 31.35,58.46 + 35.19,54.51 34.00,42.41 34.00,37.00 + 31.56,36.97 29.09,37.03 29.04,37.02 + 28.58,39.20 31.61,44.05 18.12,44.25 + 11.60,44.36 10.78,40.13 11.00,31.26 + 10.87,24.96 11.04,25.57 11.26,24.48 + 11.57,22.83 12.52,19.83 19.30,19.87 + 24.22,19.57 30.09,21.65 29.03,26.92 + 30.65,27.09 32.70,26.89 34.00,27.00 + 33.93,24.32 34.05,21.62 32.26,19.39 + 28.04,14.77 12.76,14.65 9.23,18.43 + 7.78,19.72 6.94,21.15 6.58,23.00 + 5.65,25.83 5.70,40.36 6.58,42.98 + 7.44,44.76 8.54,46.17 10.11,47.26 + 14.03,49.99 27.17,49.00 29.00,47.09 Z + M 44.00,16.00 + C 44.00,16.00 44.00,49.00 44.00,49.00 + 44.00,49.00 49.00,49.00 49.00,49.00 + 49.00,49.00 49.00,16.00 49.00,16.00 + 49.00,16.00 44.00,16.00 44.00,16.00 Z + M 77.25,34.75M 18.25,44.69M 37.81,44.81M 32.26,50.57M 30.26,21.52M 29.09,20.70M 74.84,43.19" /> +</svg> diff --git a/pix/ejabberd-admin.jpg b/pix/ejabberd-admin.jpg Binary files differnew file mode 100644 index 0000000..9bbd4ed --- /dev/null +++ b/pix/ejabberd-admin.jpg diff --git a/pix/ejabberd-login.jpg b/pix/ejabberd-login.jpg Binary files differnew file mode 100644 index 0000000..8904aaf --- /dev/null +++ b/pix/ejabberd-login.jpg diff --git a/pix/element.svg b/pix/element.svg new file mode 100644 index 0000000..d29423e --- /dev/null +++ b/pix/element.svg @@ -0,0 +1,6 @@ +<svg width="54" height="54" viewBox="0 0 54 54" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M19.4414 3.24C19.4414 1.4506 20.892 0 22.6814 0C34.6108 0 44.2814 9.67065 44.2814 21.6C44.2814 23.3894 42.8308 24.84 41.0414 24.84C39.252 24.84 37.8014 23.3894 37.8014 21.6C37.8014 13.2494 31.032 6.48 22.6814 6.48C20.892 6.48 19.4414 5.0294 19.4414 3.24Z" fill="#0DBD8B"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M34.5586 50.76C34.5586 52.5494 33.108 54 31.3186 54C19.3893 54 9.71861 44.3294 9.71861 32.4C9.71861 30.6106 11.1692 29.16 12.9586 29.16C14.748 29.16 16.1986 30.6106 16.1986 32.4C16.1986 40.7505 22.9681 47.52 31.3186 47.52C33.108 47.52 34.5586 48.9706 34.5586 50.76Z" fill="#0DBD8B"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M3.24 34.5601C1.4506 34.5601 -6.34076e-08 33.1095 -1.41625e-07 31.3201C-6.63074e-07 19.3907 9.67065 9.72007 21.6 9.72007C23.3894 9.72007 24.84 11.1707 24.84 12.9601C24.84 14.7495 23.3894 16.2001 21.6 16.2001C13.2495 16.2001 6.48 22.9695 6.48 31.3201C6.48 33.1095 5.0294 34.5601 3.24 34.5601Z" fill="#0DBD8B"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M50.76 19.4399C52.5494 19.4399 54 20.8905 54 22.6799C54 34.6093 44.3294 44.2799 32.4 44.2799C30.6106 44.2799 29.16 42.8293 29.16 41.0399C29.16 39.2505 30.6106 37.7999 32.4 37.7999C40.7505 37.7999 47.52 31.0305 47.52 22.6799C47.52 20.8905 48.9706 19.4399 50.76 19.4399Z" fill="#0DBD8B"/> +</svg>
\ No newline at end of file diff --git a/pix/i2p.svg b/pix/i2p.svg new file mode 100644 index 0000000..5dc629b --- /dev/null +++ b/pix/i2p.svg @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="302.66425" height="63.49197" id="svg5700"> + <defs id="defs5702"> + <pattern xlink:href="#pattern5595" id="pattern6495" patternTransform="matrix(1.2534787,-1.2534787,1.2534787,1.2534787,39.404452,317.94405)"/> + <pattern xlink:href="#Strips1_1" id="pattern5595" patternTransform="matrix(1.2534787,-1.2534787,1.2534787,1.2534787,39.404452,317.94405)"/> + <pattern id="Strips1_1" patternTransform="translate(0,0) scale(10,10)" height="1" width="2" patternUnits="userSpaceOnUse"> + <rect id="rect4774" height="2" width="1" y="-0.5" x="0" style="fill:black;stroke:none"/> + </pattern> + </defs> + <metadata id="metadata5705"> + <rdf:RDF> + <cc:Work rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:title/> + </cc:Work> + </rdf:RDF> + </metadata> + <g transform="translate(-221.9327,-428.83688)" id="layer1"> + <g transform="matrix(0.78302313,0,0,0.78302313,5.8401679,44.724391)" id="g5867"> + <g transform="matrix(1.7814702,0,0,1.6523316,-168.89205,-371.28852)" id="g4024" style="font-size:44.92046356px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#edffd8;stroke-width:4.20006847;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"> + <path d="m 300.61152,561.52647 0,-30.17163 9.8117,0 c 3.71812,3e-5 6.14177,0.15096 7.271,0.45279 1.7351,0.4528 3.18794,1.44068 4.35847,2.96365 1.17048,1.50929 1.75576,3.46447 1.75579,5.86555 -3e-5,1.85231 -0.33741,3.4096 -1.01217,4.67188 -0.67479,1.26231 -1.53547,2.25705 -2.58203,2.98423 -1.03283,0.71349 -2.0863,1.18685 -3.1604,1.42009 -1.45972,0.28814 -3.57355,0.4322 -6.34146,0.4322 l -2.46904,0 0,11.38124 -7.63186,0 m 7.63186,-25.61918 0,9.57218 1.8287,0 c 2.40987,0 4.02105,-0.15777 4.83355,-0.47337 0.81245,-0.31555 1.26535,-0.80949 1.71979,-1.48183 0.46819,-0.67228 0.70229,-1.91324 0.70231,-2.80511 -2e-5,-1.09762 -0.32362,-2.55481 -0.97084,-3.26831 -0.64724,-0.71344 -1.28604,-1.15935 -2.2775,-1.33775 -0.57409,-0.1079 -1.60396,-0.17337 -3.08959,-0.19642 -0.40317,-0.006 -0.8399,-0.009 -1.31019,-0.009 l -1.43623,0" id="path4030" style="font-weight:bold;stroke:#edffd8;stroke-width:4.20006847;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Arial;-inkscape-font-specification:Arial Bold"/> + <path d="m 258.19183,561.48828 0,-29.9626 7.92882,0 0,29.9626 -7.92882,0" id="path4026" style="font-weight:bold;stroke:#edffd8;stroke-width:4.20006847;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Arial;-inkscape-font-specification:Arial Bold"/> + <path d="m 294.21484,556.03391 0,5.45437 -21.60482,0 c 0.23396,-2.06192 0.93585,-4.01241 2.10565,-5.85143 1.1698,-1.85294 3.48016,-4.30496 6.93109,-7.35608 2.77827,-2.46595 4.48179,-4.13778 5.11058,-5.01552 0.84809,-1.21205 1.27214,-2.4102 1.27216,-3.59444 -2e-5,-1.30958 -0.37289,-2.31268 -1.11862,-3.00931 -0.73115,-0.7105 -1.74741,-1.06576 -3.04881,-1.06579 -1.28679,3e-5 -2.31037,0.36922 -3.07073,1.10759 -0.76038,0.73841 -1.19906,1.30905 -1.31603,3.02266 l -6.14147,-0.49155 c 0.36556,-3.23219 1.51343,-4.99012 3.44361,-6.39728 1.93017,-1.40709 4.34289,-2.11066 7.23816,-2.11069 3.17308,3e-5 5.66622,0.81506 7.47943,2.44507 1.81318,1.63006 2.71977,3.65716 2.7198,6.0813 -3e-5,1.37928 -0.26323,2.69585 -0.78962,3.94971 -0.51181,1.23997 -1.33067,2.5426 -2.45659,3.90792 -0.74577,0.90559 -2.09104,2.20824 -4.03582,3.90792 -1.94481,1.69972 -3.18042,2.8282 -3.70682,3.38548 -0.5118,0.55727 -0.92854,1.10062 -1.25022,1.63003 l 12.23484,0" id="path4028" style="font-weight:bold;stroke:#edffd8;stroke-width:4.20006847;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Arial;-inkscape-font-specification:Arial Bold"/> + </g> + <g transform="matrix(1.7814702,0,0,1.6523316,-168.89205,-371.28852)" id="g4032" style="font-size:44.92046356px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"> + <path d="m 300.61152,561.52647 0,-30.17163 9.8117,0 c 3.71812,3e-5 6.14177,0.15096 7.271,0.45279 1.7351,0.4528 3.18794,1.44068 4.35847,2.96365 1.17048,1.50929 1.75576,3.46447 1.75579,5.86555 -3e-5,1.85231 -0.33741,3.4096 -1.01217,4.67188 -0.67479,1.26231 -1.53547,2.25705 -2.58203,2.98423 -1.03283,0.71349 -2.0863,1.18685 -3.1604,1.42009 -1.45972,0.28814 -3.57355,0.4322 -6.34146,0.4322 l -2.46904,0 0,11.38124 -7.63186,0 m 7.63186,-25.45694 0,9.36405 1.8287,0 c 2.40987,0 4.02105,-0.15777 4.83355,-0.47337 0.81245,-0.31555 1.20516,-0.80949 1.6596,-1.48183 0.46819,-0.67228 0.70229,-1.86735 0.70231,-2.75922 -2e-5,-1.09762 -0.32362,-2.39257 -0.97084,-3.10607 -0.64724,-0.71344 -1.22585,-1.15935 -2.21731,-1.33775 -0.72989,-0.13718 -2.19648,-0.20578 -4.39978,-0.20581 l -1.43623,0" id="path4034" style="font-weight:bold;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Arial;-inkscape-font-specification:Arial Bold"/> + <path d="m 258.19183,561.48828 0,-29.9626 7.92882,0 0,29.9626 -7.92882,0" id="path4036" style="font-weight:bold;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Arial;-inkscape-font-specification:Arial Bold"/> + <path d="m 294.21484,556.03391 0,5.45437 -21.60482,0 c 0.23396,-2.06192 0.93585,-4.01241 2.10565,-5.85143 1.1698,-1.85294 3.48016,-4.30496 6.93109,-7.35608 2.77827,-2.46595 4.48179,-4.13778 5.11058,-5.01552 0.84809,-1.21205 1.27214,-2.4102 1.27216,-3.59444 -2e-5,-1.30958 -0.37289,-2.31268 -1.11862,-3.00931 -0.73115,-0.7105 -1.74741,-1.06576 -3.04881,-1.06579 -1.28679,3e-5 -2.31037,0.36922 -3.07073,1.10759 -0.76038,0.73841 -1.19906,1.30905 -1.31603,3.02266 l -6.14147,-0.49155 c 0.36556,-3.23219 1.51343,-4.99012 3.44361,-6.39728 1.93017,-1.40709 4.34289,-2.11066 7.23816,-2.11069 3.17308,3e-5 5.66622,0.81506 7.47943,2.44507 1.81318,1.63006 2.71977,3.65716 2.7198,6.0813 -3e-5,1.37928 -0.26323,2.69585 -0.78962,3.94971 -0.51181,1.23997 -1.33067,2.5426 -2.45659,3.90792 -0.74577,0.90559 -2.09104,2.20824 -4.03582,3.90792 -1.94481,1.69972 -3.18042,2.8282 -3.70682,3.38548 -0.5118,0.55727 -0.92854,1.10062 -1.25022,1.63003 l 13.20114,0" id="path4038" style="font-weight:bold;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Arial;-inkscape-font-specification:Arial Bold"/> + </g> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-220.60107,-448.68738)" id="path3798" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-220.60107,-433.72342)" id="path3800" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-220.60107,-418.75953)" id="path3802" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-220.60107,-403.79556)" id="path3804" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-205.89916,-448.68738)" id="path3806" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-205.89916,-433.72342)" id="path3808" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-205.89916,-418.75953)" id="path3810" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-205.89916,-403.79556)" id="path3812" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-191.19728,-448.68738)" id="path3814" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-191.19728,-433.72342)" id="path3816" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-191.19728,-418.75953)" id="path3818" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-191.19728,-403.79556)" id="path3820" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-176.49538,-448.68738)" id="path3822" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-176.49538,-433.72342)" id="path3824" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-176.49538,-418.75953)" id="path3826" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-176.49538,-403.79556)" id="path3828" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-161.79346,-448.68738)" id="path3865" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-161.79346,-433.72342)" id="path3867" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-161.79346,-418.75953)" id="path3869" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-161.79346,-403.79556)" id="path3871" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-147.09155,-448.68738)" id="path3873" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-147.09155,-433.72342)" id="path3875" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-147.09155,-418.75953)" id="path3877" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-147.09155,-403.79556)" id="path3879" style="fill:#ff0000;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-132.38967,-448.68738)" id="path3881" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-132.38967,-433.72342)" id="path3883" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-132.38967,-418.75953)" id="path3885" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-132.38967,-403.79556)" id="path3887" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-117.68777,-448.68738)" id="path3889" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-117.68777,-433.72342)" id="path3891" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-117.68777,-418.75953)" id="path3893" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-117.68777,-403.79556)" id="path3895" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-102.98586,-448.68738)" id="path3897" style="fill:#16ff0e;fill-opacity:0.85882353;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-102.98586,-433.72342)" id="path3899" style="fill:#16ff0e;fill-opacity:0.85882353;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-102.98586,-418.75953)" id="path3901" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-102.98586,-403.79556)" id="path3903" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-88.283964,-448.68738)" id="path3905" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-88.283964,-433.72342)" id="path3907" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-88.283964,-418.75953)" id="path3909" style="fill:#16ff0e;fill-opacity:0.85500536;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-88.283964,-403.79556)" id="path3911" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-73.582074,-448.68738)" id="path3913" style="fill:#16ff0e;fill-opacity:0.85882353;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-73.582074,-433.72342)" id="path3915" style="fill:#16ff0e;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-73.582074,-418.75953)" id="path3917" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-73.582074,-403.79556)" id="path3919" style="fill:#16ff0e;fill-opacity:0.85882562;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-58.880174,-448.68738)" id="path3921" style="fill:#16ff0e;fill-opacity:0.85882353;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-58.880174,-433.72342)" id="path3923" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-58.880174,-418.75953)" id="path3925" style="fill:#16ff0e;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-58.880174,-403.79556)" id="path3927" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-44.178254,-448.68738)" id="path3929" style="fill:#16ff0e;fill-opacity:0.85882562;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-44.178254,-433.72342)" id="path3931" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-44.178254,-418.75953)" id="path3933" style="fill:#16ff0e;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-44.178254,-403.79556)" id="path3935" style="fill:#16ff0e;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-29.476354,-448.68738)" id="path3937" style="fill:#ebed02;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-29.476354,-433.72342)" id="path3939" style="fill:#16ff0e;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-29.476354,-418.75953)" id="path3941" style="fill:#16ff0e;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-29.476354,-403.79556)" id="path3943" style="fill:#16ff0e;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-14.774464,-448.68738)" id="path3945" style="fill:#16ff0e;fill-opacity:0.85882353;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-14.774464,-433.72342)" id="path3947" style="fill:#16ff0e;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-14.774464,-418.75953)" id="path3949" style="fill:#16ff0e;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-14.774464,-403.79556)" id="path3951" style="fill:#16ff0e;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-0.07256439,-448.68738)" id="path3953" style="fill:#16ff0e;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-0.07256439,-433.72342)" id="path3955" style="fill:#16ff0e;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-0.07256439,-418.75953)" id="path3957" style="fill:#16ff0e;fill-opacity:1;stroke:none"/> + <path d="m 348.88224,513.22687 a 2.422795,2.422795 0 1 1 -4.84559,0 2.422795,2.422795 0 1 1 4.84559,0 z" transform="matrix(1.866199,0,0,1.866199,-0.07256439,-403.79556)" id="path3959" style="fill:#16ff0e;fill-opacity:1;stroke:none"/> + </g> + </g> +</svg>
\ No newline at end of file diff --git a/pix/itoopie.svg b/pix/itoopie.svg new file mode 100644 index 0000000..39e430d --- /dev/null +++ b/pix/itoopie.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512"><path fill="#010101" d="M153 239c-19.3 10-36 24.8-54.3 36.5-9.8 8.3-25.3 12.6-28.7 26 10.3 23 37.5 34 53.6 53 23.2 14.8 12.4 37.4 10.8 58.5-.6 19.8 8 38.2 19.5 53.8 0 14-32 35-4 41 32-.2 63 1.3 95 0 19-6.4 41 2.6 61-2.3 23-1.2 47-.3 70-2.6 23-16-28-31-1.6-47 14-18 10.7-42 5.5-62 18-15 18.3-37 20-58 5-20 14-39 19-59-4-24-39-42-46-57 18-29 27-64 20-98-6.6-55-51-101-105-113-60-15-128 17-155.5 72.5-16 31-18 68.4-9.4 102 5.6 20.4 17 38 29.6 54.4z"/><path fill="#576e57" d="M328 25l1 1z"/><path fill="#444b19" d="M267 26l1 1-1-1z"/><path fill="#ffff01" d="M180 329l18 8c9.2-17.5 14.8-38.4 21.6-57 2.3-6.3 3.5-17 9.5-21.2 5-3.3 15-.5 20 0 11 1 24 .7 34-1.7 53-11 90-57 92-111 3-73-69-132-141-117-44 10-76 44-88 86-10 38 2 79 28 107 7 8 15 14 24 20 3.8 3 10 5 11 10 1.4 6-4.3 14-6 19-6 20-16.4 39-21.2 59z"/><path fill="#444b19" d="M275 27l1 1-1-1m-39 1l1 1-1-1m-8 2l1 1-1-1z"/><path fill="#6c6c02" d="M291 31l1 1-1-1z"/><path fill="#989801" d="M207 38l1 1-1-1zm105 2l1 1-1-1z"/><path fill="#444b19" d="M313 40l1 1-1-1z"/><path fill="#6c6c02" d="M320 44l1 1-1-1z"/><path fill="#444b19" d="M321 45l1 1-1-1m-130 2l1 1-1-1z"/><path fill="#989801" d="M192 47l1 1-1-1zm-2 1l1 1-1-1z"/><path fill="#444b19" d="M326 48l1 1-1-1z"/><path fill="#989801" d="M327 49l1 1-1-1"/><path fill="#9fc79f" d="M359 50l1 1-1-1z"/><path fill="#989801" d="M186 51l1 1-1-1m-1 1l1 1-1-1m-1 1l1 1-1-1z"/><path fill="#6c6c02" d="M182 54l1 1-1-1m-1 1l1 1-1-1z"/><path fill="#9fc79f" d="M334 55l1 1-1-1z"/><path fill="#6c6c02" d="M180 56l1 1-1-1z"/><path fill="#989801" d="M179 57l1 1-1-1m-1 1l1 1-1-1m-1 1l1 1z"/><path fill="#6c6c02" d="M176 60l1 1-1-1m-1 1l1 1-1-1z"/><path fill="#989801" d="M341 61l1 1-1-1z"/><path fill="#6c6c02" d="M174 62l1 1-1-1z"/><path fill="#989801" d="M342 62l1 1-1-1z"/><path fill="#6c6c02" d="M173 63l1 1-1-1z"/><path fill="#989801" d="M343 63l1 1-1-1m-171 1l1 1-1-1m172 0l1 1-1-1m-173 1l1 1-1-1m-1 1l1 1-1-1z"/><path fill="#010101" d="M299 75.5c-52.4 11-36.2 92.8 16 81.7 52.7-11.2 36.3-92.8-16-81.7z"/><path fill="#444b19" d="M354 77l1 1-1-1z"/><path fill="#6c6c02" d="M161 78l1 1-1-1z"/><path fill="#010101" d="M203 78.4c-42 5.6-52.3 62.7-12 80 7.5 3 18 2.6 26 1.4 48.6-7.5 34.8-87.8-14-81.4z"/><path fill="#989801" d="M289 78l1 1-1-1m35 0l1 1-1-1z"/><path fill="#444b19" d="M355 78l1 1-1-1z"/><path fill="#989801" d="M221 80l1 1-1-1z"/><path fill="#9fc79f" d="M328 80l1 1-1-1z"/><path fill="#6c6c02" d="M356 80l1 1-1-1zm-74 2l1 1-1-1z"/><path fill="#444b19" d="M185 83l1 1-1-1z"/><path fill="#989801" d="M281 83l1 1-1-1z"/><path fill="#6c6c02" d="M358 83l1 1-1-1m-174 1l1 1-1-1z"/><path fill="#444b19" d="M228 84l1 1-1-1z"/><path fill="#989801" d="M280 84l1 1-1-1z"/><path fill="#444b19" d="M359 84l1 1-1-1z"/><path fill="#6c6c02" d="M182 85l1 1-1-1m48 0l1 1-1-1z"/><path fill="#444b19" d="M334 85l1 1-1-1z"/><path fill="#6c6c02" d="M359 85l1 1-1-1m-203 1l1 1-1-1m25 0l1 1-1-1m50 0l1 1-1-1z"/><path fill="#989801" d="M277 86l1 1-1-1z"/><path fill="#444b19" d="M305 86l1 1-1-1zm30 0l1 1-1-1zm-103 1l1 1-1-1z"/><path fill="#989801" d="M276 87l1 1-1-1z"/><path fill="#fff" d="M283 134c3-6.3 4.8-9.4 10.2-11.7 15.7-7 24.5 8.4 22.8 21.7 38.8-11.2 14-72-22-54-4.3 2.3-8.2 6-11 10-3 4.5-5.2 9.5-5.7 15-.6 7 2.6 13 5.7 19z"/><path fill="#989801" d="M360 87l1 1-1-1m-205 1l1 1-1-1z"/><path fill="#6c6c02" d="M178 88l1 1-1-1z"/><path fill="#444b19" d="M276 88l1 1z"/><path fill="#576e57" d="M297 88l1 1-1-1z"/><path fill="#444b19" d="M235 89l1 1-1-1z"/><path fill="#6c6c02" d="M275 89l1 1-1-1z"/><path fill="#779375" d="M319 89l1 1-1-1z"/><path fill="#9fc79f" d="M201 90l1 1-1-1z"/><path fill="#FFF" d="M196 147c-2-8-3-15 3.4-21.8 10.5-11 28.7-3.6 30.6 10.8 9.5-9.4 6-29.2-3.2-37.7-12.5-11.8-32-10.4-43 2.7-3.6 4.5-5.2 9.2-6 15-.8 5.6.2 12 2.5 17 3.2 6.8 9 11.2 15.7 14z"/><path fill="#989801" d="M274 90l1 1-1-1z"/><path fill="#576e57" d="M320 90l1 1-1-1z"/><path fill="#989801" d="M175 91l1 1z"/><path fill="#444b19" d="M197 91l1 1-1-1z"/><path fill="#576e57" d="M215 91l1 1-1-1z"/><path fill="#989801" d="M273 91l1 1-1-1z"/><path fill="#9fc79f" d="M291 91l1 1-1-1zm-1 1l1 1-1-1z"/><path fill="#444b19" d="M324 92l1 1-1-1z"/><path fill="#6c6c02" d="M238 93l1 1-1-1m34 0l1 1-1-1z"/><path fill="#576e57" d="M288 93l1 1-1-1z"/><path fill="#95bb95" d="M289 93l1 1-1-1z"/><path fill="#444b19" d="M325 93l1 1-1-1z"/><path fill="#6c6c02" d="M173 94l1 1-1-1z"/><path fill="#9fc79f" d="M191 94l1 1-1-1z"/><path fill="#779375" d="M221 94l1 1-1-1z"/><path fill="#444b19" d="M222 94l1 1-1-1"/><path fill="#6c6c02" d="M271 94l1 1-1-1z"/><path fill="#95bb95" d="M287 94l1 1-1-1z"/><path fill="#779375" d="M326 94l1 1-1-1z"/><path fill="#444b19" d="M240 95l1 1-1-1z"/><path fill="#9fc79f" d="M286 95l1 1-1-1z"/><path fill="#989801" d="M364 95l1 1z"/><path fill="#9fc79f" d="M285 96l1 1-1-1zm-1 1l1 1-1-1z"/><path fill="#576e57" d="M126 99l1 1-1-1z"/><path fill="#9fc79f" d="M185 99l1 1-1-1z"/><path fill="#444b19" d="M366 99l1 1-1-1z"/><path fill="#6c6c02" d="M169 100l1 1-1-1z"/><path fill="#9fc79f" d="M184 100l1 1-1-1z"/><path fill="#989801" d="M345 100l1 1-1-1m21 0l1 1-1-1z"/><path fill="#6c6c02" d="M149 101l1 1-1-1z"/><path fill="#9fc79f" d="M182 102l1 1-1-1z"/><path fill="#444b19" d="M230 102l1 1-1-1z"/><path fill="#6c6c02" d="M244 102l1 1-1-1z"/><path fill="#444b19" d="M346 103l1 1-1-1zm-113 4l1 1-1-1z"/><path fill="#989801" d="M166 108l1 1-1-1z"/><path fill="#6c6c02" d="M246 108l1 1-1-1z"/><path fill="#576e57" d="M278 108l1 1-1-1"/><path fill="#444b19" d="M369 108l1 1-1-1m-223 1l1 1-1-1z"/><path fill="#576e57" d="M178 109l1 1-1-1z"/><path fill="#95bb95" d="M234 110l1 1-1-1z"/><path fill="#444b19" d="M372 117l1 1-1-1z"/><path fill="#576e57" d="M213 119l1 1-1-1z"/><path fill="#779375" d="M206 120l1 1-1-1"/><path fill="#9fc79f" d="M295 121l1 1-1-1z"/><path fill="#576e57" d="M304 121l1 1-1-1z"/><path fill="#444b19" d="M221 122l1 1-1-1z"/><path fill="#6c6c02" d="M143 123l1 1-1-1z"/><path fill="#9fc79f" d="M200 123l1 1-1-1z"/><path fill="#576e57" d="M223 123l1 1-1-1z"/><path fill="#9fc79f" d="M199 124l1 1-1-1z"/><path fill="#576e57" d="M224 124l1 1-1-1m54 0l1 1-1-1z"/><path fill="#9fc79f" d="M289 124l1 1-1-1z"/><path fill="#926a61" d="M310 124l1 1-1-1z"/><path fill="#95bb95" d="M311 124l1 1-1-1z"/><path fill="#9fc79f" d="M198 125l1 1-1-1z"/><path fill="#444b19" d="M225 125l1 1-1-1z"/><path fill="#989801" d="M247 125l1 1-1-1z"/><path fill="#6c6c02" d="M266 125l1 1-1-1z"/><path fill="#9fc79f" d="M312 125l1 1-1-1z"/><path fill="#444b19" d="M166 130l1 1-1-1z"/><path fill="#9fc79f" d="M195 130l1 1-1-1z"/><path fill="#95bb95" d="M315 130l1 1-1-1z"/><path fill="#926a61" d="M179 131l1 1-1-1z"/><path fill="#9fc79f" d="M229 131l1 1-1-1z"/><path fill="#779375" d="M233 131l1 1-1-1z"/><path fill="#576e57" d="M281 131l1 1-1-1z"/><path fill="#95bb95" d="M284 131l1 1-1-1z"/><path fill="#9fc79f" d="M282 132l1 1-1-1z"/><path fill="#989801" d="M345 132l1 1-1-1m-178 1l1 1-1-1z"/><path fill="#444b19" d="M180 133l1 1-1-1z"/><path fill="#576e57" d="M194 133l1 1-1-1z"/><path fill="#444b19" d="M232 133l1 1-1-1zm-1 2l1 1-1-1"/><path fill="#6c6c02" d="M169 138l1 1-1-1z"/><path fill="#444b19" d="M243 138l1 1-1-1m28 0l1 1-1-1z"/><path fill="#6c6c02" d="M342 138l1 1-1-1z"/><path fill="#9fc79f" d="M169 139l1 1-1-1z"/><path fill="#989801" d="M243 139l1 1-1-1z"/><path fill="#6c6c02" d="M272 139l1 1-1-1z"/><path fill="#444b19" d="M325 139l1 1-1-1z"/><path fill="#9fc79f" d="M342 139l1 1-1-1m-100 1l1 1-1-1z"/><path fill="#989801" d="M273 141l1 1-1-1z"/><path fill="#6c6c02" d="M274 142l1 1-1-1zm1 1l1 1-1-1z"/><path fill="#444b19" d="M190 144l1 1-1-1z"/><path fill="#6c6c02" d="M276 144l1 1-1-1z"/><path fill="#576e57" d="M192 145l1 1-1-1z"/><path fill="#444b19" d="M237 146l1 1-1-1z"/><path fill="#6c6c02" d="M175 147l1 1z"/><path fill="#989801" d="M237 147l1 1-1-1m42 0l1 1-1-1z"/><path fill="#6c6c02" d="M176 148l1 1-1-1z"/><path fill="#444b19" d="M236 148l1 1-1-1z"/><path fill="#989801" d="M280 148l1 1-1-1z"/><path fill="#444b19" d="M177 149l1 1-1-1z"/><path fill="#989801" d="M281 149l1 1-1-1z"/><path fill="#444b19" d="M178 150l1 1-1-1z"/><path fill="#6c6c02" d="M282 150l1 1-1-1z"/><path fill="#989801" d="M328 152l1 1-1-1z"/><path fill="#444b19" d="M182 153l1 1-1-1z"/><path fill="#6c6c02" d="M325 153l1 1-1-1z"/><path fill="#989801" d="M326 153l1 1-1-1"/><path fill="#444b19" d="M184 154l1 1-1-1z"/><path fill="#989801" d="M229 154l1 1-1-1"/><path fill="#6c6c02" d="M320 155l1 1-1-1z"/><path fill="#989801" d="M223 157l1 1-1-1m-32 1l1 1z"/><path fill="#9fc79f" d="M215 160l1 1-1-1z"/><path fill="#6c6c02" d="M143 162l1 1zm226 15l1 1-1-1z"/><path fill="#989801" d="M367 183l1 1z"/><path fill="#6c6c02" d="M149 184l1 1-1-1z"/><path fill="#989801" d="M366 185l1 1-1-1z"/><path fill="#444b19" d="M366 186l1 1-1-1z"/><path fill="#576e57" d="M390 187l1 1-1-1z"/><path fill="#989801" d="M364 190l1 1-1-1m-212 1l1 1-1-1z"/><path fill="#444b19" d="M364 191l1 1-1-1z"/><path fill="#989801" d="M153 193l1 1-1-1m207 5l1 1z"/><path fill="#6c6c02" d="M156 199l1 1-1-1z"/><path fill="#444b19" d="M157 200l1 1-1-1z"/><path fill="#6c6c02" d="M359 200l1 1-1-1z"/><path fill="#444b19" d="M359 201l1 1-1-1z"/><path fill="#989801" d="M161 207l1 1-1-1z"/><path fill="#444b19" d="M355 207l1 1-1-1z"/><path fill="#989801" d="M162.3 208.7c-108.2 202.2-54 101 0 0z"/><path fill="#444b19" d="M354 208l1 1-1-1z"/><path fill="#989801" d="M163 210l1 1-1-1m3 4l1 1-1-1m1 1l1 1-1-1m182 0l1 1-1-1m-181 1l1 1-1-1zm2 3l1 1-1-1m1 1l1 1-1-1m1 1l1 1-1-1m172 0l1 1-1-1z"/><path fill="#6c6c02" d="M173 222l1 1-1-1z"/><path fill="#989801" d="M343 222l1 1-1-1m-1 1l1 1-1-1z"/><path fill="#6c6c02" d="M175 224l1 1-1-1z"/><path fill="#989801" d="M341 224l1 1-1-1z"/><path fill="#6c6c02" d="M176 225l1 1-1-1z"/><path fill="#989801" d="M177 226l1 1-1-1m1 1l1 1-1-1m1 1l1 1-1-1m158 0l1 1-1-1z"/><path fill="#6c6c02" d="M180 229l1 1-1-1z"/><path fill="#989801" d="M336 229l1 1-1-1z"/><path fill="#6c6c02" d="M181 230l1 1-1-1z"/><path fill="#989801" d="M334 230l1 1-1-1z"/><path fill="#444b19" d="M335 230l1 1-1-1z"/><path fill="#6c6c02" d="M182 231l1 1-1-1z"/><path fill="#989801" d="M184 232l1 1-1-1m1 1l1 1-1-1m1 1l1 1-1-1m1 1l1 1-1-1m3 2l1 1z"/><path fill="#6c6c02" d="M326 237l1 1-1-1z"/><path fill="#444b19" d="M191 238l1 1-1-1z"/><path fill="#989801" d="M192 238l1 1-1-1z"/><path fill="#6c6c02" d="M320 241l1 1-1-1m-1 1l1 1-1-1z"/><path fill="#5a081a" d="M334 248c-222.7 176-111.3 88 0 0z"/><path fill="#ff013d" d="M237 270c-8.5 16-15.4 36.6-20 54-1.4 5-6.3 11.7-5 17 3.2 12.8 17.2 22.5 29 25.6 22.3 5.8 48.2 7.5 70-1 4-1.6 9.7-3 12-6.8 2-3.6.8-9 1.2-12.8 1-10.2 6.5-18.5 16.8-21 0-9 1.7-18.7 8.5-25.5 4-4 10.2-6 14-1.2 9.8 12.3-3.6 27.7 12.5 36.7 13.8-29.4 26.3-75-15-88.7-5.2-1.8-11.4-4.7-17-4-10.3 1-22.7 14-32.4 18.6-22.3 10-50.6 14-74.6 9z"/><path fill="#444b19" d="M199 243l1 1-1-1z"/><path fill="#989801" d="M315 244l1 1z"/><path fill="#444b19" d="M202 245l1 1-1-1z"/><path fill="#989801" d="M313 245l1 1-1-1z"/><path fill="#6c6c02" d="M314 245l1 1-1-1z"/><path fill="#989801" d="M311 246l1 1-1-1z"/><path fill="#444b19" d="M205 247l1 1-1-1z"/><path fill="#5a081a" d="M365 247l1 1-1-1z"/><path fill="#6c6c02" d="M206.7 249.3c-137.8 175-69 87.6 0 0z"/><path fill="#576e57" d="M401 250l1 1-1-1z"/><path fill="#5a081a" d="M181 251c-120.7 174-60.3 87 0 0zm147 0l1 1-1-1z"/><path fill="#a30127" d="M181 253c-120.7 172.7-60.3 86.3 0 0z"/><path fill="#ff013d" d="M137 338c3.2-4.2 6.6-7.2 11-10-2-4-6.7-6.5-7.5-11-1.6-9.4 12.2-21 20.5-21.8 4.4-.5 12.3 5 15.5 3 2.5-1.7 3.4-6.6 4.5-9.2 3-7.5 13-26 8-33.7-2.5-4-7.7-3.8-13.4-2.2-7.6 3-16 8-19.6 10-13.6 8-26.5 17-39 27-4 3-12.3 8-13.5 13-1.2 6 3 11 6.2 14 7.7 9 17.2 17 27.3 22z"/><path fill="#a30127" d="M185.7 252.3c-123.8 173-62 86.6 0 0zM170 255l1 1-1-1z"/><path fill="#989801" d="M289 255l1 1-1-1z"/><path fill="#a30127" d="M320 256l1 1-1-1z"/><path fill="#444b19" d="M230 257l1 1-1-1z"/><path fill="#989801" d="M281 257l1 1-1-1z"/><path fill="#5a081a" d="M318 257l1 1-1-1zm-154.7 1.7c-109 169-54.4 84.4 0 0z"/><path fill="#6c6c02" d="M205 258l1 1-1-1m23 0l1 1-1-1z"/><path fill="#5a081a" d="M161 259l1 1z"/><path fill="#6c6c02" d="M227 259l1 1-1-1z"/><path fill="#a30127" d="M160.3 260.7c-107 167.5-53.4 83.7 0 0z"/><path fill="#444b19" d="M226 260l1 1-1-1z"/><path fill="#a30127" d="M154 263l1 1-1-1"/><path fill="#989801" d="M223 267l1 1-1-1z"/><path fill="#5a081a" d="M386 267l1 1-1-1m-198 1l1 1-1-1z"/><path fill="#989801" d="M201 268l1 1-1-1z"/><path fill="#444b19" d="M223.3 268.7c-149 162.2-74.4 81 0 0z"/><path fill="#6c6c02" d="M222 270c-148 161.3-74 80.7 0 0z"/><path fill="#5a081a" d="M236 270l1 1-1-1z"/><path fill="#989801" d="M200 271c-133.3 160.7-66.7 80.3 0 0z"/><path fill="#5a081a" d="M245 271l1 1-1-1"/><path fill="#a30127" d="M139 273l1 1-1-1z"/><path fill="#5a081a" d="M186.3 273.7c-124.2 159-62 79.4 0 0z"/><path fill="#a30127" d="M137 274l1 1-1-1z"/><path fill="#6c6c02" d="M199 274l1 1-1-1z"/><path fill="#a30127" d="M185 275l1 1z"/><path fill="#444b19" d="M198.5 276.6c-132.3 157-66.2 78.5 0 0z"/><path fill="#a30127" d="M234 275l1 1-1-1zm-100 1l1 1-1-1zm-1 1l1 1-1-1z"/><path fill="#5a081a" d="M131 278l1 1-1-1m53.3.7s0 1 .4.6c0 0 0-1-.4-.6zm-54.3.3l1 1-1-1z"/><path fill="#a30127" d="M183.3 280.7c-122.2 154.2-61 77 0 0z"/><path fill="#5a081a" d="M127 281l1 1-1-1z"/><path fill="#a30127" d="M125.7 282.3c-.5.5.6.4.6.4.5-.5-.6-.4-.6-.4z"/><path fill="#6c6c02" d="M218 282l1 1-1-1z"/><path fill="#5a081a" d="M231 282l1 1-1-1m-107 1l1 1-1-1z"/><path fill="#9fc79f" d="M83 286l1 1-1-1z"/><path fill="#444b19" d="M216.3 287.7c-144.2 149.5-72 74.7 0 0z"/><path fill="#a30127" d="M180 289l1 1-1-1z"/><path fill="#989801" d="M215 289c-143.3 148.7-71.7 74.3 0 0z"/><path fill="#6c6c02" d="M193 290l1 1-1-1m22.3.7s0 1 .4.6c0 0 0-1-.4-.6z"/><path fill="#989801" d="M192.3 293.7c-128.2 145.5-64 72.7 0 0z"/><path fill="#a30127" d="M109 295l1 1-1-1m57 0c-110.7 144.7-55.3 72.3 0 0z"/><path fill="#5a081a" d="M178.3 295.7c-119 144.2-59.4 72 0 0z"/><path fill="#6c6c02" d="M191.3 295.7c-127.5 144.2-63.7 72 0 0z"/><path fill="#989801" d="M213 295l1 1-1-1z"/><path fill="#a30127" d="M108 296l1 1-1-1m46.7.3c-103 143.8-51.6 72 0 0z"/><path fill="#6c6c02" d="M213 296l1 1-1-1z"/><path fill="#a30127" d="M107 297l1 1z"/><path fill="#5a081a" d="M171.3 297.7c-114.2 143-57 71.4 0 0z"/><path fill="#989801" d="M191 297l1 1-1-1z"/><path fill="#a30127" d="M226 297l1 1-1-1m-119.7 1.7c-71 142.2-35.4 71 0 0z"/><path fill="#5a081a" d="M177 298l1 1-1-1z"/><path fill="#444b19" d="M190.3 298.7c-127 142.2-63.4 71 0 0z"/><path fill="#5a081a" d="M173.7 299.3c-115.8 141.8-58 71 0 0z"/><path fill="#a30127" d="M176 299l1 1-1-1m-74 3c-68 140-34 70 0 0z"/><path fill="#5a081a" d="M147 302c1 1 1 1 0 0"/><path fill="#6c6c02" d="M188 304l1 1-1-1z"/><path fill="#989801" d="M210 304l1 1-1-1z"/><path fill="#6c6c02" d="M209 306l1 1-1-1z"/><path fill="#444b19" d="M208 312c-138.7 133.3-69.3 66.7 0 0z"/><path fill="#a30127" d="M106 312l1 1z"/><path fill="#444b19" d="M185 312l1 1-1-1z"/><path fill="#6c6c02" d="M207.3 312.7c-138.2 133-69 66.4 0 0z"/><path fill="#a30127" d="M107 313l1 1-1-1z"/><path fill="#5a081a" d="M140 313c-93.3 132.7-46.7 66.3 0 0z"/><path fill="#989801" d="M185 313l1 1-1-1z"/><path fill="#a30127" d="M108 314l1 1-1-1z"/><path fill="#989801" d="M206.3 314.7c-137.5 131.5-68.7 65.7 0 0z"/><path fill="#a30127" d="M109 315l1 1-1-1m1.3 1.7c-73.5 130.2-36.7 65 0 0z"/><path fill="#444b19" d="M183.3 317.7c-122.2 129.5-61 64.7 0 0z"/><path fill="#a30127" d="M111 318l1 1-1-1m1 1l1 1-1-1z"/><path fill="#989801" d="M183 319l1 1-1-1z"/><path fill="#5a081a" d="M218 319l1 1-1-1z"/><path fill="#a30127" d="M382 320l1 1-1-1m-267 1l1 1-1-1m1 1l1 1zm1 1l1 1-1-1m1 1l1 1-1-1m28 1l1 1-1-1m2.3 1.7c-99 123.5-49.4 61.7 0 0z"/><path fill="#444b19" d="M180 326l1 1-1-1z"/><path fill="#a30127" d="M335 326l1 1-1-1m-213 1l1 1-1-1m93.3.7c-143.5 123-71.7 61.4 0 0zm-92.3.3l1 1-1-1z"/><path fill="#5a081a" d="M147 328l1 1-1-1z"/><path fill="#6c6c02" d="M201 328l1 1-1-1z"/><path fill="#444b19" d="M201.3 329.7c-134.2 121.5-67 60.7 0 0z"/><path fill="#5a081a" d="M214.3 329.7c-143 121.5-71.4 60.7 0 0z"/><path fill="#989801" d="M184 330l1 1-1-1z"/><path fill="#5a081a" d="M373 333l1 1z"/><path fill="#444b19" d="M191 334l1 1-1-1z"/><path fill="#989801" d="M192 334l1 1-1-1z"/><path fill="#6c6c02" d="M199 334l1 1-1-1z"/><path fill="#a30127" d="M327 334l1 1-1-1z"/><path fill="#5a081a" d="M374 334l1 1-1-1z"/><path fill="#6c6c02" d="M194.3 335.7c-129.5 117.5-64.7 58.7 0 0z"/><path fill="#5a081a" d="M375 335l1 1-1-1m-241.3 1.3c-89 117-44.6 58.6 0 0z"/><path fill="#444b19" d="M195 336l1 1-1-1z"/><path fill="#989801" d="M198.3 336.7c-132.2 117-66 58.4 0 0z"/><path fill="#9fc79f" d="M104 337l1 1-1-1z"/><path fill="#444b19" d="M197 337l1 1-1-1z"/><path fill="#926a61" d="M343 338l1 1-1-1z"/><path fill="#fbb5a7" d="M344 338.7c-8.5 3.5-8.5 27.2-1.4 32.3 3.8 2.8 17.2-.7 21.4-2.3 23.5-9.5-4.6-36-20-30z"/><path fill="#444b19" d="M341 339l1 1-1-1m-1 1l1 1-1-1z"/><path fill="#926a61" d="M357 340l1 1-1-1z"/><path fill="#a30127" d="M211 341l1 1-1-1zm1 1l1 1-1-1z"/><path fill="#926a61" d="M339 342l1 1-1-1m22 0l1 1-1-1z"/><path fill="#5a081a" d="M324 343l1 1-1-1z"/><path fill="#b9867c" d="M159 344c-106 112-53 56 0 0z"/><path fill="#a30127" d="M213 344l1 1-1-1z"/><path fill="#444b19" d="M364 344l1 1-1-1z"/><path fill="#fbb5a7" d="M201 365c-6.8-9-22-17.4-33-19.5-4.5-1-12.2-1.7-14.2 3.6-2.6 7 4 13 9.2 16 11.8 6 26 4 38 1z"/><path fill="#926a61" d="M168 345l1 1-1-1z"/><path fill="#5a081a" d="M214.3 345.7c-143 111-71.4 55.4 0 0z"/><path fill="#444b19" d="M365 345l1 1-1-1z"/><path fill="#a30127" d="M215 347l1 1-1-1z"/><path fill="#b9867c" d="M176 348l1 1-1-1z"/><path fill="#444b19" d="M178.7 349.3c-119 108.5-59.6 54.3 0 0z"/><path fill="#5a081a" d="M216 349l1 1-1-1z"/><path fill="#926a61" d="M180.7 350.3c-120.5 107.8-60.3 54 0 0z"/><path fill="#5a081a" d="M217 350l1 1-1-1z"/><path fill="#444b19" d="M370 350l1 1-1-1z"/><path fill="#b9867c" d="M182 351l1 1-1-1z"/><path fill="#576e57" d="M183 351l1 1-1-1z"/><path fill="#5a081a" d="M218 351l1 1-1-1z"/><path fill="#576e57" d="M371 351l1 1-1-1z"/><path fill="#444b19" d="M185 352l1 1-1-1zm-32 2c-102 105.3-51 52.7 0 0z"/><path fill="#5a081a" d="M222 356l1 1-1-1"/><path fill="#926a61" d="M192 357l1 1-1-1z"/><path fill="#5a081a" d="M223 357l1 1-1-1z"/><path fill="#b9867c" d="M155 358l1 1-1-1z"/><path fill="#444b19" d="M338 358l1 1-1-1z"/><path fill="#b9867c" d="M194.7 359.3c-129.8 101.8-65 51 0 0z"/><path fill="#5a081a" d="M320 361l1 1-1-1z"/><path fill="#926a61" d="M199 362l1 1-1-1z"/><path fill="#a30127" d="M319 362l1 1-1-1z"/><path fill="#926a61" d="M200 363l1 1-1-1z"/><path fill="#5a081a" d="M229 363l1 1-1-1z"/><path fill="#444b19" d="M161 364l1 1-1-1z"/><path fill="#926a61" d="M162 364l1 1-1-1m39 0l-1 2h2c0-2 .3-1.4-1-2z"/><path fill="#444b19" d="M163.7 365.3c-109 97.8-54.6 49 0 0z"/><path fill="#b9867c" d="M199 365l1 1-1-1z"/><path fill="#5a081a" d="M311.7 365.3c-207.8 97.8-104 49 0 0z"/><path fill="#444b19" d="M196 366c-130.7 97.3-65.3 48.7 0 0z"/><path fill="#576e57" d="M134 367l1 1-1-1z"/><path fill="#b9867c" d="M191 367l1 1-1-1z"/><path fill="#a30127" d="M244 367l1 1-1-1m61 0l1 1-1-1z"/><path fill="#444b19" d="M366 367l1 1-1-1z"/><path fill="#926a61" d="M364 368l1 1-1-1z"/><path fill="#5a081a" d="M298 369l1 1-1-1z"/><path fill="#95bb95" d="M357 385c-17 3.2-27 3-31-16-12 1.6-23.6 7.8-36 9.6-4 .6-11-1-14.3 2-5 4.8-5.4 14-5.7 20.4-.3 4.7-2.4 9.3-1.6 14 1.7 10.3 13.3 21.2 19.7 29 5 5.7 11 14.3 18 16.5 9 2.4 17-4.7 23-8.8 10-6 20-13.5 25-23.7 3-4.8 1-11.8 1-17 1-8.7 2-17.3 2-26z"/><path fill="#444b19" d="M358 370l1 1-1-1z"/><path fill="#576e57" d="M305 375l1 1-1-1z"/><path fill="#9fc79f" d="M157 384c0 14-.5 26 5.2 39 4.8 11 11 21 19 30 7 7.7 14.8 9 24.8 9 17.2 0 33.7-6.2 42.5-22 11-20 3.6-55-21.5-61.3-8-2-23.7 6.3-32 8-13.7 3-24.8-.4-38-2.7z"/><path fill="#779375" d="M290 378l1 1-1-1zm-61 1l1 1-1-1z"/><path fill="#576e57" d="M216 380c-144 88-72 44 0 0z"/><path fill="#444b19" d="M274.7 381.3c-183 87-91.6 43.6 0 0z"/><path fill="#779375" d="M232.3 381.7c-155 87-77.4 43.4 0 0z"/><path fill="#95bb95" d="M211 382c-140.7 86.7-70.3 43.3 0 0z"/><path fill="#444b19" d="M273 385c-182 84.7-91 42.3 0 0z"/><path fill="#779375" d="M208 383l1 1-1-1m27 0l1 1-1-1m1 1l1 1-1-1"/><path fill="#576e57" d="M162 385l1 1-1-1z"/><path fill="#444b19" d="M238 385l1 1-1-1zm1 1l1 1-1-1m33 0l1 1-1-1"/><path fill="#9fc79f" d="M137 387l1 1-1-1z"/><path fill="#779375" d="M191 387l1 1-1-1z"/><path fill="#576e57" d="M240 387l1 1-1-1m1 1l1 1-1-1m1 1l1 1-1-1m-106 1l1 1-1-1m107 0l1 1-1-1z"/><path fill="#9fc79f" d="M136 391l1 1-1-1z"/><path fill="#576e57" d="M244 391l1 1-1-1m2 3l1 1z"/><path fill="#779375" d="M155 395l1 1-1-1z"/><path fill="#444b19" d="M251 403l1 1-1-1z"/><path fill="#576e57" d="M365 406c-1 6.8 1.4 18.2-1.5 24.2-7.2 15.3-24.4 25.4-38.5 33.7-6.6 3-13.2 7-21 5-16.8-6-21-26-35-34 0 9 .3 16 3.7 25 17.6 42 71.5 11 89.5-14 7.4-11 13.3-30 2.8-40m-208 3l1 1-1-1z"/><path fill="#779375" d="M268 416l1 1-1-1zm-15 9l1 1z"/><path fill="#444b19" d="M274 426l1 1z"/><path fill="#779375" d="M275 427l1 1-1-1zm3 4l1 1-1-1z"/><path fill="#576e57" d="M155 432c2.6 11 11 20.8 17.3 30 2 3.3 4.5 8.6 8 10.4 4.6 2.4 11.7 2.2 16.7 2.8 15.3 1.8 33.3 2.6 48-2.5 5.6-2 11.8-4 14.7-9.7 3-5.7-.6-14-1.7-20-5.6 6-9.4 12.4-16 17.5-14.2 11-43 17.8-59 6-12.4-9-17.4-24.2-28-34.5m11 0l1 1-1-1m113 0l1 1-1-1z"/><path fill="#444b19" d="M362 432l1 1-1-1z"/><path fill="#576e57" d="M167 433l1 1-1-1zm182 0l1 1-1-1z"/><path fill="#444b19" d="M280 434l1 1-1-1m1 1l1 1-1-1z"/><path fill="#576e57" d="M282 436l1 1-1-1z"/><path fill="#444b19" d="M169 437l1 1-1-1zm188 0l1 1-1-1z"/><path fill="#779375" d="M170 438l1 1-1-1"/><path fill="#444b19" d="M356 438l1 1-1-1m-186 1l1 1-1-1z"/><path fill="#576e57" d="M284 439l1 1-1-1z"/><path fill="#444b19" d="M355 439l1 1-1-1m-197 1l1 1-1-1m13 0l1 1-1-1z"/><path fill="#576e57" d="M248 440l1 1-1-1z"/><path fill="#444b19" d="M285 440l1 1-1-1z"/><path fill="#779375" d="M343 440l1 1-1-1z"/><path fill="#444b19" d="M354 440l1 1-1-1m-11 1l1 1-1-1m-54 4l1 1-1-1m-30 7c-172.7 40-86.3 20 0 0z"/><path fill="#576e57" d="M290 446l1 1-1-1zm-54 7l1 1-1-1m90 0l1 1-1-1z"/><path fill="#444b19" d="M341 453l1 1-1-1zm-44 1l1 1-1-1zm58 0l1 1-1-1z"/><path fill="#576e57" d="M233 455l1 1-1-1z"/><path fill="#444b19" d="M248 455l1 1-1-1m38 0l1 1-1-1m12 0l1 1-1-1z"/><path fill="#576e57" d="M320 456l1 1-1-1z"/><path fill="#444b19" d="M321 456l1 1-1-1z"/><path fill="#779375" d="M229 457l1 1-1-1z"/><path fill="#444b19" d="M288 457l1 1-1-1z"/><path fill="#779375" d="M319 457l1 1-1-1z"/><path fill="#444b19" d="M289 458l1 1z"/><path fill="#9fc79f" d="M375 459l1 1-1-1z"/><path fill="#576e57" d="M200 462c-133.3 33.3-66.7 16.7 0 0z"/></svg> diff --git a/pix/jitsi-01.webp b/pix/jitsi-01.webp Binary files differnew file mode 100644 index 0000000..a71f1ae --- /dev/null +++ b/pix/jitsi-01.webp diff --git a/pix/jitsi.svg b/pix/jitsi.svg new file mode 100644 index 0000000..5a3526a --- /dev/null +++ b/pix/jitsi.svg @@ -0,0 +1,650 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="744.09448819" + height="1052.3622047" + id="svg5488" + version="1.1" + inkscape:version="0.47 r22583" + sodipodi:docname="New document 5"> + <defs + id="defs5490"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective5496" /> + <inkscape:perspective + id="perspective5347" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient8896" + id="linearGradient4242" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-297.23084,320.86007)" + x1="439.90353" + y1="455.73935" + x2="469.71744" + y2="557.74847" /> + <linearGradient + id="linearGradient8896"> + <stop + id="stop8898" + offset="0" + style="stop-color:#0f3060;stop-opacity:1;" /> + <stop + style="stop-color:#0575ce;stop-opacity:1;" + offset="0.27115166" + id="stop8902" /> + <stop + id="stop12553" + offset="0.7327472" + style="stop-color:#0575ce;stop-opacity:1;" /> + <stop + style="stop-color:#0f3060;stop-opacity:1;" + offset="1" + id="stop8900" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5041" + id="linearGradient4244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-297.23084,320.86007)" + x1="382.80234" + y1="585.22589" + x2="347.44287" + y2="645.02435" /> + <linearGradient + id="linearGradient5041"> + <stop + style="stop-color:#092d61;stop-opacity:1;" + offset="0" + id="stop5043" /> + <stop + id="stop5047" + offset="1" + style="stop-color:#0575ce;stop-opacity:1;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3493" + id="linearGradient4246" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-297.23084,320.86007)" + x1="415.81378" + y1="620.09808" + x2="436.35599" + y2="486.43097" /> + <linearGradient + id="linearGradient3493"> + <stop + style="stop-color:#0f3060;stop-opacity:1;" + offset="0" + id="stop3495" /> + <stop + id="stop3497" + offset="0.45698157" + style="stop-color:#0575ce;stop-opacity:1;" /> + <stop + style="stop-color:#0575ce;stop-opacity:1;" + offset="0.73828435" + id="stop3501" /> + <stop + id="stop3507" + offset="1" + style="stop-color:#0f3060;stop-opacity:1;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3529" + id="linearGradient4248" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.245729,0,0,0.245729,34.35214,723.04037)" + x1="389.59329" + y1="763.3017" + x2="308.98642" + y2="420.01578" /> + <linearGradient + id="linearGradient3529"> + <stop + id="stop3531" + offset="0" + style="stop-color:#ff8000;stop-opacity:1;" /> + <stop + style="stop-color:#fff4e1;stop-opacity:1;" + offset="0.6627211" + id="stop3533" /> + <stop + id="stop3535" + offset="0.75" + style="stop-color:#fff4e1;stop-opacity:1;" /> + <stop + id="stop3537" + offset="1.0000000" + style="stop-color:#ff8400;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3591" + id="linearGradient4250" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-297.23084,320.86007)" + x1="528.82031" + y1="511.71811" + x2="458.46918" + y2="527.10736" /> + <linearGradient + id="linearGradient3591"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3593" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3595" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7434" + id="linearGradient4252" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.245729,0,0,0.245729,34.35214,723.04037)" + x1="197.17841" + y1="703.80151" + x2="146.54216" + y2="785.90436" /> + <linearGradient + id="linearGradient7434"> + <stop + id="stop7436" + offset="0" + style="stop-color:#ffc768;stop-opacity:1;" /> + <stop + style="stop-color:#ff8400;stop-opacity:1.0000000;" + offset="0.37842149" + id="stop7438" /> + <stop + id="stop7440" + offset="0.77420431" + style="stop-color:#ff8400;stop-opacity:1.0000000;" /> + <stop + id="stop7442" + offset="1" + style="stop-color:#ffc768;stop-opacity:1;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3591" + id="linearGradient4254" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0334058,0,0,1.0138319,-309.91012,314.18347)" + x1="413.63229" + y1="484.60083" + x2="423.52518" + y2="541.83301" /> + <linearGradient + id="linearGradient5384"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5386" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5388" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3509" + id="linearGradient4256" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.245729,0,0,0.245729,34.35214,723.04037)" + x1="409.69571" + y1="559.36359" + x2="467.88617" + y2="676.03516" /> + <linearGradient + id="linearGradient3509"> + <stop + id="stop3511" + offset="0" + style="stop-color:#ff8000;stop-opacity:1;" /> + <stop + style="stop-color:#ffc768;stop-opacity:1.0000000;" + offset="0.34144846" + id="stop3513" /> + <stop + id="stop3515" + offset="0.71198046" + style="stop-color:#ffc768;stop-opacity:1.0000000;" /> + <stop + id="stop3517" + offset="1.0000000" + style="stop-color:#ff8400;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3651" + id="linearGradient4258" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.245729,0,0,0.245729,34.35214,723.04037)" + x1="522.63641" + y1="168.68723" + x2="585.93317" + y2="161.10866" /> + <linearGradient + id="linearGradient3651"> + <stop + style="stop-color:#ff8000;stop-opacity:1;" + offset="0" + id="stop3653" /> + <stop + id="stop16786" + offset="0.5" + style="stop-color:#fff4e1;stop-opacity:1;" /> + <stop + style="stop-color:#fff4e1;stop-opacity:1;" + offset="0.75" + id="stop17514" /> + <stop + style="stop-color:#ff8400;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop3655" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3509" + id="linearGradient4260" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.245729,0,0,0.245729,34.35214,723.04037)" + x1="481.48975" + y1="417.49979" + x2="405.41116" + y2="316.78976" /> + <linearGradient + id="linearGradient5403"> + <stop + id="stop5405" + offset="0" + style="stop-color:#ff8000;stop-opacity:1;" /> + <stop + style="stop-color:#ffc768;stop-opacity:1.0000000;" + offset="0.34144846" + id="stop5407" /> + <stop + id="stop5409" + offset="0.71198046" + style="stop-color:#ffc768;stop-opacity:1.0000000;" /> + <stop + id="stop5411" + offset="1.0000000" + style="stop-color:#ff8400;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3591" + id="linearGradient4262" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-297.23084,320.86007)" + x1="473.09195" + y1="499.58444" + x2="457.68967" + y2="477.5997" /> + <linearGradient + id="linearGradient5414"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5416" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5418" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3591" + id="linearGradient4264" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-297.23084,320.86007)" + x1="394.34113" + y1="501.80154" + x2="446.31302" + y2="485.37762" /> + <linearGradient + id="linearGradient5421"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5423" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5425" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3591" + id="linearGradient4266" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-297.23084,320.86007)" + x1="395.81326" + y1="590.73315" + x2="369.55322" + y2="572.16907" /> + <linearGradient + id="linearGradient5428"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5430" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5432" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2937" + id="linearGradient4268" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.245729,0,0,0.245729,34.35214,723.04037)" + x1="297.05316" + y1="667.16193" + x2="310.45529" + y2="713.86633" /> + <linearGradient + id="linearGradient2937"> + <stop + style="stop-color:#212a3a;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2939" /> + <stop + style="stop-color:#404e67;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop2941" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2937" + id="linearGradient4270" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.09307993,0,0,0.1860535,131.94157,665.87199)" + x1="246.30438" + y1="690.02673" + x2="366.87921" + y2="632.15985" /> + <linearGradient + id="linearGradient5439"> + <stop + style="stop-color:#212a3a;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop5441" /> + <stop + style="stop-color:#404e67;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop5443" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2937" + id="linearGradient4272" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.09281332,-0.00703915,0.01407026,-0.1855207,186.19996,929.70821)" + x1="301.05194" + y1="645.89917" + x2="367.94604" + y2="654.72131" /> + <linearGradient + id="linearGradient5446"> + <stop + style="stop-color:#212a3a;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop5448" /> + <stop + style="stop-color:#404e67;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop5450" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2937" + id="linearGradient4274" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.245729,0,0,0.245729,98.31046,642.63728)" + x1="279.81714" + y1="688.32355" + x2="386.78625" + y2="667.6355" /> + <linearGradient + id="linearGradient5453"> + <stop + style="stop-color:#212a3a;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop5455" /> + <stop + style="stop-color:#404e67;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop5457" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2937" + id="linearGradient4276" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.245729,0,0,0.245729,25.55056,660.77045)" + x1="338.14404" + y1="668.3009" + x2="266.215" + y2="702.89276" /> + <linearGradient + id="linearGradient5460"> + <stop + style="stop-color:#212a3a;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop5462" /> + <stop + style="stop-color:#404e67;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop5464" /> + </linearGradient> + <linearGradient + y2="702.89276" + x2="266.215" + y1="668.3009" + x1="338.14404" + gradientTransform="matrix(0.245729,0,0,0.245729,25.55056,660.77045)" + gradientUnits="userSpaceOnUse" + id="linearGradient5486" + xlink:href="#linearGradient2937" + inkscape:collect="always" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.35" + inkscape:cx="375" + inkscape:cy="520" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="798" + inkscape:window-height="690" + inkscape:window-x="20" + inkscape:window-y="20" + inkscape:window-maximized="0" /> + <metadata + id="metadata5493"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <g + id="g4202" + transform="matrix(4.2070673,0,0,4.2070673,-152.93197,-3059.7049)"> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="csssssssssssssssssssssssssssssssssccssssssssssccsssssssssccsssssssssscssssssssssccssssssscssssssssc" + id="path4204" + d="m 52.51386,963.95968 c -0.59762,-1.31419 -1.08659,-2.49776 -1.08659,-2.63031 0,-0.13252 -2.08061,-11.07486 -2.31769,-13.88681 -1.03506,-12.27691 -2.66752,-13.45265 -2.21175,-24.39857 0.2761,-6.63061 -0.64392,-8.89235 1.31344,-14.31478 4.03102,-11.16694 6.98662,-15.56085 12.2251,-18.17414 4.24974,-2.12004 8.23695,-1.83207 11.97929,0.86518 0.98634,0.71092 4.29577,2.95048 7.35426,4.97678 3.05851,2.02634 6.69103,4.48296 8.07229,5.45919 1.38125,0.97628 3.68511,2.38497 5.11972,3.13046 2.53058,1.3151 2.62411,1.3351 3.13729,0.67104 1.12761,-1.45907 3.84947,-5.55395 5.32124,-7.50854 7.37209,-9.79052 0.42914,-8.70222 -1.30592,-9.21291 -2.72783,-0.80294 -3.87684,-1.97938 -6.42642,-4.96758 -5.92163,-6.94035 -8.72797,-14.66214 -9.14262,-24.20339 -0.48154,-11.07972 0.63266,-20.01531 5.49789,-25.10088 2.08527,-2.17973 6.49949,-5.34524 10.53505,-7.55495 3.4177,-1.87139 24.37883,-5.78232 26.21837,-4.96975 0.91898,0.40593 -3.63796,-11.63862 -1.01552,-27.29896 0.52096,-3.11103 4.05934,-12.73788 4.43322,-13.39298 0.92313,-1.61744 16.13503,-6.82395 20.46221,-9.36515 4.83486,-2.83935 15.29074,-9.67883 16.07843,-14.76568 1.73099,-11.1786 2.03825,-15.9556 2.75981,-16.37531 1.07388,-0.62465 8.25251,14.17566 3.39352,28.13116 -0.95893,2.75414 -5.53206,9.14865 -7.57975,11.8233 -1.47452,1.92602 1.72775,2.82621 3.56985,5.60679 1.67534,2.52882 2.77675,8.71086 2.9918,11.91416 0.21959,3.27101 -0.81543,9.98235 -1.7425,11.2988 -0.37549,0.53325 -0.52929,1.05709 -0.34387,1.17136 0.18449,0.11368 1.43417,-0.0352 2.77708,-0.33076 1.34289,-0.29559 4.25366,-0.7663 6.46837,-1.046 3.94259,-0.49787 4.08384,-0.49095 6.7595,0.33213 4.01386,1.23476 23.53789,5.95177 11.07947,60.50742 -4.12753,18.07453 -23.38873,41.92489 -25.8106,40.0783 l -5.96407,-4.5474 -6.87325,10.19022 c -3.50798,3.60293 -7.29065,7.08029 -9.52167,8.75312 -3.52051,2.63972 -10.56453,6.79799 -11.51562,6.79799 -0.24492,0 -1.63251,0.56931 -3.08354,1.26516 -4.19508,2.01176 -10.47851,3.66081 -17.13429,4.09795 -25.77135,1.66956 -15.93975,-1.44192 -37.27858,-11.77515 -1.68316,-0.81506 -5.55753,3.29679 -10.22719,7.54571 -4.98524,4.53606 -7.60226,7.98846 -9.57996,12.63792 -0.66947,1.57389 -1.71168,3.98838 -2.31602,5.36552 -1.64444,3.74731 -2.99719,8.93229 -3.19818,12.25814 -0.0983,1.62685 -0.31514,3.04193 -0.48187,3.14469 -0.16673,0.10272 -0.7921,-0.88841 -1.38973,-2.20249 z m 28.33197,-45.90886 c 3.30313,-0.83536 3.66477,-1.01966 7.21765,-3.67825 2.54576,-1.90501 4.12321,-5.3446 4.8004,-5.64508 4.4324,-1.96673 -3.3083,-3.73691 -6.20226,-5.68891 -2.89398,-1.95202 -6.65724,-3.39508 -9.2209,-5.3521 -2.56367,-1.95698 -4.78356,-3.48279 -4.93308,-3.39068 -0.14952,0.0921 -0.27471,1.40551 -0.27821,2.91861 -0.01023,4.41323 -0.6021,8.84164 -1.42935,10.69448 -0.42105,0.94301 -0.84611,2.76087 -0.94461,4.03969 -0.22816,2.96221 0.46109,4.38683 2.91271,6.02036 2.06595,1.3766 2.92385,1.38532 8.07765,0.0819 z m 119.70575,-83.58495 c -1.07558,-7.22468 -0.18498,-17.16053 -5.81444,-20.77728 -12.98767,-8.34415 -14.4135,-0.0696 -15.21021,1.75899 -1.31072,3.0083 -2.11753,5.46892 -1.12273,8.7761 3.05641,10.16086 6.96643,19.15821 8.82255,26.38029 2.13021,8.28856 4.47797,13.53077 4.71288,20.02986 0.16678,4.61378 0.12302,5.09887 -0.55601,6.16474 -0.9655,1.51542 -15.55215,5.22752 -22.89767,7.39176 -2.52211,0.74311 -0.28804,6.12175 -0.57696,7.89239 -0.28892,1.77059 -4.23701,11.66713 -2.96729,13.65682 12.52923,19.63374 40.23506,-40.20634 35.60988,-71.27367 z m -26.98831,48.27201 c 1.95984,-0.47131 3.79219,-1.04626 4.0719,-1.27773 0.27971,-0.23143 0.99066,-0.38419 1.57991,-0.33941 1.05432,0.0801 5.18218,-1.21949 5.4995,-1.73148 0.0894,-0.14415 3.7722,-2.06556 3.0355,-2.55357 -0.73674,-0.48803 -15.13237,-11.07005 -17.19649,-12.14627 -23.77004,-12.39364 -36.26526,-13.24685 -44.11407,-11.66556 -13.44457,2.70866 -25.05657,9.52598 -26.45346,11.20755 -0.42178,0.50774 21.04913,-6.66097 36.28977,0.87085 2.81591,1.39161 8.62965,3.78304 13.00058,8.46269 3.99268,4.27467 7.63329,8.79778 10.49869,9.5617 3.10695,0.82834 9.47337,0.64882 13.78817,-0.38877 z m -28.65731,-51.09687 c 7.52619,-1.317 19.18627,-16.95235 18.27894,-18.41606 -0.12276,-0.19808 2.25527,-4.14459 1.86904,-4.22161 -14.0842,-2.80833 -13.74485,-16.83242 -13.94793,-16.95753 -0.20308,-0.12514 -20.76525,9.71022 -25.50376,11.75869 -4.02092,1.73825 0.57503,12.10208 2.99929,18.53437 1.07855,2.86172 7.01744,6.67785 9.40766,8.23365 2.82773,1.84055 6.25378,1.181 6.89676,1.06849 z m 16.21969,-47.71727 c 4.06405,-3.20289 14.88802,-19.23422 13.73961,-25.73988 -4.67874,-26.5048 -6.69569,-10.0962 -6.99598,-7.73088 -0.12436,0.97963 -0.47868,3.14936 -0.7874,4.82161 -0.30868,1.67227 -0.70224,4.08678 -0.87456,5.36555 -0.1723,1.2788 -0.64865,3.53233 -1.05855,5.00784 -0.4099,1.47554 -1.05724,3.92831 -1.43856,5.45066 -0.38128,1.52232 -1.66486,5.27236 -2.85234,8.33339 -1.18749,3.06104 -2.15908,5.63846 -2.15908,5.72759 0,0.447 0.82393,0.0274 2.42686,-1.23588 z" + style="fill:url(#linearGradient4242);fill-opacity:1" /> + <path + sodipodi:nodetypes="ccssc" + id="path4206" + d="m 53.57922,963.11994 c 6.35309,-26.31992 12.10112,-29.26957 27.22751,-39.0261 -3.32781,-1.89079 -11.51745,-8.1594 -11.49606,-11.49606 0.05726,-9.74197 1.6676,-26.72201 -9.07584,-19.66431 -20.38515,13.39167 -13.0087,55.96766 -6.65561,70.18647 z" + style="fill:url(#linearGradient4244);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + sodipodi:nodetypes="ccccsc" + id="path4208" + d="m 75.93257,920.7226 c 8.98173,6.78619 16.91991,12.78559 22.55412,15.96751 54.94138,2.77762 68.66033,-27.59386 69.6583,-52.49321 -4.89006,0.22454 -13.22311,-0.97302 -17.71397,-7.7405 -11.21439,3.68089 -45.16617,14.00314 -45.75692,16.32304 -3.06467,12.03515 -12.17523,21.75574 -28.74153,27.94316 z" + style="fill:url(#linearGradient4246);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="cssssss" + id="path4210" + d="m 171.27539,910.58112 c 33.18508,-24.69965 28.91369,-74.159 29.44979,-76.69151 1.36299,-6.43866 -6.64955,-28.25155 -16.27383,-24.24947 -16.02424,6.66336 11.2767,44.44456 7.61407,65.1661 -0.76342,4.31907 -13.98948,7.50294 -22.98022,8.89864 -1.03689,0.16096 -0.1163,14.0955 -4.62673,20.50927 -0.64571,0.91818 6.21023,6.81854 6.81692,6.36697 z" + style="fill:url(#linearGradient4248);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + sodipodi:nodetypes="ccc" + id="path4212" + d="m 175.90353,907.19115 c 42.49251,-41.74886 20.98218,-116.27813 6.14636,-94.50993 20.37687,-4.1207 23.61854,64.2671 -6.14636,94.50993 z" + style="fill:url(#linearGradient4250);fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="csszs" + id="path4214" + d="m 95.21705,907.77562 c 0.78602,-1.06057 -13.88152,-6.08284 -22.74639,-14.06472 -0.98292,-0.88501 -1.14144,12.91242 -2.0703,18.66551 -0.57712,3.57451 5.4925,7.17351 6.87977,7.62184 1.15081,0.37191 14.71014,-7.86884 17.93692,-12.22263 z" + style="fill:url(#linearGradient4252);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + sodipodi:nodetypes="ccccc" + id="path4216" + d="m 83.58536,868.01334 c -5.099007,-25.84347 4.179267,-41.03939 41.3579,-46.37791 0.18024,0.56879 41.31909,-13.25606 55.79189,-13.35001 -3.92283,6.23323 0.0433,21.62385 4.80916,34.27609 0,0 -34.8276,9.08768 -101.95895,25.45183 z" + style="fill:url(#linearGradient4254);fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="csssss" + id="path4218" + d="m 101.65537,863.89391 c 4.41182,-1.58073 17.00722,-5.39035 32.05421,-0.1519 10.3057,3.58781 16.2195,12.63312 20.66816,16.112 10.4789,8.19457 29.82289,-0.90843 33.32172,-0.85341 1.43753,0.0226 -25.96694,-24.60193 -46.62844,-25.8478 -27.77538,-1.67482 -45.11147,12.78188 -39.41565,10.74111 z" + style="fill:url(#linearGradient4256);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="csss" + id="path4220" + d="m 169.42704,741.43522 c -0.1528,8.40398 -2.79669,28.46338 -11.30718,42.1727 -3.89274,6.27072 14.52008,-8.27661 16.50236,-20.78075 1.09029,-6.8775 -5.06881,-28.08959 -5.19518,-21.39195 z" + style="fill:url(#linearGradient4258);fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="cssscsc" + id="path4222" + d="m 141.79058,833.10697 c 9.23931,-4.71783 17.65654,-10.92192 22.99128,-22.44259 0.9032,-1.9505 -4.39968,-0.0586 -8.47555,-5.84433 -4.0357,-5.72867 -3.08341,-11.54295 -6.54001,-11.07789 -10.80021,1.4531 -25.20082,11.63758 -25.20082,11.63758 0,0 0.82824,11.14408 3.74751,15.67372 6.01898,9.33928 13.47759,12.05351 13.47759,12.05351 z" + style="fill:url(#linearGradient4260);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + sodipodi:nodetypes="ccc" + id="path4224" + d="m 156.09152,803.78111 c 2.72579,9.88879 17.87347,8.09668 14.70668,-11.15251 -1.36528,1.99619 -4.77608,12.95694 -14.70668,11.15251 z" + style="opacity:0.55223843;fill:url(#linearGradient4262);fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + sodipodi:nodetypes="csccsc" + id="path4226" + d="m 140.48504,832.28297 c -5.10096,-3.46887 -9.50419,-7.78444 -12.32504,-12.34966 -2.82085,-4.56521 -4.0593,-27.84724 0.68685,-33.63375 2.60826,-6.3637 11.84132,-12.51424 22.09721,-15.2308 -19.49494,22.60506 -13.17796,56.86685 4.07359,53.53526 0.86206,-0.16648 -12.82587,7.73026 -14.53261,7.67895 z" + style="fill:url(#linearGradient4264);fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + sodipodi:nodetypes="ccc" + id="path4228" + d="m 72.32239,893.02911 c 3.80886,2.81881 20.23882,15.53557 23.85984,13.52306 -8.41018,20.55895 -30.55349,3.14238 -23.85984,-13.52306 z" + style="fill:url(#linearGradient4266);fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="ccsssccssscccsssscscsccsssssccssssssccsssccssssccsscssssssssssssccsssccssssssccssssssssssssscsssscssscssc" + id="path4230" + d="m 140.05745,777.56053 c -3.94728,2.30056 -8.69302,4.87373 -9.63531,7.20019 -3.16217,6.64336 -4.34745,18.56552 -3.38465,17.88089 9.38401,-6.67285 20.24871,-8.52283 24.20205,-12.0967 11.71489,-10.59045 16.26287,-32.48353 13.80119,-29.2383 -7.96915,10.50564 -20.9111,13.88057 -24.98328,16.25392 z m -61.4085,147.01185 c 0,0 -11.08091,-7.66436 -10.87669,-10.1233 1.697,-20.4327 -1.92942,-21.625 -3.75706,-21.40828 -2.20803,0.26184 -13.6822,7.50553 -15.92058,27.95835 -1.62427,14.84147 4.24013,38.0296 5.13347,39.28426 4.62276,-12.42378 2.81919,-22.42331 25.42086,-35.71103 z m 121.05779,-90.52225 c -0.55133,-15.31772 -9.77382,-25.84979 -16.03746,-23.38322 -2.65737,1.04645 -4.4415,8.17887 -3.50846,12.60125 0.82755,3.92256 6.46634,19.10152 6.87179,20.38471 0.95868,3.03418 7.43087,21.62978 6.28035,30.56471 -1.00846,7.8316 -23.7097,10.5413 -23.7097,10.5413 0,0 -0.38149,6.37449 -1.16407,10.68177 -0.96202,5.29492 -2.86934,9.45033 -2.86934,9.45033 0,0 4.94251,4.60429 5.14224,4.59918 0.19973,-0.005 31.10844,-16.7127 28.99465,-75.44003 z m -23.69666,47.44964 c 1.59781,-0.44722 11.03201,-2.94175 10.52638,-3.27341 -3.50095,-2.2964 -7.48504,-5.18714 -14.1578,-10.37693 -37.04552,-28.81248 -70.69468,-4.54502 -70.03165,-4.76554 6.15153,-2.04594 12.64754,-3.20211 21.67232,-2.5993 7.26918,0.48555 18.69619,4.17029 28.70607,16.10244 3.72328,4.43828 7.94798,7.4497 23.28468,4.91274 z M 159.4851,818.95922 c 1.12085,-0.96962 5.01656,-8.31336 4.31505,-8.48395 -9.83076,-2.39074 -10.78824,-6.74031 -11.75043,-11.4727 -0.90123,-4.43254 -0.76219,-5.06465 -2.62452,-4.44953 -15.04703,4.96997 -19.20919,7.70131 -21.51157,9.61214 -3.60666,2.99331 -1.0768,11.03634 0.33349,14.23298 1.96563,4.4554 9.19232,12.51758 12.55437,13.16681 4.90391,0.94697 16.49344,-9.09974 18.68361,-12.60575 z m 10.93597,-27.14087 c -0.81548,-3.33524 -3.43538,-7.63066 -4.13349,-7.63066 -0.65744,0 -7.61876,5.38666 -9.4168,7.26354 -4.08086,4.25969 -2.09206,11.97893 2.43483,14.62671 7.66207,4.48154 13.28874,-5.37111 11.11546,-14.25959 z m -5.77705,-12.75642 c 3.35221,-3.34862 7.80844,-8.84532 8.99344,-17.19839 0.46443,-3.27384 0.73411,-6.15364 -1.30205,-12.62655 -0.47191,-1.50022 -1.90642,-5.8148 -1.96005,-5.24636 -1.05907,11.22382 -2.61083,23.68653 -9.93627,36.93167 -2.29934,4.15745 -1.06286,3.40174 4.20493,-1.86037 z m -78.6191,66.84814 c -3.99349,16.75103 6.58927,38.75062 15.16215,40.00456 8.28707,1.21213 32.04487,-5.96093 44.50484,-9.42568 3.26456,-0.90778 5.02074,-0.43427 -2.20131,-6.48455 -11.3226,-7.69755 -20.46099,-8.68868 -29.5776,-7.65392 -10.05581,1.14135 -17.59102,4.11772 -16.88606,3.52743 4.61053,-3.86056 12.8225,-10.76401 28.68812,-13.89013 6.89585,-1.35875 17.53788,-1.47808 30.38613,3.54005 15.93675,6.2244 24.23739,15.45542 30.97531,18.58381 2.39935,1.11401 3.25644,0.59604 4.20446,-2.18817 1.5883,-4.66452 -8.06663,-33.78938 -11.56456,-42.28236 -5.33802,-12.96073 0.89004,-19.15557 -0.47125,-18.85551 -6.6027,1.45543 -12.42508,5.69932 -17.306,10.06932 -11.93084,10.68198 -19.20273,12.95753 -20.28189,12.86579 -3.40727,-0.28972 -9.78249,-6.32022 -12.09877,-9.38241 -1.47795,-1.95389 -27.92949,3.15177 -35.72972,9.92827 -0.17845,0.15503 -6.19704,4.01498 -7.80385,11.6435 z M 77.5498,918.8389 c 8.72435,-3.6605 17.26585,-11.43939 16.52709,-11.56787 -4.52939,-0.78772 -21.23379,-12.23383 -21.22226,-12.11514 0.57378,5.90697 -0.71357,11.21473 -1.30092,17.06944 -0.24494,2.44161 3.00975,6.22428 5.99609,6.61357 z m 28.15174,-25.60492 c -1.66901,3.72058 -3.41156,18.3512 -27.53028,27.73991 -0.69864,0.27195 20.21205,14.57036 21.35002,14.62032 69.0544,3.03144 68.46916,-49.55437 67.5526,-50.88016 -0.13265,-0.19188 -6.03889,0.0138 -10.61352,-2.15692 -0.34887,-0.1655 -3.45204,-1.76502 -5.30227,-4.17423 -0.62757,-0.81715 -0.72524,-1.26122 -3.05074,-0.58541 -10.76269,3.12776 -42.89539,14.65696 -42.40581,15.43649 z M 84.18935,867.5847 c -12.33127,-43.08647 30.94329,-45.08535 37.80451,-46.74439 5.30593,-1.28297 4.14977,-1.78189 3.03089,-6.80033 -1.57099,-7.04629 -1.0816,-13.18841 0.26513,-19.77217 1.27351,-6.2258 1.93035,-9.37394 4.61998,-12.49571 2.16789,-2.51621 14.38379,-8.27049 17.4121,-9.72295 12.90529,-6.18974 17.83586,-12.99328 19.27422,-18.34465 1.014,-3.77255 2.49779,-13.07094 1.83081,-19.71727 -0.16416,-1.6359 0.89135,0.92745 6.14205,17.24159 2.68293,8.33593 1.36177,18.34502 -7.09994,27.38172 -1.14918,1.22726 -0.59185,1.4703 0.95354,4.02388 3.21078,5.30554 4.98573,11.93993 4.48566,16.76662 -0.40972,3.95432 -2.10008,7.6934 0.31754,7.40286 0.34951,-0.042 11.02834,-1.65875 18.33848,2.98757 4.95048,3.14653 12.00258,9.17808 10.17204,34.37342 -4.00842,55.17187 -30.9649,67.17892 -31.15387,67.18542 -0.4563,0.0156 -5.49956,-5.22074 -5.79806,-4.60407 -15.45677,31.93103 -47.3506,30.78387 -65.13826,31.11951 -3.55635,0.0671 -18.34444,-12.38469 -19.59088,-11.53286 -15.74294,10.75882 -20.11352,13.44589 -26.18374,40.94381 -0.23264,-0.43595 -8.41803,-14.95561 -8.07826,-44.15673 0.27838,-23.92523 13.34923,-35.21616 19.15997,-34.56498 7.05422,0.79055 10.59443,4.47084 20.52923,10.99795 1.77335,1.16509 8.0388,4.95377 9.46457,4.91926 3.5521,-0.0838 5.97534,-6.60969 6.55509,-10.83484 0.58475,-4.26168 1.15009,-3.23167 -2.17605,-4.37633 -4.1934,-1.44311 -11.42652,-9.296 -15.13675,-21.67633 z" + style="fill:#2c3b54;fill-opacity:1;fill-rule:nonzero;stroke:none" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="czssss" + id="path4232" + d="m 106.11345,892.83442 c 6.47531,-3.53335 43.23312,-15.02538 43.56314,-15.74675 0.24089,-0.52655 -43.11579,17.30875 -52.93537,10.69734 -0.59185,-0.39849 2.29344,1.72127 4.90219,2.25652 0.18326,0.0376 0.17092,6.89208 -2.30068,10.77041 -0.6931,1.08758 5.26729,-7.15715 6.77072,-7.97752 z" + style="fill:url(#linearGradient4268);fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="csss" + id="path4234" + d="m 166.00752,784.18642 c -4.02929,2.81265 -9.5846,6.74255 -10.72057,9.77333 -0.66996,1.78745 -1.12247,-4.99153 3.45182,-9.03009 2.57716,-2.27533 8.09315,-1.31871 7.26875,-0.74324 z" + style="fill:url(#linearGradient4270);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="csss" + id="path4236" + d="m 160.58968,806.82846 c 4.57007,1.3627 8.10001,-1.42847 10.03503,-7.4422 0.22874,-0.71087 -0.56553,5.2666 -3.40562,7.48857 -2.70767,2.11837 -7.59288,-0.33365 -6.62941,-0.0464 z" + style="fill:url(#linearGradient4272);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="cscss" + id="path4238" + d="m 172.18948,813.03639 c 6.47531,-3.53335 13.10498,-2.9926 18.75586,-2.73805 3.75103,0.16896 -7.06591,-4.20527 -19.35477,-3.52147 -1.31254,1.11755 -5.21285,7.63595 -10.70973,14.23704 -0.82526,0.99104 9.80521,-7.15715 11.30864,-7.97752 z" + style="fill:url(#linearGradient4274);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + <path + inkscape:export-ydpi="19.25" + inkscape:export-xdpi="19.25" + inkscape:export-filename="/home/emcho/storage/images/sc_logo/sc_logo136x203.png" + sodipodi:nodetypes="csccscs" + id="path4240" + d="m 110.55877,827.01111 c 3.80202,-0.78266 8.57073,-2.07478 11.72698,-2.39299 2.63172,-0.26532 5.92925,-1.74739 8.46259,0.97744 -1.41052,-1.93357 -4.10815,-5.83882 -4.94871,-8.39667 0.76528,3.00553 -2.65492,3.42931 -3.50504,3.56438 -19.11709,3.02037 -30.61745,8.16849 -36.41981,17.74206 10.99033,-8.50263 23.96641,-11.34651 24.68399,-11.49422 z" + style="fill:url(#linearGradient5486);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" /> + </g> + </g> +</svg> diff --git a/pix/landchad.gif b/pix/landchad.gif Binary files differnew file mode 100644 index 0000000..302cd26 --- /dev/null +++ b/pix/landchad.gif diff --git a/pix/matrix.svg b/pix/matrix.svg new file mode 100644 index 0000000..9a8b8dd --- /dev/null +++ b/pix/matrix.svg @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="793.322px" height="340.809px" viewBox="0 0 793.322 340.809" fill="#fff" enable-background="new 0 0 793.322 340.809" + xml:space="preserve"> +<path d="M10.875,9.711v321.386h23.13v7.711H1.999V2.001h32.006v7.71H10.875z"/> +<path d="M99.988,111.595v16.264h0.463c4.338-6.191,9.563-10.998,15.684-14.406c6.117-3.402,13.129-5.11,21.027-5.11 + c7.588,0,14.521,1.475,20.793,4.415c6.274,2.945,11.038,8.131,14.291,15.567c3.56-5.265,8.4-9.913,14.521-13.94 + c6.117-4.025,13.358-6.042,21.724-6.042c6.351,0,12.234,0.776,17.66,2.325c5.418,1.549,10.065,4.027,13.938,7.434 + c3.869,3.41,6.889,7.863,9.062,13.357c2.167,5.504,3.253,12.122,3.253,19.869v80.385H219.41v-68.074 + c0-4.025-0.154-7.82-0.465-11.385c-0.313-3.56-1.161-6.656-2.555-9.293c-1.395-2.631-3.45-4.724-6.157-6.274 + c-2.711-1.543-6.391-2.322-11.037-2.322s-8.403,0.896-11.269,2.671c-2.868,1.784-5.112,4.109-6.737,6.971 + c-1.626,2.869-2.711,6.12-3.252,9.762c-0.545,3.638-0.814,7.318-0.814,11.035v66.91h-32.991v-67.375c0-3.562-0.081-7.087-0.23-10.57 + c-0.158-3.487-0.814-6.7-1.978-9.645c-1.162-2.94-3.099-5.304-5.809-7.088c-2.711-1.775-6.699-2.671-11.965-2.671 + c-1.551,0-3.603,0.349-6.156,1.048c-2.556,0.697-5.036,2.016-7.435,3.949c-2.404,1.938-4.454,4.726-6.158,8.363 + c-1.705,3.642-2.556,8.402-2.556,14.287v69.701h-32.99V111.595H99.988z"/> +<path d="M273.544,129.255c3.405-5.113,7.744-9.215,13.012-12.316c5.264-3.097,11.186-5.303,17.771-6.621 + c6.582-1.315,13.205-1.976,19.865-1.976c6.042,0,12.158,0.428,18.354,1.277c6.195,0.855,11.85,2.522,16.962,4.997 + c5.111,2.477,9.292,5.926,12.546,10.338c3.253,4.414,4.879,10.262,4.879,17.543v62.494c0,5.428,0.31,10.611,0.931,15.567 + c0.615,4.959,1.701,8.676,3.251,11.153H347.66c-0.621-1.86-1.126-3.755-1.511-5.693c-0.39-1.933-0.661-3.908-0.813-5.923 + c-5.267,5.422-11.465,9.217-18.585,11.386c-7.127,2.163-14.407,3.251-21.842,3.251c-5.733,0-11.077-0.698-16.033-2.09 + c-4.958-1.395-9.293-3.562-13.01-6.51c-3.718-2.938-6.622-6.656-8.713-11.147s-3.138-9.84-3.138-16.033 + c0-6.813,1.199-12.43,3.604-16.84c2.399-4.417,5.495-7.939,9.295-10.575c3.793-2.632,8.129-4.607,13.01-5.923 + c4.878-1.315,9.795-2.358,14.752-3.137c4.957-0.772,9.835-1.393,14.638-1.857c4.801-0.466,9.062-1.164,12.779-2.093 + c3.718-0.929,6.658-2.282,8.829-4.065c2.165-1.781,3.172-4.375,3.02-7.785c0-3.56-0.58-6.389-1.742-8.479 + c-1.161-2.09-2.711-3.719-4.646-4.88c-1.937-1.161-4.183-1.936-6.737-2.325c-2.557-0.382-5.309-0.58-8.248-0.58 + c-6.506,0-11.617,1.395-15.335,4.183c-3.716,2.788-5.889,7.437-6.506,13.94h-32.991 + C268.199,140.794,270.132,134.363,273.544,129.255z M338.713,175.838c-2.09,0.696-4.337,1.275-6.736,1.741 + c-2.402,0.465-4.918,0.853-7.551,1.161c-2.635,0.313-5.268,0.698-7.899,1.163c-2.48,0.461-4.919,1.086-7.317,1.857 + c-2.404,0.779-4.495,1.822-6.274,3.138c-1.784,1.317-3.216,2.985-4.3,4.994c-1.085,2.014-1.626,4.571-1.626,7.668 + c0,2.94,0.541,5.422,1.626,7.431c1.084,2.017,2.558,3.604,4.416,4.765s4.025,1.976,6.507,2.438c2.475,0.466,5.031,0.698,7.665,0.698 + c6.505,0,11.537-1.082,15.103-3.253c3.561-2.166,6.192-4.762,7.899-7.785c1.702-3.019,2.749-6.072,3.137-9.174 + c0.384-3.097,0.58-5.576,0.58-7.434v-12.316C342.547,174.173,340.805,175.14,338.713,175.838z"/> +<path d="M463.825,111.595v22.072h-24.161v59.479c0,5.573,0.928,9.292,2.788,11.149c1.856,1.859,5.576,2.788,11.152,2.788 + c1.859,0,3.638-0.076,5.343-0.232c1.703-0.152,3.33-0.388,4.878-0.696v25.557c-2.788,0.465-5.887,0.773-9.293,0.931 + c-3.407,0.149-6.737,0.23-9.99,0.23c-5.111,0-9.953-0.35-14.521-1.048c-4.571-0.695-8.597-2.047-12.081-4.063 + c-3.486-2.011-6.236-4.88-8.248-8.597c-2.016-3.714-3.021-8.595-3.021-14.639v-70.859h-19.98v-22.072h19.98V75.583h32.992v36.012 + H463.825z"/> +<path d="M510.988,111.595V133.9h0.465c1.546-3.72,3.636-7.163,6.272-10.341c2.634-3.172,5.652-5.885,9.06-8.131 + c3.405-2.242,7.047-3.985,10.923-5.228c3.868-1.237,7.898-1.859,12.081-1.859c2.168,0,4.566,0.39,7.202,1.163v30.67 + c-1.551-0.312-3.41-0.584-5.576-0.814c-2.17-0.233-4.26-0.35-6.274-0.35c-6.041,0-11.152,1.01-15.332,3.021 + c-4.182,2.014-7.55,4.761-10.107,8.247c-2.555,3.487-4.379,7.55-5.462,12.198c-1.083,4.645-1.625,9.682-1.625,15.102v54.133h-32.991 + V111.595H510.988z"/> +<path d="M570.93,93.007V65.824h32.994v27.183H570.93z M603.924,111.595v120.117H570.93V111.595H603.924z"/> +<path d="M621.115,111.595h37.637l21.144,31.365l20.911-31.365h36.476l-39.496,56.226l44.377,63.892h-37.64l-25.093-37.87 + l-25.094,37.87h-36.938l43.213-63.193L621.115,111.595z"/> +<path d="M782.443,331.097V9.711h-23.13v-7.71h32.008v336.807h-32.008v-7.711H782.443z"/> +</svg> diff --git a/pix/peertube-login.jpg b/pix/peertube-login.jpg Binary files differnew file mode 100644 index 0000000..d191cc4 --- /dev/null +++ b/pix/peertube-login.jpg diff --git a/pix/peertube.svg b/pix/peertube.svg new file mode 100644 index 0000000..38992a5 --- /dev/null +++ b/pix/peertube.svg @@ -0,0 +1,118 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + viewBox="2799 -911 16 22" + version="1.1" + id="svg13" + sodipodi:docname="logo.svg" + width="16" + height="22" + inkscape:version="0.92.2 5c3e80d, 2017-08-06"> + <metadata + id="metadata17"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1916" + inkscape:window-height="1040" + id="namedview15" + showgrid="false" + inkscape:zoom="29.790476" + inkscape:cx="-1.1827326" + inkscape:cy="12.088" + inkscape:window-x="0" + inkscape:window-y="18" + inkscape:window-maximized="0" + inkscape:current-layer="svg13" /> + <defs + id="defs4"> + <style + id="style2"> + .cls-3 { + fill: #211f20; + } + + .cls-4 { + fill: #737373; + } + + .cls-5 { + fill: #f1680d; + } + + .cls-6 { + fill: rgba(255, 255, 255, 0); + } + </style> + </defs> + <g + id="Artboard_1" + data-name="Artboard – 1" + class="cls-1" + transform="translate(0.03356777,-1.9929667)"> + <g + id="Symbol_3_1" + data-name="Symbol 3 – 1" + transform="translate(2759,-975)"> + <g + id="Group_44" + data-name="Group 44" + transform="translate(0,2.333)"> + <path + id="Path_4" + data-name="Path 4" + class="cls-3" + d="m -949,-500 v 10.667 l 8,-5.333" + transform="translate(989,564)" + inkscape:connector-curvature="0" + style="fill:#211f20" /> + <path + id="Path_5" + data-name="Path 5" + class="cls-4" + d="m -949,-500 v 10.667 l 8,-5.333" + transform="translate(989,574.667)" + inkscape:connector-curvature="0" + style="fill:#737373" /> + <path + id="Path_6" + data-name="Path 6" + class="cls-5" + d="m -949,-500 v 10.667 l 8,-5.333" + transform="translate(997,569.333)" + inkscape:connector-curvature="0" + style="fill:#f1680d" /> + <path + id="Path_7" + data-name="Path 7" + class="cls-6" + d="M 0,0 V 10.667 L 8,5.333 Z" + transform="rotate(180,24,40)" + inkscape:connector-curvature="0" + style="fill:rgba(255,255,255,0)" /> + </g> + </g> + </g> +</svg> diff --git a/pix/pleroma.svg b/pix/pleroma.svg new file mode 100644 index 0000000..c92da7c --- /dev/null +++ b/pix/pleroma.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="128" height="128" version="1.1" viewBox="0 0 33.866 33.866" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(.1014 0 0 .1014 -9.0749 -9.0242)"><g fill="#fba457" stroke-width="0"><path transform="matrix(2.6094 0 0 2.6094 89.5 89)" d="m33.916 0a9.9641 9.9641 0 0 0-9.9648 9.9648v118.04h31.809v-128h-21.844z"/><path transform="matrix(2.6094 0 0 2.6094 89.5 89)" d="m71.855 0v64h22.229a9.9641 9.9641 0 0 0 9.9648-9.9648v-54.035h-32.193z"/><path transform="matrix(2.6094 0 0 2.6094 89.5 89)" d="m71.855 96.191v31.809h22.229a9.9641 9.9641 0 0 0 9.9648-9.9648v-21.844h-32.193z"/></g></g></svg> diff --git a/pix/webrtc.svg b/pix/webrtc.svg new file mode 100644 index 0000000..582a506 --- /dev/null +++ b/pix/webrtc.svg @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg width="256px" height="249px" viewBox="0 0 256 249" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid"> + <g> + <path d="M142.076578,191.086817 C142.076578,159.280656 116.294759,133.494615 84.4885969,133.494615 C52.6782136,133.494615 26.896394,159.280656 26.896394,191.086817 C26.896394,222.892979 52.6782136,248.67902 84.4885969,248.67902 C116.294759,248.67902 142.076578,222.892979 142.076578,191.086817" fill="#FF6600" transform="translate(84.486486, 191.086817) scale(1, -1) translate(-84.486486, -191.086817) "></path> + <path d="M255.979703,110.454356 C255.979703,78.652416 230.197884,52.862153 198.391722,52.862153 C166.581339,52.862153 140.799519,78.652416 140.799519,110.454356 C140.799519,142.260518 166.581339,168.050781 198.391722,168.050781 C230.197884,168.050781 255.979703,142.260518 255.979703,110.454356" fill="#FFCC00" transform="translate(198.389611, 110.456467) scale(1, -1) translate(-198.389611, -110.456467) "></path> + <path d="M115.200498,109.176452 C115.200498,77.3745125 89.4186786,51.5842495 57.6082953,51.5842495 C25.8063553,51.5842495 0.0203140271,77.3745125 0.0203140271,109.176452 C0.0203140271,140.982614 25.8063553,166.772877 57.6082953,166.772877 C89.4186786,166.772877 115.200498,140.982614 115.200498,109.176452" fill="#0089CC" transform="translate(57.610406, 109.178563) scale(1, -1) translate(-57.610406, -109.178563) "></path> + <path d="M230.385749,191.086817 C230.385749,159.280656 204.603929,133.494615 172.789324,133.494615 C140.987384,133.494615 115.201343,159.280656 115.201343,191.086817 C115.201343,222.892979 140.987384,248.67902 172.789324,248.67902 C204.603929,248.67902 230.385749,222.892979 230.385749,191.086817" fill="#009939" transform="translate(172.793546, 191.086817) scale(1, -1) translate(-172.793546, -191.086817) "></path> + <path d="M185.592001,57.9843213 C185.592001,26.1781597 159.805959,0.392118349 127.999798,0.392118349 C96.1936359,0.392118349 70.4075946,26.1781597 70.4075946,57.9843213 C70.4075946,89.790483 96.1936359,115.576524 127.999798,115.576524 C159.805959,115.576524 185.592001,89.790483 185.592001,57.9843213" fill="#BF0000" transform="translate(127.999798, 57.984321) scale(1, -1) translate(-127.999798, -57.984321) "></path> + <path d="M140.798675,57.9788331 C140.798675,56.76721 140.904217,55.580917 140.980207,54.3861807 C166.525612,60.2796505 185.590734,83.1189569 185.590734,110.454356 C185.590734,111.665979 185.485192,112.856494 185.409202,114.05123 C159.863796,108.153539 140.798675,85.3142322 140.798675,57.9788331" fill="#FC0007" transform="translate(163.194704, 84.218705) scale(1, -1) translate(-163.194704, -84.218705) "></path> + <path d="M148.39686,162.570614 C158.322038,145.219495 176.973434,133.495881 198.394255,133.495881 C207.124696,133.495881 215.369643,135.496959 222.787141,138.975626 C212.866185,156.326744 194.214789,168.050358 172.789746,168.050358 C164.059305,168.050358 155.814358,166.049281 148.39686,162.570614" fill="#1CD306" transform="translate(185.592001, 150.773120) scale(1, -1) translate(-185.592001, -150.773120) "></path> + <path d="M115.200498,191.086817 C115.200498,177.015947 120.258075,164.139813 128.642338,154.138646 C137.018157,164.139813 142.075734,177.015947 142.075734,191.086817 C142.075734,205.157688 137.018157,218.033822 128.642338,228.034989 C120.258075,218.033822 115.200498,205.157688 115.200498,191.086817" fill="#0F7504" transform="translate(128.638116, 191.086817) scale(1, -1) translate(-128.638116, -191.086817) "></path> + <path d="M34.806984,138.212768 C41.8023132,135.190043 49.5026635,133.497148 57.6082953,133.497148 C78.818032,133.497148 97.2963396,144.992791 107.293286,162.061056 C100.297956,165.083782 92.5933844,166.772455 84.4919743,166.772455 C63.2822376,166.772455 44.7997083,155.276811 34.806984,138.212768" fill="#0C5E87" transform="translate(71.050135, 150.134801) scale(1, -1) translate(-71.050135, -150.134801) "></path> + <path d="M70.6545631,114.036032 C70.5194692,112.431792 70.4054838,110.819109 70.4054838,109.176875 C70.4054838,81.862584 89.4410536,59.044386 114.956907,53.1255861 C115.087779,54.7298257 115.201765,56.3425087 115.201765,57.9805218 C115.201765,85.2948125 96.1704167,108.121454 70.6545631,114.036032" fill="#6B0001" transform="translate(92.803624, 83.580809) scale(1, -1) translate(-92.803624, -83.580809) "></path> + <path d="M76.0304545,111.503866 L67.0213825,111.503866 C59.0677312,111.503866 52.6001125,117.950377 52.6001125,125.88292 L52.6001125,207.428953 C52.6001125,215.361496 59.0677312,221.812228 67.0213825,221.812228 L179.989405,221.812228 C187.943056,221.812228 194.406453,215.361496 194.406453,207.428953 L194.406453,125.88292 C194.406453,117.950377 187.943056,111.503866 179.989405,111.503866 L141.50454,111.503866 L64.2899534,73.6522544 L76.0304545,111.503866 L76.0304545,111.503866 Z" fill="#FFFFFF" transform="translate(123.503283, 147.732241) scale(1, -1) translate(-123.503283, -147.732241) "></path> + </g> +</svg>
\ No newline at end of file diff --git a/pleroma.html b/pleroma.html index b7e149e..755692a 100644 --- a/pleroma.html +++ b/pleroma.html @@ -164,6 +164,6 @@ If you run into any issues then <a href="https://docs-develop.pleroma.social/bac </ul> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/rss-bridge.html b/rss-bridge.html index 59f51c0..3fea0ff 100644 --- a/rss-bridge.html +++ b/rss-bridge.html @@ -93,6 +93,6 @@ systemctl reload nginx </ul> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> @@ -16,6 +16,864 @@ <!-- LB --> <item> +<title>Setting up Cgit</title> +<guid>https://landchad.net/cgit.html</guid> +<link>https://landchad.net/cgit.html</link> +<pubDate>Tue, 14 Sep 2021 14:06:48 -0400</pubDate> +<description><![CDATA[ + <header> + <h1>Setting up Cgit</h1> + <img src="pix/cgit.svg" class="titleimg"> + </header> + <main> + <p> + Once you have your server hosting your git repositories, you might want to allow others to browse + your repositories on the web. Cgit is a Free Software that allows browsing git repositories through + the web. </p> + <p> + Note that Cgit is a read-only frontend for Git repositories and doesn't have issues, pull requests + or user management. If that's what you want, consider installing Gitea instead.</p> + <h2>Installing cgit and fcgiwrap</h2> + <h3>Install fcgiwrap</h3> + <p> + NGINX doesn't have the capability to run CGI scripts by itself, it depends on an intermediate layer + like fcgiwrap to run CGI scripts like cgit:</p> + <pre><code>apt install fcgiwrap</code></pre> + <p>And now we can install cgit itself with:</p> + <pre><code>apt install cgit</code></pre> + <h2>Setting up NGINX</h2> + <p> + You should have an NGINX server running with a TLS certificate by now. Add the following configuration + to your server to pass the requests to Cgit, while serving static files directly:</p> + <pre><code> +server { + listen 443 ssl; + listen [::]:443 ssl; + ssl_certificate /etc/ssl/nginx/<strong>git.example.org</strong>.crt; + ssl_certificate_key /etc/ssl/nginx/<strong>git.example.org</strong>.key; + server_name <strong>git.example.org</strong>; + root /usr/share/cgit ; + try_files $uri @cgit ; + location @cgit { + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME /usr/lib/cgit/cgit.cgi; + fastcgi_param PATH_INFO $request_uri; + fastcgi_param QUERY_STRING $query_string; + fastcgi_pass unix:/run/fcgiwrap.socket; + } +} + </code></pre> + <p>Then get NGINX to reload your configuration.</p> + <h2>Configuring cgit</h2> + <p>You've got cgit up and running now, but you'll probably see it without any style and without any repository. + To change this, we need to configure Cgit to our liking, by editing <code>/etc/cgitrc</code>. + </p> + <pre><code> +css=/cgit.css +logo=/cgit.svg +virtual-root=/ +# Title and description shown on top of each page +root-title=<strong>Chad's git server</strong> +root-desc=<strong>A web interface to LandChad's git repositories, powered by Cgit</strong> +# The location where git repos are stored on the server +scan-path=/srv/git/ + </code></pre> + <p>This configuration assumes you followed the <a href="/git">git hosting guide</a> and store your repositories + on the <code>/srv/git/</code> directory.</p> + <p>Cgit's configuration allows changing many settings, as documented on the cgitrc(5) manpage installed with + Cgit.</p> + <h3>Changing the displayed repository owner</h3> + <p>Cgit's main page shows each repo's owner, which is "git" in case you followed the git hosting guide, but you + might want to change the name to yours. Cgit shows the owner's system name, so you need to modify the git + user + to give it your name:</p> + <pre><code> +usermod -c "<strong>Your Name</strong>" git + </code></pre> + <h3>Changing the repository description</h3> + <p>Navigate to your bare repository on the server and edit the <code>description</code> file inside it</p> + <h3>Displaying the repository idle time</h3> + <p>To do this, we need to create a post-receive hook for each repository that updates the file cgit uses + to determine the idle time. Inside your repository, create a file <code>hooks/post-receive</code> and add + the following contents:</p> + <pre><code> +#!/bin/sh +agefile="$(git rev-parse --git-dir)"/info/web/last-modified +mkdir -p "$(dirname "$agefile")" && +git for-each-ref \ + --sort=-authordate --count=1 \ + --format='%(authordate:iso8601)' \ + >"$agefile" + </code></pre> + <p>And give it execution permissions with:</p> + <pre><code>chmod +x hooks/post-receive</code></pre> + <p>Next time you push to that repository, the idle time should reset and show the correct value.</p> + <h2>Contribution</h2> + <ul> + <li>Ariel Costas – <a href="https://costas.dev">website</a>, <a + href="https://costas.dev/donations/">donations</a></li> + </ul> + </main> + +]]></description> +</item> + + +<item> +<title>Self hosting</title> +<guid>https://landchad.net/selfhosting.html</guid> +<link>https://landchad.net/selfhosting.html</link> +<pubDate>Sun, 29 Aug 2021 15:35:48 -0400</pubDate> +<description><![CDATA[ + <header><h1>Self hosting</h1></header> + + <main> + <h2>Introduction</h2> + <p>When you have a(n old) computer lying around, and you have cheap electricity and a good internet connection, self hosting might be a good option for you.</p> + <h3>Why would you choose selfhosting?</h3> + <ul> + <li> + You have control over the hardware, and you can upgrade your server in the future. For example: if you host a file server and your hard drive goes full, you can simply add another hard drive or upgrade it. + </li> + <li> + No bandwith limits, storage limits, etc. (some VPSes have this) + </li> + <li> + It <strong>can</strong> be cheaper than using a VPS. This only is the case if you got the server for really cheap and your electricity is cheap. + </li> + <li> + You can have a media server to consoom your content (for example with <code>Jellyfin</code>). You can technically do this on a VPS, but that will be more expensive than self hosting. If you have a media server, you can stream media from your server to more devices. (I recommend just downloading it on your device, but if you have multiple devices, this could be a good solution) + </li> + </ul> + + <h3>Downsides</h3> + <p>Some possible downsides of choosing to host at home could be:</p> + <ul> + <li> + Your ISP not approving of what you're doing. Some ISP's do not condone you hosting at home. Usually when this is the case, it could be harder if you want to forward ports, or it could be impossible to get a static IP address. Check your ISP's terms of service. Sometimes, it will say that hosting a webserver, email server, and more, is not allowed. + </li> + <li> + This can also include blocked ports. ISPs can block certain ports to the world. Sometimes ISPs only block 445/139 (which is for the better as Samba, using these ports isn't really secure and it's outdated). But some ISPs (sadly) block crucial ports like 80 and/or 443. You need to check this before trying anything. If this is the case, a way to get around it is to get another ISP or use an alternative port. A great website to check this is: <a href="https://canyouseeme.org/">canyouseeme.org</a>. You can also check if you did the port forwaring correctly here.</li> + <li> + Security. Opening your network to the public could bring security risks. For example, never open a Samba server to the public, because it's a pretty old protocol, and it has some security vulnerabilities. Be sure you are forwarding the right port, and don't just forward random ports to the internet. Also, if you are getting DDoSed, your ISP will temporarily shut down your whole internet connection. + </li> + <li> + When setting up an email server, it can be way harder to not have your email show up as spam in other's people email. If you use a VPS, this is way easier. + </li> + <li> + Space, power consumption and noise. Of course, this differs per server. + </li> + </ul> + <p>Your mileage may vary, go and check each of these points, and see if selfhosting is the right choice for you. Try and calculate your power consumption and see if your electricity cost is not too expensive.</p> + <p>For me, the upsides outweighed the downsides, which is why I chose to host at home. But, this differs with each person and scenario. Go and research what your exact situation is, before trying anything. Otherwise you'll have to face some bad surprises.</p> + <h2>Hardware</h2> + + <h3>What kind of hardware should you choose?</h3> + <p>If you pay your own electricity bill, power consumption is a big factor. Most old laptop computers are ideal in the sense that they don't use a lot of power, and if the battery still works, you have a built-in UPS! The bad thing is, most old laptop computers aren't that powerful, and they lack in upgradability. (you shouldn't really be using anything older than 2006, and I recommend at least a performance equivalant of a Core 2 CPU) + </p> + <p>If you can find an energy efficient desktop (under 100W), that is a great option. They are pretty upgradable and they don't use a lot of power. They can also be pretty cheap, but old laptops are usually cheaper. If you can afford new hardware, and are willing to build a PC, you can find really power effecient CPU/motherboard combos, and they can be cheap, for example the Celeron J3060. I recommend a low wattage power supply or an effecient one for these kinds of builds. Pico PSUs are pretty tiny and efficient solutions in these builds.</p> + <p>Of course, if you don't pay your electricity bill or cost is not a problem for you, you can use just about any old desktop (as long as it's not from the 90's, I recommend at least a Core 2 chip again, or an Athlon 64 X2).</p> + <h3>Usecases</h3> + <p>Of course, hardware choices depend on the usecase. The above recommendations I gave you work fine for e-mail server, webserver and fileserver types of applications, but they will struggle to transcode video if you are going to host a media server. You'll need a faster CPU, but also a faster GPU. As an example, the Athlon 200GE or 3000G are good and efficient choices for these builds. They are decent CPUs, but also have a built in GPU that will transcode video just fine.</p> + <p> + If you need a lot of storage, go for a case with a lot of mounts for hard drives, this way you can easily mount multiple hard drives. Pros of multiple hard drives are redundancy and speed. Cons could be that they create more heat and noise. You can't use a laptop if you want multiple drives, except if you use a hard drive caddy for the CD/DVD drive bay. Some business laptops even support RAID 1 (redundancy) and RAID 0 (speed and more storage, but you lose your files if one hard drive breaks) this way.</p> + <h2>Getting started</h2> + <h3>Installing Debian</h3> + <p>Once you have the machine, you can install the OS. I recommend Debian, as all of the guides on this website are Debian specific. Debian just werks as a server OS.</p> +</p> +<p>You'll need to burn a Debian install image onto a USB flash drive or a CD. You can download the image <a href="https://www.debian.org/CD/netinst/">here</a>, and you can also find information on how to burn the image onto a USB flash drive or CD there. +</p> +<p>While installing Debian, do not install any desktop environment. But install an SSH server when you get the chance. Also leave webserver unchecked, even if you want to use it as a webserver. You'll have a chance to install this later.</p> +<h3>Port forwaring</h3> +<p>Every time you are going to set up a new server program, you need to forward a port corresponding to that program. For example, HTTP is port 80, HTTPS is 443, etc. You need to set this up on your router's NAT settings (sometimes just called port forwarding, this differs per router). These steps differ for each router. Refer to your routers manual. A simple command to see what your servers IP address is, is to run <code>ifconfig</code> on your server. This shows a lot of network info, but it will also show your local IP address needed for port forwarding. +</p> +<p>Basic ports:</p> +<ul> + <li> + SSH: port 22 (open this port if you want to admin your server outside your network) + </li> + <li> + HTTP: port 80 (open this port if you want basic webserver functionality) + </li> + <li> + HTTPS: port 443 (you should open this port if you are setting up a webserver because encryption) + </li> + </ul> + +<h3>Static or dynamic IP address</h3> +<p>If you want to host your server at home, make sure you have a static IP address, or you can change your dynamic IP address to a static one. Refer to your router settings, some ISPs will have options on this here. If you can't find anything on this, get in touch with your ISP.</p> +<p>Once you've made sure you have a static IP address, you can find out what the IP address is with various websites. You can use a search engine to easily find this out. Write this down as you'll need it later.</p> +<p>Once you're done, you can pretty much follow every guide on this website, the only difference is that you'll need to forward the ports you'll be using for the server.</p> +<h3>Finding the ports you'll need to forward</h3> +<p>If you need to know what port you'll need to forward, there's a command for that. Just type <code>netstat -tulpn</code> in your servers command line. If you want to see the name of the programs, you need to run it as a root user. You can do this by putting <code>sudo</code> before the command.</p> +<pre><code>Local Address State PID/Program name +0.0.0.0:25 LISTEN 887/master +0.0.0.0:1883 LISTEN 22452/mosquitto +0.0.0.0:445 LISTEN 798/smbd +0.0.0.0:993 LISTEN 381/dovecot +127.0.0.1:3306 LISTEN 560/mysqld +0.0.0.0:587 LISTEN 887/master +0.0.0.0:139 LISTEN 798/smbd +127.0.1.1:12301 LISTEN 412/opendkim +0.0.0.0:143 LISTEN 381/dovecot +0.0.0.0:465 LISTEN 887/master +0.0.0.0:22 LISTEN 472/sshd +:::25 LISTEN 887/master +:::443 LISTEN 1769/apache2 +:::1883 LISTEN 22452/mosquitto +:::445 LISTEN 798/smbd</code></pre> +<p><em>Example output</em></p> + +<p>In this example, if you need to find the port number from <code>dovecot</code>, you can look for it in the <code>Program name</code> column. Then you can see in the local address column that the reported local address is <code>0.0.0.0:993</code>. You need to look for the part after the semicolon. In this case it's 993. So you'll need to forward port 993.</p> + +<span class="next"><a href="dns.html">Next: Connect Your Domain and Server</a></span> + +<hr> +<p><em>Written by <a href="https://github.com/hidde-j">hiddej</a></em> + </main> +]]></description> +</item> + + +<item> +<title>Mirror your site over I2P</title> +<guid>https://landchad.net/i2p.html</guid> +<link>https://landchad.net/i2p.html</link> +<pubDate>Sun, 29 Aug 2021 15:32:44 -0400</pubDate> +<description><![CDATA[ + <header><h1>Mirror Your Site Over I2P</h1></header> + + <main> + <img class=titleimg src="pix/i2p.svg" alt="I2P logo"> + <p> + Now you have a website, why not offer it in a private alternative such as the Invisible Internet? + </p> + <h2>Setting up I2P</h2> + <p> + There are 2 main I2P implementations, I2P and i2pd, we are using i2pd in this + guide because it's easier to use in servers. + </p> + <h3>Installing I2P</h3> + <p> + i2pd is in most repos, in debian/ubuntu you can install it simply + with <pre><code>apt install i2pd</code></pre> + </p> + <h3>Enabling I2P</h3> + <p> + We are going to create a user for i2pd, because i2pd finds the configuration + files in its home directory. And it's easier (and more tidy) to have it in a separate user: + </p> + <pre><code>useradd -m i2p -s /bin/bash +su -l i2p +mkdir ~/.i2pd +cd ~/.i2pd</code></pre> + <p> + Now that you're in ~/.i2pd, you have to create a file named + "tunnels.conf". Which is the config file for every hidden service you're + offering over I2P, the content should be like this: + </p> + <pre><code>[<strong>example</strong>] +type = http +host = 127.0.0.1 +port = 8080 +keys = <strong>example.dat</strong></code></pre> + <h3>Getting your I2P Hostname</h3> + <p> + Then, run <code>/usr/sbin/i2pd --daemon</code> to start i2pd and we can retreive our I2P hostname. + </p> + <p> + This can be done in lynx or a command-line browser by going to <code>http://127.0.0.1:7070/?page=i2p_tunnels</code> to get your I2P hostname. + </p> + <p> + You + can also run these commands to find your hostname: + </p> + <pre><code>printf "%s.b32.i2p +" $(head -c 391 /home/i2p/.i2pd/<strong>example.dat</strong> |sha256sum|xxd -r -p | base32 |sed s/=//g | tr A-Z a-z)</code></pre> + <h2>Adding the Nginx Config</h2> + <p> + From here, the steps are almost identical to setting up a normal website configuration file. + Follow the steps as if you were making a new website on the webserver + <a href="nginx.html">tutorial</a> up until the server block of code. Instead, paste this: + </p> + <pre><code>server { +listen 127.0.0.1:8080 ; +root /var/www/<strong>example</strong> ; +index index.html ; +}</code></pre> + <aside> + <h4>Clarifications<h4> + <p> + Nginx will listen in port 8080, but i2pd will forward your port + 8080 to the i2p site port 80. This way you don't have to deal with server names or anything like that + </p> + </aside> + <p> + From here we are almost done, all we have to do is enable the site and reload nginx which is also covered in <a href="nginx.html#enable">the webserver tutorial</a>. + </p> + <h3>Update regularly!</h3> + <p>Make sure to update I2P on a regular basis by running:</p> + <pre><code>apt update && apt install i2pd</code></pre> + <p><strong>Contributor</strong> - <a href="https://qorg11.net" target="_blank">qorg11</a></p> + </main> + + +]]></description> +</item> + + +<item> +<title>Setting up a Calibre library server</title> +<guid>https://landchad.net/calibre.html</guid> +<link>https://landchad.net/calibre.html</link> +<pubDate>Tue, 03 Aug 2021 13:49:21 -0400</pubDate> +<description><![CDATA[ + <header><h1>Setting up a Calibre library server</h1></header> + + <main> + <img src="pix/calibre.png" alt="Calibre logo" class=titleimg> + <p> + The Calibre library server is a great way to store your eBooks. + It allows you to: + </p> + <ul> + <li>Share your books with others.</li> + <li>Easily transfer your books between devices and access them from anywhere.</li> + </ul> + <h2>Installation</h2> + <p>Install the Calibre package. + You might also want rsync to upload books.</p> + <pre><code>apt install -y calibre rsync +mkdir /opt/calibre</code></pre> + <p> + Either upload your existing library using <code>rsync</code>. For example to <code>/opt/calibre/</code>. + </p> + <p> + On client: + </p> + <pre><code>cd ~/Documents +rsync -avuP <strong>your-library-dir</strong> root@<strong>example.org</strong>:/opt/calibre/</code></pre> + <p> + Or create a library and add a book to it: + </p> +<pre><code>cd /opt/calibre +calibredb add <strong>book.epub</strong> --with-library <strong>your-library</strong></code></pre> + <aside> + <p> + For more information about the <code>calibredb</code> command see <code>man calibredb</code>. + </p> + </aside> + <p> + Add a new user to protect your server: + </p> + <pre><code>calibre-server --manage-users</code></pre> + <h2>Creating a service</h2> + <p> + Create a new file <code>/etc/systemd/system/calibre-server.service</code> and add the following: + </p> +<pre><code>[Unit] +Description=Calibre library server +After=network.target +[Service] +Type=simple +User=root +Group=root +ExecStart=/usr/bin/calibre-server --enable-auth --enable-local-write /opt/calibre/your_library --listen-on 127.0.0.1 +[Install] +WantedBy=multi-user.target +</code></pre> + <aside> + <p> + You can change the port with the <code>--port</code> prefix. Additional information <code>man calibre-server</code>. + </p> + </aside> + <p> + Issue <code>systemctl daemon-reload</code> to apply the changes. + </p> + <p> + Enable and start the service. + </p> +<pre><code>systemctl enable calibre-server +systemctl start calibre-server</code></pre> + <h2>A reverse proxy with Nginx</h2> + <p> + Create a new file <code>/etc/nginx/sites-available/calibre</code> and enter the following: + </p> +<pre><code>server { + listen 80; + client_max_body_size 64M; # to upload large books + server_name <strong>calibre.example.org</strong> ; + location / { + proxy_pass http://127.0.0.1:8080; + } +}</code></pre> + <p>Issue a Let's Encrypt certificate. <a href="certbot.html">Detailed instructions and additional information</a>.</p> + <pre><code>certbot --nginx</code></pre> + <p>Now just go to <strong>calibre.example.org</strong>. The server will request an username and a password.</p> + <a href="pix/calibre-1.png"> + <img src="pix/calibre/calibre-1.png" alt="calibre"> + </a> + <p>After login you will see something like this.</p> + <a href="pix/calibre-1.png"> + <img src="pix/calibre/calibre-2.png" alt="calibre"> + </a> + <h2>Contribution</h2> + <li>Author: rflx – <a href="https://rflx.xyz">website</a> -- XMR: <code class=crypto>48T5XpHTXAZ5Nn8YCypA4aWn1ffQLHJkFGDArXQB6cmrP6cqLY72cu7CR2iq2MmL5Ndu3d47e5MKjGpL4prYgdrTCFAHD9c</code> + </li> + </main> +]]></description> +</item> + + +<item> +<title>Jitsi Video Chat</title> +<guid>https://landchad.net/jitsi.html</guid> +<link>https://landchad.net/jitsi.html</link> +<pubDate>Tue, 03 Aug 2021 13:00:23 -0400</pubDate> +<description><![CDATA[ + <header><h1>Jitsi Video Chat</h1></header> + + <main> + <img src="pix/jitsi.svg" alt="Jitsi" class=titleimg> + <p> + <dfn>Jitsi</dfn> is a set of open-source projects that allows you to easily build and deploy secure video conferencing solutions. + </p> + <p> + Is really easy to install, and also a really good private, federated and libre alternative to Zoom or other video conferencing software. + You can create calls just by typing the URL, and loging-in is not necessary. + </p> + <h2>Dependencies and Installation</h2> + <p>First, install some dependencies:</p> + <pre><code>apt install gpg apt-transport-https nginx python3-certbot-nginx</code></pre> + <p>Jitsi has its own package repository, so let's add it.</p> + <pre class=wide><code>curl https://download.jitsi.org/jitsi-key.gpg.key | gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg +echo 'deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/' > /etc/apt/sources.list.d/jitsi-stable.list +apt update -y</code></pre> + <p> + Ok. So now we can install Jitsi, but before we do that, let's the firewall <code>ufw</code>, in case you + have it enabled, and the SSL certificate. + </p> + <h2>Enable Required Ports</h2> + <p>If you are using <a href="ufw.html">ufw</a> or another firewall, there are several ports we need to ensure are open:</p> + <pre><code>ufw allow 80/tcp +ufw allow 443/tcp +ufw allow 10000/udp +ufw allow 3478/udp +ufw allow 5349/tcp +ufw enable</code></pre> + <p>For your information, these allow the following:</p> + <ul> + <li>80 TCP – Certbot.</li> + <li>443 TCP – General access to Jitsi Meet.</li> + <li>10000 UDP – General network video/audio communications.</li> + <li>3478 UDP – Quering the stun server (coturn, optional, needs config.js change to enable it).</li> + <li> + 5349 TCP – Fallback network video/audio communications over TCP (when UDP is blocked for example), served by coturn. + </li> + </ul> + <h2>SSL certificate</h2> + <p> + I'll be using <a href="./certbot.html" target="blank">certbot</a> and + <a href="./nginx.html" target="blank">Nginx</a> to generate a certificate + for the Jitsi subdomain to allow encrypted connections. + </p> + <pre><code>certbot --nginx certonly -d <strong>meet.example.org</strong></code></pre> + <p> + We will not create an Nginx config file for Jitsi because the Jitsi package we will be installing will do that automatically. + </p> + <h2>Installation</h2> + <p>To begin the installation process, just run:</p> + <pre><code>apt install jitsi-meet</code></pre> + <p> + It will ask you for your <code><strong>hostname</strong></code + >; there you'll need to input the subdomain you have just added to Nginx, like + <code><strong>meet.example.org</strong></code>. + </p> + <p>For the SSL certificate, choose <code>I want to use my own certificate</code>.</p> + <p> + When it ask you for the certification key and cert files, input + <code>/etc/letsencrypt/live/<strong>meet.example.org</strong>/privkey.pem</code> and + <code>/etc/letsencrypt/live/<strong>meet.example.org</strong>/cert.pem</code> respectively. + </p> + <h2>Using Jitsi</h2> + <img src="pix/jitsi-01.webp" alt="Jitsi once installed"> + <p>Jitsi can be used in a browser by then just going to <code>meet.example.org</code>.</p> + <p>Note that there are also Jitsi clients for all major platforms:</p> + <ul> + <li><a href="https://desktop.jitsi.org/Main/Download.html">Desktop</a> (Windows, MacOS, GNU/Linux)</li> + <li>Android (<a href="https://f-droid.org/en/packages/org.jitsi.meet/">F-Droid</a> and <a href="https://play.google.com/store/apps/details?id=org.jitsi.meet">Google Play</a>)</li> + <li><a href="https://apps.apple.com/us/app/jitsi-meet/id1165103905">iPhone/iOS</a></li> + </ul> + <p> + <strong>When using a Jitsti app for the first time, remember to go to the "Settings" menu and change your server name to the Jitsi site you just created.</strong> + </p> + <p>When you create a video chatroom, its address will appear as <code><strong>meet.example.org/yourvideochatname</strong></code> and can be shared as such.</p> + <h2>More info</h2> + <p> + This article is based on <a href="https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart" target="blank">the original documentation</a>. There you can find more details and configurations. + </p> + <ul> + <li>Written by <a href="https://josefabio.com" target="blank">Jose Fabio.</a> Donate Monero: <code class="crypto">484RLdsXQCDGSthNatGApRPTyqcCbM3PkM97axXezEuPZppimXmwWegiF3Et4BHBgjWR7sVXuEUoAeVNpBiVznhoDLqLV7j</code> <a href="https://josefabio.com/figures/monero.jpg" class="crypto" target="blank">[QR]</a></li> + <li>Edited and revised by <a href="https://lukesmith.xyz">Luke</a>.</li> + </ul> + </main> + + +]]></description> +</item> + + +<item> +<title>PeerTube Instance</title> +<guid>https://landchad.net/peertube.html</guid> +<link>https://landchad.net/peertube.html</link> +<pubDate>Thu, 29 Jul 2021 10:44:56 -0400</pubDate> +<description><![CDATA[ + <header><h1>PeerTube Instance</h1></header> + + <main> + <img class=titleimg src="pix/peertube.svg" alt="PeerTube logo"> + <p>PeerTube is a self-hosted and (optionally) federated video sharing platform that saves bandwith on videos the more people watch. + PeerTube instances can follow each other to share videos and grow the federated network, + but you can always keep your instance to yourself if you choose to.</p> + <h2>Prerequisites</h2> + <p><strong>Most</strong> of PeerTube's dependencies can be installed with this command:</p> + <pre><code>apt install -y curl sudo unzip vim ffmpeg postgresql postgresql-contrib g++ make redis-server git python-dev cron wget</code></pre> + <p>It's also important to start all associated daemons:</p> + <pre><code>systemctl start postgresql redis</code></pre> + <p>PeerTube also requires <strong>NodeJS 14</strong> and <strong>yarn</strong> which cannot be installed from the Debian repositories. This means they have to be installed from separate, external repos:</p> + <pre><code>curl -fsSL https://deb.nodesource.com/setup_14.x | bash - +apt install -y nodejs +npm install --global yarn</code></pre> + <p>In addition to these dependencies, it's recommended to create a dedicated PeerTube user to install and manage PeerTube.</p> + <pre><code>useradd -m -d /var/www/peertube -s /bin/bash -p peertube peertube</code></pre> + <h2>Database</h2> + <p>PeerTube requires a PostgreSQL database to function. To create it, first make a new Postgres user named PeerTube:</p> + <pre><code>su postgres +createuser -P peertube +createdb -O peertube -E UTF8 -T template0 peertube_prod +psql -c "CREATE EXTENSION pg_trgm;" peertube_prod +psql -c "CREATE EXTENSION unaccent;" peertube_prod +exit</code></pre> + <p>Be sure to <strong>make note of your Postgres user password,</strong> as it will be needed later when setting up PeerTube.</p> + <h2>Installation</h2> + <p>This handy one-liner can be used to determine the latest PeerTube version:</p> + <pre><code>VERSION=$(curl -s https://api.github.com/repos/chocobozzz/peertube/releases/latest | grep tag_name | cut -d '"' -f 4) && echo "Latest Peertube version is $VERSION"</code></pre> + <p>Next, a basic directory structure needs to be setup in the PeerTube user's home directory (/var/www/peertube).</p> + <p>To ensure permissions remain the same while managing files as PeerTube, <code>sudo</code> can be used to perform actions:</p> + <pre><code>sudo -u peertube mkdir config storage versions +sudo -u peertube chmod 750 config</code></pre> + <p>Finally, a PeerTube release can be downloaded from the GitHub page and installed using yarn:</p> + <pre><code>cd versions +sudo -u peertube ln -s versions/peertube-${VERSION} ./peertube-latest +cd ./peertube-latest && sudo -H -u peertube yarn install --production --pure-lockfile</code></pre> + <h2>Configuration</h2> + <p>PeerTube's default config file can be copied over to <code>/var/www/peertube/config.production.yaml</code> so it can actually be used:</p> + <pre><code>cd /var/www/peertube + sudo -u peertube cp peertube-latest/production.yaml config/production.yaml</code></pre> + <p>Now the <code>production.yaml</code> file must be edited in the following ways:</p> + <p>First, add the hostname:</p> + <pre><code>webserver: + https: true + hostname: <strong>'example.org'</strong> + port: 443</code></pre> + <p>Then, the database:</p> + <pre><code>database: + hostname: 'localhost' + port: 5432 + ssl: false + suffix: '_prod' + username: <strong>'peertube'</strong> + password: <strong>'your_password'</strong> + pool: + max: 5</code></pre> + <p>An email to generate the admin user:</p> + <pre><code>admin: + # Used to generate the root user at first startup + # And to receive emails from the contact form + email: <strong>'chad@example.org'</strong></code></pre> + <p>And <strong>optionally,</strong> email server information:</p> + <pre><code>smtp: + # smtp or sendmail + transport: smtp + # Path to sendmail command. Required if you use sendmail transport + sendmail: null + hostname: <strong>mail.example.org</strong> + port: 465 # If you use StartTLS: 587 + username: <strong>your_email_username</strong> + password: <strong>your_email_password</strong> + tls: true # If you use StartTLS: false + disable_starttls: false + ca_file: null # Used for self signed certificates + from_address: <strong>'admin@example.org'</strong></code></pre> + <h2>NGINX</h2> + <p>PeerTube includes an NGINX configuration that can be copied over to <code>/etc/nginx/sites-available:</code> + <pre><code>cp /var/www/peertube/peertube-latest/support/nginx/peertube /etc/nginx/sites-available/peertube</code></pre> + <p>Because the PeerTube config is so long, it's recommended to use <code>sed</code> to modify the contents of the file, + replacing <code>${WEBSERVER_HOST}</code> with your hostname, + and <code>$(PEERTUBE_HOST)</code> with your localhost and port, which by default should be <code>127.0.0.1:9000</code>: + <pre><code>sed -i 's/${WEBSERVER_HOST}/<strong>example.org</strong>/g' /etc/nginx/sites-available/peertube +sed -i 's/${PEERTUBE_HOST}/127.0.0.1:9000/g' /etc/nginx/sites-available/peertube</code></pre> + <p>Once you're happy with the NGINX config file, link it to <code>sites-enabled</code> to activate it:</p> + <pre><code>ln -s /etc/nginx/sites-available/peertube /etc/nginx/sites-enabled/peertube</code></pre> + <h3>Encryption with Certbot</h3> + <p>It's <strong>highly recommended</strong> to generate certificates for use with your PeerTube site, and this can be easily done with Let's Encrypt's <code>certbot</code> command:</p> + <pre><code>systemctl stop nginx +certbot certonly --standalone -d <strong>example.org</strong> +sudo systemctl restart nginx</code></pre> + <p>The certificates are generated <strong>standalone</strong> since the PeerTube NGINX config file already includes configuration for certbot.</p> + <h2>Running PeerTube</h2> + <p>A config file for a systemd daemon is included in PeerTube and can be setup like so:</p> + <pre><code>cp /var/www/peertube/peertube-latest/support/systemd/peertube.service /etc/systemd/system/ +systemctl daemon-reload</code></pre> + <p>Now, finally, run the PeerTube daemon to start PeerTube:</p> + <pre><code>systemctl start peertube</pre></code> + <h2>Using PeerTube</h2> + <p>To set a password for your admin user, run:</p> + <pre><code>cd /var/www/peertube/peertube-latest && NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run reset-password -- -u root</code></pre> + <p>Login to your PeerTube instance using the admin email specified in your <code>production.yaml</code> file and the admin password you just set.</p> + <img src="pix/peertube-login.jpg" height=400px> + <p>Once logged in, it's recommended to create a separate user without admin privileges for uploading videos to PeerTube. + This can be done easily from the users tab in the administration section:</p> + <p>Enjoy your PeerTube instance!</p> + <hr> + <h2>Updating PeerTube</h2> + <p>PeerTube is constantly adding new features, so it's a good idea to <a href="https://github.com/Chocobozzz/PeerTube/blob/develop/CHANGELOG.md">check for new updates</a> and add them if you wish. Just in the past year, they have added livestreaming and more.</p> + <p>Updating is fairly easy now since an <code>upgrade.sh</code> script has been added. Just run:</p> + <pre><code>cd /var/www/peertube/peertube-latest/scripts && sudo -H -u peertube ./upgrade.sh</code></pre> + <p> + Although check the <a href="https://github.com/Chocobozzz/PeerTube/blob/develop/CHANGELOG.md">changelog</a> to see if there are additional manual requirements for particular updates. + </p> + <hr> + <p><em>Written by <a href="https://denshi.live">Denshi.</a> Donate Monero <a href="https://denshi.live/donate.html">here</a> <a href="https://denshi.live/images/monero.png">[QR]</a></em></p> + </main> + +]]></description> +</item> + + +<item> +<title>Server-Side Scripting with CGI</title> +<guid>https://landchad.net/cgi.html</guid> +<link>https://landchad.net/cgi.html</link> +<pubDate>Sun, 25 Jul 2021 14:29:44 -0400</pubDate> +<description><![CDATA[ + <header><h1>Server-Side Scripting with CGI</h1></header> + + <main> + <p> + The basic website tutorial here describes how to set up a static + website — one that just serves HTML files saved on your server, + and until you change something manually, the same content will be served + each time a given page is requested. This is perfectly enough for most + personal website needs. This is how blogs should be implemented, instead + of relying on bloatware like WordPress! + </p> + <p> + But sometimes you genuinely <i>do</i> need something more. You need your + website to serve different contents depending on the time, on who the + requester is, on the contents of a database, or maybe process user input + from a form. + </p> + <h2>CGI</h2> + <p> + CGI, or the Common Gateway Interface, is a specification to allow you, + the server owner, to program your web server using pretty much any + programming language you might know. The specification is almost as old + as the Internet itself and for a long time CGI scripting was the primary + method of creating dynamic websites. + </p> + <p> + CGI is a very simple specification indeed. You write a script in your + favorite language, the script receives input about the request in + environment variables, and whatever you print to the standard output + will be the response. Most likely, though, you will want to use a + library for your language of choice that makes a lot of this + request/response handling simpler (e.g. parsing query parameters for + you, setting appropriate headers, etc.). + </p> + <h3>Limitations of CGI</h3> + <p> + While in theory you could implement any sort of functionality with CGI + scripts, it's going to get difficult managing a lot of separate scripts + if they're supposed to be working in tandem to implement a dynamic + website. If you want to build a full out web application, you'd probably + be better off learning a web framework than gluing together Perl + scripts. + </p> + <p> + That said, just as most of the web could be replaced with static + websites, much of the remaining non-static web could be replaced with a + few simple scripts, rather than bloated Ruby on Rails or Django + applications. + </p> + <h2>Let's write a CGI script!</h2> + <p> + We'll implement a simple example CGI script. I'll use Ruby for this + tutorial, but you'll be able to follow along even if you don't know + Ruby, just treat it as pseudocode then find a CGI library for your + language. + </p> + <h3>The working example</h3> + <p> + Our working example will be the Lazy Calculator. Yeah, you're probably + tired of seeing calculator examples in every programming tutorial, but + have you ever implemented one that takes the weekends off? + </p> + <p> + Here's how it will work. When in a browser you submit a request to your + website like + </p> + <pre><code>example.com/calculator.html?a=10&b=32</code></pre> + <p> + you will receive a page with the result of the addition of 10 and 32: + 42. + </p> + <p> + <i>Unless</i> you send your request on a weekend. Then the website will + respond with + </p> + <pre><code>I don't get paid to work on weekends! Come back Monday.</code></pre> + <p> + This example will show a few things that CGI scripts can do that you + wouldn't have been able to get using just file hosting in your + web server: + <ul> + <li> getting inputs from the user; </li> + <li> + getting external information (here just the system time, but you + could imagine instead connecting to a database); + </li> + <li> using the above to create dynamic output. </li> + </ul> + <h3>The code</h3> + <p> + Here's an implementation of the lazy calculator as a Ruby CGI script: + </p> + <pre><code>#!/bin/env ruby +require 'cgi' +require 'date' +cgi = CGI.new +today = Date::today +a = cgi["a"].to_i +b = cgi["b"].to_i +if today.saturday? || today.sunday? + cgi.out do + "I don't get paid to work on weekends! Come back Monday." + end +else + cgi.out do + (a + b).to_s + end +end</code></pre> + <p> + Let's go through what's happening here. + </p> + <h3>The shebang line</h3> + <p> + CGI works by pointing your web server to an executable program. A Ruby + or Python script by itself is not immediately executable by a computer. + But on Unix-like systems you can specify the program that will be able + to execute your file in its first line if it starts with <code>#!</code> + (known as the shebang; read more about it on + <a href="https://en.wikipedia.org/wiki/Shebang_(Unix)">Wikipedia</a>). + </p> + <p> + So if you're going to be using a scripting language, you'll probably + need the appropriate shebang line at the top of your script. If you use + a compiled language, you'll just point your web server to the compiled + executable binary. + </p> + <h3>Query parameters</h3> + <p> + The next interesting lines of code are where we set the variables + <code>a</code> and <code>b</code>. Here we are getting user inputs from + the request. + </p> + <p> + In the example request we mentioned above + (<code>example.com/calculator.html?a=10&b=32</code>), the part + starting from the question mark, <code>?a=10&b=32</code>, is the + <i>query string</i>. This is how users can submit parameters with their + web requests. Usually these parameters are set by e.g. a form on your + website, but in our simple example we'll be just manually manipulating + the URL. + </p> + <p> + The query string contains key-value pairs. The Ruby CGI library makes + them available in the <code>CGI</code> object it provides. We just need + to index it with the desired key, and we'll get the corresponding value. + </p> + <h3>Wrapping it up</h3> + <p> + The remaining parts of the code should be pretty self-explanatory. We + get today's date, check if it's a Saturday or a Sunday, and depending on + that, we instruct the CGI library to output either the answer, or a + "come back later" message. + </p> + <p> + The Ruby library by default returns an HTML response, so we really + should have wrapped our outputs in some <code>html</code>, + <code>body</code>, etc. tags. Alternatively, we could have specified + that the response is just plain text with + </p> + <pre><code>cgi.out 'text/plain' do</code></pre> + <p> + In general, your CGI library will probably have ways of specifying all + sorts of HTTP response headers, like status code, content type, etc. + </p> + <h2>Making it work</h2> + <p> + We have a CGI script, now let's point our web server to it. + </p> + <h3>Installing FastCGI</h3> + <p> + If you're using Nginx, install <code>fcgiwrap</code>: + </p> + <pre><code>apt install fcgiwrap</code></pre> + <p> + This installs the necessary packages for Nginx to use FastCGI — a + layer between your web server and CGI script that allows for faster + handling of scripts than if the web server had to handle it all by + itself. + </p> + <p> + Other web servers will probably have a similarly simple way of enabling + FastCGI, or you can look into other methods for launching CGI scripts. + </p> + <h3>Nginx configuration</h3> + <p> + In the configuration file for your website, add something like the + following: + </p> +<pre><code>location /calculator.html { + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME /usr/local/bin/lazy-calculator.rb; + fastcgi_param QUERY_STRING $query_string; + fastcgi_pass unix:/run/fcgiwrap.socket; +}</code></pre> + <p> + <code>fastcgi_param</code> directives specify various parameters for + FastCGI. <code>SCRIPT_FILENAME</code> should point to your executable. + For <code>QUERY_STRING</code>, we just copy Nginx's + <code>$query_string</code> variable. You might want to pass other + information to your CGI script as well, see for example + <a href="https://wiki.debian.org/nginx/FastCGI">the Debian wiki</a> for + a more detailed example, including pointing to an entire directory of + CGI scripts, rather than adding each one by hand to your web server + config. + </p> + <h2>Contribution</h2> + <ul> + <li>Martin Chrzanowski -- <a href="https://m-chrzan.xyz">website</a>, <a href="https://m-chrzan.xyz/donate.html">donate</a></li> + </ul> + </main> + +]]></description> +</item> + + +<item> <title>XMPP Server (Prosody)</title> <guid>https://landchad.net/xmpp.html</guid> <link>https://landchad.net/xmpp.html</link> @@ -1423,8 +2281,7 @@ mkdir git</code></pre> </p> <h2>Contribution</h2> <ul> - <li>Martin Chrzanowski -- <a - href="https://m-chrzan.xyz">website</a>, <a href="https://m-chrzan.xyz/crypto.html">donate</a></li> + <li>Martin Chrzanowski -- <a href="https://m-chrzan.xyz">website</a>, <a href="https://m-chrzan.xyz/donate.html">donate</a></li> </ul> </main> @@ -48,8 +48,8 @@ <p>You may just as easily download files and directories from your server with rsync:</p> <pre><code>rsync -rtvzP <strong>root@example.org:/path/to/file</strong> <strong>/path/to/file</strong></code></pre> <h2 id="contribution">Contribution</h2> -<ul><li>el3ctr0lyte: <a href="https://github.com/el3ctr0lyte">github</a>, XMR: <code class=crypto>86DBJdiG83ZDea6kJgsbVN5tMae5ScfuhJ3PihEMTHatCrGEw2gctyUB92V2fz4R4YhwRaQeAGL5M4gPRXvVvtkULJi4ayk</code></li><li>Substantial revisions by <a href="https://lukesmith.xyz">Luke</a></li></ul> +<a href="https://lukesmith.xyz">Luke</a> </main> -<footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> +<footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/selfhosting.html b/selfhosting.html new file mode 100644 index 0000000..d4596fd --- /dev/null +++ b/selfhosting.html @@ -0,0 +1,120 @@ +<!DOCTYPE html> +<html lang=en> + <head> + <title>Self hosting – LandChad.net</title> + <meta charset="utf-8"/> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> + <link rel='stylesheet' type='text/css' href='style.css'> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel='alternate' type='application/rss+xml' title='Land Chad RSS' href='/rss.xml'> + </head> +<body> + <header><h1>Self hosting</h1></header> + <nav></nav> + <main> + <h2>Introduction</h2> + <p>When you have a(n old) computer lying around, and you have cheap electricity and a good internet connection, self hosting might be a good option for you.</p> + <h3>Why would you choose selfhosting?</h3> + <ul> + <li> + You have control over the hardware, and you can upgrade your server in the future. For example: if you host a file server and your hard drive goes full, you can simply add another hard drive or upgrade it. + </li> + <li> + No bandwith limits, storage limits, etc. (some VPSes have this) + </li> + <li> + It <strong>can</strong> be cheaper than using a VPS. This only is the case if you got the server for really cheap and your electricity is cheap. + </li> + <li> + You can have a media server to consoom your content (for example with <code>Jellyfin</code>). You can technically do this on a VPS, but that will be more expensive than self hosting. If you have a media server, you can stream media from your server to more devices. (I recommend just downloading it on your device, but if you have multiple devices, this could be a good solution) + </li> + </ul> + + <h3>Downsides</h3> + <p>Some possible downsides of choosing to host at home could be:</p> + <ul> + <li> + Your ISP not approving of what you're doing. Some ISP's do not condone you hosting at home. Usually when this is the case, it could be harder if you want to forward ports, or it could be impossible to get a static IP address. Check your ISP's terms of service. Sometimes, it will say that hosting a webserver, email server, and more, is not allowed. + </li> + <li> + This can also include blocked ports. ISPs can block certain ports to the world. Sometimes ISPs only block 445/139 (which is for the better as Samba, using these ports isn't really secure and it's outdated). But some ISPs (sadly) block crucial ports like 80 and/or 443. You need to check this before trying anything. If this is the case, a way to get around it is to get another ISP or use an alternative port. A great website to check this is: <a href="https://canyouseeme.org/">canyouseeme.org</a>. You can also check if you did the port forwaring correctly here.</li> + <li> + Security. Opening your network to the public could bring security risks. For example, never open a Samba server to the public, because it's a pretty old protocol, and it has some security vulnerabilities. Be sure you are forwarding the right port, and don't just forward random ports to the internet. Also, if you are getting DDoSed, your ISP will temporarily shut down your whole internet connection. + </li> + <li> + When setting up an email server, it can be way harder to not have your email show up as spam in other's people email. If you use a VPS, this is way easier. + </li> + <li> + Space, power consumption and noise. Of course, this differs per server. + </li> + </ul> + <p>Your mileage may vary, go and check each of these points, and see if selfhosting is the right choice for you. Try and calculate your power consumption and see if your electricity cost is not too expensive.</p> + <p>For me, the upsides outweighed the downsides, which is why I chose to host at home. But, this differs with each person and scenario. Go and research what your exact situation is, before trying anything. Otherwise you'll have to face some bad surprises.</p> + <h2>Hardware</h2> + + <h3>What kind of hardware should you choose?</h3> + <p>If you pay your own electricity bill, power consumption is a big factor. Most old laptop computers are ideal in the sense that they don't use a lot of power, and if the battery still works, you have a built-in UPS! The bad thing is, most old laptop computers aren't that powerful, and they lack in upgradability. (you shouldn't really be using anything older than 2006, and I recommend at least a performance equivalant of a Core 2 CPU) + </p> + <p>If you can find an energy efficient desktop (under 100W), that is a great option. They are pretty upgradable and they don't use a lot of power. They can also be pretty cheap, but old laptops are usually cheaper. If you can afford new hardware, and are willing to build a PC, you can find really power effecient CPU/motherboard combos, and they can be cheap, for example the Celeron J3060. I recommend a low wattage power supply or an effecient one for these kinds of builds. Pico PSUs are pretty tiny and efficient solutions in these builds.</p> + <p>Of course, if you don't pay your electricity bill or cost is not a problem for you, you can use just about any old desktop (as long as it's not from the 90's, I recommend at least a Core 2 chip again, or an Athlon 64 X2).</p> + <h3>Usecases</h3> + <p>Of course, hardware choices depend on the usecase. The above recommendations I gave you work fine for e-mail server, webserver and fileserver types of applications, but they will struggle to transcode video if you are going to host a media server. You'll need a faster CPU, but also a faster GPU. As an example, the Athlon 200GE or 3000G are good and efficient choices for these builds. They are decent CPUs, but also have a built in GPU that will transcode video just fine.</p> + <p> + If you need a lot of storage, go for a case with a lot of mounts for hard drives, this way you can easily mount multiple hard drives. Pros of multiple hard drives are redundancy and speed. Cons could be that they create more heat and noise. You can't use a laptop if you want multiple drives, except if you use a hard drive caddy for the CD/DVD drive bay. Some business laptops even support RAID 1 (redundancy) and RAID 0 (speed and more storage, but you lose your files if one hard drive breaks) this way.</p> + <h2>Getting started</h2> + <h3>Installing Debian</h3> + <p>Once you have the machine, you can install the OS. I recommend Debian, as all of the guides on this website are Debian specific. Debian just werks as a server OS.</p> +</p> +<p>You'll need to burn a Debian install image onto a USB flash drive or a CD. You can download the image <a href="https://www.debian.org/CD/netinst/">here</a>, and you can also find information on how to burn the image onto a USB flash drive or CD there. +</p> +<p>While installing Debian, do not install any desktop environment. But install an SSH server when you get the chance. Also leave webserver unchecked, even if you want to use it as a webserver. You'll have a chance to install this later.</p> +<h3>Port forwaring</h3> +<p>Every time you are going to set up a new server program, you need to forward a port corresponding to that program. For example, HTTP is port 80, HTTPS is 443, etc. You need to set this up on your router's NAT settings (sometimes just called port forwarding, this differs per router). These steps differ for each router. Refer to your routers manual. A simple command to see what your servers IP address is, is to run <code>ifconfig</code> on your server. This shows a lot of network info, but it will also show your local IP address needed for port forwarding. +</p> +<p>Basic ports:</p> +<ul> + <li> + SSH: port 22 (open this port if you want to admin your server outside your network) + </li> + <li> + HTTP: port 80 (open this port if you want basic webserver functionality) + </li> + <li> + HTTPS: port 443 (you should open this port if you are setting up a webserver because encryption) + </li> + </ul> + +<h3>Static or dynamic IP address</h3> +<p>If you want to host your server at home, make sure you have a static IP address, or you can change your dynamic IP address to a static one. Refer to your router settings, some ISPs will have options on this here. If you can't find anything on this, get in touch with your ISP.</p> +<p>Once you've made sure you have a static IP address, you can find out what the IP address is with various websites. You can use a search engine to easily find this out. Write this down as you'll need it later.</p> +<p>Once you're done, you can pretty much follow every guide on this website, the only difference is that you'll need to forward the ports you'll be using for the server.</p> +<h3>Finding the ports you'll need to forward</h3> +<p>If you need to know what port you'll need to forward, there's a command for that. Just type <code>netstat -tulpn</code> in your servers command line. If you want to see the name of the programs, you need to run it as a root user. You can do this by putting <code>sudo</code> before the command.</p> +<pre><code>Local Address State PID/Program name +0.0.0.0:25 LISTEN 887/master +0.0.0.0:1883 LISTEN 22452/mosquitto +0.0.0.0:445 LISTEN 798/smbd +0.0.0.0:993 LISTEN 381/dovecot +127.0.0.1:3306 LISTEN 560/mysqld +0.0.0.0:587 LISTEN 887/master +0.0.0.0:139 LISTEN 798/smbd +127.0.1.1:12301 LISTEN 412/opendkim +0.0.0.0:143 LISTEN 381/dovecot +0.0.0.0:465 LISTEN 887/master +0.0.0.0:22 LISTEN 472/sshd +:::25 LISTEN 887/master +:::443 LISTEN 1769/apache2 +:::1883 LISTEN 22452/mosquitto +:::445 LISTEN 798/smbd</code></pre> +<p><em>Example output</em></p> + +<p>In this example, if you need to find the port number from <code>dovecot</code>, you can look for it in the <code>Program name</code> column. Then you can see in the local address column that the reported local address is <code>0.0.0.0:993</code>. You need to look for the part after the semicolon. In this case it's 993. So you'll need to forward port 993.</p> + +<span class="next"><a href="dns.html">Next: Connect Your Domain and Server</a></span> + +<hr> +<p><em>Written by <a href="https://github.com/hidde-j">hiddej</a></em> + </main> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> +</body> +</html> diff --git a/server.html b/server.html index eadae4b..fb5d6d5 100644 --- a/server.html +++ b/server.html @@ -113,7 +113,8 @@ Momentarily, you will be able to see your server's IP addresses which will be used for the next brief step: </p> - <span class=next><a href="dns.html">Next: Connect Your Domain and Server</a></span> + <span class=prev><a href="domain.html">Previous: Get a domain name.</a></span> + <span class=next><a href="dns.html">Next: Connect Your Domain and Server.</a></span> <hr> @@ -140,6 +141,6 @@ There's a low chance of their whole system collapsing or something, but I say it's a good idea to be hyper-precautious. </p> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/sshkeys.html b/sshkeys.html index 33aabe0..dc0160f 100644 --- a/sshkeys.html +++ b/sshkeys.html @@ -167,6 +167,6 @@ UsePAM <strong>no</strong></code></pre> </p> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> diff --git a/standalone.html b/standalone.html index 2336b2f..c9204d8 100644 --- a/standalone.html +++ b/standalone.html @@ -27,6 +27,6 @@ systemctl start nginx</code></pre> <p>The reason we deactivate Nginx is that it uses the ports that Certbot will want to bind to, and thus we must temporarily turn Nginx off to let Certbot use those ports. (What it actually does is spin up a dummy webserver that doesn't need to think about the Nginx configuration.)</p> <p>This is just a little note of something that might confuse people, but the three commands above should suffice. If your site is still managed by Nginx, it should still be able to renew with simple <code>certbot renew --nginx</code> without a problem.</p> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> @@ -5,6 +5,7 @@ body { color: beige ; background: #111 ; margin-bottom: 200px ; + font-family: sans-serif ; } h1 { @@ -66,7 +67,7 @@ pre { .wide { max-width: inherit ; } -p img, li img, h1 img, h2 img, h3 img, h4 img { +p img, li img, h1 img, h2 img, h3 img, h4 img, dt img { vertical-align: middle ; max-width: 1em; max-height: 1em; @@ -168,7 +169,27 @@ aside.callout { main { max-width: 850px ; } } -.ll { font-size: large ; line-height: 1.3em ; max-width: 600px; margin: auto ; } +.ll { + font-size: large ; + line-height: 1.3em ; + max-width: 600px; + margin: auto ; +} + +.ll dd { + display: inline ; +} + +.ll dt { + display: inline-block ; + width: 6em ; +} + +.ll dd:after { + display:block; + content: '' ; +} + /* These settings are for the cryptocurrency donation QR codes and info on the * main page. */ @@ -197,19 +218,30 @@ aside.callout { 100% {color: lightblue} } +.prev { + font-size: large ; + text-align: center ; + margin: auto ; + display: block ; + font-weight: bold ; +} + +.prev:before { + content: "👈" ; +} + .next a { color: inherit ; } .next { - color: red ; -webkit-animation:next 1s infinite alternate ; font-size: xx-large ; text-align: center ; margin: auto ; display: block ; font-weight: bold ; - padding: 1em ; + padding: 0 1em 1em 1em ; } .next:before { diff --git a/template.html b/template.html index 576995d..b7485fc 100644 --- a/template.html +++ b/template.html @@ -15,6 +15,6 @@ <++> <span class=next><a href="<++>">Next:<++></a></span> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> @@ -22,19 +22,21 @@ <h3>Installing Tor</h3> - <p>Firstly we need to add the Tor repos to our system to get the latest version of Tor:</p> + <p>First, we need to ensure that our CPU architecture is supported. Ensure that it is either amd64, arm64, or i386:</p> + <pre><code>dpkg --print-architecture</code></pre> + + <p>We need to <a href="https://support.torproject.org/apt/tor-deb-repo/">add the Tor repos to our system</a> to get the latest version of Tor:</p> <pre><code>apt install -y apt-transport-https gpg -echo "deb https://deb.torproject.org/torproject.org buster main -deb-src https://deb.torproject.org/torproject.org buster main" > /etc/apt/sources.list.d/tor.list</code></pre> +echo "deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org $(lsb_release -cs) main +deb-src [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org $(lsb_release -cs) main" > /etc/apt/sources.list.d/tor.list</code></pre> - <p>Then we need to add the gpg keys to our keyring:</p> + <p>Then we need to add the GPG keys to our keyring:</p> - <pre><code>curl -s https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --import -gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -</code></pre> + <pre><code>curl -s https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --dearmor > /usr/share/keyrings/tor-archive-keyring.gpg</code></pre> - <p>Now update and install Tor:</p> + <p>Now install Tor:</p> - <pre><code>apt update + <pre><code>apt update apt install tor deb.torproject.org-keyring</code></pre> <h3>Enabling Tor</h3> @@ -56,8 +58,8 @@ HiddenServicePort 80 127.0.0.1:80</code></pre> <p>If the next command outputs <q>active</q> in green you're golden!</p> <pre><code> systemctl status tor</code></pre> - - <p>Now your server is on the dark web. The following command will give you your onion address:</p> + + <p>Now your server is on the dark web. The following command will give you your onion address:</p> <pre><code> cat /var/lib/tor/hidden_service/hostname</code></pre> <h2>Adding the Nginx Config</h2> @@ -83,15 +85,27 @@ HiddenServicePort 80 127.0.0.1:80</code></pre> Now we are almost done, all we have to do is enable the site and reload nginx which, is also covered in <a href="nginx.html#enable">the webserver tutorial</a>. </p> + <h3>Advertise your onion service</h3> + + <p>You can add the Onion-Location header to your normal website to advertise your onion service to Tor users. On your regular site's nginx config, add the following line:</p> + <pre><code>server { + ... + add_header Onion-Location http://<strong>your-onion-address</strong>.onion$request_uri; +}</code></pre> + <p>After doing this and reloading nginx, when visiting your regular site via Tor, you should see a ".onion available" button on the address bar, which should take you to the onion service.</p> + <h3>Update regularly!</h3> <p>Make sure to update Tor on a regular basis by running:</p> <pre><code>apt update apt install tor</code></pre> - <p><strong>Contributor</strong> - <a href="https://tomfasano.xyz" target="_blank">tomfasano.xyz</a></p> + <h4>Note:</h4> + <p>You do <u>not</u> need to run certbot for an ssl certificate. HTTP over tor is plenty secure!</p> + + <p><strong>Contributor</strong> - <a href="https://tomfasano.co" target="_blank">tomfasano.co</a></p> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> @@ -59,7 +59,7 @@ ufw enable</code></pre> </aside> <p> - With the firewall enabled and allowing only SSH in, all other ports are prortected from incoming requests. + With the firewall enabled and allowing only SSH in, all other ports are protected from incoming requests. To view all your rules, run: </p> @@ -188,6 +188,6 @@ ufw status verbose</code></pre> <strong>Contributor</strong> - <a href="https://shunter.xyz">shunter.xyz</a> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> @@ -51,10 +51,10 @@ Find the line that says <code>admins = { }</code> and to this we can specify one </p> <pre><code># To add one admin: -admins = { "chad@example.org" } +admins = { "<strong>chad@example.org</strong>" } # We can add more than one by separating them by commas. (This file is written in Lua.) -admins = { "chad@example.org", "chadmin@example.org" }</code></pre> +admins = { "<strong>chad@example.org</strong>", "<strong>chadmin@example.org</strong>" }</code></pre> <p> Note that we have not created these accounts yet, we will do this <a href=#user>below</a>. @@ -96,27 +96,57 @@ Read more about the <code>muc</code> plugin on the Prosody documentation page <a </p> </aside> - -<h3>End-to-end Encryption</h3> +<h3>Enabling chat histories</h3> <p> -Importantly, we'll want end-to-end encryption enabled for user privacy. +By default, Prosody will send out messages received only to the first available clients. +That means that if you have your desktop client turned off and your cell phone receives a message, it will <em>not</em> be available to the desktop client when you start it. </p> +<p>While this may be preferred in some cases, enable the MAM module (Message Archive Management) to have the server hold on messages and sync them to all clients.</p> + <p> -Find the array beginning with <code>modules_enabled</code>. -This includes a list of modules to be used. -Add -<code>"omemo_all_access";</code> to that list. -Additionally, be sure to change the module <code>pep</code> to <code>pep_simple</code> or this will cause a conflict.</p> +Within the <code>modules_enabled</code> block, you can uncomment the <code>mam</code> line to enable it. +You can see other settings for this module <a href="https://prosody.im/doc/modules/mod_mam">here</a> like, for example, how long a server should hold on to message histories for synching. +</p> <p> -This module is not installed by default, -but you can easily download it by running the following command on the command prompt -to download and install the module to the correct directory. +Note also that Prosody comes with the <code>carbons</code> activated module by default, which is related. This will send received messages to <em>all</em> active clients (your phone and desktop), although it will not save messages like MAM for clients not online or to be added later. </p> -<pre class=wide><code>curl -sL https://hg.prosody.im/prosody-modules/raw-file/785389a2d2b3/mod_omemo_all_access/mod_omemo_all_access.lua > /usr/lib/prosody/modules/mod_omemo_all_access.lua</code></pre> +<h3>File sharing</h3> + +<p>With this we can bring XMPP to the level of other popular instant messaging applications like Matrix and whatsapp. It is extremely easy to setup. This part is optional, but it can make XMPP more normie-friendly if you plan on moving family members and friends over to XMPP.</p> + +<p>First we need to install extra prosody modules. Run the following command: </p> +<pre><code>apt install prosody-modules</code></pre> + +<p>Then we can add the following line to you prosody config file to enable file uploads: </p> +<pre><code>Component "<strong>uploads.example.org</strong>" "http_upload"</code></pre> + +<p>As you will notice, you need another subdomain for this. We will add an ssl certficate for this later.</p> + +<p>You will also need to go back to <code>modules_enabled</code> and uncomment the <code>http_files</code> module. This is used to actually serve the files to users.</p> + +<p>And the last part of the setup is to enable the built in proxy server. This helps with file transfers for devices behind a NAT, and unless you are using XMPP in a LAN, you probably need this. Enable the proxy by adding the following line to the config: </p> + +<pre><code>Component "<strong>proxy.example.org</strong>" "proxy65"</code></pre> + +<p>As you can see, another subdomain is needed. We will add ssl certificates for this later.</p> + +<p>At this point, file sharing is now setup and ready to be used. Although there are some concerns that should be addressed.</p> + +<p>A big concern with file sharing is large files, seeing as all files shared over XMPP will be stored on your server. This can become a problem when many (and large) files are being shared. We can put a cap on large files by adding the following line to our config:</p> +<pre><code>http_upload_file_size_limit = 20971520</code></pre> + +<p>This puts a 20MB cap on all files being shared. The value is specified in bytes. You can also specify after how long files should be deleted by adding the following line:</p> +<pre><code>http_upload_expire_after = 60 * 60 * 24 * 7</code></pre> + +<p>The value is specified in seconds. The above line will make prosody delete files after a week.</p> + +<p>If it is for some reason neccessary, you can also manually invoke expiry with the following command:</p> + +<pre><code>prosodyctl mod_http_upload expire</code></pre> <h3>Other things to check</h3> @@ -124,6 +154,12 @@ to download and install the module to the correct directory. For example, if you want to run a general public XMPP server, you can allow anyone to create an account by changing <code>allow_registration</code> to <code>true</code>. </p> +<p>Another thing you can do is enable the <code>csi_simple</code> module, which will add some optimizations for mobile devices.</p> + +<p>Another thing worth noting is the <code>archive_expires_after = "1w"</code> line. This specifies after how long message archives will be deleted.</p> + +<p>Also the <code>smacks</code> module helps a lot with slow internet connections.</p> + <h2>Certificates</h2> <p> @@ -139,6 +175,13 @@ Include the <code>--nginx</code> option assuming you have an Nginx server runnin <pre><code>certbot -d <strong>chat.example.org</strong> --nginx</code></pre> <p> +<strong>If you have file sharing enabled, be sure to get a certificate for those subdomains as well.</strong> +</p> +<pre><code>certbot -d <strong>uploads.example.org</strong> --nginx +certbot -d <strong>proxy.example.org</strong> --nginx +</code></pre> + +<p> Once you have the certificates for encryption, run the following to import them into Prosody. </p> @@ -146,13 +189,13 @@ Once you have the certificates for encryption, run the following to import them <p> Note that you might get an error that a certificate has not been found if your <code>muc</code> subdomain and your main domain share a certificate. -It should still work, this is just notifying you that no specific +It should still work, this is just notifying you that no specific certificate for the subdomain. </p> +<p><strong>Note:</strong> The above command will need to be rerun when certificates are renewed. +You may want to create a <a href="cron.html">cronjob</a> to have this done automatically.</p> + -<p> -For user privacy, we will definitely want to install and enable encryption with OMEMO. -</p> <h2 id=user>Creating users/admins manually</h2> @@ -183,7 +226,7 @@ Once your server is set up, you just need an XMPP client to use your new and sec <ul> <li>GNU/Linux: <a href="https://dino.im/">Dino</a> or <a href="https://gajim.org/">Gajim</a></li> <li>Windows: <a href="https://gajim.org/">Gajim</a> also runs on Windows.</li> - <li>Android: <a href="https://conversations.im/">Conversations.im</a></li> + <li>Android: <a href="https://conversations.im/">Conversations.im</a> or <a href="https://snikket.org/">snikket</a></li> <li>Mac/iOS: <a href="https://monal.im/">Monal IM</a> or <a href="https://siskin.im/">Siskin</a> for iOS alone</li> <li>command-line (GNU/Linux, MacOS, Windows): <a href="https://profanity-im.github.io/">Profanity</a></li> <li><a href="https://xmpp.org/software/clients.html">See a more complete list kept by XMPP</a></li> @@ -209,6 +252,6 @@ Chatrooms are created and referred to in the following format: <code><strong>#ch </p> </main> - <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="pix/btc.png"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="pix/xmr.png"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> + <footer><a href="https://landchad.net">LandChad.net</a></br>Because Everyone should be an Internet LandChad.</br><a href="index.html"><li><img src="pix/chad.gif" alt="chad"></li></a><a href="rss.xml"><li><img src="pix/rss.svg" alt="RSS"></li></a><a href="donate-bitcoin.html"><li><img src="pix/btc.svg" alt="BTC"></li></a><a href="donate-monero.html"><li><img src="pix/xmr.svg" alt="XMR"></li></a><a href="https://github.com/lukesmithxyz/landchad"><li><img src="pix/git.svg" alt="Github"></li></a></footer> </body> </html> |
