<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Infrastructure on Obsessive Computer Documentation</title>
    <link>https://blog.sleekwater.co.uk/categories/infrastructure/</link>
    <description>Recent content in Infrastructure on Obsessive Computer Documentation</description>
    <generator>Hugo</generator>
    <language>en</language>
    <atom:link href="https://blog.sleekwater.co.uk/categories/infrastructure/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Apache</title>
      <link>https://blog.sleekwater.co.uk/docs/infrastructure/apache/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.sleekwater.co.uk/docs/infrastructure/apache/</guid>
      <description>&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;&#xA;&lt;p&gt;Everybody wants to rule the world, but Apache actually does&lt;/p&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&#34;https://blog.sleekwater.co.uk/docs/infrastructure/apache/apache.avif&#34; alt=&#34;Apache&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://httpd.apache.org/&#34;&gt;Apache&lt;/a&gt; is the granddaddy of open source projects - and probably one of the simplest. It&amp;rsquo;s a fileserver, it takes files from your hard disk and gives them to people who ask for them.&lt;/p&gt;&#xA;&lt;p&gt;Since you might not want to do that for every file, it has a set of rules for which files it can serve, from where and who to&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bitwarden</title>
      <link>https://blog.sleekwater.co.uk/docs/infrastructure/bitwarden/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.sleekwater.co.uk/docs/infrastructure/bitwarden/</guid>
      <description>&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;&#xA;&lt;p&gt;My bitwarden setup&lt;/p&gt;&#xA;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Docker</title>
      <link>https://blog.sleekwater.co.uk/docs/infrastructure/docker/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.sleekwater.co.uk/docs/infrastructure/docker/</guid>
      <description>&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;&#xA;&lt;p&gt;Solving your deployment problems&lt;/p&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Docker is a program that runs on your machine which allows you to run other, virtual machines. These virtual machines (&amp;ldquo;containers&amp;rdquo; in docker-speak) are isolated from your machine (&amp;ldquo;host&amp;rdquo; in docker-speak).&lt;/p&gt;&#xA;&lt;p&gt;A container has an operating system (almost always Linux) and comes with it&amp;rsquo;s own private filesystem. They&amp;rsquo;re normally configured to access the internet through the host network.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Technically, Docker is just one program of many that can run OCI-compliant (Open Container Initiative) containers. For example, Kubernetes can also run containers. Docker is a lot simpler than Kubernetes, and as such has a significantly shallower learning curve. Plus, it&amp;rsquo;s extremely popular.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Filebrowser</title>
      <link>https://blog.sleekwater.co.uk/docs/infrastructure/filebrowser/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.sleekwater.co.uk/docs/infrastructure/filebrowser/</guid>
      <description>&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;&#xA;&lt;p&gt;Nobody likes FTP&lt;/p&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&#34;https://blog.sleekwater.co.uk/docs/infrastructure/filebrowser/banner.png&#34; alt=&#34;Filebrowser logo&#34;&gt;&#xA;In the dim and distant past of the internet, we had different protocols for different things - and FTP was for transferring files.&lt;/p&gt;&#xA;&lt;p&gt;Nowadays everyone uses a web browser, and so of course all those FTP applications (with universally &lt;em&gt;terrible&lt;/em&gt; UI&amp;rsquo;s) have been replaced with web page apps using HTTP(s)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://filebrowser.org/&#34;&gt;Filebrowser&lt;/a&gt; is one of those web page apps. It has a lovely UI. You install it somewhere, and it gives access to a portion of your hard disk to anyone with a web browser and a password.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git</title>
      <link>https://blog.sleekwater.co.uk/docs/infrastructure/git/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.sleekwater.co.uk/docs/infrastructure/git/</guid>
      <description>&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;&#xA;&lt;p&gt;Wherein it becomes apparent that upsetting one of the brightest developers in the world is a very bad idea.&lt;/p&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h3 id=&#34;a-brief-history-lesson&#34;&gt;A brief history lesson&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#a-brief-history-lesson&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;In the bad old days, source control was client-server. You, the client, talked to the single central server to check out your files, and once you&amp;rsquo;d modified them you told the server about your changes.&lt;/p&gt;&#xA;&lt;p&gt;In the mean time, nobody else could change those files on the server - they were locked out.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gitea</title>
      <link>https://blog.sleekwater.co.uk/docs/infrastructure/git/gitea/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.sleekwater.co.uk/docs/infrastructure/git/gitea/</guid>
      <description>&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;&#xA;&lt;p&gt;Because there&amp;rsquo;s no such thing as a free lunch&lt;/p&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;There are a number of organisations (bitbucket, gitlab, github, etc) who will run a git server for you. Most of them have a free or freemium tier, but these tend to be free in the sense of &amp;ldquo;the first one&amp;rsquo;s free&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;You can instead self host your own git server: &lt;a href=&#34;https://about.gitea.com/&#34;&gt;https://about.gitea.com/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s my docker-compose.yaml, as per &lt;a href=&#34;https://docs.gitea.com/installation/install-with-docker-rootless&#34;&gt;the official instructions&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you want to keep any data then the volumes &lt;em&gt;must&lt;/em&gt; to be edited to match what you&amp;rsquo;ve got available on your &lt;a href=&#34;https://blog.sleekwater.co.uk/docs/infrastructure/docker/#volume&#34;&gt;docker host machine&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Immich</title>
      <link>https://blog.sleekwater.co.uk/docs/infrastructure/immich/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.sleekwater.co.uk/docs/infrastructure/immich/</guid>
      <description>&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;&#xA;&lt;p&gt;Accessing my photos from anywhere&lt;/p&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&#34;https://blog.sleekwater.co.uk/docs/infrastructure/immich/immich-logo-inline-light.png?width=200px&#34; alt=&#34;immich&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a free service from Google, called Google photos. This allows you to put your photos onto a private place on the web, and share links to them - but it&amp;rsquo;s limited to 15Gb.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve got way more than 15Gb of photos, and I&amp;rsquo;m not paying Google for something I can host myself.&lt;/p&gt;&#xA;&lt;p&gt;Immich is an open source, docker-deployed image hosting platform which is sufficiently efficient to run on a Raspberry Pi 4.&#xA;I&amp;rsquo;ve got plugged into an external HDD of 4Tb&lt;/p&gt;</description>
    </item>
    <item>
      <title>Infrastructure</title>
      <link>https://blog.sleekwater.co.uk/docs/infrastructure/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.sleekwater.co.uk/docs/infrastructure/</guid>
      <description>&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;&#xA;&lt;p&gt;It&amp;rsquo;s turtles all the way down. This is how they&amp;rsquo;re stacked&lt;/p&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;``&lt;img src=&#34;https://blog.sleekwater.co.uk/docs/infrastructure/Afallon.drawio.png&#34; alt=&#34;Home lab&#34;&gt;```&lt;/p&gt;&#xA;&lt;h1 id=&#34;servers&#34;&gt;Servers&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#servers&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;homeassistant&#34;&gt;homeassistant&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#homeassistant&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Always on. SSH provided by HA plugin - firewalled? &lt;a href=&#34;http://192.168.0.200:8123/core_ssh/ingress&#34;&gt;Web access&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Static IP: 192.168.0.200&lt;/p&gt;&#xA;&lt;p&gt;mDNS: homeassistant.local&lt;/p&gt;&#xA;&#xA;&#xA;&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;&#xA;&lt;h4 class=&#34;alert-heading&#34;&gt;Home Assistant&lt;/h4&gt;&#xA;&#xA;    &lt;p&gt;&lt;a href=&#34;http://192.168.0.200:8123&#34;&gt;UI&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;../home-automation/home_assistant/_index.md&#34;&gt;Details&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;immich&#34;&gt;immich&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#immich&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Always on. Public server. SSH running&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://192.168.0.201:9090&#34;&gt;Cockpit&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&#xA;&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;&#xA;&lt;h4 class=&#34;alert-heading&#34;&gt;Special requirements&lt;/h4&gt;&#xA;&#xA;    External disk (/dev/sda2) needs manual intervention after a power outage&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Static IP: 192.168.0.201&lt;/p&gt;&#xA;&lt;p&gt;mDNS: immich.local&lt;/p&gt;&#xA;&#xA;&#xA;&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;&#xA;&lt;h4 class=&#34;alert-heading&#34;&gt;Immich&lt;/h4&gt;&#xA;&#xA;    &lt;p&gt;&lt;a href=&#34;http://192.168.0.201:2283&#34;&gt;UI&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Integrated Development Environments</title>
      <link>https://blog.sleekwater.co.uk/docs/infrastructure/ide/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.sleekwater.co.uk/docs/infrastructure/ide/</guid>
      <description>&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;&#xA;&lt;p&gt;Capturing developer eyeballs since forever&lt;/p&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h3 id=&#34;eclipse&#34;&gt;Eclipse&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#eclipse&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;intellij-idea&#34;&gt;IntelliJ IDEA&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#intellij-idea&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;visual-studio-code&#34;&gt;Visual Studio Code&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#visual-studio-code&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Remote-SSH&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;What if the files aren&amp;rsquo;t on your own local hard disk, but on a different machine? You could copy them locally, or you could use SSH to do this invisibly for you.&lt;/p&gt;&#xA;&lt;p&gt;This is what the Remote-SSH plugin does - it acts as a filesystem, so the remote files look like they&amp;rsquo;re local.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubernetes</title>
      <link>https://blog.sleekwater.co.uk/docs/infrastructure/kubernetes/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.sleekwater.co.uk/docs/infrastructure/kubernetes/</guid>
      <description>&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;&#xA;&lt;p&gt;Tetris for computers&lt;/p&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Let&amp;rsquo;s assume you&amp;rsquo;ve got a bunch of applications running in &lt;a href=&#34;https://blog.sleekwater.co.uk/docs/infrastructure/docker/&#34;&gt;docker&lt;/a&gt; containers, and a number of computers (aka nodes) to run them on.&lt;/p&gt;&#xA;&lt;p&gt;How are you going to decide which docker container to put on what node?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This implies you &lt;em&gt;have&lt;/em&gt; a lot of containers &lt;em&gt;and&lt;/em&gt; a lot of nodes - otherwise why bother? This pattern is also known as &amp;ldquo;cattle not pets&amp;rdquo; - you need a lot of livestock before you should bother. This has led to a meme of &amp;ldquo;I deployed my blog on Kubernetes&amp;rdquo;, where there&amp;rsquo;s this whole infrastructure for a single small item.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OCI</title>
      <link>https://blog.sleekwater.co.uk/docs/infrastructure/oci/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.sleekwater.co.uk/docs/infrastructure/oci/</guid>
      <description>&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;&#xA;&lt;p&gt;Your first evil is free&lt;/p&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Oracle have their own cloud offering, similar to AWS and Microsoft. As they&amp;rsquo;re not very popular, they offer some services for free, forever.&lt;/p&gt;&#xA;&lt;p&gt;While these instances are tiny, they&amp;rsquo;re quite useful to host small things, and as a public portal to my home-based infrastructure, via &lt;a href=&#34;https://blog.sleekwater.co.uk/docs/infrastructure/wireguard/&#34;&gt;Wireguard&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;account&#34;&gt;Account&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#account&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Login = &lt;a href=&#34;https://cloud.oracle.com&#34;&gt;https://cloud.oracle.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Account name = dibblengrub&lt;/p&gt;&#xA;&lt;p&gt;Username = &lt;a href=&#34;mailto:dibblengrub@gmail.com&#34;&gt;dibblengrub@gmail.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You will need the password from Bitwarden and the 2fa token from Authenticator&lt;/p&gt;</description>
    </item>
    <item>
      <title>Photobooth</title>
      <link>https://blog.sleekwater.co.uk/docs/infrastructure/photobooth/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.sleekwater.co.uk/docs/infrastructure/photobooth/</guid>
      <description>&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;&#xA;&lt;p&gt;Photos in parties&lt;/p&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Who wants to spend their time taking photos in a party when you could be doing better things? Why not have a ruggedised, self serve photo booth so everyone can take their own shots.&lt;/p&gt;&#xA;&lt;p&gt;The photobooth is an rPi v3 with a high quality camera board, a manual-focus 6mm lens and a single ruggedised button configured as a usb keyboard. On boot it runs some hacky python code&lt;/p&gt;</description>
    </item>
    <item>
      <title>Spark</title>
      <link>https://blog.sleekwater.co.uk/docs/infrastructure/spark/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.sleekwater.co.uk/docs/infrastructure/spark/</guid>
      <description>&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;&#xA;&lt;p&gt;No such thing as &amp;ldquo;too big&amp;rdquo;&lt;/p&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;img src=&#34;spark-logo.png&#34; width=&#34;200px&#34; height=&#34;200&#34;&gt;&#xA;&lt;p&gt;Originally developed by UC Berkley (who have quite a heritage) it&amp;rsquo;s now the worlds&amp;rsquo; favourite way of processing data that&amp;rsquo;s too big to fit on one machine.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.sleekwater.co.uk/docs/infrastructure/spark/docker/&#34;&gt;Docker setup&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;architecture&#34;&gt;Architecture&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#architecture&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;First, you express what you want to happen in SQL, Python, Scala, R or Java. These are all equivalent, but Spark itself is written in Scala.&lt;/p&gt;&#xA;&lt;h2 id=&#34;execution-plans&#34;&gt;Execution plans&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#execution-plans&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;From your code Spark generates a series of execution plans.&lt;/p&gt;</description>
    </item>
    <item>
      <title>VNC</title>
      <link>https://blog.sleekwater.co.uk/docs/infrastructure/vnc/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.sleekwater.co.uk/docs/infrastructure/vnc/</guid>
      <description>&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;&#xA;&lt;p&gt;Accessing servers UI from anywhere&lt;/p&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;I prefer to use &lt;a href=&#34;https://blog.sleekwater.co.uk/docs/infrastructure/ssh/&#34;&gt;SSH&lt;/a&gt; to access a machine. However, sometimes you need to use a UI&lt;/p&gt;&#xA;&lt;p&gt;VNC is the client (running on windows) that allows you access a remote desktop from a linux machine.&lt;/p&gt;&#xA;&lt;p&gt;You&amp;rsquo;ll need the desktop running on the server - if it&amp;rsquo;s not already booted then use &lt;code&gt;sudo startx&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;captive-portal&#34;&gt;Captive portal&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#captive-portal&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Set up the rpi as an access point&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wireguard</title>
      <link>https://blog.sleekwater.co.uk/docs/infrastructure/wireguard/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.sleekwater.co.uk/docs/infrastructure/wireguard/</guid>
      <description>&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;&#xA;&lt;p&gt;Everyone&amp;rsquo;s a network engineer now&lt;/p&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&#34;https://blog.sleekwater.co.uk/docs/infrastructure/wireguard/wireguard.svg&#34; alt=&#34;Wireguard&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.wireguard.com/&#34;&gt;Wireguard&lt;/a&gt; is a lovely bit of open source code &lt;em&gt;for Linux machines&lt;/em&gt;, which creates a VPN (virtual private network) with very little effort&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt install wireguard&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;background&#34;&gt;Background&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#background&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;You&amp;rsquo;re on machine A, and you want to get to machine B. Wireguard will set up a tunnel between A and B, so that they appear to be next to each other, even though there may be machines inbetween that are owned by hostile actors.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
