{"id":8699,"date":"2025-02-06T12:47:16","date_gmt":"2025-02-06T10:47:16","guid":{"rendered":"https:\/\/site.noi3.org\/?p=8699"},"modified":"2025-02-06T12:47:19","modified_gmt":"2025-02-06T10:47:19","slug":"introduction-to-a-self-managed-life","status":"publish","type":"post","link":"https:\/\/site.noi3.org\/?p=8699","title":{"rendered":"Introduction to a Self Managed Life"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Preface<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Dedication<\/h2>\n\n\n\n<p>Thank you to Tim Gilles, aka Slipperman, whose remarks on what makes someone a&nbsp;<em>\u201creal professional\u201d<\/em>&nbsp;stuck with me for a lifetime. I listened to Tim on the mixerman radio show. Tim wanted to demystify his craft in a way that anyone could understand; that would inspire EVERYONE to pick up a microphone &amp; a tape machine and give it a shot themselves. He did this with his own&nbsp;<a href=\"https:\/\/archive.org\/stream\/SlippermansRecordingDistortedGuitarsFromHellreadableVersion\/Slipperman%27s%20Recording%20Distorted%20Guitars%20From%20Hell%20%28readable%20version%29_djvu.txt\">\u201cunique\u201d writing style<\/a>. His work inspired me to do the same with everything I\u2019ve done, from board repair to self-managed servers. Tim passed away two years ago. I hope his legacy lives in through everyone who tries to open doors for the next generation rather than gatekeep information via ego inflating elitism.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"477\" height=\"375\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image.png\" alt=\"\" class=\"wp-image-8700\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image.png 477w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-300x236.png 300w\" sizes=\"auto, (max-width: 477px) 100vw, 477px\" \/><\/figure><\/div>\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Tim_gilles.jpg\"><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Intro<\/h2>\n\n\n\n<p>I started using GNU\/Linux in 2002, back when I saved up the $79.99 necessary to buy SuSE Linux 8.1 Professional as a boxed set from the Best Buy across the street from the Staten Island mall for my 14th birthday. I started hosting my own servers in 2005, and put together systems for my own business\u2019 use since early 2011. I didn\u2019t do everything outlined here immediately; it was slowly built piece by piece over a long time. I never documented it in a way that would allow my grandma to use it. In 22 years, I can\u2019t remember reading GNU\/Linux documentation that felt like it was designed for normal people. That\u2019s what I\u2019m looking to do here.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"211\" height=\"375\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-1.png\" alt=\"\" class=\"wp-image-8701\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-1.png 211w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-1-169x300.png 169w\" sizes=\"auto, (max-width: 211px) 100vw, 211px\" \/><\/figure><\/div>\n\n\n<p><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Suse.jpeg\"><\/a><\/p>\n\n\n\n<p>From 2002 to the present, two things remain true:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You can do cool things with GNU\/Linux<\/li>\n\n\n\n<li>These cool things are hidden behind a labyrinth of\n<ul class=\"wp-block-list\">\n<li>Half baked software<\/li>\n\n\n\n<li><a href=\"https:\/\/medium.com\/@fulalas\/gnome-mess-is-not-an-accident-4e301032670c\">Horrible UI<\/a><\/li>\n\n\n\n<li>Forum elitists &amp;&nbsp;<a href=\"https:\/\/forum.netgate.com\/topic\/184398\/kea-dhcp-missing-register-dhcp-leases-in-dns-resolver\/7\">gaslighting assholes<\/a>&nbsp;who will make you think YOU\u2019RE the crazy one for expecting&nbsp;<a href=\"https:\/\/forum.netgate.com\/post\/1174947\">things to work<\/a>.<\/li>\n\n\n\n<li>People that will tell you to&nbsp;<em>\u201cRTFM\u201d<\/em>&nbsp;with no regard for whether that documentation actually works.<\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/index.php\/File:Lu55028jxckj_tmp_1514c051.png\">black boxes<\/a>. I mean&nbsp;<em><strong>literally hidden<\/strong><\/em>&nbsp;behind&nbsp;<em>actual black boxes.<\/em>&nbsp;For six months.&nbsp;<a href=\"https:\/\/bugs.launchpad.net\/subiquity\/+bug\/2062102\">Unfixed<\/a>. On the stable version of a server operating system<em>&nbsp;(that bug is present in 24.10 long-term-stable even today)<\/em>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>So much of the open source user experience is&nbsp;<strong>not designed for normal people<\/strong>. Whether it was using&nbsp;<a href=\"https:\/\/bbs.archlinux.org\/viewtopic.php?id=21650\">NDISwrapper 20 years ago to get wifi to work<\/a>&nbsp;or messing with&nbsp;<a href=\"https:\/\/bbs.archlinux.org\/viewtopic.php?id=1718\">SCSI emulation<\/a>&nbsp;to burn a CD, GNU\/Linux is pain. It\u2019s all pain.<\/p>\n\n\n\n<p>It\u2019s painful enough that people will happily trade their data, sovereignty, privacy, and their rights to avoid ever having to deal with it; and I can\u2019t blame them.<\/p>\n\n\n\n<p>This has to change. As of 2024, most of you live your life:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Dependent on closed source software.<\/li>\n\n\n\n<li>Running on someone else\u2019s server where you can be kicked off at any time.<\/li>\n\n\n\n<li>Forced into&nbsp;<a href=\"https:\/\/techcrunch.com\/2024\/03\/05\/roku-disables-tvs-and-streaming-devices-until-users-consent-to-forced-arbitration\/\">forced arbitration<\/a>&nbsp;or your device won\u2019t work anymore.<\/li>\n\n\n\n<li>With&nbsp;<a href=\"https:\/\/www.nytimes.com\/2022\/08\/21\/technology\/google-surveillance-toddler-photo.html\">no privacy<\/a>.<\/li>\n\n\n\n<li><a href=\"https:\/\/web.archive.org\/web\/20240628071953\/https:\/\/www.nytimes.com\/2024\/06\/26\/technology\/terms-service-ai-training.html\">Training AI<\/a>&nbsp;with your creations.<\/li>\n<\/ol>\n\n\n\n<p>Now is a time like no other for you to feel empowered to build systems that&nbsp;<strong>you<\/strong>&nbsp;control &amp; understand.<\/p>\n\n\n\n<p>My goal with this guide is not to tell you the way you&nbsp;<strong>HAVE<\/strong>&nbsp;to do something, or to imply that my way is the best. My goal is to inspire you by showing you what\u2019s possible. You don\u2019t have to be a computer engineer or someone with an IQ of 160 to figure this all out. And, admittedly, to inspire capable developers to look at the pain points scattered throughout this guide (of which there are many) and decide&nbsp;<em>\u201cenough is enough; let\u2019s make this better.\u201d<\/em><\/p>\n\n\n\n<p>The fun here is in&nbsp;<em>building your own system, your own way<\/em>. This is my sovereign cloud; there are many like it, but this one is mine. I can\u2019t wait to see how you build yours.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Why Build Your Own Sovereign Cloud?<\/h1>\n\n\n\n<p>Apple and Google push users into closed ecosystems while removing options for personal control over data. Think back to when smartphones had microSD card slots, so you could store your photos, videos, &amp; music locally &amp; cheaply. As these companies started pushing paid cloud services, microSD slots disappeared from every phone. Apple no longer&nbsp;<a href=\"https:\/\/www.macrumors.com\/2024\/05\/15\/ios-17-5-bug-deleted-photos-reappear\/\">gives you a working \u201cdelete\u201d button<\/a>, and Google has&nbsp;<a href=\"https:\/\/www.nytimes.com\/2022\/08\/21\/technology\/google-surveillance-toddler-photo.html\">mistakenly flagged people as criminals for sending photos a doctor requested of their sick child<\/a>&nbsp;during COVID lockdowns. These issues come up because you don\u2019t own the software or services you\u2019re using. If you can\u2019t review the source code, it\u2019s not your software. If you can\u2019t host the service yourself, it\u2019s not really yours.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"603\" height=\"375\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-2.png\" alt=\"\" class=\"wp-image-8702\" style=\"width:416px;height:auto\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-2.png 603w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-2-300x187.png 300w\" sizes=\"auto, (max-width: 603px) 100vw, 603px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"375\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-4.png\" alt=\"\" class=\"wp-image-8704\" style=\"width:400px;height:auto\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-4.png 600w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-4-300x188.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>FUTO is looking to change that. We want to provide solutions that let you take back control, whether it\u2019s running your own cloud or hosting your own services. Many of these services have 1% adoption (if they\u2019re lucky!) because of the barriers to use.<\/p>\n\n\n\n<p>One example is Immich; it\u2019s photo gallery software that uses local AI, so you never have to worry about your personal data being analyzed by some remote server. It\u2019s incredibly fast &amp; efficient! I think it\u2019s the best in its field. Right now, if you want to use it, you need to set up your own GNU\/Linux server and use Docker to get everything running. You either become a GNU\/Linux sysadmin or you sell your data (and your soul) in exchange for a half-decent UI.<\/p>\n\n\n\n<p><strong>Until now!<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FUTO\u2019s belief in self managing your own servers.<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"983\" height=\"177\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-5.png\" alt=\"\" class=\"wp-image-8705\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-5.png 983w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-5-300x54.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-5-768x138.png 768w\" sizes=\"auto, (max-width: 983px) 100vw, 983px\" \/><\/figure>\n\n\n\n<p>We believe that any piece of software we create or offer that has a client, must be accompanied by server source code that allows you to run your own server. You have to have control over your devices. At the same time, if we throw the source code at you and tell you&nbsp;<em>\u201chave fun!\u201d<\/em>, have we really enabled you to run your own system? That\u2019s akin to throwing a party and saying&nbsp;<em>\u201chey, anyone who wants to join us is allowed in!\u201d<\/em>&nbsp;when you only tell your best friends where the door is. We want the door to the party to be open to everyone; and for&nbsp;<em><strong>all of you<\/strong><\/em>&nbsp;to know where it is. So, let\u2019s see if we can put spicy brownie\u2019s concerns to rest.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Rabbit Hole to Hell<\/h3>\n\n\n\n<p>I\u2019m going to show you exactly how to set this up because that\u2019s been a common question in the comments. I\u2019m going to show you how to set up&nbsp;<code>Immich<\/code>. To do that, I need to show you how I get my files from my phone to my server. If I\u2019m doing that, I\u2019m connecting to my server from outside, which means I have to show you how to set up a VPN tunnel. I\u2019m not going to forward ports for all these random services. If I\u2019m doing that, I might as well show you how to set up a router that will always get updates, which means building your own.<\/p>\n\n\n\n<p>While I\u2019m at it, I might as well show you how to block all ads, even when you\u2019re connected from your phone. While we\u2019re in there, let\u2019s show you how to set up something similar to Google Docs, Google Sheets, calendar, contacts, home surveillance with notifications, self-hosted mail, a business phone system that curses out annoying customers&nbsp;<em>for<\/em>&nbsp;you, and everything else.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Warning:<\/strong>&nbsp;This becomes a rabbit hole very quickly because there are so many items to cover. I\u2019m not going to breadcrumb you. I want to provide you with everything, which means we have to start from the BEGINNING!<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">A Long Journey Ahead<\/h2>\n\n\n\n<p>This isn\u2019t going to be a 10-minute video, nor will it be a 10-page guide. It\u2019ll probably be a ten-hour video, and a 1000-page guide. You\u2019ll get to figure out how much I hate you based on whether or not I provide you with timestamps or a table of contents.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Understanding the Basics: Modem, Router, Switch, and Wireless Access Point<\/h2>\n\n\n\n<p>Before we dive into discussing building a router, I want you to understand the key components of your home network: the modem, router, switch, and wireless access point. These devices work together to connect you to the internet and allow multiple devices to communicate with each other. Most consumer products package the router, switch, and wireless access point all in one, hiding from you what each component is for. You might even have a modem that includes all three, meaning you have one device on your home network! Let\u2019s break down the purpose of each device.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Modem<\/h3>\n\n\n\n<p>The modem is your gateway to the Internet, connecting your home to your Internet service provider (ISP).<\/p>\n\n\n\n<p><strong>What a Modem Does:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Translates the signal from your ISP (e.g., cable, fiber, or DSL) into a format your devices can use. However, typically, the interface for fiber is called an optical network terminal (ONT).<\/li>\n\n\n\n<li>Acts as the bridge between your ISP\u2019s network and your home network.<\/li>\n<\/ul>\n\n\n\n<p><strong>Types of Modems:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Cable Modem:<\/strong>&nbsp;Connects to your ISP via a coaxial cable.<\/li>\n\n\n\n<li><strong>DSL Modem:<\/strong>&nbsp;Connects via a phone line.<\/li>\n\n\n\n<li><strong>Fiber Modem:<\/strong>&nbsp;Connects via a fiber-optic cable. More properly called an optical network terminal (ONT)<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Important:<\/strong>&nbsp;A modem typically has only one Ethernet port, which is why you need additional devices like routers and switches to connect multiple devices in your home. A modem may have a phone jack to attach a standard telephone.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"999\" height=\"278\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-6.png\" alt=\"\" class=\"wp-image-8707\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-6.png 999w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-6-300x83.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-6-768x214.png 768w\" sizes=\"auto, (max-width: 999px) 100vw, 999px\" \/><\/figure>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Router<\/h3>\n\n\n\n<p>The router manages traffic between your local network (your home devices) and the internet (outside world).<\/p>\n\n\n\n<p><strong>What a Router Does:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Allows you to have more than one device on your network.<\/li>\n\n\n\n<li>If you attach your computer to your modem directly, you are simply connecting to the \u201coutside\u201d world\u2019s network. This is referred to as&nbsp;<strong>\u201cWAN\u201d<\/strong>&nbsp;&#8211; Wide Area Network is a network that connects multiple LANs over large distances, while a LAN is a network confined to a local area. This can work, but when you do this you do not have an internal network. The computer you attached to your modem is the only computer in your home that can go online with this configuration.<\/li>\n\n\n\n<li>Routers create a 2nd internal network for your devices so you can attach more than one thing to the internet (WAN). Wouldn\u2019t it suck if you could only have one wired device attached to your home internet? This is why most people need a router!<\/li>\n\n\n\n<li><strong>Routes Traffic:<\/strong>&nbsp;Directs internet traffic from the OUTSIDE (this is called the \u201cWAN\u201d) to the correct device on the INSIDE, your home network (this is called the \u201cLAN\u201d), and vice versa. Now, multiple devices (e.g., computers, phones, smart TVs) can communicate with the internet through your modem, and with each other within your home.<\/li>\n\n\n\n<li><strong>Provides NAT (Network Address Translation):<\/strong>&nbsp;Translates your devices\u2019 private IP addresses into a single public IP address provided by your ISP.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;The router you get from your ISP or buy from a store, 99% of the time, is a combo device that looks like this: includes a router, switch, and wireless access point all in one box. Understanding their roles separately is key when setting up a more advanced system like&nbsp;<strong>pfSense<\/strong>.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">Traditional wired router:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=11\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=11\">edit source<\/a>]<\/h4>\n\n\n\n<p>Below is a traditional wired router. This combines a router &amp; a switch but has no wireless access point.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"394\" height=\"375\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-7.png\" alt=\"\" class=\"wp-image-8708\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-7.png 394w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-7-300x286.png 300w\" sizes=\"auto, (max-width: 394px) 100vw, 394px\" \/><\/figure><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Cheap Walmart Wi-Fi router:<\/h4>\n\n\n\n<p>This is a TP-Link wireless router: a router, switch, and wireless access point all in one. This is most likely what you have in your closet right now, covered in wires, under the set of workout pants you bought six months ago after your failed New Year\u2019s resolution to go running every morning, that has slow speed unless you\u2019re 2 feet from it. These often come with SIP-ALG (a component that transforms Voice-over-IP packets, which generally isn&#8217;t needed any longer today) on by default, and will mess with your phone systems endlessly even if you try turning it off. Avoid the Walmart routers.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"225\" height=\"225\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-8.png\" alt=\"\" class=\"wp-image-8709\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-8.png 225w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-8-150x150.png 150w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/figure><\/div>\n\n\n<p><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxaty_tmp_2a9c98fc.png\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Switch<\/h3>\n\n\n\n<p>A switch expands the number of devices you can connect to your local network using Ethernet cables.<\/p>\n\n\n\n<p><strong>What a Switch Does:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Expands Connectivity:<\/strong>&nbsp;If your router only has a few Ethernet ports, a switch allows you to connect more wired devices (e.g., computers, gaming consoles, network-attached storage).<\/li>\n\n\n\n<li><strong>Forwards Data:<\/strong>&nbsp;A switch is smarter than a basic splitter. It knows which devices are connected to each port and forwards data to the correct device, improving network efficiency.<\/li>\n\n\n\n<li>The type of basic switch I am using for this example is the smaller type to the left, that has no advanced routing features, settings, or web interface to mess with. It\u2019s just a dumb switch. We use it to get more ports on our home network than the one port on the&nbsp;<strong>pfSense<\/strong>&nbsp;router.<\/li>\n<\/ul>\n\n\n\n<p>Switches come in different sizes, from small 4-port models to large 24-port (or even larger) models used in business environments. The small Netgear switches that cost $15 are more than adequate for most people\u2019s home networks &amp; will not cause random disconnects or issues with our router setup.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"545\" height=\"375\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-9.png\" alt=\"\" class=\"wp-image-8713\" style=\"width:275px;height:auto\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-9.png 545w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-9-300x206.png 300w\" sizes=\"auto, (max-width: 545px) 100vw, 545px\" \/><\/figure><\/div>\n\n\n<p><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Cheap_netgear_switch.jpg\"><\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Cheap switch<\/h4>\n\n\n\n<p>This is a&nbsp;<a href=\"https:\/\/www.amazon.com\/NETGEAR-5-Port-Gigabit-Ethernet-Unmanaged\/dp\/B07S98YLHM\">basic Netgear switch that you get for $15<\/a>. It allows you to connect four devices to your pfSense router. You would attach the LAN port on the pfsense router to a port on this switch<em>(any port is fine)<\/em>&nbsp;&amp; then connect your wired devices<em>(wireless access point for wifi, computers, etc)<\/em>&nbsp;to other ports on the switch. Some points to note:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This switch is gigabit &#8211; meaning, 1 gbps.\n<ul class=\"wp-block-list\">\n<li>1 gbps = stuck transferring around 100 megabytes per second real world performance(aka the speed of ten year old hard drives)<\/li>\n\n\n\n<li>This means even if you have a fast solid state drive in the server &amp; your personal computer, transfer speed will be around 100-120 megabytes per second<\/li>\n\n\n\n<li>If you have a gigabit internet connection &amp; are downloading a file at 1 gbps, you can\u2019t also grab a file from your server without slowing your download.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>This has no Power over Ethernet(PoE)<ul><li>If you want to power wireless access points, office voice over IP(VoIP) phones, or cameras, you have to plug them into something or get PoE injector later.A Power over ethernet switch can power devices you plug the ethernet cord into which is very cool for setting up security cameras, only have to run 1 wire.<\/li><\/ul>These cheapies will usually not have Power over Ethernet to power cameras &amp; wireless access points &amp; office desk phones, nor will they usually support configuring ports for VLANs&nbsp;<em>(we will get into that in the wifi section at the end)<\/em>. This is a good&nbsp;<em>starter<\/em>&nbsp;switch since it is reported to pass VLAN tags, so if you bought wifi access points or switches that supported creating isolated networks this switch would pass those tags<em>(we\u2019ll get into that at the end of the guide); no need to worry about that right now.<\/em>These cheap switches work great, and also come in 8 port versions for a few bucks more.<a href=\"https:\/\/wiki.futo.org\/wiki\/File:Expensive_netgear_switch.jpg\"><\/a><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"375\" height=\"375\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-10.png\" alt=\"\" class=\"wp-image-8714\" style=\"width:157px;height:auto\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-10.png 375w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-10-300x300.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-10-150x150.png 150w\" sizes=\"auto, (max-width: 375px) 100vw, 375px\" \/><\/figure><\/div>\n\n\n<h4 class=\"wp-block-heading\">Expensive switch<\/h4>\n\n\n\n<p>The&nbsp;<a href=\"https:\/\/www.bhphotovideo.com\/c\/product\/1383572-REG\/netgear_xs724em_100nas_24_port_10_gigabit_multi_gigabit_ethernet_smart.html?ap=y&amp;smp=Y\">Netgear XS724EM switch<\/a>&nbsp;is an expensive, fancier switch.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Speed\n<ul class=\"wp-block-list\">\n<li>Supports 2.5 gigabit or 10 gigabit per second ethernet on its ports.<\/li>\n\n\n\n<li>If you have a network interface card(NIC) that supports 2.5 gbE on each end<em>(these are becoming more common)<\/em>, you can get over 270 megabytes per second transfer rate<em>(more than 2x a normal gigabit switch)<\/em><\/li>\n\n\n\n<li>If you have a network interface card(NIC) that supports 10 gbE on each end<em>(your computer does not have this unless you bought it separately &amp; installed it)<\/em>, you can get over 800 megabytes per second even with a poorly tuned setup. This is likely faster than any of the drives inside your computer unless you bought fancy NVMe drives.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Power\n<ul class=\"wp-block-list\">\n<li>Can power a bunch of cameras, phones, wireless access points over ethernet<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Ports\n<ul class=\"wp-block-list\">\n<li>Has 24 ports instead of 5, can connect a lot more stuff.<\/li>\n\n\n\n<li><strong>COMPATIBILITY<\/strong>&nbsp;of the ports &#8211; does 10 GbE over standard ethernet plugs\/jacks. If you wire your house with&nbsp;<a href=\"https:\/\/www.monoprice.com\/product?p_id=13072\">good cat6a<\/a>&nbsp;and put&nbsp;<a href=\"https:\/\/www.ebay.com\/itm\/235729074315\">good 10 gbE network interface cards<\/a>&nbsp;in the machines you\u2019re working with you can get 800 megabyte per second networking all around your house without digiorno connectors.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Virtual LAN support\n<ul class=\"wp-block-list\">\n<li>Allows you to create separate networks on the same switch.<\/li>\n\n\n\n<li>Can keep your untrusted internet of things(IoT) devices like cheap light bulbs &amp; cameras &amp; thermostats on isolated separate networks from your trusted devices.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>The VLAN support is a big one because later on when we connect wifi access points that are advanced we are going to do far more than just make a \u201cguest network\u201d; we are going to make a network that your IoT devices (bulbs, thermostats, cameras, etc) can connect to and isolate them in a way where your computer running your security cameras &amp; home automation can connect to them, but they are isolated from connecting to anything else. This isn\u2019t necessary though and a bunch of you will probably skip the VLAN part at the end, since that gets a little too complicated for a home setup.<\/p>\n\n\n\n<p>This is an expensive switch. There are many inbetween, but I thought it\u2019d be useful to show an example of the cheap side &amp; expensive side to show what is available &amp; what you can get for the money. If you are ok with gigabit ethernet you can easily get by with way cheaper; right now you can either buy gigabit switches cheaply, or 2.5 gbe &amp; 10 gbe switches at crazy high prices. There isn\u2019t much inbetween.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Wireless Access Point (WAP)<\/h3>\n\n\n\n<p>A wireless access point (WAP) provides Wi-Fi access to your network, allowing devices like phones, tablets, and laptops to connect wirelessly. You could add a wireless access point like the ones below, to the old blue Linksys router above, to turn it into a \u201cwireless router.\u201d<\/p>\n\n\n\n<p><strong>What a Wireless Access Point Does:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Provides Wireless Connectivity:<\/strong>&nbsp;The WAP connects to your router (or switch) and broadcasts a Wi-Fi signal, letting wireless devices connect to your network.<\/li>\n\n\n\n<li><strong>Doesn\u2019t Route Traffic:<\/strong>&nbsp;It\u2019s important to note that a WAP doesn\u2019t perform the same function as a router. It simply extends your network by adding wireless connectivity.<a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxaty_tmp_e4850c8b.png\"><\/a><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"775\" height=\"375\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-11.png\" alt=\"\" class=\"wp-image-8715\" style=\"width:498px;height:auto\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-11.png 775w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-11-300x145.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-11-768x372.png 768w\" sizes=\"auto, (max-width: 775px) 100vw, 775px\" \/><\/figure><\/div>\n\n\n<p>These are mesh network access points. They allow you to connect each to your switch and place them in separate areas of your home to make sure you have great connectivity everywhere.<a href=\"https:\/\/wiki.futo.org\/wiki\/File:Tplink_mesh_example.jpg\"><\/a><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"297\" height=\"170\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-12.png\" alt=\"\" class=\"wp-image-8716\"\/><\/figure><\/div>\n\n\n<p>The way these work is you would place the access points on different parts of your house and have an ethernet wire going to each one. The access points intelligently work together to figure out which one you should be connected to based on which provides the strongest signal to your laptop\/phone where you are right now. You\u2019d place one on the side of your house, one in the basement, one on each side of each floor in your home, and wire them all to your switch &amp; you\u2019ll get amazing wifi connectivity from anywhere. Good wireless access points will switch over so seamlessly that your file transfer does not stop or fail as it is happening.<\/p>\n\n\n\n<p>These setups are more expensive since proper mesh equipment that works right costs more &amp; you are buying multiple access points.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"394\" height=\"375\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-13.png\" alt=\"\" class=\"wp-image-8717\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-13.png 394w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-13-300x286.png 300w\" sizes=\"auto, (max-width: 394px) 100vw, 394px\" \/><\/figure><\/div>\n\n\n<p><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxaty_tmp_62add313.png\"><\/a><\/p>\n\n\n\n<p>This is an ancient wired router with no wifi.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"375\" height=\"375\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-14.png\" alt=\"\" class=\"wp-image-8718\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-14.png 375w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-14-300x300.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-14-150x150.png 150w\" sizes=\"auto, (max-width: 375px) 100vw, 375px\" \/><\/figure><\/div>\n\n\n<p><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxaty_tmp_dad6faba.png\"><\/a><\/p>\n\n\n\n<p>This is a cheap ass wireless access point. I don\u2019t recommend any of these especially when something like a&nbsp;<a href=\"https:\/\/www.ebay.com\/itm\/116401635619\">TPLink EAP6120<\/a>&nbsp;is about $50 used &amp; offers much better seamless roaming if you want to add access points later, VLAN functionality, etc. I know it\u2019s tempting to buy the lame ones because they are in stock at best buy &amp; walmart for instant gratification but you\u2019ll regret it later.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"243\" height=\"208\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-15.png\" alt=\"\" class=\"wp-image-8719\"\/><\/figure><\/div>\n\n\n<p><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxaty_tmp_4bc4c5a.png\"><\/a><\/p>\n\n\n\n<p>This is an ancient wireless router that is a legend. The unbreakable, unbeatable, Linksys WRT54G. It is a router, a switch, and a wireless access point all in one.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Internet Protocol addresses<\/h3>\n\n\n\n<p>You have an address on the front of your building. You have a phone number &#8211; this is how people find you. Your modem will be how you get an IP address from your internet service provider. It usually looks like&nbsp;<code>64.91.255.98<\/code>&nbsp;or&nbsp;<code>8.8.8.8<\/code>&nbsp;&#8211; you may have seen this before.<\/p>\n\n\n\n<p>Most of you with a home internet connection have something called a&nbsp;<strong>Dynamic IP<\/strong>. This means that your IP can change.<\/p>\n\n\n\n<p>Your IP address may change for a number of different reasons:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When you unplug your modem [for a long period of time].<\/li>\n\n\n\n<li>When you plug your modem into a new router.<\/li>\n\n\n\n<li>Every day, just for the hell of it!<\/li>\n<\/ul>\n\n\n\n<p>This can make things more difficult than when you have a&nbsp;<strong>static IP<\/strong>&nbsp;&#8211; static IPs do not change. You get an internet protocol address, and that\u2019s what you\u2019re stuck with, for better or for worse.<\/p>\n\n\n\n<p>For home users, most people don\u2019t need a static IP. Static IPs are for when I want something to&nbsp;<em>\u201cstay put\u201d<\/em>. I want my phone number to stay put so people know where to find me. I want my home address to stay put so the mailman knows where to find me&nbsp;<em>(and so I know where to go home!)<\/em>&nbsp;and, in this case, I want my IP to stay put so I can always find my home server, no matter where I am in the world.<\/p>\n\n\n\n<p>If you are reading this &#8211; you likely have a&nbsp;<strong>dynamic IP<\/strong>&nbsp;provided by your home internet service provider. We will have a workaround for this that allows you to be able to find your server at the same place every time you go to use it no matter how often its IP changes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><mark style=\"background-color:#7bdcb5\" class=\"has-inline-color has-black-color\">How These Devices Will Work Together in Your Setup<\/mark><\/h2>\n\n\n\n<p>For this setup, you\u2019ll use a dedicated&nbsp;<strong>pfSense<\/strong>&nbsp;router instead of the combo device provided by your ISP. Here\u2019s how the connections work:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Modem to Router<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The modem takes the signal from your ISP and passes it to your&nbsp;<strong>pfSense<\/strong>&nbsp;router via an Ethernet cable.<\/li>\n\n\n\n<li>The modem will be connected to the WAN (Wide Area Network) port on the router.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. Router to Switch<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Your&nbsp;<strong>pfSense<\/strong>&nbsp;router manages traffic between your devices and the internet.<\/li>\n\n\n\n<li>Since the Intel NUC running&nbsp;<strong>pfSense<\/strong>&nbsp;has only two Ethernet ports, you\u2019ll connect the second port (the LAN (Local Area Network) port) to a switch to connect multiple devices.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3. Switch to Devices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The switch is connected to the LAN port of your&nbsp;<strong>pfSense<\/strong>&nbsp;router.<\/li>\n\n\n\n<li>Any wired devices (like computers, gaming consoles, or network storage) can be connected to the switch using Ethernet cables.<\/li>\n\n\n\n<li>This allows multiple devices to communicate with each other and access the internet through the&nbsp;<strong>pfSense<\/strong>&nbsp;router.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4. Adding Wireless Access<\/h3>\n\n\n\n<p>This will allow your phones, laptops, and other wireless devices to connect to the network without wires.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you only plan to have wireless devices on your network, you can attach your wireless access point directly to the LAN port on your&nbsp;<strong>pfSense<\/strong>&nbsp;router.<\/li>\n\n\n\n<li>If you wish to have a combination of wired &amp; wireless devices on your network, you would attach a wired switch to the LAN port on your&nbsp;<strong>pfSense<\/strong>&nbsp;router, and then plug the Wi-Fi access point into a port on your switch.<\/li>\n\n\n\n<li>If you have no plans to have wireless devices on your network, you do not need a wireless access point.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">A Common Home Network Setup vs.&nbsp;Your New Setup<\/h3>\n\n\n\n<p><strong>Common Setup (with ISP Combo Device):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Modem \u2192 ISP-provided combo device (modem + router + switch + WAP)<\/li>\n\n\n\n<li>All devices (wired and wireless) connect to the combo device.<\/li>\n<\/ul>\n\n\n\n<p><strong>Your New Setup (with pfSense):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Modem \u2192&nbsp;<strong>pfSense<\/strong>&nbsp;Router (dedicated firewall\/router)<\/li>\n\n\n\n<li><strong>pfSense<\/strong>&nbsp;Router \u2192 Switch (for wired devices)<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>This new setup gives you better control over your network, improved security, and the ability to block ads with pfSense and tools like pfBlockerNG. It is important that you know what each component does &amp; their purposes. By understanding what each component does, you\u2019ll be better equipped to set up and manage your new pfSense-based network!<\/p>\n<\/blockquote>\n\n\n\n<h1 class=\"wp-block-heading\">Why Build Your Own Router?<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">Regular Security Updates &amp; OpenVPN<\/h3>\n\n\n\n<p>Let\u2019s start at the very beginning with OpenVPN. We are not opening ports to the internet for ANYTHING, except for receiving self-hosted mail. We\u2019re running a bunch of different open source services that less than 0.1% of the population (if I\u2019m being generous) actually use. I&nbsp;<strong>LIKE<\/strong>&nbsp;<code>Immich<\/code>,&nbsp;<code>Home Assistant<\/code>,&nbsp;<code>Syncthing<\/code>,&nbsp;<code>FreePBX<\/code>,&nbsp;<code>OnlyOffice<\/code>,&nbsp;<code>Nextcloud<\/code>,&nbsp;<code>Mailcow<\/code>,&nbsp;<code>Frigate<\/code>. But I don\u2019t want them just open to the internet.<\/p>\n\n\n\n<p>They\u2019re nice software, but they\u2019re&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php\/FUTO:General_disclaimer\">used by 0.0001%<\/a>&nbsp;of the population. Further, even if they WERE secure, by opening ports to the internet, I am letting every Tom, Dick &amp; Harry who wants to peek in see what I am running on my IP address.<\/p>\n\n\n\n<p>OpenVPN is used by companies in the S&amp;P 500, banks, and governments; it\u2019s everywhere! The beauty of OpenVPN is that if there\u2019s ever a security breach, it\u2019s going to get found and fixed because there are tens of millions of eyes on it at any given moment. There is too much&nbsp;<em>investment<\/em>&nbsp;in OpenVPN for it to wither on the vine and become fundamentally insecure. OpenVPN is as secure as it gets, and while it\u2019s not&nbsp;<em>perfect<\/em>, we are massively reducing our&nbsp;<em>RISK<\/em>&nbsp;of being hacked &amp; exploited by utilizing OpenVPN to get into our home network vs.&nbsp;opening ports willy nilly to 10 different pieces of software.<\/p>\n\n\n\n<p>I don\u2019t want people to be able to see that these services are all running on my server. That means there are four, six, eight, or 15 different points of failure. I\u2019d rather have one point of failure that\u2019s managed properly. And that\u2019s what a VPN is for\u2014a way to create a secure, encrypted tunnel between your phone and your server.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why can\u2019t I buy a $30 router at walmart?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Short lifespan for firmware updates<\/h3>\n\n\n\n<p>Consumer routers you find in stores may offer features like OpenVPN, but the problem is that many&nbsp;<a href=\"https:\/\/www.bleepingcomputer.com\/news\/security\/netgear-leaves-vulnerabilities-unpatched-in-nighthawk-router\/\">stop receiving updates shortly after you buy them<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Buggy<\/h3>\n\n\n\n<p>Many of the lower end store routers are buggy and can cause problems with what I am showing you how to set up. Certain TP-Link routers have randomly messed with SIP traffic in the middle of a call, and the router that Spectrum and Verizon provide have&nbsp;<code>SIP-AlG<\/code>&nbsp;turned on by default; which will mess with our phone system. They don\u2019t let you turn it off in the configuration settings either!<\/p>\n\n\n\n<p>Back to my point; using a router where you are at the mercy of the manufacturer to provide you with updated firmware leaves you vulnerable to security risks as new exploits are discovered. For example, three years down the line, there might be a very important update for OpenVPN, but your router\u2019s manufacturer might have stopped supporting your model after just six months. Now you\u2019re screwed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Increased likelihood of getting hacked over time<\/h3>\n\n\n\n<p>You\u2019re making it harder for yourself by using a router that will become vulnerable to exploits in OpenVPN. OpenVPN is exceptional software: these holes get plugged, and they get plugged fast.<\/p>\n\n\n\n<p>\u2026if the manufacturer actually updates the firmware. They often don\u2019t. Think about it;<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>You already paid for the router.<\/li>\n\n\n\n<li>Providing you with updated firmware costs them money &amp; time.<\/li>\n\n\n\n<li>But they already have your money<\/li>\n\n\n\n<li>so they don&#8217;t care<\/li>\n<\/ol>\n\n\n\n<p><strong>You might think I\u2019m being bombastic; what\u2019s so bad about using an older version of OpenVPN?<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">OpenVPN exploits:<\/h3>\n\n\n\n<p>A&nbsp;<strong>CVE<\/strong>&nbsp;is a common vulnerability &amp; exploit &#8211; aka, a way to hack into something. These are a small number that have occurred over the years. Finding CVEs isn\u2019t a bad thing, every piece of software ever created is going to have security vulnerabilities. It is only bad if you are running hardware that you cannot update once a fix has been released.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. CVE-2024-27459, CVE-2024-24974, CVE-2024-27903, CVE-2024-1305<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Discovered<\/strong>: March 2024<\/li>\n\n\n\n<li><strong>Description<\/strong>: Multiple vulnerabilities were found, mainly affecting OpenVPN\u2019s client-side on Windows, Android, iOS, macOS, and BSD. These included stack overflow, unauthorized access, &amp; plugin flaws leading to potential remote code execution (RCE) and local privilege escalation (LPE). Users were advised to update to OpenVPN versions 2.6.10 or 2.5.10 to mitigate the risks.&nbsp;<em>You can only update OpenVPN versions if your router lets you.<\/em><\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Terminology note:<\/strong>&nbsp;\u201cclient-side\u201d means the part of the software that runs on your device (like a computer or smartphone), as opposed to \u201cserver-side,\u201d which would be the part running on a remote server (Apple\/Google\u2019s server).<\/p>\n\n\n\n<p>\u201cRemote Code Execution (RCE)\u201d is a vulnerability that lets a hacker run code they want to run on your device. \u201cLocal Privilege Escalation (LPE)\u201d means a vulnerability that lets a hacker get higher permissions (i.e.&nbsp;becoming an admin rather than being a regular user) allowing them to do things they shouldn\u2019t or gain full control over your system.<\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sources<\/strong>:<\/li>\n\n\n\n<li><a href=\"https:\/\/cybersecuritynews.com\/openvpn-vulnerabilities-rce-attack\/\">Cybersecurity News<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/openvpn.net\/security-advisories\/\">OpenVPN Security Advisory<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/campustechnology.com\/Articles\/2024\/08\/16\/Report-Increasing-Number-of-Vulnerabilities-in-OpenVPN.aspx\">Campus Technology<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.&nbsp;<strong>Code Signing Key Intrusion (OpenVPN 2.5.8)<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Discovered<\/strong>: December 2022<\/li>\n\n\n\n<li><strong>Description<\/strong>: An intrusion was detected involving OpenVPN version 2.5.8. There\u2019s no evidence suggesting the key was misused &amp; OpenVPN proactively re-released the software signed with a new key for security. This is why updates matter.<\/li>\n\n\n\n<li><strong>Sources<\/strong>:&nbsp;<a href=\"https:\/\/openvpn.net\/security-advisories\/\">OpenVPN Security Advisory<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.&nbsp;<strong>CVE-2022-0547<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Discovered<\/strong>: February 2022<\/li>\n\n\n\n<li><strong>Description<\/strong>: Enabled authentication bypass in external authentication plug-ins when more than one of them makes use of deferred authentication replies,&nbsp;<em><strong>which allows an external user to be granted access with only partially correct credentials.<\/strong><\/em>&nbsp;aka, I can have a sawed off copy of your house key &amp; still get in.<\/li>\n\n\n\n<li><strong>Sources<\/strong>:&nbsp;<a href=\"https:\/\/community.openvpn.net\/openvpn\/wiki\/CVE-2022-0547\">OpenVPN Community<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">4.&nbsp;<strong>CVE-2020-15077, CVE-2020-36382<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Discovered<\/strong>: 2020<\/li>\n\n\n\n<li><strong>Description<\/strong>: These vulnerabilities affected OpenVPN Access Server, with risks of information leakage and potential denial-of-service (DoS). Patches were released fast to address these security issues, which requires you have a router that allows you to continue updating it after the manufacturer has given you the middle finger &amp; told you to buy a new one.<\/li>\n\n\n\n<li><strong>Sources<\/strong>:&nbsp;<a href=\"https:\/\/openvpn.net\/security-advisory\/access-server-security-update-cve-2020-15077-cve-2020-36382\/\">OpenVPN Security Advisory<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.&nbsp;<strong>CVE-2018-9334<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Discovered<\/strong>: 2018<\/li>\n\n\n\n<li><strong>Description<\/strong>: A denial-of-service vulnerability in OpenVPN\u2019s handling of authentication processes, potentially allowing attackers to disrupt services was patched.<\/li>\n\n\n\n<li><strong>Sources<\/strong>:&nbsp;<a href=\"https:\/\/openvpn.net\/security-advisories\/\">OpenVPN CVE List<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">6. CVE-2017-7521<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Discovered<\/strong>: 2017<\/li>\n\n\n\n<li><strong>Description<\/strong>: A memory exhaustion flaw was found where an attacker could exploit OpenVPN\u2019s message handling to cause service disruption.<\/li>\n\n\n\n<li><strong>Sources<\/strong>:&nbsp;<a href=\"https:\/\/openvpn.net\/security-advisories\/\">OpenVPN CVE List<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Guaranteed long term compatibility &amp; updates<\/h2>\n\n\n\n<p>Even a cheap 10-year-old desktop PC can be a good router for the next ten years; as long as it has a good network interface card. If it runs out of RAM or new network technologies come out, you won\u2019t throw it away; you\u2019ll buy a new network card for $40 or more RAM at a yard sale. Ten years from now, going from 2 GB of RAM to 8 will probably cost less than $10.<\/p>\n\n\n\n<p>Using a standard x86 PC as a router, with known good Network Interface Cards, means you are less likely to encounter compatibility or longevity issues when using any of these open source router systems. It gives you more control, and if you\u2019re reading this, you probably have an old desktop PC in the garage or closet you\u2019re not using anyway. Get it two good network interface cards and get it back in commission!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What about OpenWRT?<\/h2>\n\n\n\n<p>There are open source packages like&nbsp;<a href=\"https:\/\/openwrt.org\/\">OpenWRT<\/a>&nbsp;doing the lord\u2019s work to keep these routers going. This is a good project, run by good people. I do not want to denigrate them in any way; what I am about to say is in no way their fault. They do their best to keep routers running with their firmware for as long as possible, but eventually, it becomes too difficult or untenable to provide updates for older chipsets &amp; hardware, and they&nbsp;<a href=\"https:\/\/openwrt.org\/toh\/start\">fall off the list<\/a>. Those old routers will only work with older versions of OpenWRT.<\/p>\n\n\n\n<p>But it\u2019s a lot of work to support 100s of different makes &amp; models, all using their own specific hardware. When we build a router using a standard computer, we can install router software like&nbsp;<strong>pfSense<\/strong>&nbsp;or&nbsp;<code>OPNsense<\/code>, which means the chances of our hardware not getting updates\/not being supported shrinks to almost nothing. These open source projects do not have to support a gazillion different hardware configurations. They support x86, and if you have x86 (most normal desktop computers are x86), you\u2019re good. It makes it easier to maintain on a mass level &amp; provide&nbsp;<em>regular<\/em>&nbsp;updates to. The likelihood of your \u201chardware not being supported\u201d with an open source router distribution when it is a desktop PC with a good network card shrinks to near 0.<\/p>\n\n\n\n<p>By building your own router using&nbsp;<strong>pfSense<\/strong>, an open-source firewall, and cheap, dedicated hardware, you guarantee long-term support and control over your setup. With&nbsp;<strong>pfSense<\/strong>, you can get regular updates, customize your network settings, and even block ads across all devices using&nbsp;<strong>pfBlockerNG<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Building Our Own Router<\/h1>\n\n\n\n<p>Let\u2019s dive into the first step: setting up&nbsp;<strong>pfSense<\/strong>&nbsp;on an&nbsp;<strong>Intel NUC<\/strong>&nbsp;(a small-factor barebone PC,&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Next_Unit_of_Computing\">Next Unit of Computing<\/a>) to serve as your router. We\u2019ll be setting this up with OpenVPN, which is very important for connecting securely to your home network.<\/p>\n\n\n\n<p>As for the hardware, I\u2019m using an Intel NUC because it\u2019s compact, reliable, and it has two Ethernet ports, which are necessary for setting up a router. One port is used for your&nbsp;<strong>WAN<\/strong>&nbsp;(internet), and the other for your&nbsp;<strong>LAN<\/strong>&nbsp;(internal network). For a&nbsp;<strong>pfSense<\/strong>&nbsp;router, we must choose a machine with&nbsp;<strong>TWO<\/strong>&nbsp;ethernet ports, not one!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why pfSense?<\/h2>\n\n\n\n<p>I chose&nbsp;<strong>pfSense<\/strong>&nbsp;ten years ago because:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>It\u2019s open-source.<\/li>\n\n\n\n<li>It\u2019s fast.<\/li>\n\n\n\n<li>It gets regular updates for security issues.<\/li>\n\n\n\n<li>The parent company has paid corporate &amp; business clients relying on their software, which is based on an open source core. The developments with regards to making certain network cards work well with FreeBSD get included upstream to the free versions.<\/li>\n\n\n\n<li>This means that me, as a scrub who didn\u2019t pay for it, get something that is very similar to what corporate clients who are paying $10,000 or more are getting.<\/li>\n\n\n\n<li>If I mess something up with my very unusual custom setup, I can pay the developers of the software to fix it for me. This level of support is not common in many open source projects. If I want to cry uncle &amp; pay them an annual fee, they will respond to my questions &amp; provide me with&nbsp;<em><strong>REAL<\/strong><\/em>&nbsp;answers rather than tell me to go&nbsp;<em>\u201crtfm.\u201d<\/em><\/li>\n\n\n\n<li>It comes with features like&nbsp;<strong>pfBlockerNG<\/strong>&nbsp;to block ads, scams, and malware at IP &amp; DNS level with regular updates.<\/li>\n<\/ol>\n\n\n\n<p>I use&nbsp;<strong>pfSense<\/strong>&nbsp;now because:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>I\u2019m used to it.<\/li>\n\n\n\n<li>The idea of redoing my complicated setup from scratch gives me hives.<\/li>\n\n\n\n<li>See #2, in regard to becoming acquainted with the unique quirks of other open source software.<\/li>\n<\/ol>\n\n\n\n<p>I had very good reasons for choosing&nbsp;<strong>pfSense<\/strong>&nbsp;ten years ago \u2013 and I have good reasons to use it today. That doesn\u2019t mean it\u2019s the best. Feel free to use whatever you want to use. For the purposes of this guide, I will be using&nbsp;<strong>pfSense<\/strong>.<\/p>\n\n\n\n<p>There\u2019s a bit of a debate between&nbsp;<strong>pfSense<\/strong>&nbsp;and&nbsp;<code>OPNsense<\/code>. TL;DR, the developers of&nbsp;<strong>pfSense<\/strong>&nbsp;are&nbsp;<a href=\"https:\/\/opnsense.org\/opnsense-com\/\">not the nicest people sometimes<\/a>. If this bothers you, consider checking out&nbsp;<code>OPNsense<\/code>. Since I\u2019ve been using&nbsp;<strong>pfSense<\/strong>&nbsp;for a decade, I\u2019ve built much of my infrastructure around it. I am well aware of its quirks and don\u2019t feel like setting up my network from scratch, so I am using&nbsp;<strong>pfSense<\/strong>&nbsp;for this tutorial. Regardless of the&nbsp;<a href=\"https:\/\/news.ycombinator.com\/item?id=17431809\">developers<\/a>, you are infinitely better off using&nbsp;<strong>pfSense<\/strong>&nbsp;on your own hardware than standard routers.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Choosing the Right Hardware<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Why an Intel NUC?<\/h3>\n\n\n\n<p>When searching for hardware to build a&nbsp;<strong>pfSense<\/strong>&nbsp;router, you\u2019ll often come across a variety of mini PCs on platforms like Amazon. However, there are several issues with these options:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Inconsistent Quality:<\/strong>&nbsp;You\u2019ll find reputable brands like Mikrotik listed alongside unknown generic random stuff. I trust Mikrotik &#8211; I don\u2019t trust random junk. Amazon allows random junk from unverified, untrusted vendors to show up routinely at the top of the search results.<\/li>\n\n\n\n<li><strong>Unreliable Reviews:<\/strong>&nbsp;Amazon\u2019s review system has known issues:\n<ul class=\"wp-block-list\">\n<li>Reviews from&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=qZCMislL6_I&amp;list=PLkVbIsAWN2ls4fzQbP9fdW66tjcIs4JNQ&amp;index=5&amp;pp=gAQBiAQB\">unrelated products (e.g., digital picture frames) applied to air conditioners<\/a>.<\/li>\n\n\n\n<li>Vendors&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=eS698R-bxuc&amp;list=PLkVbIsAWN2ls4fzQbP9fdW66tjcIs4JNQ&amp;index=4&amp;pp=gAQBiAQB\">bribing customers for positive reviews<\/a>&nbsp;without consequences.<\/li>\n\n\n\n<li>Potentially fake or misleading reviews.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Safety Concerns:<\/strong>&nbsp;Amazon has a history of selling mislabeled or dangerous products, including:\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=B90_SNNbcoU&amp;list=PLkVbIsAWN2ls4fzQbP9fdW66tjcIs4JNQ&amp;index=2&amp;pp=gAQBiAQB\">Incorrectly rated electrical fuses<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=y83BS_mK9GE&amp;list=PLkVbIsAWN2ls4fzQbP9fdW66tjcIs4JNQ&amp;index=1&amp;pp=gAQBiAQB\">Faulty electrical crimps<\/a><\/li>\n\n\n\n<li>Litter boxes that&nbsp;<a href=\"https:\/\/www.dailydot.com\/news\/cat-stuck-in-automatic-litter-box\/\">kill cats<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>\u2026and the list goes on. This guide is going to be 600+ pages when done; do you want to do all of this work only to have the primary component be a piece of junk from a website that sells cat guillotines? No.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Better Alternative: Repurpose an Old Desktop PC<\/h3>\n\n\n\n<p>Instead of risking your project with unknown mini PCs, consider using an old desktop computer:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Reliability:<\/strong>&nbsp;A 10-12 year old desktop is likely more reliable than no-name mini PCs.<\/li>\n\n\n\n<li><strong>Choice of Network Card:<\/strong>&nbsp;Desktop PCs offer PCI Express slots for additional network cards, so YOU can choose the network interface card for your setup. You often do not know what chipsets are used in the no-name-mini-PCs.&nbsp;<strong>pfSense<\/strong>&nbsp;&amp; other FreeBSD-based routers are sensitive to poor-quality chipsets.<\/li>\n\n\n\n<li><strong>Cost-Effective:<\/strong>&nbsp;You can re-purpose an old desktop you already have &amp; save money on purchasing new hardware.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Choosing the Right Network Interface Cards (NICs)<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"895\" height=\"263\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-16.png\" alt=\"\" class=\"wp-image-8722\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-16.png 895w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-16-300x88.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-16-768x226.png 768w\" sizes=\"auto, (max-width: 895px) 100vw, 895px\" \/><\/figure>\n\n\n\n<p>To transform your old desktop into a capable router:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Add Quality NICs:<\/strong>&nbsp;Install high-quality network cards, preferably Intel-based.<\/li>\n\n\n\n<li><strong>pfSense Compatibility:<\/strong>&nbsp;Check the&nbsp;<strong>pfSense<\/strong>&nbsp;forums for compatible chipsets and cards.<\/li>\n\n\n\n<li><strong>Examples of Good NICs:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Intel X540<\/li>\n\n\n\n<li>Intel 350<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Caution When Purchasing NICs<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Avoid Realtek at all costs:<\/strong>&nbsp;Read&nbsp;<strong>pfSense<\/strong>&nbsp;and FreeBSD forums to learn about the issues from people who use Realtek network interface cards. Sometimes you\u2019ll get something working, but often you will get headaches and nightmares that are not worth the cost savings. Realtek network cards are best avoided in pfSense &amp; similar setups due to known issues with poor performance &amp; compatibility. Intel network interface cards are preferable for reliability &amp; better support in open-source projects like pfSense.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note of Appreciation<\/strong>: pfSense developers have created drivers for network interface chipsets like the 225 (<a href=\"https:\/\/github.com\/freebsd\/freebsd-src\/commit\/517904de5ccac643589c71ac0d2751797f89e4f9\">citation 1<\/a>,&nbsp;<a href=\"https:\/\/github.com\/pfsense\/FreeBSD-src\/commit\/9ffb4c0adab4853ab752ecda6a5ff59ea943af4e\">citation 2<\/a>) that didn\u2019t exist before. Intel network interface cards are known to have better performance &amp; reliability in FreeBSD systems than Realtek chipsets. The ecosystem of open source firewalls are invested in providing support for these chipsets, providing solutions when the manufacturer doesn\u2019t.<\/p>\n\n\n\n<p>This is an excellent argument in favor of&nbsp;<a href=\"https:\/\/www.reddit.com\/r\/PFSENSE\/comments\/uuigfy\/is_the_intel_i225v_nic_ok\/\">paying money for open source software<\/a>. The igc driver for the i225 Intel network chip was made available to everyone! Commercial users, non-paying users of pfSense, and other FreeBSD based routers\/firewalls all benefit from people paying for open source software. Top notch programmers wrote these drivers because they were able to pay their rent &amp; bills doing so.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>When you pay for open source software, you are sending a message that it makes sense for top notch programmers to spend money developing open source code that doesn\u2019t abuse you rather than going to work for facebook.<\/p>\n<\/blockquote>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Buy from Reputable Vendors:<\/strong>&nbsp;Avoid counterfeit products by purchasing from trusted sellers. There are many counterfeit cards out there.<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"326\" height=\"259\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-18.png\" alt=\"\" class=\"wp-image-8724\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-18.png 326w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-18-300x238.png 300w\" sizes=\"auto, (max-width: 326px) 100vw, 326px\" \/><\/figure><\/div>\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Vendors don\u2019t know the difference:<\/strong>&nbsp;Many vendors selling knockoff cards do not even know they are doing it. Wholesale liquidators operate with low profit margins while selling a wide variety of equipment and lack the time and expertise to vet all of what they sell. As a result, many vendors sell counterfeit and fake Intel network cards.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Recommended:<\/strong>&nbsp;<em>The Art of Server<\/em>&nbsp;on eBay (<a href=\"https:\/\/www.ebay.com\/str\/theartofserver\">link<\/a>)<\/li>\n\n\n\n<li><strong>Example product:<\/strong>&nbsp;Intel X540 (<a href=\"https:\/\/www.ebay.com\/itm\/166585171595\">link<\/a>)<\/li>\n<\/ul>\n\n\n\n<p><strong>Verify Compatibility:<\/strong>&nbsp;Make sure the card fits your PC\u2019s available slots.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Be wary of non-standard form factors or connectors.<\/li>\n<\/ul>\n\n\n\n<p><strong>HINT:<\/strong>&nbsp;Buying cards that are branded from server re-sellers is a good way to avoid fakes. For instance<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Don\u2019t buy Digiorno<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1005\" height=\"261\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-19.png\" alt=\"\" class=\"wp-image-8725\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-19.png 1005w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-19-300x78.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-19-768x199.png 768w\" sizes=\"auto, (max-width: 1005px) 100vw, 1005px\" \/><\/figure>\n\n\n\n<p>Buying used network cards, and used hardware, is ok. Actually, it\u2019s encouraged; it\u2019s a great way to buy better hardware than you\u2019d otherwise be able to afford, and it avoids senseless waste. However, be careful to not buy Digiorno. There are amazing deals to be found in the used server world, but it is also a jungle ready to eat you alive if you\u2019re naive enough to believe those crazy folks have any respect for the civilized world of standardized connectors.<\/p>\n\n\n\n<p><strong>Good vendors will be able to tell you the difference between normal hardware and Digiorno. If they do not know the difference, YOU DO NOT WANT TO BUY FROM THEM!<\/strong><\/p>\n\n\n\n<p>Building a DIY&nbsp;<strong>pfSense<\/strong>&nbsp;router with an old desktop PC and quality Intel NICs is likely to provide a more reliable and expandable solution than generic mini PCs. With a random mini PC, if you get a bad network interface card, you\u2019re out of luck. With your old desktop PC, you can choose the network interface card. Want 2.5GbE? Get another card. Want 10 Gbps? Get another card. Want fiber? Get another card. Have a card with the wrong chipset? Swap in another card.<\/p>\n\n\n\n<p>We are going down a 10+ hour rabbit hole of hell setting up all sorts of confusing, crazy GNU\/Linux software. Even a 1% increase in the likelihood of this being more difficult as a result of random garbage Amazon hardware isn\u2019t worth it to me for $100-$200 in savings.<\/p>\n\n\n\n<p>I chose an Intel NUC because it has two quality NICs, and I was able to find one affordably. You do not have to buy the computer I bought to use as a router: this is your journey!<\/p>\n\n\n\n<p><strong>Note:<\/strong>&nbsp;There is no one \u201cright\u201d way to do this. As long as you use a stable, quality computer with GOOD network interface cards that the&nbsp;<strong>pfSense<\/strong>&nbsp;&amp;&nbsp;<code>FreeBSD<\/code>&nbsp;community approve of, you are set!<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"175\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-20-1024x175.png\" alt=\"\" class=\"wp-image-8726\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-20-1024x175.png 1024w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-20-300x51.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-20-768x132.png 768w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-20.png 1460w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Downloading pfSense and Preparing a Bootable USB Drive<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"229\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-21-1024x229.png\" alt=\"\" class=\"wp-image-8727\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-21-1024x229.png 1024w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-21-300x67.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-21-768x172.png 768w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-21.png 1068w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Download pfSense<\/h4>\n\n\n\n<p><strong>pfSense<\/strong>\u2019s website has unfortunately become&nbsp;<a href=\"https:\/\/www.pfsense.org\/download\/\">cancer<\/a>&nbsp;in recent years. While I am all for paying for software, the concept of having to add to cart, checkout, and insert billing information to download a free image\u2026 no. Avoid using this version of the website. Instead,&nbsp;<a href=\"https:\/\/atxfiles.netgate.com\/mirror\/downloads\/\">go here<\/a>. Feel free to buy it and pay for their support, but don\u2019t jump through stupid hoops.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open your web browser and visit the&nbsp;<a href=\"https:\/\/atxfiles.netgate.com\/mirror\/downloads\/\">pfSense mirror site<\/a>.<\/li>\n\n\n\n<li>Choose the correct architecture for your system (usually&nbsp;<code>amd64<\/code>&nbsp;for most modern computers, including Intel NUCs). If you don\u2019t know what the difference is between these, pick&nbsp;<code>amd64<\/code>.<\/li>\n\n\n\n<li>Select the USB installer image (.img.gz) from the available options.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">1.2 Unzip the Downloaded pfSense File<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>After the download completes, you\u2019ll need to uncompress (unzip) the file.<\/li>\n\n\n\n<li>The file typically ends with&nbsp;<code>.gz<\/code>. Use the right tool for your operating system:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Linux or macOS:<\/code>&nbsp;Open a terminal and run the following command:gzip -d pfSense-CE-memstick-*.img.gz<\/li>\n\n\n\n<li><code>Windows:<\/code>&nbsp;Use a tool like 7-Zip. Right-click the file, choose \u201cExtract Here,\u201d and let the tool unzip it.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.3 Create a Bootable USB Drive with the pfSense Image<\/h4>\n\n\n\n<p><strong>Warning:<\/strong>&nbsp;This process will erase everything on the USB drive.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Insert a USB flash drive (at least 4GB in size) into your computer.<\/li>\n\n\n\n<li>Use one of the following methods to write the pfSense image to the USB drive:<\/li>\n<\/ol>\n\n\n\n<h5 class=\"wp-block-heading\">Windows:<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Download and install Rufus.<\/li>\n\n\n\n<li>Open Rufus and select your USB drive.<\/li>\n\n\n\n<li>Click the&nbsp;<em>\u201cSELECT\u201d<\/em>&nbsp;button and choose the unzipped&nbsp;<code>.img<\/code>&nbsp;file you downloaded.<\/li>\n\n\n\n<li>Click&nbsp;<em>\u201cStart\u201d<\/em>&nbsp;and let Rufus create the bootable USB.<\/li>\n<\/ol>\n\n\n\n<h5 class=\"wp-block-heading\">GNU\/Linux or macOS:<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the terminal and type the following command:sudo fdisk -l<\/li>\n\n\n\n<li>Make note of drives in the system. Do not erase these.<\/li>\n\n\n\n<li>Plug in the flash drive.<\/li>\n\n\n\n<li>Open the terminal and type the following command again:sudo fdisk -l<\/li>\n\n\n\n<li>Make note of the drive that was not present before. Write it down.<\/li>\n\n\n\n<li>Double-check size\/brand\/model to make sure this new device is the device you plugged in.<\/li>\n\n\n\n<li>Now, unplug the drive you just plugged in.<\/li>\n\n\n\n<li>Run:sudo fdisk -l<\/li>\n\n\n\n<li>Does the drive you wrote down in step 5 still appear? If so, you made a mistake, and you\u2019re on your way to deleting all of your data. Don\u2019t do that. Do not pass go, do not collect $200 \u2013 back to the beginning. If not, you can now plug your drive back in.<\/li>\n\n\n\n<li>Run:sudo fdisk -l<\/li>\n\n\n\n<li>If the drive that did not appear last time, appears this time, and is the same device as in step 5, you are likely on your way to not erasing your entire system. Good job, that makes you less of an idiot than me; a low bar, but it\u2019s something.<\/li>\n\n\n\n<li>Run the following, replacing&nbsp;<code>\/dev\/sdX<\/code>&nbsp;with your drive, and replace the pfSense img file with the filename of your image file:sudo dd if=pfSense-CE-memstick-serial-*.img of=\/dev\/sdX bs=1M<\/li>\n<\/ol>\n\n\n\n<p>Your bootable USB drive with pfSense is now ready for use! If you managed to erase your entire computer by writing pfSense\u2019s image to your operating system drive EVEN AFTER all of this, congratulations, you\u2019re almost as stupid as me.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Disable Secure Boot and Install pfSense on the Intel NUC<\/h2>\n\n\n\n<p>Before you can install pfSense, you\u2019ll need to disable Secure Boot if you are using a modern computer. Many modern computers, especially those pre-installed with Windows 10 or 11, come with Secure Boot enabled, preventing you from booting into an operating system that isn\u2019t signed by Microsoft initially. Since pfSense is open-source and unsigned, we need to disable Secure Boot to start our installation.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"220\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-22-1024x220.png\" alt=\"\" class=\"wp-image-8728\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-22-1024x220.png 1024w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-22-300x64.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-22-768x165.png 768w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-22.png 1124w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">1. Disabling Secure Boot in BIOS<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Insert the USB Drive<\/strong>\n<ul class=\"wp-block-list\">\n<li>Plug in the USB drive containing the pfSense installation image into one of the USB ports on your Intel NUC.<\/li>\n\n\n\n<li>Make sure this is done before you power on the device.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Enter the BIOS<\/strong>\n<ul class=\"wp-block-list\">\n<li>Power on the Intel NUC and immediately start pressing F2 (or the designated key for your system) to access the BIOS settings.<\/li>\n\n\n\n<li>Keep pressing this key until you enter the BIOS. On some systems, the BIOS key may be different (e.g., Delete or Esc), but F2 is common for most systems.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Disable Secure Boot<\/strong>\n<ul class=\"wp-block-list\">\n<li>Inside the BIOS, navigate to the Boot section.<\/li>\n\n\n\n<li>Locate Secure Boot and toggle it to Off. Depending on your BIOS, Secure Boot may be located under the Security or Boot sections.<\/li>\n\n\n\n<li>Once Secure Boot is disabled, you\u2019re ready to install pfSense.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Set Boot Priority<\/strong>\n<ul class=\"wp-block-list\">\n<li>In the BIOS, go to Boot Priority settings.<\/li>\n\n\n\n<li>Set your USB drive as the first boot device. This will allow the system to automatically boot from the USB drive containing the pfSense installer.<\/li>\n\n\n\n<li>Alternatively, you can press&nbsp;<code>F12<\/code>&nbsp;(or the appropriate key) during boot to manually enter the boot menu &amp; select the USB drive each time.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Save and Exit BIOS<\/strong>\n<ul class=\"wp-block-list\">\n<li>Press&nbsp;<code>F10<\/code>&nbsp;to save your changes and exit the BIOS, or whatever key does it on your machine.<\/li>\n\n\n\n<li>The system will now reboot, and if the USB drive is set as the first boot option, it should boot directly from the USB flash drive and load the pfSense installer.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Installing pfSense on the Intel NUC<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Boot from the USB Flash Drive<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Power on the Intel NUC<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Make sure the USB drive containing the pfSense installer is still plugged into the Intel NUC.<\/li>\n\n\n\n<li>Power on the NUC and press&nbsp;<code>F10<\/code>&nbsp;(or the relevant boot menu key) to select the USB drive as the boot device.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.2 Select the USB Drive in Boot Menu<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In the boot menu, you\u2019ll see a list of available boot devices. Select the USB flash drive that contains the pfSense installer.<\/li>\n\n\n\n<li>Press&nbsp;<code>Enter<\/code>&nbsp;to boot from the USB drive.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Begin the pfSense Installation<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 pfSense Installer Men<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>After a few moments, the pfSense installer menu will appear.<\/li>\n\n\n\n<li>Use the arrow keys on your keyboard to select&nbsp;<strong>Install<\/strong>&nbsp;and press&nbsp;<code>Enter<\/code>&nbsp;to begin the installation.<\/li>\n\n\n\n<li><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 Choose Installation Method<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The installer will guide you through the process. When prompted to choose an install method, select&nbsp;<strong>Auto (ZFS)<\/strong>&nbsp;for the file system.<\/li>\n\n\n\n<li>ZFS is a great file system that offers data integrity, snapshots, and other advanced features. You probably won\u2019t use most of them, but it\u2019s still an excellent choice.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"234\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-23.png\" alt=\"\" class=\"wp-image-8730\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-23.png 940w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-23-300x75.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-23-768x191.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Select the Correct Installation Drive<\/h3>\n\n\n\n<p>Raidz1 is a good option in that it allows one of the drives in your machine to die, and the router to keep going. This requires you have not one, but two drives inside your router machine. This is not a bad idea. You should be making a backup file of your router anyway so that you can restore regardless of what happens to any and all of the hardware on this one: but, this will allow the router to keep working even if a single drive dies. I am using stripe, no redundancy, which is the option you will be picking if you have only one drive in the router.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"834\" height=\"365\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-24.png\" alt=\"\" class=\"wp-image-8731\" style=\"width:495px;height:auto\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-24.png 834w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-24-300x131.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-24-768x336.png 768w\" sizes=\"auto, (max-width: 834px) 100vw, 834px\" \/><\/figure><\/div>\n\n\n<h4 class=\"wp-block-heading\">3.1 Select Internal SSD or Hard Drive<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The next step is to select the disk where&nbsp;<strong>pfSense<\/strong>&nbsp;will be installed. This is a very important step, so pay close attention.<\/li>\n\n\n\n<li>You will see a list of drives. The USB drive will usually appear as a small capacity device (e.g., 4GB or 8GB).<\/li>\n\n\n\n<li>Choose the larger drive that represents your Intel NUC\u2019s internal SSD or hard drive (e.g., 256GB, 512GB).<\/li>\n\n\n\n<li><strong>Important:<\/strong>&nbsp;\u201cgeneric-mass-storage-class\u201d is usually your external USB flash drive.&nbsp;<strong>If you\u2019re using a PC with an internal drive, there\u2019s a 99% chance that \u201cgeneric-mass-storage-class\u201d is NOT what you want to select unless you\u2019re intentionally installing to a USB mass storage device (which is not recommended for a permanent installation).<\/strong><\/li>\n\n\n\n<li>In my case, the Micron SSD was my internal SSD. Your drive name may be different, but look for a larger capacity drive that matches what you know is inside your NUC or PC.<\/li>\n\n\n\n<li>Use the arrow keys to highlight the correct drive, then press Enter to confirm your selection.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.2 Confirm Erase and Installation<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Once the correct internal drive is selected, the installer will ask if you want to erase the drive and proceed with the installation.<\/li>\n\n\n\n<li>This will erase all data on the selected drive. Make sure you\u2019ve backed up any important data before proceeding.<\/li>\n\n\n\n<li>Confirm by selecting&nbsp;<strong>Yes<\/strong>. The installer will now copy files and set up&nbsp;<strong>pfSense<\/strong>&nbsp;on the internal drive. This may take a few minutes.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Complete the Installation and Reboot<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">4.1 Remove the USB Flash Drive<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>After the installation is complete, you\u2019ll be prompted to reboot the system.<\/li>\n\n\n\n<li>Before rebooting, remove the USB flash drive from the Intel NUC. This makes sure it boots from the newly installed&nbsp;<strong>pfSense<\/strong>&nbsp;system on your internal drive.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">4.2 Reboot and Load pfSense<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>After removing the USB drive, press&nbsp;<code>Enter<\/code>&nbsp;to reboot the system.<\/li>\n\n\n\n<li>The Intel NUC will now boot into&nbsp;<strong>pfSense<\/strong>&nbsp;from the internal drive, and you\u2019ll be greeted with the&nbsp;<strong>pfSense<\/strong>&nbsp;console screen.<\/li>\n<\/ul>\n\n\n\n<p>Now that&nbsp;<strong>pfSense<\/strong>&nbsp;is installed, you\u2019re ready to proceed with the initial configuration. This includes setting up your WAN (external network) and LAN (internal network) interfaces to make the NUC function as your network router.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: First-Time Configuration of pfSense<\/h2>\n\n\n\n<p>Now that you have pfSense installed on your device, it\u2019s time to set it up and configure the basic settings. This step will cover configuring the&nbsp;<strong>WAN<\/strong>&nbsp;(internet) and&nbsp;<strong>LAN<\/strong>&nbsp;(local network) interfaces, setting IP addresses, and making sure everything is ready for further setup.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Connecting and Booting Up pfSense<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Connect Your Devices:<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Plug your cable modem into one of the Ethernet ports on your pfSense device.<\/li>\n\n\n\n<li>Plug your desktop computer (the one you\u2019re using to set everything up) into the other Ethernet port.<\/li>\n\n\n\n<li>At this point, you don\u2019t need more than these two connections.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.2 Power On and Watch the Boot Process:<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Turn on your pfSense device.<\/li>\n\n\n\n<li>You\u2019ll see a lot of text scrolling on the screen as the system boots up. Don\u2019t worry if it seems overwhelming\u2014this is normal.<\/li>\n\n\n\n<li>Pay close attention to the information displayed, especially towards the end of the boot process. Look for any text related to an&nbsp;<strong>IP address<\/strong>&nbsp;or&nbsp;<strong>interface name<\/strong>, like what is pictured below:<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE<\/strong>: Interface names can be ascertained by looking at what is going on as the machine boots. This is helpful for later! Refer to images below.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">2. Initial Configuration Steps<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">2.1: VLAN Setup Prompt<\/h4>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"572\" height=\"375\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-25.png\" alt=\"\" class=\"wp-image-8733\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-25.png 572w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-25-300x197.png 300w\" sizes=\"auto, (max-width: 572px) 100vw, 572px\" \/><\/figure><\/div>\n\n\n<p><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxaty_tmp_4cd80f0d.png\"><\/a><\/p>\n\n\n\n<p>&#8211; One of the first prompts you\u2019ll see is:&nbsp;<strong>\u201cShould VLANs be set up now?\u201d<\/strong><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.1: VLAN Setup Prompt<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>What is a VLAN? VLAN stands for&nbsp;<strong>Virtual Local Area Network<\/strong>. It\u2019s a way to create separate networks within your network. For example, if you have a switch with 52 ports and want to have five different networks all connected to your router with just one cable, you\u2019d use VLANs. However, this is way too advanced for what we\u2019re doing here.<\/li>\n\n\n\n<li>You may see a bunch of random text appear before you have a chance to respond. Don\u2019t worry, you haven\u2019t missed your opportunity to input. You can still type \u2018n\u2019 and hit enter when you\u2019re ready.<\/li>\n\n\n\n<li>This is just normal open-source nerd UI\/UX that is not designed for normal people. You will see a lot of this. That is why we\u2019re here!<\/li>\n\n\n\n<li>For now, press&nbsp;<strong>\u2018N\u2019<\/strong>&nbsp;to skip VLAN setup. We\u2019re setting up just one local network, so VLANs aren\u2019t necessary at this stage. You may do this later with the wifi section to have segmented wifi networks for trusted &amp; untrusted devices &amp; to limit their access,&nbsp;<strong>but that does not have to be done right now and can be done later!<\/strong><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.2: WAN and LAN Interface Assignment<\/h4>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"667\" height=\"375\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-26.png\" alt=\"\" class=\"wp-image-8734\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-26.png 667w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-26-300x169.png 300w\" sizes=\"auto, (max-width: 667px) 100vw, 667px\" \/><\/figure><\/div>\n\n\n<p><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxaty_tmp_78cbbbb8.png\"><\/a><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Next, pfSense will show you which interfaces are available on your device. This is where you assign the Ethernet ports for&nbsp;<strong>WAN<\/strong>&nbsp;(internet) and&nbsp;<strong>LAN<\/strong>&nbsp;(internal network).<\/li>\n\n\n\n<li>Pay close attention to the bottom third of the screen. You\u2019ll see information about which interface (e.g.,&nbsp;<code>em0<\/code>&nbsp;or&nbsp;<code>igb0<\/code>) has received an IP address. The interface that received an IP address is most likely your&nbsp;<strong>WAN interface<\/strong>. In my case,&nbsp;<code>em0<\/code>&nbsp;is the interface attached to Spectrum cable internet; makes sense that it\u2019s sad\u2026<\/li>\n\n\n\n<li>Your desktop PC is not going to \u201cprovide\u201d an IP address to the router; it is going to try to&nbsp;<strong>retrieve<\/strong>&nbsp;an IP address from the router. This is how we determine that the interface that has received an IP address is the WAN interface connected to our modem.<\/li>\n\n\n\n<li>The names of these interfaces may vary depending on your hardware and pfSense version. Don\u2019t worry if they don\u2019t match exactly what you see in this guide.<\/li>\n<\/ul>\n\n\n\n<p>When prompted:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Enter WAN Interface Name:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Input the name of the interface that received an IP address (e.g.,&nbsp;<code>em0<\/code>).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Enter LAN Interface Name:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Input the name of the other interface (e.g.,&nbsp;<code>igb0<\/code>).<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>Confirm the interface assignments when prompted. This tells&nbsp;<strong>pfSense<\/strong>&nbsp;which port to use for&nbsp;<strong>WAN<\/strong>&nbsp;(internet) and which for&nbsp;<strong>LAN<\/strong>&nbsp;(local network).<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE<\/strong>: This is the IP address that you would be accessing the&nbsp;<strong>pfSense<\/strong>&nbsp;web interface on. This is also your \u201cgateway\u201d address, i.e., what your computer connects to in order to get an IP address, and before it connects to any IP outside of this subnet (subnet = other devices on your LAN, e.g., cellphone, TV, file server, etc.).<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">3. Configuring LAN IP Address<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"418\" height=\"375\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-27.png\" alt=\"\" class=\"wp-image-8735\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-27.png 418w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-27-300x269.png 300w\" sizes=\"auto, (max-width: 418px) 100vw, 418px\" \/><\/figure><\/div>\n\n\n<p><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxaty_tmp_ebc6f9c0.png\"><\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3.1: Default LAN IP<\/h4>\n\n\n\n<p>After assigning interfaces,&nbsp;<strong>pfSense<\/strong>&nbsp;will show you the default LAN IP address, usually&nbsp;<strong>192.168.1.1<\/strong>.<\/p>\n\n\n\n<p>This is the IP address of your router (<strong>pfSense<\/strong>) within your local network.<\/p>\n\n\n\n<p>Any device that connects to the router will be assigned an IP address in the&nbsp;<strong>192.168.1.x<\/strong>&nbsp;range by default. For instance, your PC may grab an IP of 192.168.1.46, 192.168.1.16, etc., if set to connect automatically via&nbsp;<code>DHCP<\/code>&nbsp;(Dynamic Host Configuration Protocol).<\/p>\n\n\n\n<p><code>DHCP<\/code>&nbsp;means when you connect to a router it grabs an IP address\/DNS server\/etc. to you by default, \u201cPlug N Play\u201d style. This is the default configuration of most devices you will ever connect to the internet unless you went out of your way to re-configure them. This includes your computer, cellphone, game console, IoT devices, security cameras, etc. They\u2019re all connecting via&nbsp;<code>DHCP<\/code>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3.2: Changing the LAN IP (Optional)<\/h4>\n\n\n\n<p>Requirements:<\/p>\n\n\n\n<p>You don\u2019t need to change this unless you have a specific reason to do so, such as conflicts with other networks you\u2019re using. I have chosen to change it, and will be working with the following configuration throughout this guide.&nbsp;<strong>You do not have to follow what I am doing, but if you want to be able to copy &amp; paste along with me addresses of things, feel free to do it this way, it won\u2019t hurt.<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Set Interface IP address<\/strong>\n<ul class=\"wp-block-list\">\n<li>The number for the LAN interface was&nbsp;<code>2<\/code>&nbsp;in my case<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Configure the new LAN IPv4 address via DHCP<\/strong>\n<ul class=\"wp-block-list\">\n<li>Choose&nbsp;<code>n<\/code><\/li>\n\n\n\n<li>This isn\u2019t referring to having DHCP so that clients who connect can get an IP address. This means should this interface have a dynamic IP itself, meaning the the router\/gateway would have a different IP each time we connect to it. There is no need for this.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Enter the new LAN IPv4 address<\/strong>\n<ul class=\"wp-block-list\">\n<li><code>192.168.5.1<\/code>&nbsp;is my LAN IPv4 address that I will choose for my router.<\/li>\n\n\n\n<li>This is where your&nbsp;<strong>pfSense<\/strong>&nbsp;router will be accessible via web browser. This will be your gateway address, and this will be your DNS server.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Enter LAN IPv4 subnet bit count<\/strong>\n<ul class=\"wp-block-list\">\n<li><code>24<\/code>&nbsp;is the subnet bit count<\/li>\n\n\n\n<li>(This is shorthand for a subnet mask of&nbsp;<code>255.255.255.0<\/code>).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>IPv4 upstream gateway address<\/strong>\n<ul class=\"wp-block-list\">\n<li>Press enter for none.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Configure IPv6 address for LAN interface via DHCP6<\/strong>\n<ul class=\"wp-block-list\">\n<li>Press&nbsp;<code>y<\/code>&nbsp;, we\u2019re not using IPv6 in this guide anyway.<\/li>\n\n\n\n<li>I hit&nbsp;<code>y<\/code>, you can hit&nbsp;<code>n<\/code>&nbsp;and specify an address manually, but I will not be using IPv6 so it makes no difference to me, no need to specify an address I have to remember for something I will never use.<\/li>\n\n\n\n<li>You\u2019re welcome to set up an IPv6 home network if you want; I am not covering that here.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">3.3: DHCP Setup<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>DHCP (Dynamic Host Configuration Protocol)<\/strong>&nbsp;automatically assigns IP addresses to devices on your network. This makes it easier to connect new devices without manually configuring IP settings on each one. This is what allows clients to be able to get an IP address automatically as soon as they connect via Wi-Fi or with an ethernet cord into your switch. You want this so that by default people can go online without having to specify their IP manually.<\/li>\n\n\n\n<li>When asked if you want to configure DHCP, choose&nbsp;<strong>Yes<\/strong>.<\/li>\n\n\n\n<li>Set the DHCP range. This is the range of IP addresses that will be assigned to devices on your network. For example:\n<ul class=\"wp-block-list\">\n<li><strong>Start Address:<\/strong>&nbsp;<code>192.168.5.2<\/code><\/li>\n\n\n\n<li><strong>End Address:<\/strong>&nbsp;<code>192.168.5.254<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Since we have our router on&nbsp;<code>192.168.5.1<\/code>, the next address that\u2019s available is&nbsp;<code>192.168.5.2<\/code>&nbsp;which is the start, and&nbsp;<code>192.168.5.254<\/code>&nbsp;as the end.<\/li>\n\n\n\n<li>For&nbsp;<em>Do you want to revert to HTTP as the webconfigurator protocol<\/em>, choose&nbsp;<code>n<\/code>. No need to use HTTP instead of HTTPS. We\u2019re never going to connect to this without a VPN anyway, so HTTP vs HTTPS isn\u2019t the biggest security deal in the world, but it\u2019s a good practice to use HTTPS whenever possible.<\/li>\n<\/ol>\n\n\n\n<p>This allows up to 254 devices on your local network, which is more than enough for most home setups. If you have more than 254 devices at home, you\u2019re likely not reading a beginner\u2019s guide from a board repair person cosplaying as a sysadmin.<\/p>\n\n\n\n<p>If you want to go crazy, you can do a different setup entirely: change the LAN IP to something even less common if you want to avoid conflicts, such as&nbsp;<code>172.16.10.1<\/code>&nbsp;as a LAN IP, subnet 24. This would allow 254 devices that would be given IPs such as&nbsp;<code>172.16.10.2<\/code>,&nbsp;<code>172.16.10.30<\/code>, etc.\u2014and your&nbsp;<strong>pfSense<\/strong>&nbsp;router web interface would be accessible on&nbsp;<code>172.16.10.1<\/code>. When you connect to other people\u2019s networks, if you don\u2019t disable LAN access in the OpenVPN android client, and their network has a&nbsp;<code>192.168.1.1<\/code>, and yours has a&nbsp;<code>192.168.1.1<\/code>\u2026 You see where this is going. Chances are they don\u2019t have a&nbsp;<code>192.168.5.1<\/code>&nbsp;though.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;If both your home network and a remote network you\u2019re connecting from via VPN use the same IP range, you can end up with routing &amp; connectivity issues. Let\u2019s say you\u2019re at a coffee shop. You connect via wifi. On their network, you are 192.168.1.3. You connect to your home network via your VPN, and you want to connect to your local mailserver\u2026 but you both have the same pos linksys wrt54g router, which defaults everyone to 192.168.1.*. so you try to connect to 192.168.1.3. Do you see where this is going?<\/p>\n\n\n\n<p>Changing your home network to a less common IP range can mitigate this risk. Always check the IP range of networks you frequently connect to and adjust your home network accordingly. Or, just make yours some weird-ass number that nobody else will be using. The latter works for me.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">4. Finishing Up<\/h3>\n\n\n\n<p>At this point, the basic configuration is complete. You can now:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Unplug the monitor, keyboard, and mouse from your&nbsp;<strong>pfSense<\/strong>&nbsp;device.<\/li>\n\n\n\n<li>Put away your keyboard and mouse.<\/li>\n\n\n\n<li>Turn your cable modem off for a minute or two, and then plug it back in. Some modems get mad when you plug in a new router.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;Configuring the LAN IPv4 address and subnet mask sounds confusing if you\u2019re used to plugging in your 50 year old Linksys WRT54G &amp; getting going. It\u2019ll get easier with time, but for now, let\u2019s go over what some of these pieces do. You can always come back to this later.<\/p>\n\n\n\n<p><strong>What is the LAN IPv4 Address?<\/strong>&nbsp;The LAN IPv4 address is the IP address assigned to your router on your local network. All your devices from your computer, phone, or smart TV<em>(if you are reading this and still using a smart tv\u2026)<\/em>&nbsp;use that address as the \u201cgateway\u201d to get to the internet &amp; also to communicate with each other. The default configuration is that pfSense assigns&nbsp;<code>192.168.1.1<\/code>&nbsp;as the LAN IP address. This is the norm for most routers.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This address is special because it tells devices where to send data when they want to leave your network. For example, if your PC needs to visit&nbsp;<code>apple.com<\/code>, it sends the request to the router\u2019s LAN IP (<code>192.168.1.1<\/code>, otherwise known as the gateway), which then forwards it to the internet.<\/li>\n\n\n\n<li>If you\u2019re not changing anything, you can stick with the default (<code>192.168.1.1<\/code>). I change it because everyone uses&nbsp;<code>192.168.1.1<\/code>. If you use a VPN or other networks frequently, changing it to something like&nbsp;<code>192.168.5.1<\/code>&nbsp;can avoid headaches down the line. If I am trying to connect to&nbsp;<code>192.168.1.1<\/code>&nbsp;on my home network, but&nbsp;<code>192.168.1.1<\/code>&nbsp;is the gateway IP of the wifi router my phone is connected to at my friend\u2019s house\u2026 you see where this gets confusing.<\/li>\n<\/ul>\n\n\n\n<p><strong>What is a Subnet Mask?<\/strong>&nbsp;A subnet mask is what defines the \u201csize\u201d of your local network. Your LAN is like a neighborhood; the subnet mask is like a property line that goes over how many houses can fit in the neighborhood.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The default subnet mask for most home networks is&nbsp;<code>255.255.255.0<\/code>. This tells your router that there can be up to 254 devices(playstations, phones, computers, etc) connected to your network. That\u2019s a lot. If you have more than 254 devices in your house, you\u2019re probably not reading this guide.<\/li>\n\n\n\n<li>This subnet mask is written abbreviated as&nbsp;<code>\/24<\/code>&nbsp;because the first 24 bits (the&nbsp;<code>255.255.255<\/code>&nbsp;part) of the address are fixed while it\u2019s only the last 8 bits are available for device addresses.<\/li>\n<\/ul>\n\n\n\n<p><strong>Why Configure a Static LAN IP?<\/strong>&nbsp;When you assign a static LAN IP to your router, you\u2019re making sure that its address never changes. It would make no sense to have a router IP that changes constantly. Your servers &amp; devices all need to connect to the router, so keep the router where it is. Moving it around senselessly makes no sense. It would be akin to Walmart changing its address every day.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Imagine your router\u2019s address was constantly changing. One moment it\u2019s at&nbsp;<code>192.168.1.1<\/code>, and the next, it\u2019s at&nbsp;<code>192.168.1.87<\/code>. Your devices would be as confused as I am when I call a&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=qFVwQCFhKSE\">New York state tax office<\/a>.<\/li>\n\n\n\n<li>By giving a static IP like&nbsp;<code>192.168.5.1<\/code>&nbsp;to the router, I\u2019m making sure that everything in your network knows where to go.<\/li>\n<\/ul>\n\n\n\n<p><strong>Step-by-Step explanation if you\u2019re still confused:<\/strong><\/p>\n\n\n\n<p><strong>Set Interface IP Address:<\/strong>&nbsp;&#8211; When it asks you to \u201cSet interface IP address,\u201d this is where you\u2019re assigning the LAN IPv4 address. Think of it as giving your router its permanent address in your local network. Enter&nbsp;<code>2<\/code>&nbsp;to configure the LAN interface.<\/p>\n\n\n\n<p><strong>Configure the New LAN IPv4 Address:<\/strong>&nbsp;&#8211; Here, you\u2019re telling&nbsp;<strong>pfSense<\/strong>&nbsp;what address you want to use for the router. For example,&nbsp;<code>192.168.5.1<\/code>&nbsp;makes your router accessible at that address. &#8211; Remember: This is the gateway address that all your devices will use to connect to the internet. Write it down somewhere because you\u2019ll need it later to log in to the&nbsp;<strong>pfSense<\/strong>&nbsp;web interface.<\/p>\n\n\n\n<p><strong>Enter LAN IPv4 Subnet Bit Count:<\/strong>&nbsp;&#8211; This is where you specify the subnet mask abbreviated. For most home setups, the bit count is&nbsp;<code>24<\/code>, aka&nbsp;<code>255.255.255.0<\/code>. This allows up to 254 devices to connect to your network. If you\u2019re just starting out, stick with&nbsp;<code>\/24<\/code>. &#8211;&nbsp;<strong>To keep it simple when you see&nbsp;<code>192.168.5.0\/24<\/code>&nbsp;what they mean is everything from&nbsp;<code>192.168.5.1<\/code>&nbsp;to&nbsp;<code>192.168.5.254<\/code>.&nbsp;<\/strong>&#8211;&nbsp;<em>Why not use a bigger subnet?<\/em>&nbsp;Because you\u2019re reading a beginner\u2019s guide. How about you get one device to work in your broom closet before going for over 254?<\/p>\n\n\n\n<p><strong>IPv4 Upstream Gateway Address:<\/strong>&nbsp;&#8211; This is asking if your LAN interface needs a separate gateway to reach the internet. Since your router&nbsp;<strong>is<\/strong>&nbsp;the gateway for your LAN, just press Enter to leave this blank. &#8211;&nbsp;<strong>Your LAN doesn\u2019t need to forward traffic anywhere else because the router handles it.<\/strong><\/p>\n\n\n\n<p><strong>Configure IPv6 Address for LAN Interface via DHCP6:<\/strong>&nbsp;&#8211; You\u2019re not using IPv6. Forget about IPv6 for now. We\u2019ll get to how this makes using your VPN a nightmare later on. If you are not a datacenter or a sysadmin for amazon web services, you have no need for ipv6 in your life at this stage.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">5. Accessing the pfSense Web Interface<\/h3>\n\n\n\n<p>Now that the basic network setup is complete, you can access the&nbsp;<strong>pfSense<\/strong>&nbsp;web interface to configure more advanced settings.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>On your desktop computer (connected to the LAN port), open a web browser.<\/li>\n\n\n\n<li>Go to&nbsp;<code><a href=\"https:\/\/192.168.5.1\/\">https:\/\/192.168.5.1<\/a><\/code>&nbsp;or&nbsp;<code><a href=\"https:\/\/pfsense.home.arpa\/\">https:\/\/pfSense.home.arpa<\/a><\/code>.<\/li>\n\n\n\n<li>You may see a security warning in your browser. This is because&nbsp;<strong>pfSense<\/strong>&nbsp;is using a self-signed SSL certificate, which is fine for local networks. Click&nbsp;<strong>\u201cAdvanced\u201d<\/strong>&nbsp;and proceed to the site.<\/li>\n\n\n\n<li>Log in with the default credentials:\n<ul class=\"wp-block-list\">\n<li><strong>Username:<\/strong>&nbsp;<code>admin<\/code><\/li>\n\n\n\n<li><strong>Password:<\/strong>&nbsp;<strong>pfsense<\/strong><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Once logged in, you\u2019ll be prompted to change the default password. Set a strong password to secure your router.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"215\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-28-1024x215.png\" alt=\"\" class=\"wp-image-8736\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-28-1024x215.png 1024w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-28-300x63.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-28-768x161.png 768w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-28-1536x323.png 1536w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-28.png 1679w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">5.1: Initial Web Setup Wizard<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Set the Hostname:<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Choose a hostname for your&nbsp;<strong>pfSense<\/strong>&nbsp;router. This can be something simple like \u201cpfsense\u201d or \u201chome-router.\u201d You will be able to access the router at&nbsp;<code>pfsense.home.arpa<\/code>&nbsp;once we set everything up with DNS later, instead of having to visit the router\u2019s web interface based on its IP address. If you typed&nbsp;<code>roflcopter<\/code>&nbsp;into this box, you would be able to access your router at&nbsp;<code><a href=\"https:\/\/roflcopter.home.arpa\/\">https:\/\/roflcopter.home.arpa<\/a><\/code>&nbsp;rather than typing in&nbsp;<a href=\"https:\/\/192.168.5.1\/\">https:\/\/192.168.5.1<\/a>&nbsp;\u2013 you get the idea.<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Set DNS Servers:<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>For now, you can use a public DNS provider like&nbsp;<strong>Google DNS (8.8.8.8)<\/strong>, but we\u2019ll replace this with AdGuard DNS or similar later for ad-blocking.<\/li>\n\n\n\n<li>Uncheck the option to&nbsp;<strong>\u201cAllow DNS server list to be overridden by DHCP\/PPP on WAN,\u201d<\/strong>&nbsp;so your ISP cannot override the DNS settings you choose.<\/li>\n<\/ul>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Time Zone:<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Set the correct time zone for your location (e.g.,&nbsp;<strong>US Central<\/strong>&nbsp;if you\u2019re in Texas).<\/li>\n<\/ul>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>Final Steps:<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Once these settings are configured, hit&nbsp;<strong>\u201cNext.\u201d<\/strong>&nbsp;It\u2019ll ask you to configure the WAN interface. Unless you have a funky setup, you need not change anything here. This is not for you to mess with.<\/li>\n\n\n\n<li>It\u2019ll ask you to configure the LAN interface again, but you need not touch anything, remember we already did this and the settings you put in earlier should be what shows up.<\/li>\n\n\n\n<li>It\u2019ll ask you to make a secure password; it is a good idea to set a secure password and save it in a password manager. No post-it note on the monitor nonsense!<\/li>\n\n\n\n<li>You\u2019ll be taken to the final page where you can apply the settings and restart the web interface.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6. Final Check and Preparing for the Next Steps<\/h3>\n\n\n\n<p>At this point,&nbsp;<strong>pfSense<\/strong>&nbsp;is fully installed, and the basic configuration is complete. Here are some final steps and checks:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>It\u2019s a good idea to restart your cable modem when you make these changes, especially if it was previously connected to another router.<\/li>\n\n\n\n<li>You might want to reset the internet connection on the device you\u2019re using to access the&nbsp;<strong>pfSense<\/strong>&nbsp;web interface, especially if it was connected to a different network before.<\/li>\n\n\n\n<li>Before we move forward to setting up additional features (like ad-blocking), make sure your internet connection is stable and working as expected.<\/li>\n\n\n\n<li>Test your internet connection by browsing the web from a device connected to the LAN.<\/li>\n\n\n\n<li>Remember, you can now manage everything through the web interface. You shouldn\u2019t need to directly connect to the&nbsp;<strong>pfSense<\/strong>&nbsp;device with a monitor and keyboard again unless something breaks. Put the keyboard, mouse, and monitor plugged into that&nbsp;<strong>pfSense<\/strong>&nbsp;device away; we\u2019re (hopefully) never touching that again.&nbsp;<strong>If you are, that means something bad has occurred.<\/strong><\/li>\n\n\n\n<li>If you encounter any issues, re-check everything you did.<\/li>\n<\/ol>\n\n\n\n<p><strong>Congratulations!<\/strong>&nbsp;Your&nbsp;<strong>pfSense<\/strong>&nbsp;router is now set up and ready for use. Now the real fun begins.&nbsp;\ud83d\ude42<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Setting Up FreeDNS for Dynamic DNS<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Why Do You Need Dynamic DNS?<\/h2>\n\n\n\n<p><strong>Your IP address changes.<\/strong><\/p>\n\n\n\n<p>Your IP address is like your home address or phone number. You want this to be static &#8211; as in, doesn\u2019t change. Imagine if all of the road names and highway exits changed each day, or if your friend\u2019s phone number changed every day. This would be a mess. How would you know who to call? It would be very confusing. This is how it is when you have a dynamic IP.<\/p>\n\n\n\n<p>Most of you setting up a home server likely have a residential internet plan from providers like Spectrum, AT&amp;T, or Verizon. Unlike professional hosting services with static IPs, residential plans assign dynamic IP addresses that change as often as the relationship partners of people with borderline personality disorder. This can be a problem when you want to access your home network remotely.<\/p>\n\n\n\n<p>What if you had a speed dial button that automatically kept track of that friend\u2019s changing number, and just allowed you to reach your friend every time you pressed on their name? That\u2019s how a dynamic DNS works.<\/p>\n\n\n\n<p>Even if you DO manage to memorize 33.484.382.1, imagine having to memorize a new number every week. Or&nbsp;<em>every day!<\/em><\/p>\n\n\n\n<p>And what if it changes in the&nbsp;<em>middle of the day?<\/em>&nbsp;Imagine having to check your IP address every day, or calling home &amp; going&nbsp;<em>\u201chey honey, can you go to whatismyip.com and give me the number so I can add something to my calendar? Thanks!\u201d<\/em><\/p>\n\n\n\n<p>That would be horrible.<\/p>\n\n\n\n<p>What you want to do is go to&nbsp;<em>chrisserver.mooo.com<\/em>&nbsp;or&nbsp;<em>mysite.ddns.net<\/em>&nbsp;and it takes you right to your server, every time. This is possible because someone else can do the work of keeping track of your router\u2019s IP address and assigning it to that domain name. Or, something. That thing is a&nbsp;<strong>dynamic DNS provider.<\/strong><\/p>\n\n\n\n<p>This is where&nbsp;<strong>Dynamic DNS<\/strong>&nbsp;comes in handy. It automatically updates a friendly hostname to point to your current IP address, so you can always access your home network using a consistent address.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Setting Up FreeDNS<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Register on FreeDNS<\/h3>\n\n\n\n<p>We\u2019re going to use a service called&nbsp;<strong>FreeDNS<\/strong>. It\u2019s free, easy to use, and even has some fun domain options.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"193\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-29-1024x193.png\" alt=\"\" class=\"wp-image-8737\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-29-1024x193.png 1024w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-29-300x57.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-29-768x145.png 768w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-29-1536x289.png 1536w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-29.png 1677w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Create a FreeDNS account<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Visit FreeDNS:<\/strong>&nbsp;Go to&nbsp;<a href=\"http:\/\/freedns.afraid.org\/\">freedns.afraid.org<\/a>.<\/li>\n\n\n\n<li><strong>Register:<\/strong>&nbsp;Click on \u201cSign up Free\u201d in the lower center of the page.<\/li>\n\n\n\n<li><strong>Fill out form:<\/strong>&nbsp;Fill in the required fields (username, password, and email) and click \u201cCreate Account\u201d.<\/li>\n\n\n\n<li><strong>Verify your account<\/strong>&nbsp;by clicking the link in the confirmation email.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">1.2 Log into FreeDNS &amp; create subdomain<\/h4>\n\n\n\n<p>Continue with the steps to set up your subdomain as needed.<\/p>\n\n\n\n<p>This is going to be the \u201cwebsite name\u201d we associate with our home server internet connection. When you visit&nbsp;<code>rossmanngroup.com<\/code>, this actually means&nbsp;<code>208.113.140.53<\/code>. When you type&nbsp;<em><a href=\"http:\/\/rossmanngroup.com\/\">http:\/\/rossmanngroup.com<\/a><\/em>&nbsp;in your browser, you\u2019re asking your browser to go to&nbsp;<code>208.113.140.53<\/code>&nbsp;and knock on port 80 to serve us a website. When you type&nbsp;<code><a href=\"https:\/\/rossmanngroup.com\/\">https:\/\/rossmanngroup.com<\/a><\/code>&nbsp;in your browser, you\u2019re saying we\u2019re going to&nbsp;<code>208.113.140.53<\/code>&nbsp;and knocking on port 443 to be served a website with https\/ssl.<\/p>\n\n\n\n<p>The&nbsp;<strong>subdomain<\/strong>&nbsp;enclosed in red in the screenshot above is the&nbsp;<strong>first part<\/strong>&nbsp;of the website name, and the&nbsp;<strong>domain<\/strong>&nbsp;enclosed in green is the&nbsp;<strong>second part<\/strong>&nbsp;of the website name. The&nbsp;<strong>destination<\/strong>&nbsp;enclosed in blue is where our combined website name leads us. So,&nbsp;<code>louishomeserver.chickenkiller.com<\/code>&nbsp;in the configuration above, would lead us to&nbsp;<code>8.8.8.8<\/code><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>After clicking the activation link from the FreeDNS email, you should be immediately logged in. You should save the username &amp; password they gave you in a password manager.<\/li>\n\n\n\n<li><strong>Add a New Subdomain:<\/strong>&nbsp;Once logged in, click on \u201cAdd a subdomain\u201d in the middle of the screen from the main menu. Or, click Subdomains on the left side menu.<\/li>\n\n\n\n<li>Fill out the fields:\n<ol class=\"wp-block-list\">\n<li><strong>Subdomain:<\/strong>&nbsp;Choose a custom name (e.g., \u201clouishomeserver\u201d). That\u2019s the part I circled in red in my screenshot above.<\/li>\n\n\n\n<li><strong>Domain:<\/strong>&nbsp;Select one of the available free domains (e.g.,&nbsp;<code>chickenkiller.com<\/code>). This is the green field in my screenshot above.&nbsp;<strong>You can get your own pretty, custom named .com address, but you\u2019ll have to pay for it.<\/strong><\/li>\n\n\n\n<li><strong>Destination:<\/strong>&nbsp;Here\u2019s the trick &#8211; put in a WRONG IP address on purpose (e.g.,&nbsp;<code>8.8.8.8<\/code>). This will help us confirm if our setup is working later.<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>The entire point of this is for our router to constantly&nbsp;<em>update<\/em>&nbsp;FreeDNS by telling it what our IP address is. If we put what our IP address is&nbsp;<em>RIGHT NOW<\/em>&nbsp;in this field, we won\u2019t know for sure if&nbsp;<strong>pfSense<\/strong>&nbsp;is working properly with FreeDNS. We\u2019d have to debug it through log files. Ew.<\/li>\n\n\n\n<li>Click \u201cSave\u201d to create your hostname.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;Setting an incorrect initial IP address lets us test that pfSense is correctly updating the dynamic DNS entry. This diagnostic step is an important one; screw things up &amp; make sure that the system you put into place to auto-fix-it fixes it. This is far less dangerous than the alternative, which is \u201cassuming that it works.\u201d<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">1.3 Get the update URL from FreeDNS<\/h4>\n\n\n\n<p>The update URL is the URL&nbsp;<strong>pfSense<\/strong>&nbsp;will access to tell FreeDNS that your domain name\u2019s IP address has changed &amp; should change to the IP that your router is accessing that FreeDNS URL from.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>After saving, click \u201cDynamic DNS\u201d from the upper left menu of choices.<\/li>\n\n\n\n<li>You\u2019ll see your new subdomain at the bottom.<\/li>\n\n\n\n<li>Right-click on the \u201cDirect URL\u201d link next to your hostname and copy the link address.<\/li>\n\n\n\n<li>This URL is how we will update our IP address automatically.&nbsp;<strong>DO NOT SHARE THIS WITH ANYONE OR THEY WILL BE ABLE TO MESS WITH YOU ENDLESSLY BY CHANGING THE IP THAT YOUR NEW WEBSITE NAME ATTACHES TO AWAY FROM YOUR SERVER!!<\/strong><\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;The Direct URL contains what is like a \u201cpassword\u201d necessary for updating your dynamic DNS record. Keep this URL secure and don\u2019t share it publicly unless you want your dynamic dns domain name redirecting to goatse<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">1.4 Leave FreeDNS page open &amp; make sure it has the WRONG IP for you.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=91\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=91\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Either the&nbsp;<em><a href=\"https:\/\/freedns.afraid.org\/dynamic\/\">dynamic DNS page on FreeDNS<\/a><\/em>&nbsp;OR the&nbsp;<em><a href=\"https:\/\/freedns.afraid.org\/subdomain\/\">subdomains page on FreeDNS<\/a><\/em>. Make sure the IP address is as we entered before, which is&nbsp;<code>8.8.8.8<\/code>.<\/li>\n\n\n\n<li><strong>IT IS IMPORTANT THAT THIS IP ADDRESS NOT BE YOUR IP ADDRESS! WE WANT IT TO BE WRONG!<\/strong><\/li>\n\n\n\n<li>Make sure it is still set to the&nbsp;<code>8.8.8.8<\/code>&nbsp;I told you to set it to before.<\/li>\n\n\n\n<li>If it is not, set it to&nbsp;<code>8.8.8.8<\/code>.<\/li>\n\n\n\n<li>Reload both pages. Still&nbsp;<code>8.8.8.8<\/code>? Good.<\/li>\n\n\n\n<li>We want this to be wrong \u2013 it changing from \u201cwrong\u201d to \u201cnot wrong\u201d when we finish our work will mean that our setup works.<\/li>\n<\/ol>\n\n\n\n<p><strong>Why are we doing things this way?<\/strong>&nbsp;It takes an insignificant amount of extra time to do things like this, as a check against everything; from software glitches to my own carelessness and absent-mindedness.<\/p>\n\n\n\n<p>Starting with the assumption that nothing works properly allows us to figure out at the very beginning if everything has been configured properly. Starting with the assumption that nothing works will allow us to figure out if our system ACTUALLY works BEFORE WE NEED IT TO WORK!!<\/p>\n\n\n\n<p>You\u2019ll see when we are testing certain features and functionalities and software like syncthing later that this comes in very handy. In the video, a connection will work &amp; have a green checkbox the first time, but local discovery will not work the second time, even though the server &amp; client IPs remain unchanged.<\/p>\n\n\n\n<p>NEVER ASSUME A FIX WORKS WITHOUT BREAKING THE THING IT IS SUPPOSED TO FIX AND SEEING WHAT IT DOES.<\/p>\n\n\n\n<p>Assume that nothing works, especially your own brain, and you will create systems that guard against much more than your own human error!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Configuring pfSense for Dynamic DNS[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=92\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=92\">edit source<\/a>]<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"462\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-30-1024x462.png\" alt=\"\" class=\"wp-image-8738\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-30-1024x462.png 1024w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-30-300x135.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-30-768x346.png 768w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-30-1536x693.png 1536w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-30.png 1676w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>pfSense has to talk to FreeDNS regularly to tell it our IP.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 Log into pfSense<\/h4>\n\n\n\n<p>Open the pfSense web interface and log in, at&nbsp;<a href=\"https:\/\/192.168.5.1\/\">https:\/\/192.168.5.1<\/a>&nbsp;or&nbsp;<a href=\"https:\/\/pfsense.home.arpa\/\">https:\/\/pfsense.home.arpa<\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 Enter Dynamic DNS settings<\/h4>\n\n\n\n<p>In the pfSense dashboard, there is a menu on the top. Go to&nbsp;<code>Services &gt; Dynamic DNS<\/code>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 Enter Dynamic DNS entry<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click the \u201c+ Add\u201d button to add a new entry.<\/li>\n\n\n\n<li><strong>Configure the Settings:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Service Type:<\/strong>&nbsp;Select \u201cCustom\u201d from the dropdown. This might seem counterintuitive since \u201cfreedns\u201d exists as an option in this dropdown menu, but trust me here. You trust me\u2026 right? This is the green box in the screenshot I provided above.<\/li>\n\n\n\n<li><strong>Interface to Monitor:<\/strong>&nbsp;Select&nbsp;<code>WAN<\/code>&nbsp;(your external internet connection), this is the part circled in purple above.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Interface to send update from:<\/strong>&nbsp;Select WAN, the part circled in purple above.<\/li>\n\n\n\n<li><strong>HTTP API DNS Options:<\/strong>&nbsp;I check&nbsp;<strong>\u201cForce IPv4 DNS resolution\u201d<\/strong>&nbsp;because I have been scarred by my residential internet service provider\u2019s issues with IPv6 before Spectrum bought Time Warner Cable. You don\u2019t have to check this, but I check it because I hate IPv6 &amp; have it turned off entirely in my own setup. I shouldn\u2019t be passing my prejudices onto my children. But here I am passing this one onto you&nbsp;:\u2019(<\/li>\n\n\n\n<li><strong>Update URL:<\/strong>&nbsp;Paste the Direct URL you copied from FreeDNS. Everything after the question mark in this URL is like your password and username combined.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">   IF YOU ARE USING CLOUDFLARE, you need to use your Zone ID as the username and the token you just created (with the Zone.DNS - Edit permission) as the password. Otherwise, if you use the token alone, the status will always appear green, but you won\u2019t be able to connect. You might end up spending four hours, like I did, debugging all sorts of issues until you finally find the answer in a four-year-old Reddit post. Also, make sure you disable proxy on cloudflare.\n<\/pre>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Max Cache Age:<\/strong>&nbsp;When will this run? By default, this runs when an update is forced by you or when the router notices the WAN address (the IP address your ISP assigned to you) has changed. I see no harm in having it update once per day. If there\u2019s any sort of stupid bug or issue or crap where it tried to update &amp; failed because the wind was blowing the wrong day, packet loss, etc\u2026 It costs literally nothing to do this, we\u2019re in 2024, even people in the middle of nowhere have 768\/128k DSL\u2026 There is zero downside to setting this to check at the minimum allowed interval, of once per day.&nbsp;<em>\u201cInspect what you expect\u201d<\/em>&nbsp;as my stepmom would say, who was director of the Brookfield library.&nbsp;\ud83d\ude42 She could tell you firsthand that\u2026.. Nothing you expect people (OR COMPUTERS) to do, will they actually do.<\/li>\n\n\n\n<li><strong>Description:<\/strong>&nbsp;Add something like \u201cFreeDNS IP Update\u201d to remember what this is for.<\/li>\n\n\n\n<li><strong>Save the Configuration:<\/strong>&nbsp;Click \u201cSave and force update\u201d to store your Dynamic DNS settings.<\/li>\n<\/ol>\n\n\n\n<p><strong>If it went well<\/strong>, the two areas I circled in red above should look similar to mine. A green checkmark under \u201cstatus\u201d, and the \u201ccached IP\u201d should be your actual IP address that you see when you go to a site like&nbsp;<a href=\"https:\/\/www.whatismyip.com\/\">whatismyip.com<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: See if Dynamic DNS actually works<\/h2>\n\n\n\n<p>We purposely put an incorrect IP of&nbsp;<code>8.8.8.8<\/code>&nbsp;in there rather than our real IP address to make sure this actually works. Now we\u2019re going to see what happens when we try to get it to work.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to the pages I had you keep open before, the&nbsp;<em><a href=\"https:\/\/freedns.afraid.org\/dynamic\/\">dynamic DNS page on FreeDNS<\/a><\/em>&nbsp;OR the&nbsp;<em><a href=\"https:\/\/freedns.afraid.org\/subdomain\/\">subdomains page on FreeDNS<\/a><\/em>.<\/li>\n\n\n\n<li>The IP was&nbsp;<code>8.8.8.8<\/code>&nbsp;before. Has it changed to the IP address that you see when you visit&nbsp;<a href=\"https:\/\/whatismyip.com\/\">whatismyip.com<\/a>, that is the WAN address in&nbsp;<strong>pfSense<\/strong>? If it is, you did good.<\/li>\n\n\n\n<li><strong>Another way: Force an IP Change:<\/strong><\/li>\n\n\n\n<li>Disconnect and reconnect your home internet connection to force your ISP to assign a new IP address.\n<ol class=\"wp-block-list\">\n<li>You can do this by rebooting your modem or temporarily disconnecting your internet connection.<\/li>\n\n\n\n<li><strong>Sometimes, you may not be able to get a new IP, and that\u2019s ok!<\/strong><\/li>\n\n\n\n<li>Sometimes, you can\u2019t get a new IP from your ISP immediately.<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>As long as you input an incorrect IP address into the FreeDNS field for your subdomain when adding your subdomain to FreeDNS, and you saw it change to your WAN IP when you set up FreeDNS dynamic DNS in&nbsp;<strong>pfSense<\/strong>, you are fine.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Verify DNS Resolution<\/h3>\n\n\n\n<p>To make sure your new hostname resolves to your home IP address, perform a DNS lookup from any device:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Open a Terminal or Command Prompt:<\/strong>\n<ul class=\"wp-block-list\">\n<li>On Linux or macOS, open Terminal.<\/li>\n\n\n\n<li>On Windows, open Command Prompt.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Run an&nbsp;<code>nslookup<\/code>&nbsp;Command:<\/strong>nslookup louishomeserver.chickenkiller.com<\/li>\n<\/ol>\n\n\n\n<p>Replace&nbsp;<code>louishomeserver.chickenkiller.com<\/code>&nbsp;with your actual hostname.<\/p>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Verify the Result:<\/strong><ul><li>The output should show your current public IP address associated with your hostname.<\/li><li>This confirms that your dynamic DNS is working correctly.<\/li><li>You could also just use&nbsp;<code>ping<\/code>.<\/li><\/ul>ping louishomeserver.chickenkiller.com<\/li>\n<\/ol>\n\n\n\n<p>Does it ping your IP address? You\u2019re good.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why This Setup Is Important<\/h3>\n\n\n\n<p>With this dynamic DNS setup, you no longer have to remember or manually track your public IP address, even when it changes. By using a hostname like&nbsp;<code>louishomeserver.chickenkiller.com<\/code>&nbsp;you can always access your home network remotely, no matter where you are or how often Spectrum goes down &amp; changes your IP on you.<\/p>\n\n\n\n<p>This is useful for accessing home servers or services from outside your network via OpenVPN (next section!).&nbsp;<strong>pfSense<\/strong>&nbsp;Dynamic DNS service with FreeDNS makes sure that my chosen hostname always points to my current IP address. No matter how often my IP changes, I don\u2019t have to change configuration settings in my programs.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">OpenVPN: Setting up Secure Access from Anywhere<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Why OpenVPN? Why do I need this?<\/h2>\n\n\n\n<p>Because opening ports for personal use is a bad idea!<\/p>\n\n\n\n<p>\u201c<em><strong>but louis, every website &amp; hosting provider opens ports!\u201d<\/strong><\/em><\/p>\n\n\n\n<p>Webhosts and datacenters open ports so that millions of people can access their services. You\u2019re opening ports to access a porn server in your closet. You\u2019re not the same.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Listing the ports we\u2019d have to open.<\/h3>\n\n\n\n<p>Each one of these things needs its own open port on your router. That\u2019s like having a house with 15 different doors, each one made of cardboard with a cutout in the middle allowing them to see in. No, we\u2019re not doing that.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Immich<\/strong>&nbsp;to do machine learning on your photos, because your self-image isn\u2019t&nbsp;<em><a href=\"https:\/\/imgur.com\/a\/HVr6oAz\">bad enough as it is<\/a><\/em>.<\/li>\n\n\n\n<li><strong>Home Assistant<\/strong>&nbsp;to pretend you\u2019re Tony Stark<\/li>\n\n\n\n<li><strong>Syncthing<\/strong>&nbsp;because&nbsp;<a href=\"https:\/\/www.nytimes.com\/2022\/08\/21\/technology\/google-surveillance-toddler-photo.html\">screw Google<\/a>.<\/li>\n\n\n\n<li><strong>MailCow<\/strong>&nbsp;because you think you can run email better than Google (if you\u2019re reading this guide, you probably can\u2019t)<\/li>\n\n\n\n<li><strong>Frigate<\/strong>&nbsp;to catch your neighbor stealing your packages<\/li>\n\n\n\n<li><strong>OnlyOffice<\/strong>&nbsp;because you\u2019re too cheap for Microsoft 365<\/li>\n\n\n\n<li><strong>FreePBX<\/strong>&nbsp;because\u2026 actually, I don\u2019t know why you\u2019d torture yourself with that.&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=vWrkDOt_IfM&amp;pp=ygUNbGVubnkgZnJlZXBieA%3D%3D\">Lenny<\/a>&nbsp;makes it worth it. Maybe<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Why Opening Every Port is Dumber Than an&nbsp;<a href=\"https:\/\/rossmanngroup.com\/unibody-macbook-pro-display-assembly-repair-replacement-service\/\"><em>820-2330 Macbook\u2019s hinge design<\/em><\/a><\/h3>\n\n\n\n<p>Here\u2019s why exposing all of this directly is a terrible idea:<\/p>\n\n\n\n<p><strong>You\u2019re Advertising What You\u2019re Running<\/strong>: Any script kid with a port scanner can see exactly what you\u2019re running.<\/p>\n\n\n\n<p><strong>Your Software is Probably Full of Holes<\/strong>: These projects are great, but they have 10,000 users, 5 of which believe they are entitled to 25 years of updates &amp; bugfixes after a $3 donation, maintained by&nbsp;<a href=\"https:\/\/www.explainxkcd.com\/wiki\/index.php\/2347:_Dependency\">one person in their spare time<\/a>, whose users are assholes that think&nbsp;<a href=\"https:\/\/www.reddit.com\/r\/immich\/comments\/1codh0p\/comment\/l5rfpu7\/\">feeding yourself off of your work is too much to ask for<\/a>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"295\" height=\"375\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-31.png\" alt=\"\" class=\"wp-image-8739\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-31.png 295w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-31-236x300.png 236w\" sizes=\"auto, (max-width: 295px) 100vw, 295px\" \/><\/figure><\/div>\n\n\n<p><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxaty_tmp_37a2ee92.png\"><\/a><\/p>\n\n\n\n<p>If I were smart (and evil), I could make a list of:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Every IP address<\/li>\n\n\n\n<li>What software they ran<\/li>\n\n\n\n<li>What version they ran<\/li>\n<\/ul>\n\n\n\n<p>Then, I\u2019d keep up with exploits\/vulnerabilities that are announced in the news. I\u2019d go back to my list &amp; double check to see who\u2019s running that software, and see if they work. At best, you become part of a botnet and waste some electricity mining my crypto. At worst, I\u2019ve stolen all of your data &amp; use it to blackmail you.<\/p>\n\n\n\n<p>I like these programs; they\u2019re fun software! But, similar to my taste in relationships; it isn\u2019t about&nbsp;<strong>who I<\/strong>&nbsp;<em><strong>like.<\/strong><\/em>&nbsp;It\u2019s about&nbsp;<strong>who I<\/strong>&nbsp;<em><strong>trust<\/strong><\/em>. The software I have the most&nbsp;<strong>fun<\/strong>&nbsp;with isn\u2019t who I\u2019d trust with banking credentials (or my future children). Maybe I got that the wrong way around\u2026.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">OpenVPN: Only 1 Port to open, with better security:<\/h3>\n\n\n\n<p><strong>One Port to Worry About<\/strong>: Instead of 15 points of failure, we have one potential point of failure.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;OpenVPN uses a single port for all traffic, which is usually port 1194 UDP. Most OpenVPN servers will default to port 1194. Make sure your ISP didn\u2019t block this. Bad ISPs will block ports commonly used for running servers so you pay 5x as much for the same internet unless you buy a \u201cbusiness\u201d(extortion) plan. I paid $409.99\/mo for 10 mbps upstream when I had a store in New York; hint, you\u2019re not paying extra for better internet..<\/p>\n<\/blockquote>\n\n\n\n<p><strong>Stealth Mode<\/strong>: To the outside world, you\u2019re just running OpenVPN. They can\u2019t see your unpatched version of&nbsp;<a href=\"https:\/\/github.com\/pjenvey\/hellanzb\">hellanzb<\/a>&nbsp;from 2007.&nbsp;<em>(shout out to pjenvey if he\u2019s reading this today!)<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">OpenVPN security in four pictures:<\/h3>\n\n\n\n<p>Here is what it\u2019s like opening ports to a bunch of random open source projects people make in their spare time:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"398\" height=\"535\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-32.png\" alt=\"\" class=\"wp-image-8740\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-32.png 398w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-32-223x300.png 223w\" sizes=\"auto, (max-width: 398px) 100vw, 398px\" \/><\/figure>\n\n\n\n<p>Here is what it\u2019s like only opening a port for OpenVPN.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"436\" height=\"528\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-33.png\" alt=\"\" class=\"wp-image-8741\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-33.png 436w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-33-248x300.png 248w\" sizes=\"auto, (max-width: 436px) 100vw, 436px\" \/><\/figure><\/div>\n\n\n<p>When you use OpenVPN, you are opening one port to get access to your network, with a door that many commercial interests have a stake in keeping strong. When you open ports for random crap, you have windows people can look through, and doors that look like\u2026 Well\u2026 Yeah. And 2 guys watching them.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Decreasing Attack Surface with OpenVPN is a best practice<\/h3>\n\n\n\n<p>OpenVPN isn\u2019t a hobby project coded by your cousin\u2019s methhead roommate. This is used by everyone, from companies with more money than sense to just about anyone who doesn\u2019t want their data plastered all over the internet:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Having&nbsp;<em><strong>ONE<\/strong><\/em>&nbsp;service open to the public rather than 10 means a smaller attack surface.<\/li>\n\n\n\n<li>Having one service<\/li>\n\n\n\n<li>OpenVPN is designed with one purpose in mind, a secure connection.<\/li>\n\n\n\n<li>It is over 20 years old.<\/li>\n\n\n\n<li>Commercial interests (aka people actually paying money for software that rely on it for their infrastructure, not&nbsp;<em><a href=\"https:\/\/www.reddit.com\/r\/immich\/comments\/1codh0p\/comment\/l5rfpu7\/\">this guy)<\/a><\/em>&nbsp;use &amp; rely on it.<\/li>\n\n\n\n<li>There are more eyes on the code of OpenVPN than&nbsp;<code>hellanzb<\/code>.<a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxaty_tmp_f3e2603c.png\"><\/a><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"393\" height=\"375\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-34.png\" alt=\"\" class=\"wp-image-8742\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-34.png 393w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-34-300x286.png 300w\" sizes=\"auto, (max-width: 393px) 100vw, 393px\" \/><\/figure><\/div>\n\n\n<p><strong>Marketing wankery? \u2026Kind of, but they\u2019re not lying here.<\/strong><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"351\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-35-1024x351.png\" alt=\"\" class=\"wp-image-8743\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-35-1024x351.png 1024w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-35-300x103.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-35-768x263.png 768w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-35.png 1093w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxaty_tmp_29f791ff.png\"><\/a><\/p>\n\n\n\n<p><strong>Is this 100% accurate? No.<\/strong>&nbsp;Are more people for whom millions of dollars rides on the security of their software using OpenVPN than hellanzb. Yes!<\/p>\n\n\n\n<p>Having a home server is cool. But the programs we\u2019re talking about are used by&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php\/FUTO:General_disclaimer\">0.0001% of 0.000001%<\/a>&nbsp;of the world. OpenVPN can still have vulnerabilities; it isn\u2019t perfect! But remember, in the world of network security,&nbsp;<strong>nothing is perfect!<\/strong>&nbsp;This isn\u2019t about being perfect. It\u2019s about controlling what we can control, and minimizing risk &amp; attack surface every chance we can. A UFC fighter makes a better bodyguard than a mall cop, regardless of the fact that they\u2019re equally useless against a bomb or a comet.<\/p>\n\n\n\n<p>This guide walks you through the process of setting up OpenVPN on&nbsp;<strong>pfSense<\/strong>. OpenVPN allows you to access your home network as if you were there.<\/p>\n\n\n\n<p>All of the services we want to use require having access to this network we are placing our server on, from anywhere. This setup will make sure that all traffic from the phone is routed through the VPN with no DNS leaks, which will be important for our adblocking-via-router section that comes after.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Setting up OpenVPN within pfSense for secure access<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Install OpenVPN Client Export package in pfSense<\/h3>\n\n\n\n<p>This will make it way easier for us to create the files necessary for clients to connect. You click a button and it\u2019ll generate a file that you put on your phone or laptop. You open the OpenVPN client, import the file, put in your username &amp; password, &amp; boom \u2013 you\u2019re set.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"189\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-36-1024x189.png\" alt=\"\" class=\"wp-image-8744\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-36-1024x189.png 1024w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-36-300x55.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-36-768x141.png 768w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-36-1536x283.png 1536w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-36.png 1673w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Log into pfSense:<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open your browser and go to your&nbsp;<strong>pfSense<\/strong>&nbsp;IP address (e.g.,&nbsp;<code><a href=\"https:\/\/192.168.5.1\/\">https:\/\/192.168.5.1<\/a><\/code>&nbsp;or&nbsp;<code><a href=\"https:\/\/pfsense.home.arpa\/\">https:\/\/pfSense.home.arpa<\/a><\/code>).<\/li>\n\n\n\n<li>Log in with your credentials (default:&nbsp;<code>admin<\/code>&nbsp;\/&nbsp;<strong>pfSense<\/strong>&nbsp;unless changed).<\/li>\n<\/ul>\n\n\n\n<p><strong>1.2 Install the package<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>System &gt; Package Manager &gt; Available Packages<\/strong>.<\/li>\n\n\n\n<li>Search for \u201copenvpn-client-export\u201d.<\/li>\n\n\n\n<li>Install the&nbsp;<strong>OpenVPN Client Export Utility<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Set up Certificates<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 \u2013 Make a Certificate Authority<\/h4>\n\n\n\n<p>The Certificate Authority (CA) is what signs and verifies the server and client certificates used to establish secure connections. You don\u2019t have to have any idea what that means to use a VPN. Here\u2019s how we create the CA in&nbsp;<strong>pfSense<\/strong>:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"319\" height=\"802\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-37.png\" alt=\"\" class=\"wp-image-8745\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-37.png 319w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-37-119x300.png 119w\" sizes=\"auto, (max-width: 319px) 100vw, 319px\" \/><\/figure><\/div>\n\n\n<p><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_12971ff0.png\"><\/a><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Log into pfSense:<\/strong><\/li>\n\n\n\n<li>Open your browser and go to your&nbsp;<strong>pfSense<\/strong>&nbsp;IP address (e.g.,&nbsp;<code><a href=\"https:\/\/192.168.5.1\/\">https:\/\/192.168.5.1<\/a><\/code>&nbsp;or&nbsp;<code><a href=\"https:\/\/pfsense.home.arpa\/\">https:\/\/pfSense.home.arpa<\/a><\/code>).<\/li>\n\n\n\n<li>Log in with your credentials (default:&nbsp;<code>admin<\/code>&nbsp;\/&nbsp;<strong>pfSense<\/strong>&nbsp;unless changed).<\/li>\n\n\n\n<li><strong>Navigate to the Certificate Manager:<\/strong><\/li>\n\n\n\n<li>Go to&nbsp;<strong>System &gt; Cert Manager<\/strong>&nbsp;in the top navigation menu.<\/li>\n\n\n\n<li><strong>Create a New CA:<\/strong><\/li>\n\n\n\n<li>Under the CAs tab, click the&nbsp;<strong>+ Add<\/strong>&nbsp;button to create a new Certificate Authority.<\/li>\n\n\n\n<li><strong>Fill in the CA Details:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Descriptive Name:<\/strong>&nbsp;OpenVPN-CA (or any name you choose)<\/li>\n\n\n\n<li><strong>Method:<\/strong>&nbsp;Create an Internal Certificate Authority<\/li>\n\n\n\n<li><strong>Key Length:<\/strong>&nbsp;4096 bits (recommended for strong security)<\/li>\n\n\n\n<li><strong>Digest Algorithm:<\/strong>&nbsp;SHA-512 (for secure hashing)<\/li>\n\n\n\n<li><strong>Lifetime (days):<\/strong>&nbsp;3650 (about 10 years)<\/li>\n\n\n\n<li><strong>Distinguished Name:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Country Code:<\/strong>&nbsp;Your country\u2019s two-letter code (e.g., US for the United States)<\/li>\n\n\n\n<li><strong>State or Province:<\/strong>&nbsp;Your state or province<\/li>\n\n\n\n<li><strong>City:<\/strong>&nbsp;Your city or locality<\/li>\n\n\n\n<li><strong>Organization:<\/strong>&nbsp;Your organization name<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Common Name:<\/strong>&nbsp;OpenVPN-CA (or another descriptive name)<\/li>\n\n\n\n<li><strong>Save the CA:<\/strong><\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 &#8211; Creating the OpenVPN Server Certificate[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=111\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=111\">edit source<\/a>]<\/h4>\n\n\n\n<p>Next, create the server certificate that the OpenVPN server will use for secure client connections.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"907\" height=\"266\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-38.png\" alt=\"\" class=\"wp-image-8746\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-38.png 907w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-38-300x88.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-38-768x225.png 768w\" sizes=\"auto, (max-width: 907px) 100vw, 907px\" \/><\/figure>\n\n\n\n<p><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_bfc83cc1.png\"><\/a><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to the&nbsp;<code>Certificates<\/code>&nbsp;tab in Cert Manager.\n<ul class=\"wp-block-list\">\n<li><strong>Add a New Server Certificate:<\/strong><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click&nbsp;<strong>+ Add\/Sign<\/strong>&nbsp;to create a new certificate.<\/li>\n\n\n\n<li><strong>Fill in the Server Certificate Details:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Method:<\/strong>&nbsp;Create an Internal Certificate<\/li>\n\n\n\n<li><strong>Descriptive Name:<\/strong>&nbsp;OpenVPN-ServerCert \u2013 name it something that makes it easy to identify as a&nbsp;<strong>SERVER<\/strong>&nbsp;certificate later for OpenVPN<\/li>\n\n\n\n<li><strong>Certificate Authority:<\/strong>&nbsp;Select OpenVPN-CA (the CA you just created)<\/li>\n\n\n\n<li><strong>Key Length:<\/strong>&nbsp;4096 bits<\/li>\n\n\n\n<li><strong>Digest Algorithm:<\/strong>&nbsp;SHA-512<\/li>\n\n\n\n<li><strong>Certificate Type:<\/strong>&nbsp;Server Certificate.<strong>WARNING:<\/strong>&nbsp;Make sure you do not leave this set to user certificate, which is the default option.<\/li>\n\n\n\n<li><strong>Lifetime (days):<\/strong>&nbsp;3650<\/li>\n\n\n\n<li><strong>Distinguished Name:<\/strong>&nbsp;Match the details you used for the CA<\/li>\n\n\n\n<li><strong>Common Name:<\/strong>&nbsp;louis.chickenkiller.com (you can use whatever you put for your dynamic DNS domain name here)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click&nbsp;<strong>Save<\/strong>. You should now see OpenVPN-ServerCert listed under the Certificates tab.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 Create a VPN Group for your VPN users[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=112\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=112\">edit source<\/a>]<\/h4>\n\n\n\n<p>To connect your Android phone to the VPN, create a user account with an associated client certificate.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"227\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-39-1024x227.png\" alt=\"\" class=\"wp-image-8747\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-39-1024x227.png 1024w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-39-300x66.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-39-768x170.png 768w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-39-1536x340.png 1536w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-39.png 1674w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><strong>Log into pfSense:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open your browser and navigate to your&nbsp;<strong>pfSense<\/strong>&nbsp;IP address (e.g.,&nbsp;<code><a href=\"https:\/\/192.168.5.1\/\">https:\/\/192.168.5.1<\/a><\/code>&nbsp;or&nbsp;<code><a href=\"https:\/\/pfsense.home.arpa\/\">https:\/\/pfSense.home.arpa<\/a><\/code>&nbsp;or&nbsp;<code>pfSense.home.arpa<\/code>).<\/li>\n\n\n\n<li>Log in using your admin credentials.<\/li>\n<\/ul>\n\n\n\n<p><strong>Open User Manager:<\/strong><\/p>\n\n\n\n<p>Go to&nbsp;<strong>System &gt; User Manager<\/strong>.<\/p>\n\n\n\n<p><strong>Add a New Group:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In the&nbsp;<strong>Groups<\/strong>&nbsp;tab of User Manager, click the&nbsp;<strong>+ Add<\/strong>&nbsp;button to create a new Group.<\/li>\n\n\n\n<li><strong>Fill Out the Group Information:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Group name:<\/strong>&nbsp;Choose a group name that makes sense for VPN users (e.g.,&nbsp;<code>vpnusers<\/code>).<\/li>\n\n\n\n<li>Click&nbsp;<strong>Save<\/strong>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.4 Create a VPN user<\/h4>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"301\" height=\"788\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-40.png\" alt=\"\" class=\"wp-image-8748\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-40.png 301w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-40-115x300.png 115w\" sizes=\"auto, (max-width: 301px) 100vw, 301px\" \/><\/figure><\/div>\n\n\n<ol class=\"wp-block-list\">\n<li>In the&nbsp;<strong>Users<\/strong>&nbsp;tab of User Manager, click the&nbsp;<strong>+ Add<\/strong>&nbsp;button to create a new user.<\/li>\n\n\n\n<li><strong>Fill Out the User Information:<\/strong>\n<ol class=\"wp-block-list\">\n<li><strong>Username:<\/strong>&nbsp;Choose a username (e.g.,&nbsp;<code>vpnuser1<\/code>).<\/li>\n\n\n\n<li><strong>Password:<\/strong>&nbsp;Enter a strong password.<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>Add the user to the&nbsp;<code>vpnusers<\/code>&nbsp;group you just made.<\/li>\n\n\n\n<li>For&nbsp;<strong>Certificate<\/strong>, check&nbsp;<strong>\u201cClick to create a user certificate\u201d<\/strong>.&nbsp;<strong>DO NOT FORGET TO CREATE A USER CERTIFICATE FOR THE USER.<\/strong><\/li>\n\n\n\n<li>Create a name for the user certificate, such as&nbsp;<code>vpnuser_client_cert<\/code>&nbsp;so you can recognize it as the USER cert later.<\/li>\n<\/ol>\n\n\n\n<p><strong>BEFORE YOU HIT SAVE:<\/strong><\/p>\n\n\n\n<p><em>Before you hit save on adding a new user account:<\/em><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Scroll to the&nbsp;<strong>Certificates<\/strong>&nbsp;section of the user creation form:<\/li>\n\n\n\n<li>Click&nbsp;<strong>+ Add<\/strong>&nbsp;to generate a new certificate for this user.<\/li>\n\n\n\n<li><strong>Configure the User Certificate:<\/strong>\n<ol class=\"wp-block-list\">\n<li><strong>Certificate Authority:<\/strong>&nbsp;<code>OpenVPN-CA<\/code><\/li>\n\n\n\n<li><strong>Key Length:<\/strong>&nbsp;4096 bits<\/li>\n\n\n\n<li><strong>Digest Algorithm:<\/strong>&nbsp;<code>SHA-512<\/code><\/li>\n<\/ol>\n<\/li>\n\n\n\n<li><strong>Save the user with the certificate:<\/strong><\/li>\n\n\n\n<li>Click&nbsp;<strong>Save<\/strong>.<\/li>\n\n\n\n<li>Verify User Creation. You should now see the user listed under&nbsp;<strong>System &gt; User Manager &gt; Users<\/strong>.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Configure OpenVPN Server<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"521\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-41-1024x521.png\" alt=\"\" class=\"wp-image-8749\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-41-1024x521.png 1024w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-41-300x153.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-41-768x390.png 768w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-41-1536x781.png 1536w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-41.png 1672w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">3.1 Open the OpenVPN Wizard, and set settings according to what you see below in section 3.2 and in images above<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Log into&nbsp;<\/strong>pfSense<strong>:<\/strong><\/li>\n\n\n\n<li>Go to&nbsp;<strong>VPN &gt; OpenVPN<\/strong>.<\/li>\n\n\n\n<li>Click on the&nbsp;<strong>Wizards<\/strong>&nbsp;tab.<\/li>\n\n\n\n<li>Fill out details according to what you see above. Keep in mind that when you are DONE, you will have to go back in &amp; edit settings for that VPN server that were NOT EDITABLE while you were creating the VPN.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">3.2 OpenVPN Server Configuration<\/h4>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"846\" height=\"265\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-42.png\" alt=\"\" class=\"wp-image-8750\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-42.png 846w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-42-300x94.png 300w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-42-768x241.png 768w\" sizes=\"auto, (max-width: 846px) 100vw, 846px\" \/><\/figure>\n\n\n\n<p><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_1be84c25.png\"><\/a><\/p>\n\n\n\n<p>After you have finished, go back and edit that server you just made to make sure all of this matches:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Description:<\/strong>&nbsp;openvpn server itself\n<ul class=\"wp-block-list\">\n<li>This is for your reference only. You can name it something descriptive like \u201cHomeVPN\u201d or \u201cMyVPNServer.\u201d<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Protocol:<\/strong>&nbsp;UDP on IPv4 only\n<ul class=\"wp-block-list\">\n<li>UDP is faster and more efficient for VPN traffic, and IPv4 only is typically sufficient unless you have a specific need for IPv6.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Interface:<\/strong>&nbsp;WAN\n<ul class=\"wp-block-list\">\n<li>This setting makes sure that your OpenVPN server will listen for incoming VPN connections on the WAN interface.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Local Port:<\/strong>&nbsp;1195\n<ul class=\"wp-block-list\">\n<li>Default is 1194 and TOTALLY FINE. I chose 1195 because I already use 1194 for another system.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>TLS Authentication:<\/strong>&nbsp;Enabled<\/li>\n<\/ol>\n\n\n\n<p><strong>Cryptographic Settings<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>DH Parameters Length:<\/strong>&nbsp;4096 bits\n<ul class=\"wp-block-list\">\n<li>Stronger than the default 2048-bit encryption.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Data Encryption Algorithms:<\/strong>\n<ul class=\"wp-block-list\">\n<li>The following algorithms are listed in the priority you selected:\n<ul class=\"wp-block-list\">\n<li>AES-256-GCM<\/li>\n\n\n\n<li>AES-128-GCM<\/li>\n\n\n\n<li>CHACHA20-POLY1305<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Fallback Data Encryption Algorithm:<\/strong>&nbsp;AES-256-CBC\n<ul class=\"wp-block-list\">\n<li>Used for compatibility if a client doesn\u2019t support GCM encryption algorithms.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Auth Digest Algorithm:<\/strong>&nbsp;SHA-512\n<ul class=\"wp-block-list\">\n<li>SHA-512 provides a high level of integrity protection for your VPN packets, making sure that the data hasn\u2019t been altered.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Hardware Crypto:<\/strong>&nbsp;Intel RDRAND engine &#8211; RAND<\/li>\n<\/ol>\n\n\n\n<p><strong>Tunnel Settings<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>IPv4 Tunnel Network:<\/strong><code>192.168.6.0\/24<\/code>\n<ul class=\"wp-block-list\">\n<li>This is the virtual network that your VPN clients will use.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Redirect IPv4 Gateway:<\/strong>&nbsp;Checked\n<ul class=\"wp-block-list\">\n<li>This forces all client traffic through the VPN tunnel.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>IPv4 Local Network:<\/strong><code>192.168.5.0\/24<\/code>\n<ul class=\"wp-block-list\">\n<li>This allows VPN clients to access your local network.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Allow Compression:<\/strong>&nbsp;Refuse any non-stub compression (Most Secure)<\/li>\n\n\n\n<li><strong>Type-of-Service:<\/strong>&nbsp;Unchecked<\/li>\n\n\n\n<li><strong>Inter-Client Communication:<\/strong>&nbsp;Unchecked<\/li>\n\n\n\n<li><strong>Duplicate Connections:<\/strong>&nbsp;Unchecked<\/li>\n<\/ol>\n\n\n\n<p><strong>Client Settings<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Topology:<\/strong>&nbsp;Subnet<\/li>\n\n\n\n<li><strong>DNS Default Domain:<\/strong>&nbsp;newvpn<\/li>\n\n\n\n<li><strong>DNS Server 1:<\/strong>&nbsp;<code>192.168.5.1<\/code><\/li>\n\n\n\n<li><strong>DNS Server 2:<\/strong>&nbsp;<code>94.140.14.14<\/code>&nbsp;(AdGuard DNS)<\/li>\n\n\n\n<li><strong>DNS Server 3:<\/strong>&nbsp;<code>94.140.15.15<\/code>&nbsp;(another AdGuard DNS server)<\/li>\n<\/ol>\n\n\n\n<p><strong>Advanced Client Settings<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Dynamic IP:<\/strong>&nbsp;Checked<\/li>\n\n\n\n<li><strong>Advanced Configuration:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Custom Options:tun-mtu 1200; mssfix 1160; push &#8222;dhcp-option DNS 192.168.5.1&#8221;;<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Gateway Creation:<\/strong>&nbsp;IPv4 only<strong>For the&nbsp;<code>Gateway creation<\/code>&nbsp;OpenVPN server setting:<\/strong>&nbsp;CHOOSE&nbsp;<em>IPv4 only<\/em>&nbsp;This will save you lots of hassle and misery later! Explanation at the end of the OpenVPN section.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;Let\u2019s talk about RDRAND. This is the hardware random number generator (RNG) built into Intel processors. It\u2019s fast, easy to use &amp; pfSense might already be using it.&nbsp;<strong>WARNING: For 99% of the people reading, this will be a total waste of time.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>1. What is RDRAND? Why care?<\/strong><\/p>\n\n\n\n<p>RDRAND makes random numbers using your CPU. but it\u2019s a closed source black box. You can\u2019t see how it works, and there have been [concerns that some random number generators might not be as random as you\u2019d like. There are all sorts of&nbsp;<a href=\"https:\/\/www.theregister.com\/2013\/09\/10\/torvalds_on_rrrand_nsa_gchq\/\">pissing matches<\/a>&nbsp;going on over this stuff on the internet by people way smarter than you or I.<\/p>\n\n\n\n<p><strong>Point being, if you care about privacy or you\u2019re handling sensitive data, you might not want to rely&nbsp;<em>solely<\/em>&nbsp;on a system you can\u2019t inspect.<\/strong>&nbsp;At the same time, if you\u2019re reading this guide, you\u2019re enough of a newbie that rdrand is not going to be how someone \u201cgets\u201d you.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>2. Why not use just RDRAND?<\/strong><\/p>\n\n\n\n<p>While it is fast, if the hardware random number generator fails or is compromised, your security goes down without noticing. A VPN depends on top-notch&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=9mxE9sEGNmA\">randomness<\/a>&nbsp;for encryption, so you need more than one source of entropy to stay safe.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>3. How do I make it safer?<\/strong><\/p>\n\n\n\n<p>pfSense already mixes entropy from several sources which includes rdrand. In most cases, you\u2019re good to go.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>4. Should I disable it?<\/strong><\/p>\n\n\n\n<p>Probably not. RDRAND is fine. Think of it as an ingredient rather than the entire thing.<\/p>\n\n\n\n<p><strong>5. THen why did you mention it?<\/strong><\/p>\n\n\n\n<p>The&nbsp;<em>\u201cuhm, akshually\u201d<\/em>&nbsp;people. They\u2019re in the bushes, always waiting.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>TL;DR:<\/strong>&nbsp;RDRAND isn\u2019t bad, but don\u2019t trust it alone. Let pfSense do its thing and mix it with other entropy sources. If you\u2019re running anything highly sensitive and don\u2019t like trusting Intel, you can disable it\u2014but for most people, you\u2019ll be fine with the default settings.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Get .ovpn file to connect your phone to the VPN<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"569\" height=\"274\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-43.png\" alt=\"\" class=\"wp-image-8751\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-43.png 569w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-43-300x144.png 300w\" sizes=\"auto, (max-width: 569px) 100vw, 569px\" \/><\/figure><\/div>\n\n\n<h4 class=\"wp-block-heading\">4.1 Export the OpenVPN Client Configuration for Your Android Device<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>VPN &gt; OpenVPN &gt; Client Export<\/strong>.<\/li>\n\n\n\n<li>For \u201cremote access server,\u201d choose the OpenVPN server you made.<\/li>\n\n\n\n<li>For \u201cHost Name,\u201d enter the URL you made on FreeDNS for dynamic DNS. In our case, this was&nbsp;<code>louishomeserver.chickenkiller.com<\/code>.<\/li>\n\n\n\n<li>Under&nbsp;<strong>Export Type<\/strong>, choose&nbsp;<strong>Android &#8211; OpenVPN Connect<\/strong>.<\/li>\n\n\n\n<li>Download the configuration file (e.g.,&nbsp;<code>vpnuser1-android.ovpn<\/code>).<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"134\" height=\"521\" src=\"https:\/\/temp.noi3.org\/wp-content\/uploads\/2025\/02\/image-44.png\" alt=\"\" class=\"wp-image-8752\" srcset=\"https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-44.png 134w, https:\/\/site.noi3.org\/wp-content\/uploads\/2025\/02\/image-44-77x300.png 77w\" sizes=\"auto, (max-width: 134px) 100vw, 134px\" \/><\/figure><\/div>\n\n\n<h4 class=\"wp-block-heading\">4.2 Import the Configuration into OpenVPN Connect on Android \u2013 SECURELY!!!!![<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=119\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=119\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Transfer the&nbsp;<code>.ovpn<\/code>&nbsp;file to your Android device.&nbsp;<em>DO THIS SECURELY.<\/em><\/li>\n\n\n\n<li>Install the OpenVPN Connect app from the Play Store.<\/li>\n\n\n\n<li>Import the configuration file and connect to the VPN.<\/li>\n<\/ol>\n\n\n\n<p>VPN connectivity can be done with a certificate alone, without a username or password. This means that&nbsp;<em>if you misconfigured something, and this file gets into the wrong hands,&nbsp;<strong>any Tom, Dick or Harry has access to your home network!<\/strong><\/em><\/p>\n\n\n\n<p><strong>Don\u2019t upload the file to public file transfer sites<\/strong><\/p>\n\n\n\n<p>Don\u2019t do this. Do not store the key to your front door on megaupload.<\/p>\n\n\n\n<p><strong>Instead, do this:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Connect your phone directly to your computer with a USB cable to transfer the file; simple and secure.<\/li>\n\n\n\n<li>Or, use an encrypted messenger you trust. Just make sure it\u2019s actually secure, not just convenient.<\/li>\n<\/ul>\n\n\n\n<p><strong>Why the extra caution?<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This&nbsp;<code>.ovpn<\/code>&nbsp;file is sensitive. It\u2019s part of what allows access to your server.<\/li>\n\n\n\n<li>If someone gets this file &amp; figures out your password, they\u2019re in. Not good.<\/li>\n\n\n\n<li>And if there\u2019s a config mistake (it happens), they might not even need the password.<\/li>\n\n\n\n<li>Without this file, even if someone knows your username &amp; password, they\u2019re not getting in.<\/li>\n<\/ul>\n\n\n\n<p><strong>Treat this file like your bank details. Don\u2019t put it on a post-it note to the 4:3 monitor in front of your Windows XP Service Pack 1 computer.<\/strong><\/p>\n\n\n\n<p>Don\u2019t leave it lying around in your downloads folder. Don\u2019t share it casually.<\/p>\n\n\n\n<p>The chances of someone intercepting this file and using it maliciously are low, but we don\u2019t take unnecessary risks with security. It\u2019s not paranoia, it\u2019s good practice.<\/p>\n\n\n\n<p>Do it right, and you\u2019ll save yourself potential headaches down the road. Plus, you\u2019ll have the satisfaction of knowing you\u2019ve set things up properly.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4.3 Edit Settings on OpenVPN Android Application[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=120\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=120\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the OpenVPN Connect application.<\/li>\n\n\n\n<li>Go to the three lines in the upper left corner and tap&nbsp;<strong>Settings<\/strong>.<\/li>\n\n\n\n<li>Scroll down to&nbsp;<strong>Advanced Settings<\/strong>.<\/li>\n\n\n\n<li>Switch security level from \u201clegacy\u201d to \u201cpreferred\u201d.<\/li>\n\n\n\n<li>Uncheck&nbsp;<strong>\u201cDNS fallback\u201d<\/strong>.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;Disabling \u201cDNS fallback\u201d keeps the VPN connection from going back to using non-ad-blocking(and usually google) DNS when something fails. When your setup breaks, I want you to KNOW &#8211; by way of it not working. I don\u2019t want it to training-wheels you back to a working setup using Google\u2019s DNS.<\/p>\n<\/blockquote>\n\n\n\n<p>You now have an OpenVPN server on&nbsp;<strong>pfSense<\/strong>&nbsp;you can connect to from anywhere in the world; your Android device will have all its traffic routed through the VPN. You\u2019ll fully benefit from&nbsp;<strong>pfBlockerNG<\/strong>\u2019s ad-blocking via IP blocking and DNS domain name blocking when you\u2019re logged in through the VPN, and you\u2019ll have access to all of the services we will be setting up for calendar, contacts, email, backup, office, home automation &amp; surveillance, business phone, password management &amp; more.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">IPv4 vs IPv4+IPv6 &amp; VPN nightmares:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=121\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=121\">edit source<\/a>]<\/h2>\n\n\n\n<p>Choosing IPv4 + IPv6 can cause issues. I\u2019ve seen this cause random disconnects after about 10 minutes of connection that is miserable to figure out.<\/p>\n\n\n\n<p>In my case, I am combining two of the worst things in the world: American residential cable broadband &amp; T-Mobile on a&nbsp;<a href=\"https:\/\/9to5google.com\/2021\/11\/17\/pixel-6-modem-analysis\/\">Pixel phone<\/a>. I lose 5G when I walk under a tree, and my internet goes down more often than your<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why using IPv4 &amp; IPv6 with OpenVPN for this setup is discouraged.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=122\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=122\">edit source<\/a>]<\/h2>\n\n\n\n<p>Enabling both IPv4 and IPv6 may be the way to go for enterprise class connections. If you\u2019re reading this, you might be stuck on horrible residential broadband &amp; unable to pick a better ISP. In these environments, the 1% benefit IPv6 enables<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>NAT64\/DNS64 Compatibility Issues<\/strong>: Mobile networks often use NAT64\/DNS64 for IPv6-only networks. This can clash with your VPN\u2019s IPv6 routing, causing random failures.<\/li>\n\n\n\n<li><strong>Path MTU Discovery (PMTUD) Quirks<\/strong>: IPv6 relies heavily on PMTUD. If there are issues along the path, you can have connectivity problems that are hard to diagnose.<\/li>\n\n\n\n<li><strong>ISP IPv6 Implementation<\/strong>: Some ISPs (spectrum) can have less-than-great IPv6 implementations. This can lead to unstable connections when you\u2019re trying to use both IPv4 and IPv6.<\/li>\n\n\n\n<li><strong>Dual-Stack Timeout Issues<\/strong>: When both protocols are available, your devices might try connections on both. If IPv6 is unstable, you\u2019ll experience timeouts and apparent connection failures.&nbsp;<strong>THIS MAKES UP FOR ANY &amp; ALL POTENTIAL BENEFITS OF IPv6, WHICH YOU WILL NEVER NOTICE IN EVERYDAY USAGE.<\/strong><\/li>\n\n\n\n<li><strong>Carrier-Grade NAT (CGN) Interactions<\/strong>: The interplay between CGN for IPv4 and IPv6 routing through your VPN can lead to connection state inconsistencies.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">The Practical Solution[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=123\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=123\">edit source<\/a>]<\/h2>\n\n\n\n<p>You have two main options:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Live In a Nightmare<\/strong>: Dive deep into network engineering, potentially spend $150,000 backhauling fiber to your house to get around your&nbsp;<a href=\"https:\/\/youtu.be\/vbHqUNl8YFk?t=37\">horrible cable company<\/a>.<\/li>\n\n\n\n<li><strong>A Practical Approach<\/strong>: Click \u201cIPv4 only\u201d in OpenVPN server settings.<\/li>\n<\/ol>\n\n\n\n<p>Option #1 can gargle my balls.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Setting Up&nbsp;<strong>pfBlockerNG<\/strong>&nbsp;for Ad-Blocking in pfSense[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=124\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=124\">edit source<\/a>]<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">Why adblock at the router?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=125\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=125\">edit source<\/a>]<\/h3>\n\n\n\n<p><em><strong>Why not<\/strong><\/em>?? Isn\u2019t this&nbsp;<strong>beautiful<\/strong>?<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">louis@happycloud:~\/Downloads\/frigate$ ping googleadservices.com\nping: googleadservices.com: Name or service not known<\/pre>\n\n\n\n<p>Seeing&nbsp;<em>Name or service not known<\/em>&nbsp;trying to contact a google ad server warms my heart. \ud83d\ude00<\/p>\n\n\n\n<p>Ad-blocking at the router level offers several advantages:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Simplicity:<\/strong>&nbsp;Instead of installing ad-blockers on every device, you can block ads network-wide.<\/li>\n\n\n\n<li><strong>Complete coverage:<\/strong>&nbsp;Blocks ads on devices where traditional ad-blockers can\u2019t be installed (smart TVs, Android\/iOS apps). Somewhere, there is probably some piece of garbage application that has an ad in it that you can\u2019t install&nbsp;<a href=\"https:\/\/ublockorigin.com\/\">ublock origin<\/a>&nbsp;onto. What if it were blocked from connecting at the router level?<\/li>\n\n\n\n<li><strong>Control:<\/strong>&nbsp;You can manage internet connectivity and ad-blocking for all connected devices from a single point.<\/li>\n<\/ol>\n\n\n\n<p>We\u2019ll use two methods for blocking:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>IP address blocking<\/strong>&nbsp;&#8211; blocking&nbsp;<code>103.31.6.184<\/code><\/li>\n\n\n\n<li><strong>Domain name blocking<\/strong>&nbsp;&#8211; blocking&nbsp;<code>googleadservices.com<\/code><\/li>\n<\/ul>\n\n\n\n<p>This dual approach makes sure more effective ad-blocking, as it covers both static IP addresses and changing domain names associated with ad servers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Measure our Baseline[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=126\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=126\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Install&nbsp;<a href=\"https:\/\/www.google.com\/chrome\/\">stock Google Chrome<\/a>[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=127\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=127\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_bceadf90.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>No ad-blocking extensions, no privacy protections. We want to test our ROUTER\u2019S ability to block ads \u2013 not our browser\u2019s. The browser is going to be the&nbsp;<em>\u201cconstant\u201d<\/em>&nbsp;here. In an ideal setup, we want to block ads at the router level (which we CAN control) in order to not see ads in random Android apps &amp; unreliable smart TVs (which we can\u2019t always control).<\/p>\n\n\n\n<p>You won\u2019t always be able to block ads with certain hardware or software. And even if you can, can your boyfriend, your mother-in-law, your kids? Imagine having kids that grow up in a household with no ads.&nbsp;\ud83d\ude42<\/p>\n\n\n\n<p>Don\u2019t use your normal web browser with all the ad-blocking stuff built-in because then we can\u2019t tell if what we did actually worked. We\u2019re starting by installing stock, vanilla Google Chrome, no extensions installed, and running a couple of quick tests. Something tells me Google\u2019s business model isn\u2019t going to provide us an ad-free web browsing experience by default\u2026<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1.2 Run adblock &amp; DNS tests[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=128\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=128\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_16d96f79.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_ccf2f730.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_29860614.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/adblock-tester.com\/\">adblock-tester.com<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/d3ward.github.io\/toolz\/adblock.html\">d3ward.github.io\/toolz\/adblock.html<\/a>&nbsp;-&gt; This project is no longer maintained and has been archived.<\/li>\n\n\n\n<li><a href=\"https:\/\/dnsleaktest.com\/\">dnsleaktest.com<\/a><\/li>\n<\/ul>\n\n\n\n<p><strong>My Initial results:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ad-block tester: 38 points out of 100<\/li>\n\n\n\n<li>D3Ward Ad Block testing: 6 blocked out of 135<\/li>\n\n\n\n<li>DNS: Using home device (<strong>pfSense<\/strong>&nbsp;DNS resolver)<\/li>\n<\/ul>\n\n\n\n<p><em>Your mileage will vary.<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Install&nbsp;<strong>pfBlockerNG<\/strong>[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=129\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=129\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_36101b0c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_df926adb.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_8c37d4ee.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_6863d4b9.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Log in to your&nbsp;<strong>pfSense<\/strong>&nbsp;web interface.<\/li>\n\n\n\n<li>Navigate to&nbsp;<strong>System &gt; Package Manager &gt; Available Packages<\/strong>.<\/li>\n\n\n\n<li>In the search bar, type&nbsp;<strong>\u201cpfBlockerNG\u201d<\/strong>.<\/li>\n\n\n\n<li>Find&nbsp;<code>pfBlockerNG-devel<\/code>&nbsp;and click the&nbsp;<strong>Install<\/strong>&nbsp;button (you want the devel version because it receives more updates &amp;, as AvE would say, is more betterer).<\/li>\n\n\n\n<li>Wait for the installation to complete.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Configure&nbsp;<strong>pfBlockerNG<\/strong>&nbsp;General Settings[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=130\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=130\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_e3a57841.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_bef0d3ca.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_f6e73464.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_2c627cd5.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>After installation, go to&nbsp;<strong>Firewall &gt; pfBlockerNG<\/strong>.<\/li>\n\n\n\n<li>Under&nbsp;<strong>General Settings:<\/strong>\n<ol class=\"wp-block-list\">\n<li>Enable pfBlockerNG: Make sure this is checked.<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>Click&nbsp;<strong>IP<\/strong>&nbsp;next to general.<\/li>\n\n\n\n<li>For&nbsp;<strong>Outbound Firewall Rules<\/strong>, make sure both&nbsp;<strong>LAN<\/strong>&nbsp;and&nbsp;<strong>OpenVPN<\/strong>&nbsp;interfaces are selected for REJECTING.<\/li>\n\n\n\n<li><strong>I had you set up OpenVPN<\/strong>&nbsp;<em><strong>before<\/strong><\/em>&nbsp;<strong>pfBlockerNG explicitly<\/strong>&nbsp;<em><strong>because<\/strong><\/em>&nbsp;<strong>it makes this option automatically be checked for you, but double check just in case!<\/strong><\/li>\n\n\n\n<li>Click&nbsp;<strong>Save<\/strong>&nbsp;at the bottom.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Set Up DNSBL (DNS Blacklists)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=131\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=131\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_d758afc8.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to&nbsp;<strong>Firewall &gt; pfBlockerNG &gt; DNSBL<\/strong>.<\/li>\n\n\n\n<li>Enable DNSBL: Check this box to enable DNS-based blocking.<\/li>\n\n\n\n<li>DNSBL Mode: Set to&nbsp;<strong>Unbound Mode<\/strong>&nbsp;to use pfSense\u2019s DNS Resolver for DNSBL.<\/li>\n\n\n\n<li>Go down to&nbsp;<strong>DNSBL Configuration<\/strong>, make sure some random bs IP is in&nbsp;<em>virtual IP address (LIKE 10.10.10.1), this is where we are directing requests to ad-ridden domain names to.<\/em><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5: Add DNSBL Feeds &amp; IP blocklist feeds (Lists of Ad Domains)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=132\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=132\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_ab93a985.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_e7f85dc0.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_d117a3f0.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>Let me explain how these feeds work in pfBlockerNG because the interface can be intimidating for a newbie.<\/p>\n\n\n\n<p>The feeds tab has two main sections: IP address feeds at the top (for blocking specific IPs) and DNS feeds at the bottom (for blocking domain names like googleadservices.com).<\/p>\n\n\n\n<p>When you\u2019re looking at the feeds, you\u2019ll see these checkboxes and plus signs that can be a bit confusing. Here\u2019s what they mean:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you see a checkbox on the left, that means it\u2019s a GROUP of feeds. If you see a blue checkbox next to \u201cPRI1\u201d that means all the feeds under that group are already enabled.<\/li>\n\n\n\n<li>Individual feeds will have their own checkboxes to show if they\u2019re active.<\/li>\n\n\n\n<li>The plus signs let you add new feeds to your configuration.<\/li>\n<\/ul>\n\n\n\n<p>When you want to add feeds, click the plus sign to add the feed.<\/p>\n\n\n\n<p>For IP blocklists, make sure the action is set to&nbsp;<strong>\u201cDeny Both\u201d<\/strong>.<\/p>\n\n\n\n<p>For DNS blocklists, set the action to&nbsp;<strong>\u201cUnbound\u201d<\/strong>.<\/p>\n\n\n\n<p>Even if you see something\u2019s already checked, sometimes clicking \u201cEnable All\u201d can catch feeds that weren\u2019t properly activated. I\u2019ve had weird situations where I thought I added everything in a group but missed some &#8211; the interface isn\u2019t always super clear about what\u2019s actually enabled.<\/p>\n\n\n\n<p>For what to block: I avoid blocking things like Tor or torrent trackers. Why would you block that? That\u2019s like DDoSing Pornhub &#8211; they\u2019re giving you free stuff! One of them blocks AWS, avoid that unless you want non-functional internet (sadly the world runs on AWS whether we like it or not).<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>It is very easy to block too much and then not be able to log into youtube, receive email, visit your bank, etc. More isn\u2019t better here.<\/p>\n<\/blockquote>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Firewall &gt; pfBlockerNG &gt; Feeds<\/strong>.<\/li>\n\n\n\n<li>Scroll to the&nbsp;<strong>DNSBL Feeds<\/strong>&nbsp;section.<\/li>\n\n\n\n<li>Add multiple feeds by clicking on different categories and enabling relevant lists.<\/li>\n\n\n\n<li>For each selected feed:\n<ul class=\"wp-block-list\">\n<li>For DNS block lists, set \u201cAction\u201d to&nbsp;<strong>Unbound<\/strong>.<\/li>\n\n\n\n<li>For IP lists, set \u201cAction\u201d to&nbsp;<strong>Deny Both<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>There is a blue \u201cENABLE ALL\u201d method at the bottom that will often save you a lot of time.<\/li>\n\n\n\n<li>Recommended categories to add:\n<ul class=\"wp-block-list\">\n<li>Easylist<\/li>\n\n\n\n<li>Malicious<\/li>\n\n\n\n<li>Phishing<\/li>\n\n\n\n<li>Malware<\/li>\n\n\n\n<li>Suspicious<\/li>\n\n\n\n<li>Trackers<\/li>\n\n\n\n<li>Spam (for email)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Avoid adding feeds that might block legitimate services (e.g., AWS, public DNS servers, Tor).<\/strong><\/li>\n\n\n\n<li>After selecting feeds, click&nbsp;<strong>Save<\/strong>&nbsp;to apply these DNSBL lists.<\/li>\n\n\n\n<li>Don\u2019t enable\/turn them on one by one. When you click on a list of feeds, note the blue&nbsp;<strong>\u201cenable all\u201d<\/strong>&nbsp;button.&nbsp;<em>Don\u2019t be like Louis of 2018 &amp; toggle each line to \u201con\u201d manually like an idiot (I actually did this&nbsp;:\u2019( )<\/em><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 6: Update and Apply Lists[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=133\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=133\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_88427bbb.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to&nbsp;<strong>Firewall &gt; pfBlockerNG &gt; Update<\/strong>.<\/li>\n\n\n\n<li>Select&nbsp;<strong>\u201cForce\u201d<\/strong>&nbsp;option.<\/li>\n\n\n\n<li>Set&nbsp;<strong>\u201cReload\u201d<\/strong>&nbsp;option to&nbsp;<strong>\u201cAll.\u201d<\/strong><\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cRun\u201d<\/strong>&nbsp;to download and update all lists (both DNSBL and IP lists).<\/li>\n<\/ol>\n\n\n\n<p><em>This process can take a while.<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 7: Testing and Verifying Ad-Blocking Effectiveness[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=134\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=134\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_cd49ce7b.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_82193a4c.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Clear cache and cookies in your test browser.<\/li>\n\n\n\n<li>Revisit the ad-blocking test sites:\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/adblock-tester.com\/\">adblock-tester.com<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/d3ward.github.io\/toolz\/adblock.html\">d3ward.github.io\/toolz\/adblock.html<\/a>&nbsp;-&gt; This project is no longer maintained and has been archived.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n\n\n\n<p><strong>Expected results:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ad-block tester: Improved score (e.g., 78 out of 100)<\/li>\n\n\n\n<li>D3Ward Ad Block testing: Many more blocked (e.g., 119 out of 135)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 9: Implement AdGuard DNS[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=135\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=135\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_ae2b0b8d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_1ca05f7d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_b129b41f.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_18e54ec0.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Visit&nbsp;<a href=\"https:\/\/adguard-dns.io\/en\/public-dns.html\">adguard-dns.io<\/a>&nbsp;and go to the&nbsp;<strong>\u201cRouters\u201d<\/strong>&nbsp;section.<\/li>\n\n\n\n<li>Copy the DNS server addresses that block ads and trackers.<\/li>\n\n\n\n<li>In&nbsp;<strong>pfSense<\/strong>, go to&nbsp;<strong>System &gt; General Setup<\/strong>.<\/li>\n\n\n\n<li>Uncheck&nbsp;<strong>\u201cAllow DNS server list to be overridden by DHCP\/PPP on WAN.\u201d<\/strong><\/li>\n\n\n\n<li>Remove existing DNS servers and add the AdGuard DNS servers.&nbsp;<strong>Use what is on AdGuard\u2019s site: at the time of this writing, they were as follows. Only use the below servers if you see them on<\/strong><a href=\"https:\/\/adguard-dns.io\/en\/public-dns.html\"><strong>adguard-dns.io<\/strong><\/a>:\n<ol class=\"wp-block-list\">\n<li>Primary DNS:&nbsp;<code>94.140.14.14<\/code><\/li>\n\n\n\n<li>Secondary DNS:&nbsp;<code>94.140.15.15<\/code><\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>You checked&nbsp;<a href=\"https:\/\/adguard-dns.io\/en\/public-dns.html\">AdGuard\u2019s site<\/a>&nbsp;rather than copy &amp; paste from here, right? RIGHT?<\/li>\n\n\n\n<li>Save changes.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 10: Configure the DNS Resolver[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=136\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=136\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_18e54ec0.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_ac1bdd90.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_a68efb7e.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Services &gt; DNS Resolver<\/strong>.<\/li>\n\n\n\n<li>Enable DNS Resolver: make sure this is checked.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Enable Forwarding Mode<\/strong>.<\/li>\n\n\n\n<li>Save and apply changes.<\/li>\n\n\n\n<li>Reload the DNS Resolver service.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 11: Verify adblocking from Desktop[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=137\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=137\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_253defc2.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_6f775d7c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_7763a7c0.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_51675dc6.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxb9s_tmp_2de8777b.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Clear DNS cache and browser data.<\/li>\n\n\n\n<li>Rerun the ad-blocking tests.<\/li>\n\n\n\n<li>Visit&nbsp;<a href=\"https:\/\/dnsleaktest.com\/\">dnsleaktest.com<\/a>&nbsp;and run an extended test to confirm you\u2019re using AdGuard DNS. You should see something like the figure above. Your DNS should be DIFFERENT than it was before! If not, something went wrong.<\/li>\n\n\n\n<li>Redo your adblock test:\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/adblock-tester.com\/\">adblock-tester.com<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/d3ward.github.io\/toolz\/adblock.html\">d3ward.github.io\/toolz\/adblock.html<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>You should see adblocking become even more better, or more betterer as&nbsp;<a href=\"https:\/\/www.youtube.com\/@arduinoversusevil2025\">AvE<\/a>&nbsp;would say, than what you had prior to installing pfBlockerNG, depending on the feeds you\u2019ve chosen.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 13: Verify adblock on mobile via VPN[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=138\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=138\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106123802153.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106123837196.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106124123482.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106124131570.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106124141942.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106124249587.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106124207433.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>To make sure ad-blocking works on mobile devices connected through VPN:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Clear browser data on your phone.<\/li>\n\n\n\n<li><strong>Disconnect from the VPN we attached to earlier.<\/strong><\/li>\n\n\n\n<li>Visit the following websites and note the results:\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/adblock-tester.com\/\">adblock-tester.com<\/a>&nbsp;\u2013 should have horrible results<\/li>\n\n\n\n<li><a href=\"https:\/\/d3ward.github.io\/toolz\/adblock.html\">d3ward.github.io\/toolz\/adblock.html<\/a>&nbsp;\u2013 also horrible results<\/li>\n\n\n\n<li><a href=\"https:\/\/dnsleaktest.com\/\">dnsleaktest.com<\/a>&nbsp;\u2013 should show AdGuard DNS, same as what you saw in the above figure on your PC<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Go over to the OpenVPN app &amp; connect to VPN\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/adblock-tester.com\/\">adblock-tester.com<\/a>&nbsp;\u2013 should have better results<\/li>\n\n\n\n<li><a href=\"https:\/\/d3ward.github.io\/toolz\/adblock.html\">d3ward.github.io\/toolz\/adblock.html<\/a>&nbsp;\u2013 should have better results<\/li>\n\n\n\n<li><a href=\"https:\/\/dnsleaktest.com\/\">dnsleaktest.com<\/a>&nbsp;\u2013 should show your mobile provider\u2019s DNS servers<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>Double-check that you\u2019re using the&nbsp;<strong>pfSense<\/strong>&nbsp;DNS on&nbsp;<code>dnsleaktest.com<\/code>&nbsp;&amp; NOTHING ELSE!! You do not want your ISP\u2019s server, or anyone else\u2019s server, to show up. If in doubt, research the IP address &amp; hostname of the DNS that is coming up.<\/p>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>Compare results to those without a VPN connection.<\/li>\n<\/ol>\n\n\n\n<p><strong>Expected results:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Much more ad-blocking on mobile when connected to VPN<\/li>\n\n\n\n<li>Confirmation that you\u2019re using AdGuard DNS through the VPN<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106125051953.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 14: Verify VPN allows connectivity to home network.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=139\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=139\">edit source<\/a>]<\/h3>\n\n\n\n<p>Try to visit your router\u2019s IP address&nbsp;<a href=\"https:\/\/192.168.5.1\/\">https:\/\/192.168.5.1\/<\/a>&nbsp;once you have connected to the VPN \u2013 and&nbsp;<strong>make sure you are connected to the CELLULAR network only, not your home Wi-Fi!!<\/strong><\/p>\n\n\n\n<p>Congratulations; you\u2019ve set up an ad-blocking system that blocks a ton of ads before your internet connection even wastes bandwidth loading them, for all devices on your network. Blocking ads in a browser using uBlock Origin is fun, but&nbsp;<strong>nothing compares to the feeling of blocking ads they think you can\u2019t block. It\u2019s beautiful. \ud83d\ude00<\/strong>&nbsp;This means that even inside of Android apps that have ads, you can block them all\u2014it just takes the right feed. \ud83d\ude00<\/p>\n\n\n\n<p><strong>REMEMBER: THIS IS YOUR JOURNEY!!! FIND THE FEEDS THAT MAKE YOU HAPPY, YOU DO NOT HAVE TO USE THE SAME ONES THAT I DID!<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Installing Ubuntu Server with RAID 1, LVM, and LUKS Encryption[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=140\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=140\">edit source<\/a>]<\/h1>\n\n\n\n<p>Now it\u2019s time to install the operating system on our host server. I\u2019ll walk you through the process of installing Ubuntu Server with a nice configuration including RAID 1 for boot drive redundancy, encrypted LVM for flexibility in expanding storage if we move this setup to a larger set of drives, and LUKS encryption for security. This setup makes sure your server can boot even if one drive fails, while keeping your data secure. Even if someone breaks into your house &amp; steals all of your stuff, all they have is encrypted crap. Unless they\u2019re the NSA, in which case you\u2019re screwed, but if you\u2019re reading this guide, you\u2019re probably not that important.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installing Ubuntu Linux[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=141\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=141\">edit source<\/a>]<\/h2>\n\n\n\n<p>For our server\u2019s operating system, we\u2019re going with Ubuntu Linux. Why Ubuntu? If you\u2019re watching this, you\u2019re probably more of a newbie than an expert. Ubuntu is user-friendly, has good documentation, and has a huge community ready to help. It\u2019s widely renowned as the first \u201cnewbie friendly\u201d GNU\/Linux distribution, dating back to 2006 when it was one of the few distros that&nbsp;<em><a href=\"https:\/\/distrowatch.com\/dwres.php?resource=review-ubuntu\">didn\u2019t require torturing yourself with ndiswrapper to get wifi working<\/a><\/em>. Robert Storey put it best:<\/p>\n\n\n\n<p>\u201c<em>The huge collection of Linux\/BSD systems listed on DistroWatch is a testimonial to how difficult it is to make a decision. However, after spending weeks trying to get XYZ distro to recognize your wireless card, it\u2019s really nice to have an OS that just works.\u201d<\/em><\/p>\n\n\n\n<p>Imagine having a laptop as your only computer, before smartphones with tethering were widely available. You don\u2019t have access to a wired connection. Where were you getting your drivers from? Maybe you do have access to a wireless connection, but your only CAT5 cable is 5 feet long. And your router is in an un-air-conditioned garage. In the middle of summer. So you go to your 98\u00b0F garage, sit on the floor, googling only to find a plethora of threads where elitist douchebags tell you to RTFM to get wifi to work.<\/p>\n\n\n\n<p>And they wonder why people used closed source operating systems\u2026<\/p>\n\n\n\n<p>In 2005, the concept of anything in GNU\/Linux&nbsp;<em>\u201cjust working\u201d<\/em>&nbsp;was a joke. If you wanted to burn a CD you had to set up something called&nbsp;<a href=\"https:\/\/forums.justlinux.com\/showthread.php?29773-ide-scsi-emulation-isn-t-working\">SCSI emulation<\/a>&nbsp;to use the optical drive on your computer. From the ground up, GNU\/Linux was fundamentally not designed for normal people. Ubuntu changed that in a radical way and continues to have a reputation for being a newbie-friendly&nbsp;<em>\u201cgateway drug\u201d<\/em>&nbsp;to GNU\/Linux. It\u2019s not the best and it has its flaws, but it is designed and developed with ease of use for normal people in mind. For a beginner\u2019s guide, that matters.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why Not Arch or Gentoo?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=142\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=142\">edit source<\/a>]<\/h3>\n\n\n\n<p>I use Arch Linux now, SuSE from 2002-2004, and Gentoo from 2004-2015. I enjoy making my life difficult for no good reason. In my 30s, I\u2019ve come to realize that I derive sick pleasure from making my life difficult for no good reason; but I wouldn\u2019t recommend that for beginners&nbsp;<em>(or anyone)<\/em>. With Ubuntu, you get a system that\u2019s easy to set up and maintain without the extra hassle, designed to be as idiot-proof as possible, and designed for normal humans to use. If you wish to use another distro,&nbsp;<em><strong>GO FOR IT!<\/strong><\/em>&nbsp;There is NO one&nbsp;<em>\u201cright way\u201d<\/em>&nbsp;to do any of what I am doing here!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Installing with RAID 1: Choosing Your OS Drive[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=143\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=143\">edit source<\/a>]<\/h3>\n\n\n\n<p>We are going to be using RAID 1. RAID 1 is a mirroring setup, where we use two drives for the operating system instead of one. This means one of the drives can completely fail and the server continues running. I would suggest that you find not one, but TWO SSDs for this purpose. We will be using&nbsp;<code>MDADM<\/code>&nbsp;for RAID. Ubuntu allows you to do this upon install without having to edit configuration files.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Why software RAID using MDADM instead of hardware RAID with a RAID controller card?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=144\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=144\">edit source<\/a>]<\/h4>\n\n\n\n<p>RAID controller cards are for people with datacenters that have hundreds of drives and need maximum performance\/resilience for specific applications, that want the task of managing these drives separate from the software running the computer. This was also very useful back when machines were powered by Pentium 1 processors.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;Some hardware RAID controllers will give you improvements in performance, but it\u2019s not worth the downside. There are controllers where when they fail, you have to replace it with the exact same controller for your setup to work again &#8211; aka, digiorno all over again. Using software RAID like MDADM means you can take drives out of a pentium 4 and put them into a macbook and it\u2019ll just detect it &amp; work.<\/p>\n<\/blockquote>\n\n\n\n<p>It is 2024, and even a ten-year-old computer will do software RAID just fine with no perceivable penalty in performance.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Why not use RAID built into my motherboard?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=145\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=145\">edit source<\/a>]<\/h4>\n\n\n\n<p>That is called&nbsp;<em>\u201cfake RAID.\u201d<\/em>&nbsp;Fake RAID is cancer. It is not \u201chardware\u201d RAID, it is just software RAID by another name.<\/p>\n\n\n\n<p>When you create a RAID array using the garbage built into your motherboard, the RAID configuration is sometimes stored in a proprietary format that is only readable by that specific manufacturer\u2019s RAID implementation. I used the word&nbsp;<em>\u201csometimes\u201d<\/em>&nbsp;because it depends on your system. I have no idea what system you have. I want ALL of the people reading this to have a system that works if they transfer these drives to another system, not&nbsp;<em>\u201csome\u201d<\/em>&nbsp;of you. It costs you nothing to use&nbsp;<code>mdadm<\/code>, which offers certainty of compatibility when you transfer these drives to other hardware.<\/p>\n\n\n\n<p>When certainty &amp; uncertainty have the same price, all other things being equal, I\u2019ll take the certainty!<\/p>\n\n\n\n<p>MDADM software RAID is a standardized system that transfers across computers \u2013 I am not using hardware RAID, I am not using whatever RAID is in the BIOS of your computer, because I have no idea what they are using or whether it is something standard or something that will be aggravating later. If you have to take these drives and put them in another computer, there will be less hassle using software RAID than there is using hardware RAID, it\u2019s literally plug and play&nbsp;<em>(well, you may have to use a liveCD to run&nbsp;<code>grub-install<\/code>&nbsp;to register the bootloader with the new machine\u2019s UEFI, but\u2026 The RAID part will work at least!).<\/em><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Drive recommendation for OS:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=146\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=146\">edit source<\/a>]<\/h4>\n\n\n\n<p>We\u2019re going to have two drives in RAID 1.&nbsp;<em><strong>You can use more if you like \u2013 RAID 1 need not be two drives!<\/strong><\/em>&nbsp;I like Micron SSDs; they have always had consistently lower failure rates than Samsung\u2019s budget \u201cEVO\u201d line for me with regards to NVME devices. I\u2019ve RMA\u2019d the same 2 TB Samsung EVO 970 five times now\u2026 Five\u2026 Times. You can get two budget 4 TB SSDs for under $500 now \u2013 I recommend&nbsp;<em><a href=\"https:\/\/www.crucial.com\/ssd\/p3\/CT4000P3SSD8\">these<\/a><\/em>.<\/p>\n\n\n\n<p>We are going to be using these SSDs for virtual machines that perform many tasks. Here are some of the storage-intensive ones:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Self-hosted mail. Your inbox may be 50+ GB like mine.<\/li>\n\n\n\n<li>Complete phone backup of everything \u2013 can easily eclipse 2 terabytes. Mine is 1.4.<\/li>\n\n\n\n<li>FreePBX phone system \u2013 call recordings over time can go over 50 GB easily.<\/li>\n<\/ul>\n\n\n\n<p>I suggest buying drives for your operating system disk that are considerably fast and have enough space to store all of this. With regards to security camera recordings, and the backup of your 40 terabytes of recipes stored as .mkv files \u2013 that, we\u2019ll do on an array of hard drives. You don\u2019t need to get SSDs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">RAID IS NOT A BACKUP![<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=147\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=147\">edit source<\/a>]<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>IMPORTANT NOTICE: RAID 1 IS NOT A BACKUP!<\/strong><\/p>\n\n\n\n<p>Many people incorrectly believe that RAID 1 is a \u201cbackup.\u201d It is not! RAID 1 sets up your machine so that the operating system is installed on TWO drives rather than one, with each drive being an exact mirror of the other. This way, if one drive fails while you\u2019re using your server, it will still run. Think of RAID 1 like the green goo you can put in your tire to plug up a hole, or a spare wheel, allowing you to limp to a service center for repairs.<\/p>\n<\/blockquote>\n\n\n\n<p>Here are a few reasons why RAID 1 is not a backup:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Backups allow you to restore your system if you accidentally mess something up. RAID 1 is a perfect mirror, so it applies to everything you break.<\/li>\n\n\n\n<li>RAID 1 means you\u2019re attaching two hard drives to your computer to install the operating system on instead of one. These drives are both connected to the same computer. If your computer\u2019s power supply fails and sends incorrect voltages to the drives, both get fried.<\/li>\n\n\n\n<li>When one drive in a RAID 1 array fails, the other often fails soon after, especially if they\u2019re the same brand and were purchased at the same time.<\/li>\n\n\n\n<li>RAID 1 works so well that you might not notice when one drive fails until the second one also fails, leaving you with no data.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;MDADM does work well enough that you won\u2019t tell when a drive fails. Later in this guide we\u2019re going to set it up so that your machine is constantly checking &amp; emails you the moment there is any issue with your drive using mdadm\u2019s monitor command.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Step-by-Step Installation Guide[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=148\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=148\">edit source<\/a>]<\/h2>\n\n\n\n<p><strong>What you should have<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Two identical SSDs (e.g., Samsung 870 EVO 250GB), but bigger will be better here since we\u2019ll be using this to backup everything on your phone + many other things.<\/li>\n\n\n\n<li>A USB drive to put the Ubuntu installation image on<\/li>\n\n\n\n<li>An old computer to use as a server (even a 10-year-old desktop or laptop can work)<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_c21a542a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_133ad038.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_c5e0db26.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_1eafd48e.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_6c5ec0f7.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_51afdc6d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_bd4536d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_f70b5843.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">1. Prepare the Installation Disk[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=149\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=149\">edit source<\/a>]<\/h3>\n\n\n\n<p><em>Warning: This process will erase everything on the USB drive.<\/em><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Insert a USB flash drive (at least 4GB in size) into your computer.<\/li>\n\n\n\n<li>Go to&nbsp;<a href=\"https:\/\/ubuntu.com\/server\">ubuntu.com<\/a>&nbsp;and download the LTS (Long Term Support) version of Ubuntu Server.<\/li>\n\n\n\n<li>Use one of the following methods to write the Ubuntu image to the USB drive:<\/li>\n<\/ol>\n\n\n\n<p><strong>Windows:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Download and install Rufus.<\/li>\n\n\n\n<li>Open Rufus and select your USB drive.<\/li>\n\n\n\n<li>Click the&nbsp;<strong>\u201cSELECT\u201d<\/strong>&nbsp;button and choose the unzipped .img file you downloaded.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cStart\u201d<\/strong>&nbsp;and let Rufus create the bootable USB.<\/li>\n<\/ol>\n\n\n\n<p><strong>GNU\/Linux or macOS:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the terminal and type the following command:sudo fdisk -l<\/li>\n\n\n\n<li>Make note of drives in the system.<\/li>\n\n\n\n<li>Plug in the flash drive.<\/li>\n\n\n\n<li>Open the terminal and type the following command again:sudo fdisk -l<\/li>\n\n\n\n<li>Make note of the drive that was not present before.<\/li>\n\n\n\n<li>Double-check size\/brand\/model to make sure this new device is the device you plugged in.<\/li>\n\n\n\n<li>Run the following, replacing&nbsp;<code>\/dev\/sdX<\/code>&nbsp;with your drive, and replace the&nbsp;<code>ubuntu-server.iso<\/code>&nbsp;file with the filename of your image file. Make sure you use the right PATH, that is the directory your image is in.sudo dd if=\/path\/to\/ubuntu-server.iso of=\/dev\/sdX bs=4M status=progress<\/li>\n<\/ol>\n\n\n\n<p>Your bootable USB drive with Ubuntu Server Linux is now ready for use!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Boot from the USB Drive[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=150\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=150\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_911d702.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_a33d9a7f.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Insert the USB drive into your server.<\/li>\n\n\n\n<li>Power on the server and enter the boot menu (usually by pressing&nbsp;<strong>F12<\/strong>&nbsp;or another function key).<\/li>\n\n\n\n<li>Select the&nbsp;<strong>UEFI option<\/strong>&nbsp;for your USB drive.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">3. Begin the Ubuntu Server Installation[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=151\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=151\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_5d0eeccb.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_c5b32782.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_14d81229.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Choose&nbsp;<strong>\u201cTry or Install Ubuntu Server\u201d<\/strong>&nbsp;from the boot menu.<\/li>\n\n\n\n<li>Select your language and keyboard layout.<\/li>\n\n\n\n<li>Choose&nbsp;<strong>\u201cInstall Ubuntu Server\u201d<\/strong>&nbsp;(not the minimized version).<\/li>\n\n\n\n<li>Select&nbsp;<strong>\u201cSearch for third-party drivers\u201d<\/strong>&nbsp;for better hardware support. Don\u2019t check this box if you want to&nbsp;<em><a href=\"https:\/\/stallman.org\/stallman-computing.html\">live Richard Stallman\u2019s ethics<\/a><\/em>. Check this box if you want to reduce the chances of random things in your computer not working. I check the box. I\u2019m going to hell, I know\u2026.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">4. Configure Network[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=152\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=152\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_b1e98c52.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">4.1 Why a Static IP?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=153\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=153\">edit source<\/a>]<\/h4>\n\n\n\n<p>We are going to set up a server that we are going to consistently access. This means we always want it to be at the same place.<\/p>\n\n\n\n<p>Imagine trying to deliver mail to someone who lives on 20 Main Street today, and 90 Chandler Avenue tomorrow. Imagine trying to frequent a restaurant whose address changes every week. It would be annoying, inconvenient, and perhaps downright impossible.<\/p>\n\n\n\n<p>We want our server to always be at the same address. The \u201cD\u201d in \u201cDHCP\u201d means \u201cdynamic\u201d \u2013 as in, changing. We don\u2019t want that. We want a \u201cstatic\u201d IP, meaning it does NOT change.<\/p>\n\n\n\n<p>When setting up your server, we need to give it a static IP, so we always know where to find it, and it never changes. How do we know what IP to give it? Go back to&nbsp;<strong>pfSense<\/strong>\u2019s DHCP server configuration page &amp; you can find it by going to&nbsp;<strong>Services \u2014&gt; DHCP Server<\/strong>. The&nbsp;<em>\u201csubnet range\u201d<\/em>&nbsp;tells you the list of available IPs. Keep in mind that you cannot use the IP address of your&nbsp;<strong>pfSense<\/strong>&nbsp;router here.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Router Gateway<\/strong>: My router\u2019s IP is 192.168.5.1. This is the gateway address.<\/li>\n\n\n\n<li><strong>Address Pool Range<\/strong>: My address pool range is from .15 to .245, leaving .246 to .254 and .2 to .14 available. This setup provides a buffer of IPs for servers and other devices.<\/li>\n<\/ul>\n\n\n\n<p><strong>Why the Buffer?<\/strong>&nbsp;I don\u2019t want any conflicts where someone plugs in their computer while mine is rebooting and steals my IP. We will be setting up STATIC MAPPINGS so that nobody else can grab the IP address of my server \u2013 the IP we choose for our server will be reserved for our server\u2019s specific network interface card and not some hated brother in law that thinks he\u2019ll play games when your spouse has him over. However, this is still good practice.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4.2 Choosing a Static IP[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=154\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=154\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_44432cac.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_feed77f5.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_93f4316.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_bda461e0.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_4d5798a7.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_c59fcb59.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>For my servers, I pick an IP between 192.168.5.2 and 192.168.5.14. This ensures no one else can sneakily take my server\u2019s IP while it\u2019s rebooting.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In your&nbsp;<strong>pfSense<\/strong>&nbsp;router, go to&nbsp;<strong>Services &gt; DHCP Server<\/strong>.<\/li>\n\n\n\n<li>Understand your subnet. For example,&nbsp;<code>192.168.5.0\/24<\/code>&nbsp;covers IPs from&nbsp;<code>192.168.5.1<\/code>&nbsp;to&nbsp;<code>192.168.5.254<\/code><\/li>\n\n\n\n<li>Your router\u2019s IP is typically&nbsp;<code>192.168.5.1<\/code>. We can\u2019t use that. Since we made the address DHCP pool range&nbsp;<code>192.168.5.15<\/code>&nbsp;<code>192.168.5.245<\/code>, this means that we have&nbsp;<code>192.168.5.2<\/code>&nbsp;through&nbsp;<code>192.168.5.14<\/code>&nbsp;free \u2013 no computer connecting with DHCP (which is the default for 99.9999% of all network devices in your home) will be using these, so they\u2019re free for the taking.<\/li>\n\n\n\n<li>Choose the network interface that\u2019s connected (usually the one that has already received an IP via DHCP).<\/li>\n\n\n\n<li>Change the configuration from DHCP to Manual:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>IP Address:<\/strong>&nbsp;Choose an address outside your DHCP pool (e.g.,&nbsp;<code>192.168.5.2<\/code>)<\/li>\n\n\n\n<li><strong>Subnet:<\/strong>&nbsp;Usually&nbsp;<code>255.255.255.0<\/code>&nbsp;(or \/24 in CIDR notation)<\/li>\n\n\n\n<li><strong>Gateway:<\/strong>&nbsp;Your router\u2019s IP (e.g.,&nbsp;<code>192.168.5.1<\/code>)<\/li>\n\n\n\n<li><strong>Name servers:<\/strong>&nbsp;Use your router\u2019s IP as the DNS server<\/li>\n<\/ul>\n\n\n\n<p><br><em><strong>Please note: if you skip step 4 by choosing Continue without network, you not be able to set up your internet connection later.<\/strong><\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. Prepare the Drives[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=155\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=155\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_90d50cc3.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_ae1aab84.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_6fb6a48d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_fc776e25.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_e4bd6c3a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_41dc80bd.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_31ba1cbc.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.1 Format the drives[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=156\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=156\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the installer, locate your two SSDs (ignore the USB installer drive).<\/li>\n\n\n\n<li>For each SSD:\n<ul class=\"wp-block-list\">\n<li>Select the drive and choose&nbsp;<strong>\u201cReformat\u201d<\/strong>.<\/li>\n\n\n\n<li>Select&nbsp;<strong>\u201cUse as boot device\u201d<\/strong>&nbsp;\u2013 this will create an EFI partition on each.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">5.2 Configure EFI Partitions[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=157\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=157\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_be3ce88b.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_4b9aaa78.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_5086d648.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_8d8ec28c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_8f536396.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_ee4b3eb0.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_84fae9c1.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>For each SSD:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Locate the automatically created EFI partition (usually 1GB).<\/li>\n\n\n\n<li>Edit the size to&nbsp;<strong>512M<\/strong>.<\/li>\n\n\n\n<li>Make sure it\u2019s set to mount at&nbsp;<code>\/boot\/efi<\/code>.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.3 Create Boot Partitions for RAID[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=158\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=158\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_5080ad97.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_5f9b3efa.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_c834b835.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_d73e5ee8.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_8ace6542.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>On each SSD:\n<ul class=\"wp-block-list\">\n<li>Create a new&nbsp;<strong>1GB<\/strong>&nbsp;partition.<\/li>\n\n\n\n<li>DO NOT FORMAT IT. CHOOSE&nbsp;<strong>&#8222;Leave unformatted&#8221;<\/strong>.<\/li>\n\n\n\n<li><strong>DO NOT CHOOSE A MOUNT POINT.<\/strong>&nbsp;This is important for setting up RAID 1 later.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Set Up RAID 1 for&nbsp;<code>\/boot<\/code><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_23af8abb.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_f4ef2715.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Select&nbsp;<strong>\u201cCreate software RAID (md)\u201d<\/strong>.<\/li>\n\n\n\n<li>Choose both 1GB partitions you just created (one from each SSD).<\/li>\n\n\n\n<li>Set RAID Level to&nbsp;<strong>\u201cRAID 1 (mirrored)\u201d<\/strong>.<\/li>\n\n\n\n<li>Name it&nbsp;<strong>\u201cbootraid\u201d<\/strong>&nbsp;or something meaningful to you.<\/li>\n\n\n\n<li>Select&nbsp;<strong>\u201cCreate\u201d<\/strong>, hit enter.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">5.4 Create Root Partitions for RAID[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=159\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=159\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_d09fc3d7.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_972a066a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_4a9745c7.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_7f935e0e.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>On each SSD:\n<ul class=\"wp-block-list\">\n<li>Create a partition using all remaining space. Don\u2019t fill in the \u201csize\u201d text box; it will automatically use the rest of the space on the drive.<\/li>\n\n\n\n<li><strong>DO NOT FORMAT IT. CHOOSE&nbsp;<\/strong>&#8222;Leave unformatted&#8221;<strong>.<\/strong><\/li>\n\n\n\n<li><strong>DO NOT CHOOSE A MOUNT POINT.<\/strong>&nbsp;This is important for setting up RAID 1 later.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">5.5 Set Up RAID 1 for Root[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=160\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=160\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_a4a5a576.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_40dcb02f.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Select&nbsp;<strong>\u201cCreate software RAID (md)\u201d<\/strong>&nbsp;again.<\/li>\n\n\n\n<li>Choose both large partitions you just created.<\/li>\n\n\n\n<li>Make sure RAID Level is set to&nbsp;<strong>\u201cRAID 1 (mirrored)\u201d<\/strong>.<\/li>\n\n\n\n<li>Name it&nbsp;<strong>\u201cosdriveraid\u201d<\/strong>&nbsp;or something meaningful to you.<\/li>\n\n\n\n<li>Go to&nbsp;<strong>\u201cCreate\u201d<\/strong>&nbsp;&amp; hit enter.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">5.6 Configure the \/boot Partition[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=161\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=161\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_664f6137.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_10955270.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Select the&nbsp;<strong>\u201cbootraid\u201d<\/strong>&nbsp;you created.<\/li>\n\n\n\n<li>Format it as&nbsp;<strong>ext4<\/strong>.<\/li>\n\n\n\n<li>Set mount point to&nbsp;<code>\/boot<\/code>.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">5.7 Set Up LVM on Root RAID[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=162\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=162\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_83c21b25.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_1514c051.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Select the&nbsp;<strong>\u201cosdriveraid\u201d<\/strong>&nbsp;you created.<\/li>\n\n\n\n<li>Choose&nbsp;<strong>\u201cCreate volume group\u201d<\/strong>.<\/li>\n\n\n\n<li>Name it&nbsp;<strong>\u201cubuntuvolumegroup\u201d<\/strong>&nbsp;or something meaningful to you.<\/li>\n\n\n\n<li>When selecting the device for the LVM, you\u2019ll encounter&nbsp;<a href=\"https:\/\/bugs.launchpad.net\/subiquity\/+bug\/2062102\">a bug in the installer<\/a>: &gt;&nbsp;<em>The installer will show multiple devices without clear identifiers. This is a known issue that persists in the non-beta release of a stable, mission very important server operating system. Welcome to the world of open source software; this is part of the fun of using open source! Remember:&nbsp;<strong>it wouldn\u2019t be open source if it worked!<\/strong><\/em><\/li>\n\n\n\n<li>To select the correct device:\n<ul class=\"wp-block-list\">\n<li>Look for the option that\u2019s around the size of your install (e.g., 231 GB for 250 GB SSDs).<\/li>\n\n\n\n<li>Choose the largest option, which should correspond to your RAID 1 array for the root partition.<\/li>\n\n\n\n<li>Ignore the smaller sizes, as they likely represent other partitions or devices.<\/li>\n\n\n\n<li>Pray.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>After selecting the correct device, proceed with creating the volume group.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">5.8 Create Encrypted Volume[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=163\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=163\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>With the LVM volume group selected, choose&nbsp;<strong>\u201cCreate encrypted volume\u201d<\/strong>.<\/li>\n\n\n\n<li>Set a strong password. Consider using a password manager.<\/li>\n\n\n\n<li>It\u2019s recommended not to create a recovery key, as this could be a potential security risk.<\/li>\n\n\n\n<li>Optionally, create a recovery key. If you do this, realize&nbsp;<strong>the recovery key can be used to decrypt your volume<\/strong>.&nbsp;<em>Don\u2019t do this unless you have a place to hide it that not even your cat can get to!<\/em><\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">5.9. Create Logical Volume for Root[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=164\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=164\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Select the encrypted volume you just created.<\/li>\n\n\n\n<li>Choose&nbsp;<strong>\u201cCreate logical volume\u201d<\/strong>.<\/li>\n\n\n\n<li>Name it&nbsp;<strong>\u201cubunturootvolume\u201d<\/strong>&nbsp;or something meaningful to you.<\/li>\n\n\n\n<li>Use the maximum available size.<\/li>\n\n\n\n<li>Format it as&nbsp;<strong>ext4<\/strong>.<\/li>\n\n\n\n<li>Set the mount point to&nbsp;<code>\/<\/code>&nbsp;(root).<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">5.10 Review and Confirm[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=165\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=165\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Double-check your configuration. For two 250 GB SSDs, it should look like this:\n<ul class=\"wp-block-list\">\n<li>Root (<code>\/<\/code>): ~231GB on encrypted LVM which is on RAID 1<\/li>\n\n\n\n<li><code>\/boot<\/code>: ~1GB on RAID 1<\/li>\n\n\n\n<li><code>\/boot\/efi<\/code>: 512MB on each SSD<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>If everything looks correct, click&nbsp;<strong>\u201cDone\u201d<\/strong>.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">5.11 Complete the Installation[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=166\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=166\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Carefully review the summary one last time.&nbsp;<em>Remember we are erasing everything on these drives, to a point where even Rossmann Repair can\u2019t recover it. If you create an encrypted volume, write over it, and then want the data back\u2026 good luck with that one.<\/em><\/li>\n\n\n\n<li>If you\u2019re sure you want to proceed, click&nbsp;<strong>\u201cContinue\u201d<\/strong>.<\/li>\n\n\n\n<li>Follow the remaining Ubuntu Server installation prompts.<\/li>\n\n\n\n<li>Set up your username.<\/li>\n\n\n\n<li>Install OpenSSH server.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;Installing OpenSSH allows you to remotely access your machine to install things, use it, mess with it, etc, rather than sit in front of your server in your unairconditioned garage when it\u2019s 117f outside. When you see me on video installing things via terminal, I am almost never in front of the actual machine(or vm) I am using, I am remoting in using ssh.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE<\/strong>: Do not install Docker via Snap in the next menu when it asks you to. We will install Docker later, and it won\u2019t be the&nbsp;<a href=\"https:\/\/www.reddit.com\/r\/docker\/comments\/shztqs\/wow_docker_works_a_lot_better_when_you_dont_have\/\">miserable snap version of DOCKER<\/a>_. If you install Docker using Snap accidentally, this is understandable. If you install docker via snap by CHOICE, you\u2019ll be in hell, &amp; you\u2019ll have earned it.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">5.12 Reboot &amp; log in[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=167\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=167\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click reboot now at the end.<\/li>\n\n\n\n<li>Once it is done shutting down Ubuntu Linux, unplug the installation USB.<\/li>\n\n\n\n<li>When it boots up, it will ask for the encryption password to unlock the root partition, type this in.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106140227789.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106140354651.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106140427599.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106140457610.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106140554944.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.13 Set Up Static IP Mapping in pfSense (Post-Installation)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=168\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=168\">edit source<\/a>]<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">Set Up Static IP Mapping in pfSense[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=169\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=169\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Log into your pfSense router.<\/li>\n\n\n\n<li>Go to&nbsp;<strong>Diagnostics &gt; ARP Table<\/strong>.<\/li>\n\n\n\n<li>Find the MAC address associated with your server\u2019s IP (e.g.,&nbsp;<code>192.168.5.2<\/code>). Mine was&nbsp;<code>e0:d5:5e:a8:7f:b5<\/code>.<\/li>\n\n\n\n<li>Go to&nbsp;<strong>Services &gt; DHCP Server<\/strong>.<\/li>\n\n\n\n<li>Scroll to the bottom and click&nbsp;<strong>\u201cAdd static mapping\u201d<\/strong>.<\/li>\n\n\n\n<li>Enter the MAC address and IP address of your server.<\/li>\n<\/ol>\n\n\n\n<p><em>Figure 17: This is what my setup looks like when I\u2019m done configuring my partition structure. Yours should resemble mine. Ubuntu makes it as difficult as possible to use encrypted LVM with RAID 1 on boot devices, but we can beat their interface with some good ol\u2019 ingenuity.<\/em><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Give it a descriptive name (e.g., \u201cHappy cloud server static IP\u201d).<\/li>\n\n\n\n<li>Save and apply changes.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Identifying Devices on Your Network[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=170\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=170\">edit source<\/a>]<\/h2>\n\n\n\n<p>Let\u2019s take a quick break to discuss the importance of&nbsp;<strong>static mappings<\/strong>,&nbsp;<strong>hostnames,<\/strong>&nbsp;and the&nbsp;<strong>DNS resolver.<\/strong><\/p>\n\n\n\n<p>What you type into the&nbsp;<code>hostname<\/code>&nbsp;field when setting the&nbsp;<strong>DHCP static mapping<\/strong>&nbsp;in&nbsp;<strong>DHCP server settings<\/strong>&nbsp;is what you can use to connect to the device instead of the IP address. For instance, if you set the hostname to&nbsp;<code>happycloud<\/code>, instead of having to type&nbsp;<code>192.168.5.2<\/code>&nbsp;to connect to this device, you can type&nbsp;<code>happycloud.home.arpa<\/code>.<\/p>\n\n\n\n<p>By default, on pfSense installations, the&nbsp;<strong>default domain<\/strong>&nbsp;is&nbsp;<code>home.arpa<\/code>. When you combine the&nbsp;<code>hostname<\/code>&nbsp;of&nbsp;<code>happycloud<\/code>&nbsp;with the&nbsp;<code>domain<\/code>&nbsp;of&nbsp;<code>home.arpa<\/code>, you get&nbsp;<code>happycloud.home.arpa<\/code>.<\/p>\n\n\n\n<p>This is more convenient for connecting to devices because it is easier to remember&nbsp;<code>happycloud<\/code>&nbsp;than it is to remember&nbsp;<code>192.168.5.2<\/code>&nbsp;for sane people, who reserve their brains for useful data rather than&nbsp;<a href=\"https:\/\/youtu.be\/Z0DF-MOkotA?t=874\">useless macbook trivia<\/a>. Further, similar to dynamic DNS, if you change the IP address of this server later, all of your services &amp; bookmarks that point to this server do not have to be changed!<\/p>\n\n\n\n<p><strong>You can name your servers however you want! You can choose IP addresses for your servers however you want! I will be using the same IP addresses &amp; hostnames\/domains throughout this guide so it is easy to follow, but you don\u2019t HAVE to follow mine!<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106141247324.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106141458662.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106141624092.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106141726132.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Why ISC DHCP Matters in pfSense (and How to Set It Up)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=171\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=171\">edit source<\/a>]<\/h1>\n\n\n\n<p>The world wants you to switch to&nbsp;<a href=\"https:\/\/www.netgate.com\/blog\/netgate-adds-kea-dhcp-to-pfsense-plus-software-version-23.09-1\">Kea DHCP<\/a>, but there\u2019s a very good reason we\u2019re using ISC instead. It does something important that new DHCP server&nbsp;<a href=\"https:\/\/forum.netgate.com\/topic\/184398\/kea-dhcp-missing-register-dhcp-leases-in-dns-resolver\/7\">doesn\u2019t<\/a>. Let\u2019s get into it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why ISC DHCP Is Actually Useful[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=172\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=172\">edit source<\/a>]<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Hostname Resolution<\/strong>: Use hostnames instead of memorizing IP addresses.<\/li>\n\n\n\n<li><strong>Works with DNS Resolver<\/strong>: Registers DHCP stuff&nbsp;<em><strong>automatically!<\/strong><\/em>&nbsp;You know, like it should.<\/li>\n\n\n\n<li><strong>Simplifies Things<\/strong>: Makes managing your network a lot easier.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Setting Up ISC DHCP in pfSense[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=173\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=173\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Make Sure You\u2019re Using ISC DHCP[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=174\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=174\">edit source<\/a>]<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Log into&nbsp;<strong>pfSense<\/strong>.<\/li>\n\n\n\n<li>Go to&nbsp;<code>System<\/code>&nbsp;&gt;&nbsp;<code>Advanced<\/code>&nbsp;&gt;&nbsp;<code>Networking<\/code>.<\/li>\n\n\n\n<li>In&nbsp;<strong>DHCP Server<\/strong>, select&nbsp;<strong>ISC DHCP<\/strong>.<\/li>\n\n\n\n<li>If it complains about deprecation, just ignore it. Click the checkbox to ignore the annoying warning.<\/li>\n\n\n\n<li>Hit \u201cSave\u201d.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">2. Configure DNS Resolver[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=175\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=175\">edit source<\/a>]<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to&nbsp;<code>Services<\/code>&nbsp;&gt;&nbsp;<code>DNS Resolver<\/code>.<\/li>\n\n\n\n<li>Check these boxes:\n<ul class=\"wp-block-list\">\n<li>\u2612 \u201cRegister DHCP leases in the DNS Resolver\u201d<\/li>\n\n\n\n<li>\u2612 \u201cRegister DHCP static mappings in the DNS Resolver\u201d<\/li>\n\n\n\n<li>\u2612 \u201cRegister connected OpenVPN clients in the DNS Resolver\u201d<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Save and apply changes.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">3. Set Your Domain[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=176\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=176\">edit source<\/a>]<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to&nbsp;<strong>System &gt; General Setup<\/strong>.<\/li>\n\n\n\n<li>Set your \u201cDomain\u201d (like \u201chome.arpa\u201d or \u201clocal\u201d).<\/li>\n\n\n\n<li>Save if you made changes.<\/li>\n<\/ol>\n\n\n\n<p>This setup lets you use hostnames for all your devices, static IPs, and even VPN clients. It\u2019s simple, it works, and it\u2019ll save you a headache later. Sometimes the old way just works.<\/p>\n\n\n\n<p>Static mappings make sure that this IP address of&nbsp;<code>192.168.5.2<\/code>&nbsp;is reserved for this computer to connect to, so that no other device can take it&nbsp;<em>(unless they are spoofing MAC addresses but if someone inside your house is doing just to mess with you, you have bigger problems, that likely end in them getting punched in the mouth).<\/em><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;Static IP mappings aren\u2019t a big deal when you have a few phones &amp; game consoles attached to your network at home. IF you are running a server, you are running something where clients(aka other phones\/computers) are going to want to consistently know where to access it.<\/p>\n\n\n\n<p>Think of your server like your favorite store. When you visi, do you want to have to look through maps to figure out what address they changed to that day? You could\u2026 but\u2026 wouldn\u2019t it be better if they were at the same place each time you needed to go?<\/p>\n<\/blockquote>\n\n\n\n<p><strong>You\u2019ve now set up an Ubuntu Server with a redundant, encrypted secure storage configuration. This setup gives you:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Boot drive redundancy with RAID 1<\/li>\n\n\n\n<li>Flexibility for future storage management with LVM \u2013 we can resize this later if we want to get a bigger drive setup.<\/li>\n\n\n\n<li>Enhanced security with full-disk encryption (except&nbsp;<code>\/boot<\/code>&nbsp;and&nbsp;<code>\/boot\/efi<\/code>).<\/li>\n\n\n\n<li>There are the&nbsp;<em>\u201cuhm akshually\u201d<\/em>&nbsp;people who will say that if you don\u2019t encrypt boot there\u2019s no point in all of this\u2026&nbsp;<em>just shut up.<\/em><\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Why I Used Virtual Machines Instead of Docker for Some Parts of My System[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=177\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=177\">edit source<\/a>]<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">FEEL FREE TO SKIP THIS SECTION &amp; SCROLL DOWN TO&nbsp;<em>\u201cUnderstanding the basics of Docker\u201d<\/em>&nbsp;section[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=178\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=178\">edit source<\/a>]<\/h2>\n\n\n\n<p><strong>This is another section that is completely unnecessary to read if you simply want to get to a working system. Feel free to fast forward to the&nbsp;<em>\u201cUnderstanding the basics of Docker\u201d<\/em>. This is here to provide insight into why I structured the guide the way I did.<\/strong><\/p>\n\n\n\n<p>Docker is a great way to managing programs in lightweight, isolated environments. It changed how sysadmins deploy and maintain their systems. Virtual machines are going out of fashion for many sysadmins; but in this guide, you\u2019ll notice that I\u2019ve grouped certain services into&nbsp;<strong>virtual machines&nbsp;<\/strong>instead of using Docker for everything. Let me explain why<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Building My System Piece by Piece[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=179\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=179\">edit source<\/a>]<\/h2>\n\n\n\n<p>Back when I started getting into self managing my own servers 15 years ago, my setup wasn\u2019t built all at once. It was cobbled together using the hardware I had lying around; old laptops, physical servers &amp; spare drives. As these machines aged, broke, or were&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=X86F1j5gCQs\">bashed in with a titanium nightstick when they frustrated me<\/a>, I started turning their hard drives into virtual machines. This was as simple as using&nbsp;<code>ddrescue<\/code>&nbsp;to create an image of the working hard drive, then using Virtual Machine Manager to run that image.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Why not Docker?<\/strong>&nbsp;By the time docker even came out(around 2013), I already had 3 virtual machines that were created from disk images of machines that were running in my closet or my store. At the time, Docker didn\u2019t even exist. Rebuilding everything using docker from scratch once it came out wasn\u2019t an efficient use of time while running a business &amp;&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=qFVwQCFhKSE\">wasting most of my spare time fighting my state\u2019s incompetent government<\/a>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">2. Time-Efficient Migration from Physical to Virtual[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=180\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=180\">edit source<\/a>]<\/h2>\n\n\n\n<p>Taking a physical server and turning it into a virtual machine takes no effort.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Pull drive out of physical server.<\/li>\n\n\n\n<li>Run&nbsp;<code>ddrescue -f -d -r 3 \/dev\/sdb phonesystem.iso<\/code><\/li>\n\n\n\n<li>Open virtual machine manager<\/li>\n\n\n\n<li>Enter a few commands in terminal to create a bridge network interface so the virtual machines work; once done, I never have to do this again for any other virtual machine.<\/li>\n\n\n\n<li>Import the&nbsp;<code>phonesystem.iso<\/code>&nbsp;file as a virtual machine.<\/li>\n\n\n\n<li>Mess with BIOS\/UEFI settings if necessary in virtual machine manager to get it to work.<\/li>\n\n\n\n<li>Assign the virtual machine the amount of CPU cores\/RAM I think it should have based on what it is doing.<\/li>\n\n\n\n<li>Run it.<\/li>\n\n\n\n<li>Be happy.<\/li>\n<\/ol>\n\n\n\n<p>It only takes a few seconds to type the commands &amp; click the icons necessary in virtual machine manager. Compare that to re-architecting the entire system for Docker: it would have taken way more effort, downtime, etc. for an improvement in performance I will never notice as a person who has a few users for my server.<\/p>\n\n\n\n<p>Some of these servers were running years before Docker was a thing, &amp; fixing what wasn\u2019t broken made no sense. Virtual machines offered a way to keep my systems running as they were once the hardware died &amp; have them set to back up with no extra work on my part.<\/p>\n\n\n\n<p>Over the years, I changed to using programs that were in docker exclusively. I went from a normal nextcloud deployment where I manually installed everything from scratch(including dependencies) to immich for images which was all docker. I went from self-managed email where the individual components(mailcot, dovecow, mysql, rspamd, etc.) were all installed from scratch to mailcow. Along the way, I just installed the dockerized version of the program on the virtual machine that was assigned to that \u201cgroup\u201d of services<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Certain Programs Aren\u2019t Built for Docker[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=181\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=181\">edit source<\/a>]<\/h2>\n\n\n\n<p>Not every program is Docker-friendly. For example:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>FreePBX (or PBXinaflash):<\/strong>&nbsp;You&nbsp;<em>could<\/em>&nbsp;theoretically create a custom Docker setup for these, but it would involve a ridiculous amount of work with little to no benefit for someone with my number of users(1, me, or 1 or 2 other people sometimes). For my use case (&amp; most home users), the performance penalty of using FreePBX in a virtual machine instead of dockerized is as noticeable as using&nbsp;<strong>Gentoo Linux<\/strong>&nbsp;with&nbsp;<code>emerge<\/code>&nbsp;to compile the entire thing from a stage 1 tarball vs.&nbsp;using gentoo with&nbsp;<code>apt<\/code>&nbsp;to install programs.<\/li>\n\n\n\n<li><strong>Home Assistant:<\/strong>&nbsp;The developers themselves recommend using their pre-built VM image (HaOS) instead of Docker. If the devs think it\u2019s better, I\u2019m not going to argue. I can barely write a zfs health monitoring email script. Who am I to argue with the developers of the best home automation software on earth on the best way to run their program?<\/li>\n<\/ul>\n\n\n\n<p>Even if I wanted to use Docker for everything, I\u2019d still have at least two VMs running. Adding another one or two doesn\u2019t bother me.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Idiotproof backups &#8211; the most important one[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=182\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=182\">edit source<\/a>]<\/h2>\n\n\n\n<p>This is a beginner\u2019s guide. Backing up Docker volumes, containers, networks, images, and configs is 100% doable. But let\u2019s be honest, it requires some degree of competence. Backing up a virtual machine, on the other hand, is&nbsp;<strong>completely idiot-proof.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A virtual machine backup is just a single&nbsp;<code>.qcow2<\/code>&nbsp;disk image and a single&nbsp;<code>.xml<\/code>&nbsp;configuration file. Drag and drop those two files to another system, import them into Virtual Machine Manager, and the virtual machine runs.<\/li>\n\n\n\n<li>There\u2019s no need to rebuild Docker containers, recreate volumes, or edit&nbsp;<code>docker-compose.yml<\/code>&nbsp;files. It\u2019s so simple that someone with absolutely no technical expertise could do it in one click.<\/li>\n\n\n\n<li>Infact it is so easy that even I can do it. If I can do it, it is truly idiotproof.<\/li>\n<\/ul>\n\n\n\n<p>The backup script I provide is one I use myself. Once a week, it backs up all of my virtual machines as well as their configuration files to a ZFS pool which will continue running even if several hard drives fail. If I screw something up, it is two terminal commands or a few clicks in the GUI &amp; I\u2019m back up &amp; running as if nothing stupid ever happened.<\/p>\n\n\n\n<p><strong>For beginners, when it comes to backups, simplicity is priceless.<\/strong><\/p>\n\n\n\n<p>Added complexity means you are less likely to&nbsp;<em>use<\/em>&nbsp;your backup system &amp; less likely to&nbsp;<em>understand<\/em>&nbsp;how restoring from a backup works.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why this guide uses virtual machines[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=183\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=183\">edit source<\/a>]<\/h2>\n\n\n\n<p>In this guide, I\u2019ve grouped services into virtual machines because it mirrors how I built my system over the past 15 years. This approach makes it easier for total beginners to back up and restore their setups without worrying about the complexities of Docker. Here\u2019s how I\u2019ve organized the VMs:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Android Services:<\/strong>&nbsp;Alternatives to Google Drive, Google Photos, and Google Docs.<\/li>\n\n\n\n<li><strong>Identity and Communication Services:<\/strong>&nbsp;Alternatives to Gmail, Google Calendar, Google Contacts, and Google Chrome\u2019s password manager.<\/li>\n\n\n\n<li><strong>Phone System:<\/strong>&nbsp;FreePBX for managing calls.<\/li>\n\n\n\n<li><strong>Home Automation:<\/strong>&nbsp;Home Assistant for smart home management.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">You do not have to do anything this way if you don\u2019t want to.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=184\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=184\">edit source<\/a>]<\/h2>\n\n\n\n<p>You\u2019re welcome to adapt this setup, or not. If you prefer Docker, you can combine many of these services into one host system. However, I still recommend using virtual machines for the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>FreePBX:<\/strong>&nbsp;The extra effort required to make this work in Docker isn\u2019t worth it.<\/li>\n\n\n\n<li><strong>Home Assistant:<\/strong>&nbsp;The HaOS image is the easiest and most reliable way to run Home Assistant, as per the developers\u2019 recommendations.<\/li>\n<\/ul>\n\n\n\n<p>This guide wasn\u2019t about doing everything new &#8211; it was about all of you asking how&nbsp;<em>I<\/em>&nbsp;had set up&nbsp;<em>my<\/em>&nbsp;system. Since my system works for everything under the sun &amp; has continued to for longer than I\u2019ve been allowed to buy alcohol, I keep it going.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Understanding the basics of Docker[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=185\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=185\">edit source<\/a>]<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">FEEL FREE TO SKIP THIS SECTION &amp; SCROLL DOWN TO&nbsp;<em>\u201cConfiguring Our Server\u2019s Networking for Virtual Machines\u201d<\/em>&nbsp;section[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=186\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=186\">edit source<\/a>]<\/h2>\n\n\n\n<p><strong>You do not need to read this section to install the software in this guide. You can simply copy &amp; paste along commands as I provide them to you, or follow the documentation from the program\u2019s developers. This section is not required reading, but rather here to help you understand the&nbsp;<em>how<\/em>&nbsp;and the&nbsp;<em>why<\/em>&nbsp;behind the installation methods for the programs we\u2019re installing so you learn as you go &#8211;&nbsp;<em>if you\u2019re interested.<\/em>&nbsp;If not, skip ahead to&nbsp;<em>\u201cConfiguring Our Server\u2019s Networking for Virtual Machines\u201d<\/em><\/strong><\/p>\n\n\n\n<p>We are going to use docker to install a program called&nbsp;<strong>mailcow<\/strong>. Before getting started installing mailcow, I want to go over what docker is &amp; how it works.<\/p>\n\n\n\n<p><strong>You do not need to be a genius linux sysadmin at creating your own docker containers &amp; setups to use it, but you should have some clue what it is or what happens when you type&nbsp;<code>docker compose up<\/code>&nbsp;to run something!<\/strong>&nbsp;Docker massively changed how sysadmins run &amp; deploy software. It\u2019s the engine behind many modern self-hosted solutions like&nbsp;<em>Mailcow<\/em>,&nbsp;<em>Immich<\/em>,&nbsp;<em>Bitwarden<\/em>,&nbsp;<em>Frigate<\/em>, &amp;&nbsp;<em>OnlyOffice<\/em>. It gets rid of one of the single largest pain points of releasing<em>(or using, or installing)<\/em>&nbsp;software on Linux: dependencies. Before getting into what Docker is, let\u2019s go over dependency hell.<a href=\"http:\/\/www.mandrake.tips.4.free.fr\/review2006.html\"><\/a><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/www.mandrake.tips.4.free.fr\/review2006.html\"><\/a><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202004656889.png\"><\/a><a href=\"http:\/\/www.mandrake.tips.4.free.fr\/review2006.html\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">What Are Dependencies and Why Do They Cause Problems?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=187\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=187\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Understanding Dependencies[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=188\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=188\">edit source<\/a>]<\/h3>\n\n\n\n<p>A&nbsp;<strong>dependency<\/strong>&nbsp;is software\/libraries\/frameworks that have to be installed for the program you are installing to work. Let\u2019s say you\u2019re installing a web application written in PHP; it might need a specific PHP module or a specific version of PHP.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you don\u2019t have that version of PHP installed, the application won\u2019t work.<\/li>\n\n\n\n<li>If you don\u2019t have PHP installed, the application won\u2019t work.<\/li>\n\n\n\n<li>If you want to use an application that requires a different version of PHP on the same machine\u2026.<\/li>\n<\/ul>\n\n\n\n<p>and so on &amp; so forth.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:800px-Netherlandwarf.jpg\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">The Dependency Hell of the 1990s[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=189\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=189\">edit source<\/a>]<\/h3>\n\n\n\n<p>Before modern package managers like&nbsp;<code>apt<\/code>&nbsp;used by Debian(and 6+ years later, ubuntu) or&nbsp;<code>emerge<\/code>&nbsp;(Gentoo), installing software on GNU\/Linux would require&nbsp;<strong>manually finding &amp; installing specific dependencies.<\/strong>&nbsp;Here\u2019s what this hell was like:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>You downloaded a&nbsp;<code>.tar.gz<\/code>&nbsp;file that was the source code of the program you wanted to install, called&nbsp;<code>rabbitholetohell<\/code>.<\/li>\n\n\n\n<li>You ran&nbsp;<code>.\/configure<\/code>&nbsp;&amp; it told you you\u2019re missing&nbsp;<code>libshit<\/code>.<\/li>\n\n\n\n<li>You found<code>libshit<\/code>, downloaded it, and discovered&nbsp;<em>it<\/em>&nbsp;required (<code>libpiss<\/code>).<\/li>\n\n\n\n<li>You found&nbsp;<code>libpiss<\/code>&nbsp;but learned that&nbsp;<code>libpiss<\/code>&nbsp;needed version 1.2 of&nbsp;<code>libpuke<\/code>&nbsp;and your computer had version 1.3 of&nbsp;<code>libpuke<\/code>&nbsp;installed.<\/li>\n\n\n\n<li>Downgrading from version 1.3 of&nbsp;<code>libpuke<\/code>&nbsp;to version 1.2 of&nbsp;<code>libpuke<\/code>&nbsp;breaks your entire system.<\/li>\n\n\n\n<li>User throws keyboard at wall &amp; switches back to windows and says forget GNU\/Linux for life.<\/li>\n\n\n\n<li>If the user is a sysadmin, they curse and figure out how to make it work because this is their job, wasting tons of time.<\/li>\n<\/ol>\n\n\n\n<p>This was called&nbsp;<strong>dependency hell<\/strong>, where each dependency needed more dependencies. it\u2019s what eli the computer guy would correctly call the&nbsp;<a href=\"https:\/\/youtu.be\/I-N_iQC1Uhk\">rabbit hole to hell<\/a><\/p>\n\n\n\n<p>Tools like&nbsp;<code>apt<\/code>&nbsp;came along in the late 90s. Instead of dependency hell, you typed&nbsp;<code>apt install rabbitholetohell -y<\/code>&nbsp;&amp; it just installed&nbsp;<code>rabbitholetohell<\/code>. It installed all the dependencies, &amp; their dependencies, and it installed the right ones. It was beautiful\u2026<\/p>\n\n\n\n<p>Yet, even with tools like&nbsp;<code>apt<\/code>&nbsp;to make installs simpler, problems came up if multiple applications needed&nbsp;<strong>different versions<\/strong>&nbsp;of the same dependency. For example:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>PHP Example:<\/strong>&nbsp;Suppose you wanted to run two applications:\n<ul class=\"wp-block-list\">\n<li>App 1 requires PHP 7.4.<\/li>\n\n\n\n<li>App 2 requires PHP 8.1.<\/li>\n\n\n\n<li>Your system can only have one version of PHP installed at a time, and switching between versions was a&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=I-N_iQC1Uhk\">rabbit hole to hell<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:800px-Netherlandwarf.jpg\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Why This Is a Nightmare for Software Maintenance[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=190\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=190\">edit source<\/a>]<\/h3>\n\n\n\n<p>Dependencies can become a serious problem over time:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Conflicting Requirements:<\/strong>&nbsp;If program A needs&nbsp;<code>libshit<\/code>&nbsp;version 1.2 &amp; program B needs&nbsp;<code>libshit<\/code>&nbsp;version 2.0, your system can break when one application upgrades.<\/li>\n\n\n\n<li><strong>Complex Upgrades:<\/strong>&nbsp;Updating dependencies for one application can &amp; will cause another application to stop working. This is called&nbsp;<strong>dependency breakage<\/strong>&nbsp;and they are another common cause of chasing rabbits all the way to hell.<\/li>\n\n\n\n<li><strong>System Decay:<\/strong>&nbsp;Over time, manually managing dependencies can lead to a bloated, unstable system full of broken packages, outdated libraries, &amp; leftover files.<\/li>\n\n\n\n<li><strong>Version pinning misery:<\/strong>&nbsp;<code>apt<\/code>&nbsp;lets you install specific versions of packages but managing version conflicts becomes timewasting, dangerous, &amp; difficult when dependencies span dozens of packages with intricate relationships. As a newbie, you are likely going to break your system. As an experienced sysadmin\u2026 they still broke their systems\u2026.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">How docker solves this mess[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=191\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=191\">edit source<\/a>]<\/h3>\n\n\n\n<p>Docker containers solve these problems by&nbsp;<strong>isolating dependencies for each application.<\/strong>&nbsp;Here\u2019s how it works:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Per-Application Environments:<\/strong>&nbsp;Each Docker container includes everything an application needs to run from the application code, runtime, &amp; all dependencies. These are packaged together in the Docker&nbsp;<strong>image<\/strong>.\n<ul class=\"wp-block-list\">\n<li>Example: If one application needs PHP 7.4 and another needs PHP 8.1, you can run both simultaneously in separate containers without conflict, on the same computer.<\/li>\n\n\n\n<li>I am not talking about on separate virtual machines. I mean on the SAME HOST OPERATING SYSTEM. Two versions of PHP; or ten if you wanted. and no issues. no conflicts. No rabbit, &amp; no hell&nbsp;\ud83d\ude42<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Immutable(unchangeable):<\/strong>&nbsp;Docker images are immutable snapshots. Once built, the dependencies in an image don\u2019t change, so the application runs consistently every time. It\u2019s not like an operating system update where package A may not be updated but package B is, and package A depends on a specific version of package B so everything breaks.<\/li>\n\n\n\n<li><strong>No System-Wide Conflicts:<\/strong>&nbsp;Docker containers don&#8217;t mess with each other on the host system. The PHP version inside the container for&nbsp;<code>nextcloud<\/code>doesn\u2019t affect the PHP version on the host, or in the container for&nbsp;<code>magento<\/code>.<\/li>\n\n\n\n<li><strong>Simple Upgrades:<\/strong>&nbsp;If you need to update an application you just type&nbsp;<code>docker compose pull<\/code>&nbsp;when it\u2019s not running &amp; it just updates\u2026 seamlessly. If it fails or the dev messed something up, you can go back to a previously installed image without messing up other applications.<\/li>\n\n\n\n<li><strong>Portable:<\/strong>&nbsp;Docker makes sure that the program &amp; its dependencies work the same way on ANY system; whether it\u2019s your personal server, a cloud provider, or your friend\u2019s gaming PC.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Why docker has exploded in popularity for small open source projects[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=192\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=192\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Developers get less complaints from users[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=193\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=193\">edit source<\/a>]<\/h3>\n\n\n\n<p>The biggest complaint by far that many open source projects get is&nbsp;<em>I tried to install abc program &amp; get xyz error.<\/em>&nbsp;It is the bane of open source software developer\u2019s existance, until they stop caring about their users entirely. This is often the only way to stay sane in a world where&nbsp;<em>\u201cusers\u201d<\/em>(NOT&nbsp;<em>\u201ccustomers\u201d<\/em>), who pay the developers $0, expect unlimited tech support &amp; handholding as well as a one year lesson in GNU\/Linux systems administration so they can install a photo gallery.<\/p>\n\n\n\n<p>This sucks.<\/p>\n\n\n\n<p>With Docker, for a developer to hand off a program running on their server to your server, the dev only has to provide you the following:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Docker image of your application<\/li>\n\n\n\n<li>The associated Docker Compose&nbsp;<code>docker-compose.yml<\/code>&nbsp;file<\/li>\n\n\n\n<li>Instructions or files to set up storage &amp; networking.<\/li>\n\n\n\n<li>If you want to copy the files over that the service was saving that are unique to you, the docker volume.<\/li>\n\n\n\n<li>Tell you to edit xyz content in a&nbsp;<code>docker-compose.yml<\/code>&nbsp;file so the software is set to your specific need.<\/li>\n\n\n\n<li>Tell you to type&nbsp;<code>docker compose pull<\/code>&nbsp;&amp;&nbsp;<code>docker compose up -d<\/code><\/li>\n\n\n\n<li>Never hear complaints from you again.<\/li>\n<\/ol>\n\n\n\n<p>The Docker image contains the program &amp; its environment, which makes sure the software runs the same on their server as it does on yours.<\/p>\n\n\n\n<p><strong>AKA, the developers can provide me a COMPLETELY IDIOTPROOF copy of their software that is so easy to install even I can\u2019t screw it up. Once they get it to install on THEIR system &#8211; they know it\u2019ll install on mine.<\/strong><\/p>\n\n\n\n<p>The docker-compose.yml file explains to docker &amp; your computer how to \u201cdeploy\u201d the program &amp; has details about Docker networks (e.g., how the containers communicate) &amp; Docker volumes (for storing data that persists outside the container).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Docker makes what used to be miserable very easy[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=194\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=194\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You can run&nbsp;<strong>Mailcow<\/strong>&nbsp;(which uses PHP 7.4 for its web interface) alongside&nbsp;<strong>OnlyOffice<\/strong>&nbsp;(which needs PHP 8.1) on the&nbsp;<strong>same server without issues.<\/strong><\/li>\n\n\n\n<li>When setting up something like&nbsp;<strong>Immich<\/strong>, you don\u2019t need to worry about Node.js versions conflicting with other apps. The devs use Docker to bundle the correct version for you. You don\u2019t have to RTFM to figure out the right version of&nbsp;<code>libshit<\/code>&nbsp;to install anymore &#8211; the developer does that once, and then it\u2019s set for all of their users.<\/li>\n\n\n\n<li>If a new version of&nbsp;<strong>Bitwarden<\/strong>&nbsp;requires updated dependencies, you update the Docker container, leaving the rest of your system untouched.<\/li>\n<\/ul>\n\n\n\n<p>Docker turns what used to be a nightmare into a manageable, predictable process that isn\u2019t miserable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. How Docker Works[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=195\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=195\">edit source<\/a>]<\/h2>\n\n\n\n<p>Docker simplifies running software by packaging everything the software needs into one neat bundle. It does this using&nbsp;<strong>containers<\/strong>&nbsp;which are lightweight standalone environments that share the host system\u2019s resources but remain isolated.<\/p>\n\n\n\n<p>This is like a virtual machine, but without the baggage of needing its own operating system. Docker containers run on a shared kernel, making them much faster and lighter. If you ever enter a docker container, you will notice that almost no programs or commands are available besides the&nbsp;<em>bare minimum<\/em>&nbsp;necessary to do the job. See below:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">louis@ultimatebauer:~$ docker exec -it frigate bash\nroot@174eb3845d50:\/opt\/frigate# nano file.log\nbash: nano: command not found\nroot@174eb3845d50:\/opt\/frigate# vi file.log\nbash: vi: command not found\nroot@174eb3845d50:\/opt\/frigate# vim file.log\nbash: vim: command not found\nroot@174eb3845d50:\/opt\/frigate# emacs file.log\nbash: emacs: command not found\nroot@174eb3845d50:\/opt\/frigate# ip addr show\nbash: ip: command not found\nroot@174eb3845d50:\/opt\/frigate#  you really don't have shit in here besides exactly what you need to run the application, do you? run nano you prick!<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>root@174eb3845d50:\/opt\/frigate&nbsp;<strong>I\u2019m afraid I can\u2019t do that, dave<\/strong><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">2. What Are Docker Images?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=196\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=196\">edit source<\/a>]<\/h2>\n\n\n\n<p>A&nbsp;<strong>Docker image<\/strong>&nbsp;is a blueprint on how to install the program. It has the instructions, files, &amp; dependencies necessary to create a working environment for a piece of software. Think of it like a frozen dinner if they weren\u2019t poisonous to your health. Everything you need is pre-packaged, &amp; all you have to do is microwave it&nbsp;<em>(or, in this case, \u201crun\u201d the image; please don\u2019t try to microwave a GNU\/Linux computer, as tempting as it might be when it doesn\u2019t work)<\/em>&nbsp;to get the app running.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Example: A&nbsp;<code>Nextcloud<\/code>&nbsp;Docker image includes the Nextcloud app, its web server, and everything else it needs to limp. I won\u2019t use the word&nbsp;<em>\u201crun\u201d<\/em>&nbsp;to describe nextcloud\u2026<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">3. What Are Docker Containers?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=197\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=197\">edit source<\/a>]<\/h2>\n\n\n\n<p>A&nbsp;<strong>Docker container<\/strong>&nbsp;is a running instance of a Docker image. Using the frozen dinner analogy, if the image is a boxed meal in a freezer, a container is a meal served hot &amp; ready to eat. You can run many containers from the same image just like you could cook multiple identical dinners from the same recipe.<\/p>\n\n\n\n<p>For instance, mailcow is not a mail&nbsp;<em>\u201cprogram\u201d<\/em>&nbsp;so much as it is an amalgamation of a bunch of programs necessary to run a mailserver.<\/p>\n\n\n\n<p>On my mailserver, you can see a list of all the different containers that run for mailcow when I run&nbsp;<code>docker ps -a<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Example: mailcow container guide[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=198\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=198\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Mail processing[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=199\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=199\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>postfix<\/strong>: The program that sends emails<\/li>\n\n\n\n<li><strong>dovecot<\/strong>: The program that receives emails &amp; stores them &amp; categorizes them by user, inbox, email address, folder, etc.<\/li>\n\n\n\n<li><strong>rspamd<\/strong>: anti-spam controls<\/li>\n\n\n\n<li><strong>clamd<\/strong>: scans attachments for viruses<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Web &amp; Interface[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=200\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=200\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>sogo<\/strong>: webmail dashboard for checking email\/calendar\/contacts in browser<\/li>\n\n\n\n<li><strong>phpfpm<\/strong>: for web interface<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">security &amp; monitoring[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=201\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=201\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>watchdog<\/strong>: The health monitor<\/li>\n\n\n\n<li><strong>acme<\/strong>: Handles SSL certificates<\/li>\n\n\n\n<li><strong>netfilter<\/strong>: Blocks bad actors<\/li>\n\n\n\n<li><strong>unbound<\/strong>: helps route messages correctly<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Helper Services[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=202\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=202\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>solr<\/strong>: Makes searching through your email faster<\/li>\n\n\n\n<li><strong>olefy<\/strong><\/li>\n\n\n\n<li><strong>dockerapi<\/strong>:<\/li>\n<\/ul>\n\n\n\n<p>Think of Docker containers like having separate tiny computers inside your main computer that are barebones and only include the minimum necessary for each function to work. They each work independent of each other to minimize the likelihood of something screwing up while also allowing you the ability to experiment without destroying your entire system.<\/p>\n\n\n\n<p>Containers are not&nbsp;<strong>persistant.<\/strong>&nbsp;This means what happens in the containers stays in the container until you restart it. Once you restart the container, any changes to files you have made are&nbsp;<em>GONE<\/em>.&nbsp;<strong>PERSISTENT<\/strong>&nbsp;storage occurs in docker&nbsp;<em>volumes<\/em>.<\/p>\n\n\n\n<p>Each container has its own:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Space to run programs<\/li>\n\n\n\n<li>Network connection<\/li>\n\n\n\n<li>File storage<\/li>\n\n\n\n<li>Settings<\/li>\n\n\n\n<li>Installed programs<\/li>\n<\/ul>\n\n\n\n<p>Unlike full virtual machines (which are like having complete separate computers), containers share the main operating system\u2019s foundation&nbsp;<em>(the host\u2019s operating system kernel)<\/em>, making them much lighter and faster to start up.<\/p>\n\n\n\n<p>For example, in mailcow:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The postfix container only knows about sending\/receiving mail<\/li>\n\n\n\n<li>The rspamd container is only for filtering junk<\/li>\n\n\n\n<li>The clamd container is only there to scan for viruses<\/li>\n<\/ul>\n\n\n\n<p>They can\u2019t interfere with each other, but they can communicate through specific \u201cdoorways\u201d (network ports) when needed. If something goes wrong with one container, it doesn\u2019t affect the others &#8211; just like one apartment\u2019s plumbing problem doesn\u2019t affect the other apartments (hopefully).<\/p>\n\n\n\n<p>If you need to upgrade or fix something, you can work on one container without messing with everything else.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">louis@mailserver:~$ docker ps -a\nCONTAINER ID   IMAGE                    COMMAND                  CREATED       STATUS                  PORTS                                                                                                                                                                                                                               NAMES\naca88eab00b0   mailcow\/watchdog:2.05    \"\/watchdog.sh\"           11 days ago   Up 24 hours                                                                                                                                                                                                                                                 mailcowdockerized-watchdog-mailcow-1\n012debb1f557   mailcow\/acme:1.90        \"\/sbin\/tini -g -- \/s\u2026\"   11 days ago   Up 24 hours                                                                                                                                                                                                                                                 mailcowdockerized-acme-mailcow-1\nd33aa2bb976b   nginx:mainline-alpine    \"\/docker-entrypoint.\u2026\"   11 days ago   Up 24 hours             0.0.0.0:80-&gt;80\/tcp,&nbsp;:::80-&gt;80\/tcp, 0.0.0.0:443-&gt;443\/tcp,&nbsp;:::443-&gt;443\/tcp                                                                                                                                                            mailcowdockerized-nginx-mailcow-1\n7bc85825c0b1   mailcow\/rspamd:1.98      \"\/docker-entrypoint.\u2026\"   11 days ago   Up 24 hours                                                                                                                                                                                                                                                 mailcowdockerized-rspamd-mailcow-1\n958d3ba45877   mcuadros\/ofelia:latest   \"\/usr\/bin\/ofelia dae\u2026\"   11 days ago   Up 24 hours                                                                                                                                                                                                                                                 mailcowdockerized-ofelia-mailcow-1\na99f82d2b36a   mailcow\/phpfpm:1.91.1    \"\/docker-entrypoint.\u2026\"   11 days ago   Up 24 hours             9000\/tcp                                                                                                                                                                                                                            mailcowdockerized-php-fpm-mailcow-1\nb8c6df6a7303   mailcow\/dovecot:2.2      \"\/docker-entrypoint.\u2026\"   11 days ago   Up 24 hours             0.0.0.0:110-&gt;110\/tcp,&nbsp;:::110-&gt;110\/tcp, 0.0.0.0:143-&gt;143\/tcp,&nbsp;:::143-&gt;143\/tcp, 0.0.0.0:993-&gt;993\/tcp,&nbsp;:::993-&gt;993\/tcp, 0.0.0.0:995-&gt;995\/tcp,&nbsp;:::995-&gt;995\/tcp, 0.0.0.0:4190-&gt;4190\/tcp,&nbsp;:::4190-&gt;4190\/tcp, 127.0.0.1:19991-&gt;12345\/tcp   mailcowdockerized-dovecot-mailcow-1\ne3b09c799a7c   mailcow\/postfix:1.77     \"\/docker-entrypoint.\u2026\"   11 days ago   Up 24 hours             0.0.0.0:25-&gt;25\/tcp,&nbsp;:::25-&gt;25\/tcp, 0.0.0.0:465-&gt;465\/tcp,&nbsp;:::465-&gt;465\/tcp, 0.0.0.0:587-&gt;587\/tcp,&nbsp;:::587-&gt;587\/tcp, 588\/tcp                                                                                                            mailcowdockerized-postfix-mailcow-1\nfaece81357e3   mailcow\/solr:1.8.3       \"docker-entrypoint.s\u2026\"   11 days ago   Up 24 hours             127.0.0.1:18983-&gt;8983\/tcp                                                                                                                                                                                                           mailcowdockerized-solr-mailcow-1\n76c9f63fa50d   mariadb:10.5             \"docker-entrypoint.s\u2026\"   11 days ago   Up 24 hours             127.0.0.1:13306-&gt;3306\/tcp                                                                                                                                                                                                           mailcowdockerized-mysql-mailcow-1\n930a7e0acff6   redis:7-alpine           \"docker-entrypoint.s\u2026\"   11 days ago   Up 24 hours             127.0.0.1:7654-&gt;6379\/tcp                                                                                                                                                                                                            mailcowdockerized-redis-mailcow-1\n8bbcbe5ebefb   mailcow\/clamd:1.66       \"\/sbin\/tini -g -- \/c\u2026\"   11 days ago   Up 24 hours (healthy)                                                                                                                                                                                                                                       mailcowdockerized-clamd-mailcow-1\n9070a5ba3fb0   mailcow\/olefy:1.13       \"python3 -u \/app\/ole\u2026\"   11 days ago   Up 24 hours                                                                                                                                                                                                                                                 mailcowdockerized-olefy-mailcow-1\n893f2ff1f952   mailcow\/dockerapi:2.09   \"\/bin\/sh \/app\/docker\u2026\"   11 days ago   Up 24 hours                                                                                                                                                                                                                                                 mailcowdockerized-dockerapi-mailcow-1\n6781988f3409   mailcow\/sogo:1.127.1     \"\/docker-entrypoint.\u2026\"   11 days ago   Up 24 hours                                                                                                                                                                                                                                                 mailcowdockerized-sogo-mailcow-1\n464ca438b4c2   mailcow\/unbound:1.23     \"\/docker-entrypoint.\u2026\"   11 days ago   Up 24 hours (healthy)   53\/tcp, 53\/udp                                                                                                                                                                                                                      mailcowdockerized-unbound-mailcow-1\n373c1b7c5741   mailcow\/netfilter:1.59   \"\/bin\/sh -c \/app\/doc\u2026\"   11 days ago   Up 24 hours                                                                                                                                                                                                                                                 mailcowdockerized-netfilter-mailcow-1\n6931fc976572   memcached:alpine         \"docker-entrypoint.s\u2026\"   11 days ago   Up 24 hours             11211\/tcp                                                                                                                                                                                                                           mailcowdockerized-memcached-mailcow-1\nlouis@mailserver:~$ <\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">4. What Are Docker Networks?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=203\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=203\">edit source<\/a>]<\/h2>\n\n\n\n<p>Docker allows containers to communicate with each other &amp; the outside world using&nbsp;<strong>networks<\/strong>. By default, the containers can access the internet. Custom networks allow you to connect certain containers while keeping them separate from others.<\/p>\n\n\n\n<p>For instance, in&nbsp;<strong>mailcow<\/strong>&nbsp;docker networks make sure the mail server can talk to the database container securely without exposing the database to the entire internet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. What Are Docker Volumes?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=204\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=204\">edit source<\/a>]<\/h2>\n\n\n\n<p>A&nbsp;<strong>Docker volume<\/strong>&nbsp;is where data generated by a container is stored. Think of a docker container like a computer booting up from a read only floppy disk. Whatever you ran in your programs is gone the second you reboot the computer. The docker volume is the second disk in the computer that you can write to so that you can save things. Containers are where programs run (postfix, dovecot), and volumes are where things are stored (emails, pictures, videos, etc.). Volumes make sure that important data persists even if the container is removed or restarted.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Volume examples with different programs:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=205\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=205\">edit source<\/a>]<\/h3>\n\n\n\n<p>The&nbsp;<code>docker-compose.yml<\/code>&nbsp;file is what tells docker how to set up everything. In frigate, we are not creating docker volumes. Rather, we tell docker to map a directory on the host computer inside the docker container. Look here:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">docker program that does not use docker volumes[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=206\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=206\">edit source<\/a>]<\/h4>\n\n\n\n<p>In this file, the container&nbsp;<strong>\u201cfrigate\u201d<\/strong>&nbsp;specified on line 4 by&nbsp;<em>container_name<\/em>, we do not have any docker volumes specified. Under&nbsp;<code>services<\/code>&nbsp;we specify our containers. There are no docker volumes specified here. We have told the system that whatever is in&nbsp;<code>\/home\/louis\/Downloads\/programs\/frigate\/config<\/code>&nbsp;on the host system should show up inside the&nbsp;<code>frigate<\/code>&nbsp;container on the directory&nbsp;<code>\/config<\/code>. Without this, the&nbsp;<code>config.yml<\/code>&nbsp;file within the&nbsp;<code>\/home\/louis\/Downloads\/programs\/frigate\/config<\/code>&nbsp;directory would not show up inside the container. Even if I logged into the container using&nbsp;<code>docker exec -it frigate bash<\/code>&nbsp;and created a&nbsp;<code>config.yml<\/code>&nbsp;file in&nbsp;<code>\/config<\/code>, it would be gone when I restarted the container.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">version: \"3.9\"\nservices:\n  frigate:\n    container_name: frigate\n    privileged: true # this may not be necessary for all setups\n    restart: unless-stopped\n    image: ghcr.io\/blakeblackshear\/frigate:stable\n    shm_size: \"2048mb\" # update for your cameras based on calculation above\n    devices:\n      - \/dev\/bus\/usb:\/dev\/bus\/usb # Passes the USB Coral, needs to be modified for other versions\n      - \/dev\/apex_0:\/dev\/apex_0 # Passes a PCIe Coral, follow driver instructions here https:\/\/coral.ai\/doc&gt;\n      - \/dev\/video11:\/dev\/video11 # For Raspberry Pi 4B\n      - \/dev\/dri\/renderD128:\/dev\/dri\/renderD128 # For intel hwaccel, needs to be updated for your hardware\n    volumes:\n      - \/etc\/localtime:\/etc\/localtime:ro\n      - \/home\/louis\/Downloads\/programs\/frigate\/config:\/config\n      - \/drive1thru8\/securitycam:\/data\/db\n      - \/drive1thru8\/securitycam:\/media\/frigate\n      - type: tmpfs # Optional: 1GB of memory, reduces SSD\/SD Card wear\n        target: \/tmp\/cache\n        tmpfs:\n          size: 1000000000\n    ports:\n      - \"8971:8971\"\n      - \"5000:5000\" # Internal unauthenticated access. Expose carefully.\n      - \"8554:8554\" # RTSP feeds\n      - \"8555:8555\/tcp\" # WebRTC over tcp\n      - \"8555:8555\/udp\" # WebRTC over udp\n    environment:\n      FRIGATE_RTSP_PASSWORD: \"password\"<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">docker program that DOES use docker volumes[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=207\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=207\">edit source<\/a>]<\/h4>\n\n\n\n<p>Check out mailcow. This is not the full&nbsp;<code>docker-compose.yml<\/code>&nbsp;configuration file, just a part of it. Look at lines 25-28. For the container&nbsp;<code>mysql-mailcow<\/code>, we have two docker volumes. The docker volume&nbsp;<code>mysql-vol-1<\/code>&nbsp;will show up inside the&nbsp;<code>mysql-mailcow<\/code>&nbsp;container<em>&nbsp;(which is a tiny virtual computer that runs our programs, in this case, the mysql database. mysql databases usually contain data on users, configurations, product orders, etc)<\/em>. Whatever is in the&nbsp;<code>mysql-vol-1<\/code>&nbsp;docker volume will show up inside the&nbsp;<code>mysql-mailcow<\/code>&nbsp;container at&nbsp;<code>\/var\/lib\/mysql<\/code>.<\/p>\n\n\n\n<p>It is using a docker volume instead of the main computer\/operating system\u2019s file system to store its files.<\/p>\n\n\n\n<p>However, on line 28, we have&nbsp;<code>- .\/data\/conf\/mysql\/:\/etc\/mysql\/conf.d\/:ro,Z<\/code>&nbsp;which means that whatever is in the subfolder of our mailcow folder<em>(where the&nbsp;<code>docker-compose.yml<\/code>&nbsp;file is that we used to install mailcow)<\/em>&nbsp;under&nbsp;<code>data\/conf\/mysql\/<\/code>&nbsp;will show up inside the docker container at&nbsp;<code>\/etc\/mysql\/conf.d\/<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">services:\n\n    unbound-mailcow:\n      image: mailcow\/unbound:1.23\n      environment:\n        - TZ=${TZ}\n        - SKIP_UNBOUND_HEALTHCHECK=${SKIP_UNBOUND_HEALTHCHECK:-n}\n      volumes:\n        - .\/data\/hooks\/unbound:\/hooks:Z\n        - .\/data\/conf\/unbound\/unbound.conf:\/etc\/unbound\/unbound.conf:ro,Z\n      restart: always\n      tty: true\n      networks:\n        mailcow-network:\n          ipv4_address: ${IPV4_NETWORK:-172.22.1}.254\n          aliases:\n            - unbound\n\n    mysql-mailcow:\n      image: mariadb:10.5\n      depends_on:\n        - unbound-mailcow\n        - netfilter-mailcow\n      stop_grace_period: 45s\n      volumes:\n        - mysql-vol-1:\/var\/lib\/mysql\/\n        - mysql-socket-vol-1:\/var\/run\/mysqld\/\n        - .\/data\/conf\/mysql\/:\/etc\/mysql\/conf.d\/:ro,Z\n      environment:\n        - TZ=${TZ}\n        - MYSQL_ROOT_PASSWORD=${DBROOT}\n        - MYSQL_DATABASE=${DBNAME}\n        - MYSQL_USER=${DBUSER}\n        - MYSQL_PASSWORD=${DBPASS}\n        - MYSQL_INITDB_SKIP_TZINFO=1\n      restart: always\n      ports:\n        - \"${SQL_PORT:-127.0.0.1:13306}:3306\"\n      networks:\n        mailcow-network:\n          aliases:\n            - mysql<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\">mailcow docker volume descriptions[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=208\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=208\">edit source<\/a>]<\/h5>\n\n\n\n<p>Here are some docker volumes used for mailcow:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">louis@mailserver:\/opt\/mailcow-dockerized$ docker volume ls\nDRIVER    VOLUME NAME\nlocal     mailcowdockerized_clamd-db-vol-1\nlocal     mailcowdockerized_crypt-vol-1\nlocal     mailcowdockerized_mysql-socket-vol-1\nlocal     mailcowdockerized_mysql-vol-1\nlocal     mailcowdockerized_postfix-vol-1\nlocal     mailcowdockerized_redis-vol-1\nlocal     mailcowdockerized_rspamd-vol-1\nlocal     mailcowdockerized_sogo-userdata-backup-vol-1\nlocal     mailcowdockerized_sogo-web-vol-1\nlocal     mailcowdockerized_solr-vol-1\nlocal     mailcowdockerized_vmail-index-vol-1\nlocal     mailcowdockerized_vmail-vol-1\n<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\">main data storage[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=209\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=209\">edit source<\/a>]<\/h6>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>vmail-vol-1<\/code>: The emails &amp; attachment files<\/li>\n\n\n\n<li><code>mysql-vol-1<\/code>: Database stuff like user accounts\/settings<\/li>\n\n\n\n<li><code>redis-vol-1<\/code>: Temporary data for faster load times<\/li>\n<\/ul>\n\n\n\n<h6 class=\"wp-block-heading\">email processing[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=210\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=210\">edit source<\/a>]<\/h6>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>postfix-vol-1<\/code>: Mail server configuration &amp; logs<\/li>\n\n\n\n<li><code>rspamd-vol-1<\/code>: spam filter rules &amp; training data<\/li>\n\n\n\n<li><code>clamd-db-vol-1<\/code>: Virus scanning database<\/li>\n<\/ul>\n\n\n\n<h6 class=\"wp-block-heading\">webmail &amp; user data[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=211\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=211\">edit source<\/a>]<\/h6>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>sogo-userdata-backup-vol-1<\/code>: Backups of user settings &amp; data<\/li>\n\n\n\n<li><code>sogo-web-vol-1<\/code>: Web interface files<\/li>\n\n\n\n<li><code>vmail-index-vol-1<\/code>: Helps search through old email quickly<\/li>\n<\/ul>\n\n\n\n<h6 class=\"wp-block-heading\">random technical volumes[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=212\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=212\">edit source<\/a>]<\/h6>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>crypt-vol-1<\/code>: Encryption-related data<\/li>\n\n\n\n<li><code>mysql-socket-vol-1<\/code>: This assists database communication<\/li>\n\n\n\n<li><code>solr-vol-1<\/code>: Search engine data<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">This seems like a lot[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=213\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=213\">edit source<\/a>]<\/h2>\n\n\n\n<p>If this is too much, realize this. 99% of installing programs that are packaged with docker means doing the following:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Downloading a&nbsp;<code>docker-compose.yml<\/code>&nbsp;file<\/li>\n\n\n\n<li>Running the command&nbsp;<code>docker compose pull<\/code>&nbsp;to grab program<\/li>\n\n\n\n<li>Running the command&nbsp;<code>docker compose up -d<\/code>&nbsp;to start program.<\/li>\n\n\n\n<li>You\u2019re done.<\/li>\n\n\n\n<li>If an idiot like me can do it, then so can you.<\/li>\n<\/ol>\n\n\n\n<p><strong>YOU DO NOT NEED TO BECOME AN EXPERT SYSTEMS ADMINISTRATOR OVERNIGHT.<\/strong><\/p>\n\n\n\n<p>The best way to learn is to try and understand things one part at a time. You do it like this:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Set something up, have it work.<\/li>\n\n\n\n<li>Have no idea what you did.<\/li>\n\n\n\n<li>Mess around with it &amp; enjoy it.<\/li>\n\n\n\n<li>Use the kick of dopamine from it working &amp; enjoying it to get motivated.<\/li>\n\n\n\n<li>Read a piece of a config file just for the hell of it and see if it maps to anything in the program\/what you\u2019re doing.<\/li>\n\n\n\n<li>If it makes no sense, don\u2019t worry about it, keep enjoying the program &amp; increasing your stock of dopamine &amp; happiness &amp; satisfaction.<\/li>\n\n\n\n<li>Come back to it again later.<\/li>\n\n\n\n<li>Read a little bit.<\/li>\n\n\n\n<li>Read something on a forum\/manual\/guide that makes little sense to you, but maybe 1% more sense now than it did a week ago.<\/li>\n\n\n\n<li>Pat yourself on the back for understanding it even though you think this is kindergarten level &amp; you\u2019re an idiot &amp; everyone else knows way more than you.<\/li>\n\n\n\n<li>Enjoy program more.<\/li>\n\n\n\n<li>Don\u2019t crap on yourself because you don\u2019t get everything.<\/li>\n\n\n\n<li>When bored sitting in a meeting you have no business wasting your time in, alt-tab over to your&nbsp;<code>docker-compose.yml<\/code>&nbsp;file.<\/li>\n\n\n\n<li>Google random parts &amp; see what they do.<\/li>\n\n\n\n<li>Think about how that piece of software works. Google what the different words inside of the file do, what those programs are for, &amp; how they relate to the program working as a whole.<\/li>\n\n\n\n<li>See if you understand 1% more now than before.<\/li>\n\n\n\n<li>Each percent you understand is not&nbsp;<strong>cumulative<\/strong>&nbsp;&#8211; it is&nbsp;<em><strong>exponential!<\/strong><\/em>&nbsp;Learning this stuff is a parabola. In the beginning, it is insanely slow. Once you get started &amp; understand the foundation, learning increases at an exponential pace.<\/li>\n\n\n\n<li>You need to overcome that period where you feel like an imposter &amp; a total idiot in order to get better.<\/li>\n\n\n\n<li>Realize that even complete experts know&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php\/FUTO:General_disclaimer\">0.0001%<\/a>&nbsp;of what there is to know about all of this and usually specialize in one specific area, because to understand how everything works is damn near impossible.<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\">Configuring Our Server\u2019s Networking for Virtual Machines[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=214\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=214\">edit source<\/a>]<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">What are virtual machines?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=215\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=215\">edit source<\/a>]<\/h2>\n\n\n\n<p>We are going to make use of virtual machines a lot. Virtual machines (VMs) are software-based computers running inside your physical server. This approach allows us to have separated, segmented computers running inside of our computer that are&nbsp;<strong>absolutely idiotproof to back up &amp; restore.<\/strong>&nbsp;Key word there being&nbsp;<em>idiotproof.<\/em>&nbsp;Once I provide you with a working backup script, if you mess something up with any of the services (mailcow, freepbx, homeassistant syncthing, immich, nextcloud, etc.) all you have to do is:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Shut down the existing messed up virtual machines.<\/li>\n\n\n\n<li>Restore a single&nbsp;<code>.qcow2<\/code>&nbsp;file from backup.<\/li>\n\n\n\n<li>Start up the virtual machine.<\/li>\n<\/ol>\n\n\n\n<p>And everything works again. No confusing command line stuff, no editing config files. Depending on the host &amp; network you move it to, you might have to edit the IP address configuration &amp; ports forwarded in the firewall; besides that it will just&nbsp;<strong>work.<\/strong>&nbsp;This is beautiful, and so idiotproof even someone like me can do it. If I mess up my phone system, I can restore it in seconds without having to mess with any other part of my system. Did I mention it\u2019s idiotproof? This is the most important quality of a system when I\u2019m the one using it.<\/p>\n\n\n\n<p><strong>If the server\u2019s hardware or OS drive fails, it\u2019s easy to move the VMs to another device. Insanely easy. Take a backup of a single file &amp; move it over easy.<\/strong><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em><strong>nerd note:<\/strong>&nbsp;Yes, docker allows for containerized installs of everything. Yes, it\u2019s faster, yes, it makes more sense in an enterprise environment\u2026 this is a beginner\u2019s guide. Having a very easy backup script that allows copying &amp; pasting a qcow2 file when you break something means you\u2019ll actually&nbsp;<\/em><strong>use<\/strong><em>&nbsp;your backups rather than give up, which is important in the beginning. We will create segmented VMs for each of our purposes (identity\/email, android\/cloud services &amp; sync, home automation, etc.) and they will have programs &amp; services running in docker within them; often several. The backup solution will be backing up these VMs because it is dirt easy for a beginner vs.&nbsp;managing backing up all associated docker containers &amp; volumes. If you want to manage this, go set up Kubernetes at a mid-sized company for someone &amp; stop reading a newbie guide.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p>By running each set of services in its own VM, we isolate them from each other\u2014so if one service has an issue, it won\u2019t bring down the entire system.<\/p>\n\n\n\n<p><strong>One problem: I need these virtual machines to connect to the internet\u2026 and since they\u2019re virtual, they have no network interface card\u2026 so I can\u2019t plug them into my switch.<\/strong><\/p>\n\n\n\n<p>Since VMs don\u2019t come with physical network interface cards (NICs) like a regular server, we need to create a virtual network interface that allows them to connect to the network and access the internet. This virtual interface acts as a bridge between the VMs and your server\u2019s physical network connection.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Disable Cloud-Init\u2019s Network Configuration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=216\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=216\">edit source<\/a>]<\/h3>\n\n\n\n<p>Before changing the network configuration, you need to stop cloud-init from managing it.<\/p>\n\n\n\n<p>Create the file to disable cloud-init\u2019s network management by running the following command:&nbsp;<code>sudo nano \/etc\/cloud\/cloud.cfg.d\/99-disable-network-config.cfg<\/code>&nbsp;Add this to the file:&nbsp;<code>network: {config: disabled}<\/code>&nbsp;Save &amp; close the file by typing&nbsp;<code>Ctrl + X<\/code>&nbsp;and hitting&nbsp;<code>y<\/code>&nbsp;to save it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Backup the Current Netplan Configuration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=217\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=217\">edit source<\/a>]<\/h3>\n\n\n\n<p>Make a backup of your current Netplan configuration.<\/p>\n\n\n\n<p>Run the following command to back up the current&nbsp;<code>50-cloud-init.yaml<\/code>&nbsp;file:&nbsp;<code>sudo mv \/etc\/netplan\/50-cloud-init.yaml \/etc\/netplan\/50-cloud-init.yaml.bak<\/code><\/p>\n\n\n\n<p><code>.bak<\/code>&nbsp;makes sure that Netplan will not use it for creating a configuration.&nbsp;<code>.bak<\/code>&nbsp;also makes it easy to go \u201cback\u201d \u2013 you don\u2019t have to remember the filename or the location of the original file. You just copy the backup file to the same filename in the same directory without the suffix&nbsp;<code>.bak<\/code>, there it is.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Create a New Netplan Configuration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=218\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=218\">edit source<\/a>]<\/h3>\n\n\n\n<p>Since you disabled cloud-init, you can now modify the network configuration to create a bridge interface that your virtual machines can use.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Find the name of your ethernet interface (the one the CAT5 cable plugs into):<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">[louis@livingroombauer ~]$ ls \/sys\/class\/net\n   enp4s0  lo<\/pre>\n\n\n\n<p>In my personal computer,&nbsp;<code>enp4s0<\/code>&nbsp;is my network interface, and&nbsp;<code>lo<\/code>&nbsp;is the&nbsp;<strong>loopback<\/strong>&nbsp;interface.&nbsp;<strong>loopback<\/strong>&nbsp;allows the machine to talk to itself &#8211; other computers cannot contact this computer through the loopback interface. This is useful if there is a service we would like to run that we do not want to be accessible to other machines on the network.&nbsp;<code>enp4s0<\/code>&nbsp;is my ethernet port. On my&nbsp;<strong>server<\/strong>,&nbsp;<code>eno1<\/code>&nbsp;is my interface that the ethernet port plugs into, so I will use that below. When you see me using&nbsp;<code>eno1<\/code>&nbsp;as I set up my server, replace&nbsp;<code>eno1<\/code>&nbsp;with the actual name of your network interface.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create or edit the Netplan configuration file by running this command:sudo nano \/etc\/netplan\/01-netcfg.yaml<\/li>\n\n\n\n<li>Replace the content with the following configuration. I\u2019ve added a comment on each line so you know how many spaces there should be:network: # 0 spaces version: 2 # 4 spaces renderer: networkd # 4 spaces ethernets: # 4 spaces eno1: # 8 spaces dhcp4: no # 12 spaces bridges: # 4 spaces br0: # 8 spaces dhcp4: no # 12 spaces addresses: # 12 spaces &#8211; 192.168.5.2\/24 # 16 spaces nameservers: # 12 spaces addresses: # 16 spaces &#8211; 192.168.5.1 # 20 spaces routes: # 12 spaces &#8211; to: default # 16 spaces via: 192.168.5.1 # 18 spaces interfaces: # 12 spaces &#8211; eno1 # 16 spaces<\/li>\n\n\n\n<li>Once done, remember to change the permissions of your netplan file so netplan does not yell at you:sudo chmod 600 \/etc\/netplan\/01-netcfg.yaml<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Explanation of the Configuration:<\/strong>&nbsp;&#8211;&nbsp;<code>eno1<\/code>&nbsp;will be part of the bridge (<code>br0<\/code>), but will no longer have an IP address directly. &#8211;&nbsp;<code>br0<\/code>&nbsp;is the bridge interface that will be assigned the static IP&nbsp;<code>192.168.5.2<\/code>. &#8211; The&nbsp;<code>br0<\/code>&nbsp;interface will be configured with the same gateway and nameserver settings as before. The gateway is our pfSense router, which is what it connects to to get an IP address and connect to the internet (a \u201cgateway\u201d to the world), and the nameserver is also our router, which is what it connects to to translate things like google.com into&nbsp;<code>142.250.138.101<\/code>. &#8211;&nbsp;<code>br0<\/code>&nbsp;is a virtual interface WE are creating.&nbsp;<code>eno1<\/code>&nbsp;is an interface already present on this machine.&nbsp;<code>eno1<\/code>&nbsp;is the ethernet port on my computer, simply put.&nbsp;<strong>Your network interface card will most likely be called something else; this is ok! Use what your network interface is called as it will be different for all machines<\/strong><\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;You are probably used to old school configuration files where:&nbsp;<code>pasv_enable=YES<\/code>&nbsp;is the same as&nbsp;<code>pasv_enable=YES<\/code>&nbsp;That is not how a YAML do. A single space is all that stands between you having a working setup &amp; happiness, and total misery. YAML is sensitive to spaces; indentation errors matter, and can cause the config file to not work. Some text editors are helpful in editing yaml files so that it is easier to notice mistakes &amp; errors. Some are not.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Apply the New Configuration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=219\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=219\">edit source<\/a>]<\/h3>\n\n\n\n<p>Now that the configuration is ready, apply it.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Run the following command to apply the new Netplan configuration:sudo netplan apply<strong>NOTE:<\/strong>&nbsp;You may make an error because yaml files are evil; to make sure the configuration works, run&nbsp;<code>netplan try<\/code>&nbsp;before running&nbsp;<code>netplan apply<\/code>. While yoda had a point with the&nbsp;<em>\u201cdo or not do there is no try\u201d<\/em>, he never dealt with linux documentation.<\/li>\n\n\n\n<li>Verify that the bridge interface is up and has the correct configuration by running this command:ip addr show br0<\/li>\n\n\n\n<li>You should see that&nbsp;<code>br0<\/code>&nbsp;has the IP address&nbsp;<strong>192.168.5.2<\/strong>.<\/li>\n\n\n\n<li>Check the routing table to make sure that the default route is correctly set by running:ip route show<\/li>\n\n\n\n<li>Verify that the default route points to&nbsp;<strong>192.168.5.1<\/strong>.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5: Test Network Configuration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=220\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=220\">edit source<\/a>]<\/h3>\n\n\n\n<p>Verify that your server can still access the network after the changes.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Ping your router by running:ping 192.168.5.1<\/li>\n\n\n\n<li>Ping an external IP to make sure connectivity by running. This is Google\u2019s DNS server, which should be up all the time:ping 8.8.8.8<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 6: Add iptables rules for bridging[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=221\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=221\">edit source<\/a>]<\/h3>\n\n\n\n<p>For the bridge to work correctly, you need to allow traffic forwarding on the&nbsp;<code>br0<\/code>&nbsp;bridge interface. This requires creating iptables rules &amp; making them persistent across reboots. This is a very important detail, often&nbsp;<a href=\"https:\/\/www.tecmint.com\/create-network-bridge-in-ubuntu\/\">left out of guides on setting up bridge interfaces<\/a>. Skipping this part will result in a setup that doesn\u2019t work; you will be stuck in the hell of posting on GNU\/Linux forums where people with IQs of 180+ will tell you to&nbsp;<em>\u201cRTFM\u201d<\/em>, a man page, that is 2000000+ pages long.<\/p>\n\n\n\n<p>This is analogous to Derek Jeter telling you to&nbsp;<em>\u201cjust keep your eye on the ball.\u201d<\/em>&nbsp;right.<\/p>\n\n\n\n<p>You may wonder why that is the case. Setting up things with open source software is like MacBook board repair 12 years ago: it\u2019s a club &amp; you\u2019re not in it. Most teachers know their subject matter. As a result, they forget what it was like to try something for the first time.<\/p>\n\n\n\n<p>This is why I am building a machine from scratch as I do this. Telling you how I did it on my machine will never work. There will always be some small detail I subconsciously assume you will know; or perhaps a detail I forgot myself since some of these services I\u2019m showing you were set up in my closet ten years ago!<\/p>\n\n\n\n<p>By performing the tasks from what I have written, I am forced to provide you with instructions that&nbsp;<em><strong>actually work!<\/strong><\/em><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Run the following commands to add the iptables rules:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"> sudo iptables -I FORWARD 1 -i br0 -j ACCEPT\n sudo iptables -I FORWARD 1 -o br0 -j ACCEPT<\/pre>\n\n\n\n<p><strong>NOTE:<\/strong>&nbsp;These iptables rules let traffic go through the bridge interface so your virtual machines can work on your network. Without them, your virtual machines will not be able to connect to anything, and you won\u2019t be able to connect to them. If you see that your virtual machine received an IP address in virtual machine manager, but it can\u2019t connect to anything, you likely skipped this step. &gt; &gt;The order of rules in iptables matters. Inserting rules at the top (using the \u2018-I\u2019) puts them at the top. If traffic forwarding does not work as expected, check rules &amp; the order which you can do by running \u2018sudo iptables -L -v -n\u2019.<\/p>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Verify the iptables rules by running:sudo iptables -LYou should see the rules for accepting traffic on&nbsp;<code>br0<\/code>.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 7: Make iptables Rules Persistent[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=222\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=222\">edit source<\/a>]<\/h3>\n\n\n\n<p>To make sure the iptables rules are applied after a reboot, you need to save them and configure them to load automatically on startup.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Install the iptables-persistent package:sudo apt install iptables-persistent<\/li>\n\n\n\n<li>During installation, you\u2019ll be asked if you want to save the current iptables rules. Choose&nbsp;<strong>Yes<\/strong>.<\/li>\n\n\n\n<li>If you\u2019re not prompted, you can manually save the rules by running:sudo netfilter-persistent save<strong>NOTE:<\/strong>&nbsp;Installing&nbsp;<code>iptables-persistent<\/code>&nbsp;is what allows your iptables rules to stick after a reboot. This is a server &#8211; you\u2019re not going to turn this off very often. Nine months from now when you DO turn off this server, you\u2019re not going to remember a single damn character from this guide; much less that iptables rule above! Nor will you remember that that rule not being present is why none of your virtual machines work.<\/li>\n\n\n\n<li>Confirm the rules are saved by checking the file at&nbsp;<code>\/etc\/iptables\/rules.v4<\/code>.<\/li>\n<\/ol>\n\n\n\n<p>With these changes, your bridge interface will now correctly allow traffic to flow through the virtual machines. The iptables rules will persist across reboots, and your virtual machines will be able to grab IP addresses from the same network as your host machine.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Preparing Ubuntu Server for Virtual Machine Management[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=223\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=223\">edit source<\/a>]<\/h1>\n\n\n\n<p>Next, let\u2019s set up Ubuntu Server for use with virtual machines using&nbsp;<strong>Virtual Machine Manager<\/strong>&nbsp;(virt-manager). We\u2019ll cover everything from preparing the ISO file to configuring the virtual machine with a static IP address, including the installation of a lightweight GUI for easier management.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Prepare the Ubuntu Server ISO[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=224\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=224\">edit source<\/a>]<\/h2>\n\n\n\n<p>Before creating the virtual machine, you need to place the Ubuntu Server ISO file in the correct directory and set the proper permissions.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Place the ISO file you used to create your installable Ubuntu USB onto your server. You can do this by attaching a disk to it, using SSH FTP and a program like filezilla to transfer it over. Or, if you\u2019re an animal, you can download it again by going to ubuntu.com and downloading the LTS version of Ubuntu server again.<\/li>\n\n\n\n<li>Move the ISO file to&nbsp;<code>\/var\/lib\/libvirt\/images\/<\/code>, obviously changing the source location &amp; filename to whatever yours is. As long as the file ends up in&nbsp;<code>\/var\/lib\/libvirt\/images\/<\/code>&nbsp;we\u2019re good:sudo mv ~\/Downloads\/ubuntu-server.iso \/var\/lib\/libvirt\/images\/<\/li>\n\n\n\n<li>Change the ownership and group of the ISO file:sudo chown libvirt-qemu:libvirt \/var\/lib\/libvirt\/images\/ubuntu-server.iso<\/li>\n\n\n\n<li>Set the correct permissions:sudo chmod 0640 \/var\/lib\/libvirt\/images\/ubuntu-server.iso<\/li>\n\n\n\n<li>To apply these settings to all ISO files in the directory:sudo chown libvirt-qemu:libvirt \/var\/lib\/libvirt\/images\/*.iso sudo chmod 0640 \/var\/lib\/libvirt\/images\/*.iso<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note<\/strong>: These settings make sure that the&nbsp;<code>libvirt-qemu<\/code>&nbsp;user, which runs the QEMU processes, can read and write the file, while members of the&nbsp;<code>libvirt<\/code>&nbsp;group can read it. Other users will have no access, so&nbsp;<code>virsh<\/code>&nbsp;&amp; related tools can access the ISO files but others can\u2019t.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Update Your System[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=225\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=225\">edit source<\/a>]<\/h2>\n\n\n\n<p>Make sure your system is up to date:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update&nbsp;; sudo apt upgrade -y<\/pre>\n\n\n\n<p><em>Note:<\/em>&nbsp;Some GNU\/Linux distributions update during installation, but it\u2019s always good to check.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Install Openbox and Virtual Machine Manager[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=226\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=226\">edit source<\/a>]<\/h2>\n\n\n\n<p>We\u2019ll install a lightweight desktop environment (Openbox) and Virtual Machine Manager:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install --no-install-recommends xorg openbox xorg xinit virtualbox virtinst qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager<\/pre>\n\n\n\n<p>The&nbsp;<code>--no-install-recommends<\/code>&nbsp;flag makes sure only the core components are installed without any additional unnecessary packages.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Enable and Start Libvirt[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=227\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=227\">edit source<\/a>]<\/h2>\n\n\n\n<p>Enable libvirt to start on boot and start it immediately:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo systemctl enable libvirtd\nsudo systemctl start libvirtd<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Add Your User to Necessary Groups[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=228\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=228\">edit source<\/a>]<\/h2>\n\n\n\n<p>To allow your user to configure virtual machines, add yourself to the required groups:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo usermod -aG libvirt,kvm $USER<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;Adding your user to the&nbsp;<code>libvirt<\/code>&nbsp;&amp;&nbsp;<code>kvm<\/code>&nbsp;groups is useful so you do not have to become superuser\/sudo for&nbsp;<code>virt-manager<\/code>(virtual machine manager GUI) or<code>virsh<\/code>&nbsp;to work right. Log out &amp; log back in to make sure you\u2019re in the user group after doing this.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Start the GUI[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=229\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=229\">edit source<\/a>]<\/h2>\n\n\n\n<p>To start the graphical interface, use the following command:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">startx<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;We will be using the GUI for Virtual Machine Manager. Any time you are NOT using this, exit the GUI (right click the desktop &amp; log out), then type&nbsp;<code>exit<\/code>&nbsp;from the command line terminal so your machine is not logged in. Even if someone breaks into your house, they\u2019ll have physical access to your computer; but that doesn\u2019t mean they have easy access to your encrypted data.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">6.1(OPTIONAL): Remote Desktop Access with x11vnc and TigerVNC[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=230\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=230\">edit source<\/a>]<\/h4>\n\n\n\n<p>x11vnc is like teamviewer if teamviewer were open source and 50x slower. x11vnc allows you to connect to your server\u2019s GUI for remote access, as if you were right in front of the computer, without having to be in the room with your computer. Up until now, we have been SSHing into the machine in order to enter terminal commands, but normal SSH won\u2019t work if we want to use the graphical user interface, see a mouse cursor, etc.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;If you are ok with sitting in front of your server computer with a keyboard, mouse, &amp; monitor plugged into it when using virtual machine manager, this step is&nbsp;<em>unnecessary<\/em>&nbsp;and you can feel free to skip it.<\/p>\n<\/blockquote>\n\n\n\n<p>This will walk you through setting up remote desktop access to your Ubuntu Server using x11vnc and TigerVNC. I like using&nbsp;<strong>virtual machine manager<\/strong>&nbsp;GUI to install virtual machines on the main server. Since we keep going to the GUI to install virtual machines &amp; use&nbsp;<strong>virtual machine manager<\/strong>&nbsp;via the GUI, we\u2019re stuck sitting in front of the server, which sucks if it\u2019s in a closet or garage. Here\u2019s how you can connect to it to view what is on its screen from another computer.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">6.2 Installing x11vnc on Ubuntu Server[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=231\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=231\">edit source<\/a>]<\/h4>\n\n\n\n<p>To install x11vnc, run the following command in your terminal:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update &amp;&amp; sudo apt install x11vnc<\/pre>\n\n\n\n<p>This will install the x11vnc package and its dependencies on your server.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">6.3 Set a Password for VNC Authentication[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=232\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=232\">edit source<\/a>]<\/h4>\n\n\n\n<p>x11vnc uses a password for authentication, and you can set this password as follows:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">x11vnc -storepasswd<\/pre>\n\n\n\n<p>You will be prompted to enter a password. This password will be saved in the default location&nbsp;<code>~\/.vnc\/passwd<\/code>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">6.4 Set x11vnc to Listen on All Interfaces on Port 5920[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=233\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=233\">edit source<\/a>]<\/h4>\n\n\n\n<p>Open a terminal and run the following:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">x11vnc -rfbport 5920 -usepw -auth ~\/.Xauthority -display :0 -forever -norc -noxdamage -shared<\/pre>\n\n\n\n<p>Here is why this helps clients like Remmina connect:<\/p>\n\n\n\n<p><strong>1.&nbsp;<code>-rfbport 5920<\/code><\/strong><\/p>\n\n\n\n<p>This sets the&nbsp;<strong>port<\/strong>&nbsp;on which the VNC server will listen for connections. VNC defaults to port&nbsp;<code>5900<\/code>, but I like to use a non-standard one because I am strange.<\/p>\n\n\n\n<p><strong>2.&nbsp;<code>-usepw<\/code><\/strong><\/p>\n\n\n\n<p>This option enables&nbsp;<strong>password authentication<\/strong>&nbsp;for VNC clients. It requires you to set a password using&nbsp;<code>x11vnc -storepasswd<\/code>&nbsp;beforehand. Use this to set a VNC password.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Password authentication is standard for VNC clients like Remmina. Without this, some clients might reject the connection for security reasons. And it\u2019s just good practice.<\/li>\n<\/ul>\n\n\n\n<p><strong>3.&nbsp;<code>-auth ~\/.Xauthority<\/code><\/strong><\/p>\n\n\n\n<p>The&nbsp;<code>-auth<\/code>&nbsp;option tells&nbsp;<code>x11vnc<\/code>&nbsp;which&nbsp;<strong>authentication file<\/strong>&nbsp;to use to access your X session. The file path&nbsp;<code>\/run\/user\/$(id -u)\/gdm\/Xauthority<\/code>&nbsp;refers to authorization for the user running the current display session managed by GDM (your display manager). If you\u2019re using LightDM or another manager, the path might differ.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Why it helps<\/strong>: Instead of relying on&nbsp;<code>-auth guess<\/code>&nbsp;(which might not always find the right file), specifying the correct&nbsp;<code>Xauthority<\/code>&nbsp;file guarantees that&nbsp;<code>x11vnc<\/code>&nbsp;can properly access the graphical session. If&nbsp;<code>x11vnc<\/code>&nbsp;can\u2019t authenticate the display, no client can connect.<\/li>\n<\/ul>\n\n\n\n<p><strong>4.&nbsp;<code>-display :0<\/code><\/strong>&nbsp;This option specifies which&nbsp;<strong>X display<\/strong>&nbsp;to serve via VNC. The display&nbsp;<code>:0<\/code>&nbsp;is typically the primary display for your desktop session (the one you see on your monitor). It makes sure&nbsp;<code>x11vnc<\/code>&nbsp;is connecting to the right graphics session. If it were set to the wrong display, you\u2019d either get a black screen or your client wouldn\u2019t connect at all.<\/p>\n\n\n\n<p><strong>5.&nbsp;<code>-forever<\/code>&nbsp;<\/strong>Normally,&nbsp;<code>x11vnc<\/code>&nbsp;stops running after the client disconnects. The&nbsp;<code>-forever<\/code>&nbsp;flag keeps it running indefinitely. If you disconnect &amp; reconnect it would suck to have to log back in each time. Without this,&nbsp;<code>x11vnc<\/code>&nbsp;would stop after Remmina disconnects, and you\u2019d have to restart it manually for every new connection. I like stopping&nbsp;<code>x11vnc<\/code>&nbsp;once I am done manually.<\/p>\n\n\n\n<p><strong>6.&nbsp;<code>-norc<\/code>&nbsp;<\/strong>This option tells&nbsp;<code>x11vnc<\/code>&nbsp;<strong>not to load a configuration file<\/strong>&nbsp;(which might contain unwanted settings), we are only using the settings in this command line.<\/p>\n\n\n\n<p><strong>7.&nbsp;<code>-noxdamage<\/code><\/strong>&nbsp;The&nbsp;<code>Xdamage<\/code>&nbsp;extension tracks changes to the screen, but sometimes it can cause display corruption or update issues in VNC clients. The&nbsp;<code>-noxdamage<\/code>&nbsp;flag disables this extension to avoid those problems. Some VNC clients who shall not be named sometimes fk up refreshing the screen when properly when&nbsp;<code>Xdamage<\/code>&nbsp;is enabled. Disabling it keeps artifacts\/stuck screen issues.<\/p>\n\n\n\n<p><strong>8.&nbsp;<code>-shared<\/code><\/strong>&nbsp;This option allows&nbsp;<strong>multiple clients to connect simultaneously<\/strong>&nbsp;to the VNC server. If this option isn\u2019t set, only one client can connect at a time, and additional connection attempts (such as from Remmina) would fail. Enabling&nbsp;<code>-shared<\/code>&nbsp;makes sure that you can connect with multiple devices or clients without being disconnected when another connects.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">6.5 Installing TigerVNC Viewer on the Client[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=234\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=234\">edit source<\/a>]<\/h4>\n\n\n\n<p>To connect to the VNC server from a client machine, you need a VNC viewer. The following steps will install TigerVNC Viewer (also known as&nbsp;<code>vncviewer<\/code>) on the client (your GNU\/Linux computer you are reading this on):<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Update the package list and install TigerVNC Viewer:sudo apt update &amp;&amp; sudo apt install tigervnc-viewer -y<\/li>\n\n\n\n<li>Once installed, you can use&nbsp;<code>vncviewer<\/code>&nbsp;to connect to the server.<\/li>\n\n\n\n<li>If you use Windows or a Mac, you\u2019re on your own, my friend. Find a VNC client that doesn\u2019t suck.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">6.6 Connecting to the VNC Server[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=235\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=235\">edit source<\/a>]<\/h4>\n\n\n\n<p>Now that everything is set up, you can connect to your server.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>On your local machine, use the following command:vncviewer 192.168.5.2:5920 -SecurityTypes VncAuth<\/li>\n\n\n\n<li><em>Note<\/em>: Replace&nbsp;<code>192.168.5.2<\/code>&nbsp;with your server\u2019s actual IP address. In our case, we can also use the domain&nbsp;<code>happycloud.home.arpa<\/code>&nbsp;since we set up a static mapping earlier for our server in&nbsp;<strong>pfSense<\/strong>.<\/li>\n\n\n\n<li>When prompted, enter the VNC password you set earlier.<\/li>\n<\/ol>\n\n\n\n<p><strong>You should now have a remote desktop connection to your Ubuntu Server. Remember to start&nbsp;<code>x11vnc<\/code>&nbsp;after you have logged in &amp; typed&nbsp;<code>startx<\/code>&nbsp;to start Openbox so it works.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7: Using Openbox[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=236\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=236\">edit source<\/a>]<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_a05cc5c9.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>Once you\u2019ve installed Openbox and typed&nbsp;<code>startx<\/code>, Openbox starts:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Right-click on the desktop to open the application menu.<\/li>\n\n\n\n<li>Navigate to&nbsp;<strong>System &gt; Virtual Machine Manager<\/strong>; This is what we are going to be using to create virtual machines.<\/li>\n<\/ol>\n\n\n\n<p>At this point, we have our dependencies set up for virtual machine management, and bridge networking configured so that our virtual machines can go online. We\u2019re ready to set up our first virtual machine!<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Creating a Virtual Machine[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=237\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=237\">edit source<\/a>]<\/h1>\n\n\n\n<p>Our first virtual machine will be for&nbsp;<strong>mailcow<\/strong>&nbsp;and&nbsp;<strong>bitwarden<\/strong>. These provide the following:<\/p>\n\n\n\n<p><strong>Mailcow<\/strong>: &#8211; Self managed email server for sending &amp; receiving mail &#8211; Integrated spam management &amp; web interface &#8211; Calendar &amp; contacts syncing with mobile devices &#8211; A lovely,&nbsp;<em>\u201cjust works\u201d<\/em>&nbsp;mashup of &#8211; Postfix for sending mail &#8211; Dovecot for receiving mail &#8211; rspamd for killing spam &#8211; SoGo for webmail\/calendar\/contacts<\/p>\n\n\n\n<p><strong>Bitwarden<\/strong>: &#8211; Password management across devices, browsers, phones, computers, etc. &#8211; Alerts when your passwords have been found in a breach<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;These instructions will carry over into many other virtual machine installs we will be doing. I will ask you to refer back to this section. Often, the only thing you will be doing is changing the RAM amount and CPU cores allotted to the VM, and the IP address you choose as you install.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Options for Virtual Machine Creation[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=238\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=238\">edit source<\/a>]<\/h3>\n\n\n\n<p>When you start creating a new virtual machine, you\u2019ll see several options. We\u2019re going to use \u201clocal install media\u201d because we\u2019re working with the ISO image of the Ubuntu server we downloaded. But before getting into that, let me explain the \u201cimport existing disk image\u201d option, which is pretty cool&nbsp;\ud83d\ude42<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Import Existing Disk Image[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=239\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=239\">edit source<\/a>]<\/h4>\n\n\n\n<p>Imagine you\u2019ve got a bunch of old laptops lying around, each running different servers. Maybe you\u2019ve got a Dell Latitude D620 from 2006 or a&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=X86F1j5gCQs&amp;pp=ygUcZnJlZXBieCByb3NzbWFubmdyb3VwIGxlbm92bw%3D%3D\">piece of junk Lenovo with a dying northbridge<\/a>&nbsp;running your entire business phone system; not that I ever did that.<\/p>\n\n\n\n<p>But if you did, you could use a tool like&nbsp;<code>ddrescue<\/code>&nbsp;to make a disk image of each server. Then, you can import them into your virtual machine setup and keep them running without separate installations. It\u2019s a useful method of consolidating everything onto one machine until you have time to set things up properly!<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Local Install Media[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=240\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=240\">edit source<\/a>]<\/h4>\n\n\n\n<p>This option expects us to choose a disk image (whether for a CD-ROM or a USB stick) that we will use to make a fresh installation onto our computer. This option is for when we want to create our own virtual machine from scratch, and is what we are going to be using.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_a05cc5c9.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Setting up Virtual Machine Manager (virsh)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=241\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=241\">edit source<\/a>]<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_b51c10bd.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.0 Create new virtual machine[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=242\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=242\">edit source<\/a>]<\/h4>\n\n\n\n<p>In&nbsp;<strong>Virtual Machine Manager<\/strong>, click \u201cCreate a new virtual machine\u201d (usually the first icon on the toolbar or select&nbsp;<strong>File &gt; New Virtual Machine<\/strong>&nbsp;from the menu).<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_151745e3.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_9a251511.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_8bf9cc92.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Choose Installation Media[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=243\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=243\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Select&nbsp;<strong>\u201cLocal install media (ISO image or CDROM)\u201d<\/strong>&nbsp;and click&nbsp;<strong>Forward<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Browse<\/strong>&nbsp;to select your Ubuntu Server ISO.<\/li>\n\n\n\n<li>Choose the ISO file you prepared earlier (e.g.,&nbsp;<code>\/var\/lib\/libvirt\/images\/ubuntu-server.iso<\/code>) and click&nbsp;<strong>Forward<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.2 Choose Operating System Version[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=244\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=244\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Virtual Machine Manager<\/strong>&nbsp;may automatically detect the OS. If not, search for&nbsp;<code>ubuntu<\/code>&nbsp;and choose what is closest to your version. When in total doubt,&nbsp;<code>linux generic 2022<\/code>&nbsp;works. Click&nbsp;<strong>Forward<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.3 Configure Memory and CPU[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=245\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=245\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Allocate the resources for your VM:\n<ul class=\"wp-block-list\">\n<li><strong>Set RAM:<\/strong>&nbsp;(e.g., 4096 MB).<\/li>\n\n\n\n<li><strong>Set vCPUs:<\/strong>&nbsp;(e.g., 2 CPUs max for what we are doing here).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click&nbsp;<strong>Forward<\/strong>.<\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_52d81284.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.4 Configure Storage[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=246\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=246\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Select \u201cCreate a disk image for the virtual machine\u201d.<\/li>\n\n\n\n<li>Allocate an initial disk size that is whatever you think the maximum amount of storage you will need for email, contacts, and calendar is (e.g., 25 GB). You\u2019ll be able to resize this disk later, so make sure it\u2019s large enough for your initial installation but leave room for growth.<\/li>\n\n\n\n<li>Make sure the disk image format is&nbsp;<strong>QCOW2<\/strong>. This format supports resizing, and other cool features.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Forward<\/strong>.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;QCOW2 format has a lot of useful features. It supports snapshots, which we aren\u2019t using for our virtual machine backups, but it\u2019s nice to have if you choose to use that. More importantly, qcow2 supports \u201csparse file allocation.\u201d aka, it only uses physical disk space as it needs. Just because you say a virtual machine has access to 300 gigabytes, doesn\u2019t mean it creates an image that actually takes up 300 gigabytes.<\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_a84796b3.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.5 Set Up Networking with the Bridge Interface[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=247\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=247\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Choose&nbsp;<strong>\u201cBridge device\u201d<\/strong>&nbsp;under&nbsp;<strong>\u201cNetwork Selection\u201d<\/strong>.<\/li>\n\n\n\n<li>In the Device Name field, type&nbsp;<strong>br0<\/strong>&nbsp;(or whatever name you have given your bridge interface).<\/li>\n\n\n\n<li>This will allow the VM to grab a static IP from the same network as your host machine, making sure it acts like an independent hardware device.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cFinish\u201d<\/strong>.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;Choosing \u201cbridge device\u201d allows the virtual machine to appear like a unique hardware device on your network. That\u2019s the idea, for each of our virtual machines to seem like Pinnocchio; a real machine&nbsp;\ud83d\ude42<\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_bcbe1ce7.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.6 Finish &amp; Customize Before Installing[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=248\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=248\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Name your virtual machine (e.g.,&nbsp;<strong>\u201cmailserver\u201d<\/strong>), whatever you think makes sense for a contacts\/calendar\/mail machine.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cFinish\u201d<\/strong>.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_f5a5b1fa.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Install Ubuntu Server as a Virtual Machine[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=249\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=249\">edit source<\/a>]<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;I will be blazing through the installing of Ubuntu here, since we already installed Ubuntu server once onto this physical server.<\/p>\n<\/blockquote>\n\n\n\n<p><strong>Keep in mind the following:<\/strong><\/p>\n\n\n\n<p>We are NOT using LUKS encryption here. There is no need since the image is going to be stored on an encrypted partition.<\/p>\n\n\n\n<p>We are NOT using RAID \u2013 this is a disk image that is being stored on a RAID array, so we are not doing that.<\/p>\n\n\n\n<p>We are configuring networking the same as we did before, but we will be using a&nbsp;<em><strong>different<\/strong><\/em>&nbsp;IP address!<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;Setting a unique static IP address to each virtual machine is necessary. It\u2019s like having 5 businesses in the same building and expecting the postman to deliver laptops to the right address.. that\u2019s never a problem that plagued me in new york city.<\/p>\n\n\n\n<p>If something else is using that IP address, you cannot use it again. You don\u2019t want your packets ending up in Berwick Maine.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 Start the installation process in the virtual machine[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=250\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=250\">edit source<\/a>]<\/h4>\n\n\n\n<p>Choose your language and select&nbsp;<strong>\u201cTry or install Ubuntu Server\u201d<\/strong>.<\/p>\n\n\n\n<p>Follow the installation prompts.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_a561e59a.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 Configure Static IP Address[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=251\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=251\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When you reach the Network configuration screen, select the network interface that corresponds to your network interface.<\/li>\n\n\n\n<li>Choose the option&nbsp;<strong>\u201cConfigure network manually\u201d<\/strong>.<\/li>\n\n\n\n<li>Enter the following details:\n<ul class=\"wp-block-list\">\n<li>IP Address:&nbsp;<strong>192.168.5.3<\/strong><\/li>\n\n\n\n<li>Subnet:&nbsp;<strong>192.168.5.0\/24<\/strong><\/li>\n\n\n\n<li>Gateway:&nbsp;<strong>192.168.5.1<\/strong><\/li>\n\n\n\n<li>Nameserver:&nbsp;<strong>192.168.5.1<\/strong><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Make sure you enter all the details correctly to provide the virtual machine has the correct static IP configuration.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_cd2383aa.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_1d3ec660.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_e896bdf7.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_b1313746.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_664e174.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_9a7daf09.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_cd86d6ef.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_9b21c766.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 Partition the virtual \u201cdrive\u201d[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=252\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=252\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When you reach the Filesystem setup section, select&nbsp;<strong>\u201cUse an entire disk\u201d<\/strong>&nbsp;and then choose the disk you want to install Ubuntu Server on.<\/li>\n\n\n\n<li>Choose the option&nbsp;<strong>\u201cSet up this disk as an LVM group\u201d<\/strong>.<\/li>\n\n\n\n<li><strong>Important:<\/strong>&nbsp;At this stage, edit the partition sizes as Ubuntu\u2019s installer usually allocates 2 GB for boot which is ridiculous and even worse it only uses half the available space for your LVM &amp; root. The Ubuntu auto partitioner is horrible.<\/li>\n\n\n\n<li>Reduce the boot partition to 512 MB.<\/li>\n\n\n\n<li>Delete the old LVM &amp; root partition.<\/li>\n\n\n\n<li>Create a new LVM taking up the entire disk.<\/li>\n\n\n\n<li>Create a logical volume for the root filesystem, using all available space.<\/li>\n\n\n\n<li><strong>Do not encrypt the volume<\/strong>&nbsp;(it\u2019s unnecessary since the host drive is already encrypted, and it is not my intention for you to have these VMs running on other people\u2019s servers).<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_b4178b46.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_3d6c5298.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxckj_tmp_751040c0.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.4 Finalize installation &amp; do not install docker[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=253\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=253\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Set up your username and password.<\/li>\n\n\n\n<li><strong>Choose to install OpenSSH server.<\/strong><\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;<em>DO NOT CHOOSE TO INSTALL PACKAGES THROUGH THE PROMPTS AFTER THIS. THEY INSTALL VIA SNAP. DOCKER INSTALLED VIA SNAP IS CANCER. USING THE SNAP VERSION OF DOCKER WILL PROVIDE YOU WITH MANY AGGRAVATING HEADACHES. DON\u2019T DO IT. IGNORE ME NOW? SUFFER LATER!<\/em><\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li>After configuring the partition sizes, proceed with the installation process as usual, following the prompts to set up any additional software you want to install.<\/li>\n\n\n\n<li>Once the installation is complete, the system will automatically apply your network and partitioning settings.<\/li>\n\n\n\n<li>When prompted, remove the installation media (ISO) from the virtual machine settings.<\/li>\n\n\n\n<li>Restart the virtual machine.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Post-Installation Tasks[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=254\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=254\">edit source<\/a>]<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_ce86cb27.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_b291175e.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_b1c36016.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.1 Remove the CDROM[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=255\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=255\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>View \u2014&gt; details<\/strong>&nbsp;in virtual machine manager<\/li>\n\n\n\n<li>Go to&nbsp;<strong>SATA CDROM<\/strong>&nbsp;on the left side.<\/li>\n\n\n\n<li>Confirm that the&nbsp;<strong>source path<\/strong>&nbsp;is the Ubuntu ISO we downloaded for installing Ubuntu server on this virtual machine<\/li>\n\n\n\n<li>Click&nbsp;<strong>Remove<\/strong>&nbsp;in the lower right corner.<\/li>\n\n\n\n<li>UNCHECK&nbsp;<strong>Delete associated storage files<\/strong>&nbsp;\u2013 we will use this image again later!<\/li>\n\n\n\n<li>Click delete.<\/li>\n\n\n\n<li>You may have to turn off the VM to do this.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_fb68028c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_5504653d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_22a2f148.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_75aac442.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.2 Set Up Static IP Mapping in pfSense:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=256\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=256\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Log into your&nbsp;<strong>pfSense<\/strong>&nbsp;router.<\/li>\n\n\n\n<li>Go to&nbsp;<strong>Status &gt; Diagnostics &gt; ARP Table<\/strong>.<\/li>\n\n\n\n<li>Find the MAC address associated with your server\u2019s IP (e.g.,&nbsp;<strong>192.168.5.3<\/strong>), copy it.<\/li>\n\n\n\n<li>Go to&nbsp;<strong>Services &gt; DHCP Server<\/strong>.<\/li>\n\n\n\n<li>Scroll to the bottom and click&nbsp;<strong>\u201cAdd static mapping\u201d<\/strong>.<\/li>\n\n\n\n<li>Enter the MAC address and IP address of your server.<\/li>\n\n\n\n<li>Give it a descriptive name (e.g., \u201c<strong>mailserver static IP<\/strong>\u201d).<\/li>\n\n\n\n<li>Set the hostname to&nbsp;<code>mailserver<\/code><\/li>\n\n\n\n<li>Save and apply changes.<\/li>\n<\/ul>\n\n\n\n<p><em>Note:<\/em>&nbsp;This makes sure that this IP address is reserved for this computer to connect to, so that no other device can take it (unless they are spoofing MAC addresses, but if someone does, that\u2019s a different story).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3.3 Set up this virtual machine to start at boot:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=257\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=257\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">virsh autostart mailserver<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check that this is set up properly by typing&nbsp;<code>virsh dominfo mailserver<\/code>&nbsp;and seeing if the autostart line is set to enable.<\/li>\n\n\n\n<li>If you don\u2019t do this, you will realize once it is too late &amp; you\u2019ve left your house after you have rebooted your server (for whatever reason) that none of your services are working. This will suck.<\/li>\n\n\n\n<li>This command makes it so that the virtual machine starts each time we boot the computer.<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Calendar &amp; Contacts using SoGo within Mailcow[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=258\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=258\">edit source<\/a>]<\/h1>\n\n\n\n<p><strong>No more saving your contacts &amp; calendar to your Gmail account or iCloud \u2013 keep it all on your OWN server!<\/strong><\/p>\n\n\n\n<p>This guide will walk you through the process of installing and configuring&nbsp;<strong>mailcow<\/strong>&nbsp;on Ubuntu Server. Mailcow is an excellent solution for managing email, contacts, and calendars. It simplifies the setup of multiple mail-related services like&nbsp;<code>dovecot<\/code>,&nbsp;<code>rspamd<\/code>,&nbsp;<code>SpamAssassin<\/code>,&nbsp;<code>postfix<\/code>,&nbsp;<code>SoGo web interface<\/code>,&nbsp;<code>CalDAV<\/code>, making it easier&nbsp;<em>(I will never use the word&nbsp;<\/em>\u201ceasy\u201d<em>&nbsp;to describe self-managed email)<\/em>&nbsp;to maintain a secure, working mail server with calendar &amp; contacts sync. Mailcow\u2019s ease of use and strong community support make it perfect for self-hosting these services.<\/p>\n\n\n\n<p>You will come to appreciate mailcow\u2019s simplicity when we set up postfix manually for FreePBX &amp; ZFS filesystem alerts in later sections.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=259\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=259\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">For self-hosted calendar &amp; contacts:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=260\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=260\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em><a href=\"https:\/\/mailcow.email\/\">mailcow<\/a><\/em>&nbsp;on your server<\/li>\n\n\n\n<li><em><a href=\"https:\/\/www.davx5.com\/\">DAVx\u2075<\/a><\/em>&nbsp;on your phone<\/li>\n\n\n\n<li>A calendar app that works with&nbsp;<em><a href=\"https:\/\/www.davx5.com\/\">DAVx\u2075<\/a><\/em>&nbsp;such as&nbsp;<em><a href=\"https:\/\/f-droid.org\/en\/packages\/org.fossify.calendar\/\">Fossify Calendar<\/a><\/em><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">For self-hosted email:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=261\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=261\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A domain name pointed to your server\u2019s IP address that allows you to add TXT records, A records, etc.<\/li>\n\n\n\n<li>An SMTP relay provider such as&nbsp;<em><a href=\"https:\/\/postmarkapp.com\/blog\/smtp-relay-services\">postmark<\/a><\/em><\/li>\n\n\n\n<li>More patience than&nbsp;<em><a href=\"https:\/\/youtu.be\/DwQJT6Y7CyY?t=813\">Rachel Cox waiting to leave Wind Cave<\/a><\/em>&nbsp;or John McCain&nbsp;<em><a href=\"https:\/\/postmarkapp.com\/blog\/smtp-relay-services\">waiting to be rescued from prison in Vietnam<\/a><\/em><\/li>\n<\/ul>\n\n\n\n<p><strong>These instructions are going to serve as a base for each of our installations of a virtual machine that uses Ubuntu Server. I will ask you to refer back to these later.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Prepare Ubuntu Server[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=262\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=262\">edit source<\/a>]<\/h2>\n\n\n\n<p>You can either work through virtual machine manager since virtual machine manager provides you a console view of your virtual machine, or&nbsp;<code>ssh<\/code>&nbsp;in from another computer.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Update and upgrade your system[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=263\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=263\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update &amp;&amp; sudo apt upgrade -y\nsudo apt install curl git wget -y<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">1.2 Check for other Docker installations:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=264\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=264\">edit source<\/a>]<\/h4>\n\n\n\n<p>Run&nbsp;<code>docker --version<\/code>&nbsp;and see what is installed. Nothing should be installed yet since this is a fresh system. If something is installed, remove it.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Just incase you accidentally installed snap version of docker:\n\nsudo snap remove docker\n\nFor other versions of docker: \n\nsudo apt remove docker docker-engine docker.io containerd runc<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">1.3 Install Docker using official Docker script:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=265\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=265\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">curl -fsSL https:\/\/get.docker.com -o get-docker.sh\nsudo sh get-docker.sh<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;It\u2019s very important to use the official Docker installation and not the Snap version. The Snap version can cause issues due to its sandboxed nature, making it a mess for mailcow\u2019s requirements. Docker snap makes me sad, and it\u2019ll make you sad too if you try to make things work with it.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Editor&#8217;s Note:<\/strong>&nbsp;Louis uses the&nbsp;<em><a href=\"https:\/\/docs.docker.com\/engine\/install\/ubuntu\/#install-using-the-convenience-script\">convenience script<\/a><\/em>&nbsp;provided by Docker here. This method is&nbsp;<q>Only recommended for testing and development environments.<\/q>&nbsp;and may not update your dependencies correctly. For installation methods meant for a production environment see&nbsp;<a href=\"https:\/\/docs.docker.com\/engine\/install\/ubuntu\/#installation-methods\">the official Docker manual<\/a>.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">1.4 Install Docker Compose:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=266\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=266\">edit source<\/a>]<\/h4>\n\n\n\n<p>Ubuntu\u2019s&nbsp;<code>docker-compose-plugin<\/code>&nbsp;is safe to use, it is not snap cancer.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install docker-compose-plugin -y\nsudo systemctl enable --now docker<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">1.5 Verify the install[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=267\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=267\">edit source<\/a>]<\/h4>\n\n\n\n<p>Run&nbsp;<code>docker compose version<\/code>&nbsp;and make sure the version is 2.0 or higher. Run&nbsp;<code>docker --version<\/code>&nbsp;and make sure version is 24.0.0 or higher<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1.6 Set proper permissions:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=268\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=268\">edit source<\/a>]<\/h4>\n\n\n\n<p>Docker needs to be run as root for some operations, but you can add your user to the docker group to avoid using&nbsp;<code>sudo<\/code>&nbsp;all the time. To be clear, mailcow\u2019s own&nbsp;<a href=\"https:\/\/docs.mailcow.email\/getstarted\/install\/#check-selinux-specifics\">documentation<\/a>&nbsp;and&nbsp;<a href=\"https:\/\/community.mailcow.email\/d\/59-mailcow-containers-running-as-root\">community<\/a>&nbsp;suggest starting with root or&nbsp;<code>sudo<\/code>, and you should trust them more than me. To quote mailcow developers,&nbsp;<em>\u201cControlling the Docker daemon as non-root user does not give you additional security. The unprivileged user will spawn the containers as root likewise. The behaviour of the stack is identical.\u201d<\/em>&nbsp;Run this command to add your user:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo usermod -aG docker $USER<\/pre>\n\n\n\n<p>Log out and log back in, or run:&nbsp;<code>newgrp docker<\/code><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Install mailcow[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=269\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=269\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 Clone the mailcow repository[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=270\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=270\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/opt\nsudo git clone https:\/\/github.com\/mailcow\/mailcow-dockerized\ncd mailcow-dockerized<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 Set the correct permissions[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=271\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=271\">edit source<\/a>]<\/h4>\n\n\n\n<p>Run&nbsp;<code>umask 0022<\/code><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 Generate the configuration file[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=272\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=272\">edit source<\/a>]<\/h4>\n\n\n\n<p>Run&nbsp;<code>sudo .\/generate_config.sh<\/code><\/p>\n\n\n\n<p>When prompted, enter your Fully Qualified Domain Name (FQDN), such as&nbsp;<code>mail.yourdomain.com<\/code>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.4 Start mailcow services[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=273\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=273\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo docker compose pull\nsudo docker compose up -d<\/pre>\n\n\n\n<p>The&nbsp;<code>-d<\/code>&nbsp;option runs mailcow in detached mode so it continues running in the background.<\/p>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Verify the installation:<\/strong>&nbsp;Run&nbsp;<code>sudo docker ps<\/code>&nbsp;You should see a list of containers associated with mailcow running.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Access and Configure mailcow[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=274\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=274\">edit source<\/a>]<\/h2>\n\n\n\n<p>Firstly, my screenshots from this guide were missing the top bar \u2013 my apologies. Refer to this below to see what was cut off, and hopefully where my mouse is clicking in both the rest of the screenshots &amp; the video will make sense:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_c552f8ef.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_2c7243ee.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.1 Access the web interface[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=275\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=275\">edit source<\/a>]<\/h4>\n\n\n\n<p>Open a browser and navigate to&nbsp;<code><a href=\"https:\/\/mailserver.home.arpa\/\">https:\/\/mailserver.home.arpa<\/a><\/code>, replacing&nbsp;<code>your-mailcow-domain<\/code>&nbsp;with the hostname you set up when installing Ubuntu and making a static mapping. For example, with&nbsp;<strong>pfSense<\/strong>\u2019s default domain&nbsp;<em>home.arpa<\/em>, if the hostname is&nbsp;<em>mailserver<\/em>, you can access it at&nbsp;<code><a href=\"https:\/\/mailserver.home.arpa\/\">https:\/\/mailserver.home.arpa<\/a><\/code>. If unsure, use the IP address. If the IP is&nbsp;<code>192.168.5.3<\/code>, it would be&nbsp;<code><a href=\"https:\/\/192.168.5.3\/\">https:\/\/192.168.5.3\/<\/a><\/code>. Ignore the warning about self-signed certificates since this is a new installation.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3.2 Log in with default credentials[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=276\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=276\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Username:<\/strong>&nbsp;admin<\/li>\n\n\n\n<li><strong>Password:<\/strong>&nbsp;moohoo<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_aa2eac37.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_40fcec0b.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_4c65a41d.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.3 Change the administrative password[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=277\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=277\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click on&nbsp;<strong>System \u2192 Configuration<\/strong>&nbsp;in the top menu.<\/li>\n\n\n\n<li>Click on&nbsp;<strong>Access \u2192 Administrators<\/strong>.<\/li>\n\n\n\n<li>Find the admin account and click the edit (pencil) icon.<\/li>\n\n\n\n<li>Enter a new, strong password.<\/li>\n\n\n\n<li>Click \u201cSave changes\u201d.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_4255fdcb.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_a4d4f170.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.4 Add a domain[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=278\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=278\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Email \u2192 Configuration<\/strong>&nbsp;on the top menu.<\/li>\n\n\n\n<li>In the&nbsp;<strong>Domains<\/strong>&nbsp;tab, click&nbsp;<strong>Add domain<\/strong>.<\/li>\n\n\n\n<li>Enter your domain name (e.g., yourdomain.com).<\/li>\n\n\n\n<li>Set any desired options (quota, aliases, etc.).<\/li>\n\n\n\n<li>Click&nbsp;<strong>Add domain<\/strong>&nbsp;(for example,&nbsp;<code>louishomeserver.chickenkiller.com<\/code>).<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_40fc5c1d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_316dff73_2.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_f296577e.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_316dff73.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.5 Add an email account[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=279\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=279\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Email \u2192 Configuration \u2192 Mailboxes<\/strong>.<\/li>\n\n\n\n<li>In the&nbsp;<strong>Mailboxes<\/strong>&nbsp;tab, click&nbsp;<strong>Add mailbox<\/strong>.\n<ul class=\"wp-block-list\">\n<li>Enter the username (the part before @ in the email address).<\/li>\n\n\n\n<li>Choose the domain name (e.g.,&nbsp;louis@yourdomain.com).<\/li>\n\n\n\n<li>Set a password for the mailbox.<\/li>\n\n\n\n<li>Make sure to check&nbsp;<strong>Grant direct login access to SOGo<\/strong>\n<ul class=\"wp-block-list\">\n<li>This is what we use for webmail, calendar &amp; contacts<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click&nbsp;<strong>Add&nbsp;<\/strong>to add your mailbox.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_f3c558c8.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_c65c7b62.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_49a98cdf.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Accessing Calendar\/Contacts Services[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=280\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=280\">edit source<\/a>]<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to&nbsp;<code><a href=\"https:\/\/mailserver.home.arpa\/\">https:\/\/mailserver.home.arpa<\/a><\/code>, or in this case,&nbsp;<code><a href=\"https:\/\/192.168.5.3\/\">https:\/\/192.168.5.3\/<\/a><\/code>&nbsp;&#8211; this was the IP address &amp; hostname I suggested utilizing for this machine.<\/li>\n\n\n\n<li>Log in with your credentials.<\/li>\n\n\n\n<li>Click on \u201cApps\u201d in the top right corner.<\/li>\n\n\n\n<li>Select&nbsp;<strong>SOGo<\/strong>&nbsp;to access webmail, calendar, and contacts.<\/li>\n\n\n\n<li>Alternatively, go directly to webmail by visiting&nbsp;<code><a href=\"https:\/\/192.168.5.3\/SoGo\">https:\/\/192.168.5.3\/SoGo<\/a><\/code>. This can be faster, but the standard login section offers important spam control options so I suggest browsing around there first.&nbsp;<strong>SoGo<\/strong>&nbsp;is the web interface similar to&nbsp;<code>gmail.com<\/code><\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;When logging in, make sure to use your full email address. This is necessary because mailcow supports multiple domains, so the full email address is required to identify the correct account.<\/p>\n<\/blockquote>\n\n\n\n<p>You can also set up your email client or mobile device using the configuration details provided in the mailcow interface.<\/p>\n\n\n\n<p>You\u2019ve now successfully set up mailcow on your Ubuntu Server. This is the base of a great self-hosted solution for email, calendars, and contacts.<\/p>\n\n\n\n<p>Right now, we are not setting up email but focusing on calendar and contacts. For mobile access and syncing, we\u2019re going to set up&nbsp;<strong>DAVx\u2075<\/strong>&nbsp;on an Android device and configuring&nbsp;<strong>OpenVPN<\/strong>&nbsp;for secure remote access to your server. This will let you automatically sync calendar &amp; contacts from anywhere, for multiple calendars and multiple devices!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Sync Android with mailcow using DAVx\u2075[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=281\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=281\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">5.1 Installing DAVx\u2075 on an Android Phone[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=282\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=282\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the F-Droid store on your Android phone. If not installed, download it from&nbsp;<a href=\"https:\/\/f-droid.org\/\">https:\/\/f-droid.org\/<\/a>.<\/li>\n\n\n\n<li>In F-Droid, search for&nbsp;<strong>\u201cDAVx\u2075\u201d<\/strong>.<\/li>\n\n\n\n<li>Locate DAVx\u2075 in the results and tap on it.<\/li>\n\n\n\n<li>Tap the \u201cInstall\u201d button to download and install .<\/li>\n\n\n\n<li>Once installed, open&nbsp;<strong>DAVx\u2075<\/strong>.<\/li>\n\n\n\n<li>Grant all requested permissions when prompted. These typically include:\n<ul class=\"wp-block-list\">\n<li>Access to contacts<\/li>\n\n\n\n<li>Access to calendars<\/li>\n\n\n\n<li>Access to storage<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>You may see a donation request screen. While appreciated by developers, you can skip this for now. But they\u2019re nice people, so think about giving them some money.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">5.2. Installing Fossify\u2019s Calendar App on Android Using F-Droid Store[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=283\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=283\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the F-Droid store on your Android phone.<\/li>\n\n\n\n<li>In the search bar, type&nbsp;<strong>\u201cCalendar\u201d<\/strong>&nbsp;and find the one made by&nbsp;<strong>fossify<\/strong>. You have to click the app sometimes to figure out who made it. It\u2019s worth it. Their app is the only one that works properly.<\/li>\n\n\n\n<li>Press the \u201cInstall\u201d button to download and install the app.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;Fossify Calendar is a fork of Simple Mobile Tools\u2019 calendar app, maintained by developers who prioritize privacy and open-source principles. Simple mobile tools\u2019 app was&nbsp;<a href=\"https:\/\/www.reddit.com\/r\/SimpleMobileTools\/comments\/187w64x\/simple_mobile_tools_bought_by_zipoapps\/\">bought by a cancerous spyware company<\/a>. IF YOU WERE USING OLD SIMPLE MOBILE TOOLS APPS \u2013 UNINSTALL THEM OR DO NOT ALLOW THEM TO AUTO UPDATE AGAIN, EVER.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">5.3. Make Sure Android Phone\u2019s OpenVPN Connection is Still Connected[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=284\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=284\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Locate the OpenVPN Connect app on your Android phone.<\/li>\n\n\n\n<li>Open the app and check the connection status.<\/li>\n\n\n\n<li>If not connected, tap on the profile you created earlier (e.g., \u201cHome VPN\u201d).<\/li>\n\n\n\n<li>Tap the&nbsp;<strong>\u201cConnect\u201d<\/strong>&nbsp;button.<\/li>\n\n\n\n<li>Wait for the connection to establish. You should see a \u201cConnected\u201d status.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Important:<\/strong>&nbsp;Make sure you\u2019re connected to your home network via OpenVPN before attempting to sync your contacts and calendar. If you\u2019re not, it won\u2019t find your server, since we haven\u2019t forwarded any ports, and you are using local IP\/hostnames to connect to it. Your router knows who&nbsp;<code>mailserver.home.arpa<\/code>&nbsp;is, your router knows who&nbsp;<code>192.168.5.3<\/code>&nbsp;is. To the outside world, this means nothing\u2026 and further, you\u2019re not open to the outside world anyway.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Think of it like the difference between saying \u201cI want to find Sabrina Carpenter\u201d to a hotel bellhop, vs.&nbsp;\u201cI want to find my girlfriend.\u201d Girlfriend only means something in reference to you.&nbsp;<code>Mailserver.home.arpa<\/code>&nbsp;only means something to you. The rest of the world has no idea who the fk that is.<\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106170755552.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlcsnap-2024-11-06-15h57m41s864.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlcsnap-2024-11-06-16h00m43s034.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241107032249683.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlcsnap-2024-11-06-16h00m46s981.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlcsnap-2024-11-06-16h00m51s682.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlcsnap-2024-11-06-16h00m57s170.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlcsnap-2024-11-06-16h01m09s607.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlcsnap-2024-11-06-16h01m17s742.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlcsnap-2024-11-06-16h01m35s918.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlcsnap-2024-11-06-16h02m15s625.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/index.php?title=Special:Upload&amp;wpDestFile=Vlcsnap-2024-11-06-16h02m40s141.png\">File:Vlcsnap-2024-11-06-16h02m40s141.png<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlcsnap-2024-11-06-16h02m52s410.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlcsnap-2024-11-06-16h03m03s451.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlcsnap-2024-11-06-16h04m37s060.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlcsnap-2024-11-06-16h05m02s910.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.4 Adding Mailcow acct to your phone in DAVx\u2075[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=285\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=285\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the&nbsp;<strong>DAVx\u2075<\/strong>&nbsp;app on your Android phone.<\/li>\n\n\n\n<li>Tap on&nbsp;<strong>Add account<\/strong>&nbsp;to set up a new connection. \u2295<\/li>\n\n\n\n<li>Choose \u201cLogin with URL and username\u201d.<\/li>\n\n\n\n<li>In the&nbsp;<strong>Base URL<\/strong>&nbsp;field, enter one of the following:<ul><li>Your server\u2019s local IP address (e.g.,&nbsp;<code><a href=\"https:\/\/192.168.5.3\/\">https:\/\/192.168.5.3<\/a><\/code>) or hostname (<code><a href=\"https:\/\/mailserver.home.arpa\/\">https:\/\/mailserver.home.arpa<\/a><\/code>)<\/li><\/ul><em>Note:<\/em>&nbsp;Use&nbsp;<code>https:\/\/<\/code>&nbsp;at the beginning of the URL for a secure connection. If it bitches at you, use&nbsp;<code>http:\/\/<\/code>&nbsp;&#8211; we\u2019re connecting to this via OpenVPN which provides incredibly secure encryption anyway.<\/li>\n\n\n\n<li>Enter your login credentials:\n<ul class=\"wp-block-list\">\n<li><strong>Username:<\/strong>&nbsp;Your full email address (e.g.,&nbsp;<code>user@yourdomain.com<\/code>)<\/li>\n\n\n\n<li><strong>Password:<\/strong>&nbsp;Your mailcow account password<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Tap&nbsp;<strong>Login<\/strong>&nbsp;or&nbsp;<strong>Next<\/strong>&nbsp;to proceed.<\/li>\n\n\n\n<li>If you see a certificate warning (due to a self-signed certificate), hit&nbsp;<strong>ACCEPT&nbsp;<\/strong>, this is your server. If you misfollowed something here so bad that you even have the ability to connect to someone else\u2019s server right now, you amaze me more than the&nbsp;<a href=\"https:\/\/expandingdan.substack.com\/p\/steely-dan-second-arrangement-erased-interview\">assistant engineer on the set of Gaucho<\/a>.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;Self-signed certificates are common &amp; normal when setting up a home self managed server. They are not normal on the regular internet.<\/p>\n\n\n\n<p>The entire point of a certificate is that a trusted certificate authority has deemed them to be them. When you go to amazon.com, someone authoritative is vouching that they are actually amazon, so some scammer can\u2019t pretend to be amazon.com tomorrow.<\/p>\n\n\n\n<p>For that authority to be able to vouch for amazon, they have to be able to&nbsp;<strong>ACCESS<\/strong>&nbsp;amazon.<\/p>\n\n\n\n<p>We aren\u2019t letting anyone access our server; and that\u2019s the point. It\u2019s only open via VPN &#8211; therefore, we can\u2019t get a real certificate. You could open the port temporarily, and then close it right after you get the certificate, but that just feels dirty.<\/p>\n\n\n\n<p>It\u2019s fine to accept this warning for your OWN server; but don\u2019t let this fly when you\u2019re putting your credit card details or bank password into someone else\u2019s website.<\/p>\n<\/blockquote>\n\n\n\n<ol start=\"8\" class=\"wp-block-list\">\n<li>When prompted for an account name, use your email address.<\/li>\n\n\n\n<li>On the next screen, you\u2019ll see options for syncing different data types:\n<ul class=\"wp-block-list\">\n<li><strong>For Contacts:<\/strong>&nbsp;Enable \u201cCardDAV\u201d sync<\/li>\n\n\n\n<li><strong>For Calendar:<\/strong>&nbsp;Enable \u201cCalDAV\u201d sync<\/li>\n\n\n\n<li><strong>For Tasks (optional):<\/strong>&nbsp;Enable if you plan to use this feature, I don\u2019t though.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Tap \u201cCreate account\u201d or \u201cFinish\u201d to complete the setup.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106163120676.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106163401141.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.5 Adjusting Sync Settings[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=286\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=286\">edit source<\/a>]<\/h4>\n\n\n\n<p>After setting up your account, adjust the sync settings so you actually enjoy using this over Google\/iCloud. The default sync interval is every 4 hours, which is horrible.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the DAVx\u2075 app, find and tap on the account you just created.<\/li>\n\n\n\n<li>Look for sync settings, which will be in the settings, that you get to by clicking on the gear icon at the top of the application.<\/li>\n\n\n\n<li>Set up the sync intervals:\n<ul class=\"wp-block-list\">\n<li><strong>For server changes:<\/strong>&nbsp;Set to every 15 minutes (this is usually the minimum allowed interval)<\/li>\n\n\n\n<li><strong>For local changes:<\/strong>&nbsp;Set to immediate.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Tap on each sync type (e.g.,&nbsp;<strong>\u201cContacts\u201d<\/strong>&nbsp;or&nbsp;<strong>\u201cCardDAV\u201d<\/strong>).<\/li>\n\n\n\n<li>Look for sync interval settings within each category.<\/li>\n\n\n\n<li>Set server sync to 15 minutes and local changes to immediate for each.<\/li>\n<\/ol>\n\n\n\n<p><strong>Important Notes:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The exact menu layouts and option names may vary slightly depending on your&nbsp;<code>DAVx\u2075<\/code>&nbsp;version.<\/li>\n\n\n\n<li>Remember that for the 15-minute sync interval to work, make sure that&nbsp;<code>DAVx\u2075<\/code>&nbsp;is exempted from battery optimization settings on your Android device. Android batteries are glued into the phone and most phones don\u2019t let you limit charging to 80-90%, meaning the phone you\u2019re using right now\u2019s battery probably sucks and dies all the time anyway, might as well have up-to-date syncing on your contacts &amp; calendar.<\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106163429362.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106163518587.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106163545562.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106163610419.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106163632504.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106163645629.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106163709224.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106163812905.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106163835127.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106163941177.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106164009686.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106164255822.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106164453410.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Managing Contacts with Mailcow &amp; Android[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=287\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=287\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">6.1 Finding Your New Mailcow Contacts Account in Android[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=288\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=288\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the Contacts app on your Android phone.<\/li>\n\n\n\n<li>Tap on the menu icon (usually three lines or dots) to open settings.<\/li>\n\n\n\n<li>Go to&nbsp;<strong>Settings<\/strong>.<\/li>\n\n\n\n<li>Go to&nbsp;<strong>Accounts<\/strong>.<\/li>\n\n\n\n<li>Tap&nbsp;<strong>Add Account<\/strong>.<\/li>\n\n\n\n<li>Tap&nbsp;<strong>DAVx5 address book<\/strong>.<\/li>\n\n\n\n<li>Enter&nbsp;<strong>DAVx5<\/strong>&nbsp;app as it opens automatically, click checkbox.<\/li>\n\n\n\n<li>Once in the app, make sure your accounts are all selected &amp; checked.<\/li>\n\n\n\n<li>Return to the Android contacts app.<\/li>\n\n\n\n<li>Go to&nbsp;<strong>Settings \u2014&gt; Accounts<\/strong>&nbsp;again.<\/li>\n\n\n\n<li>Do you see the green DAVx\u2075 icon &amp; your account from Mailcow there? If so, great!<\/li>\n\n\n\n<li>Go back to&nbsp;<strong>Settings<\/strong>&nbsp;in the contacts app.<\/li>\n\n\n\n<li>Set up the&nbsp;<strong>default account for new contacts<\/strong>&nbsp;and the&nbsp;<strong>contacts to display<\/strong>&nbsp;so that your phone stores your contacts on your new Mailcow server to the account you created, and shows you contacts from your new server.<\/li>\n\n\n\n<li>Make sure this account is checked or toggled on to display its contacts.<\/li>\n\n\n\n<li><strong>MAKE SURE YOU KNOW WHAT CONTACTS YOU ARE VIEWING &amp; WHERE THEY ARE BEING SAVED EARLY ON SO YOU DO NOT SCREW YOURSELF LATER! ON MY SETUP I EXPORT ALL OF MY CONTACTS TO A FILE, IMPORT THEM TO MAILCOW, AND AVOID USING THE PHONE FOR CONTACTS EVER. MORE PLACES YOU STORE CONTACTS = MORE CHANCES YOU SAVE TO THE WRONG PLACE &amp; SCREW YOURSELF LATER!<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106164523457.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_1f446aa8.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_26bc974a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_e1f61714.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_f38b22b5.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlcsnap-2024-11-06-16h05m02s910.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106164958898.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106165036936.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106165048430.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">6.2 Adding a Contact in Mailcow and Verifying on Android[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=289\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=289\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the Mailcow SoGo web interface located at&nbsp;<code><a href=\"https:\/\/192.168.5.3\/SOGo\/\">https:\/\/192.168.5.3\/SOGo\/<\/a><\/code>, after logging in, find the option to add a new contact.<\/li>\n\n\n\n<li>Create a test contact with a unique name (e.g., \u201cTest Mailcow Sync\u201d).<\/li>\n\n\n\n<li>Save the new contact.<\/li>\n\n\n\n<li>On your Android phone, open the DAVx\u2075 app and hit refresh.<\/li>\n\n\n\n<li>This will sync with Mailcow every 15 minutes, but if waiting 15 minutes.<\/li>\n\n\n\n<li>Yeah, I know, I know, Google &amp; iCloud have push\u2026 This is open source. We make sacrifices.<\/li>\n\n\n\n<li>When you add a contact on your PHONE, it will show up on the mailcow server in SOGo immediately. But the other way around takes 15 minutes.<\/li>\n\n\n\n<li>Open your Android Contacts app.<\/li>\n\n\n\n<li>Browse to the address book we just added. Or, do what I suggested above and stop using your device contacts list to begin with!<\/li>\n\n\n\n<li>Search for the unique name you gave the test contact.<\/li>\n\n\n\n<li>The contact should appear in your list, confirming that syncing from Mailcow to Android is working.<\/li>\n\n\n\n<li>Make sure this works both ways. Do not trust it until you test it. The worst thing in the world is losing a contact you thought you added. Ruby Lewis from Cirque Du Soleil could decide she wants to go out with you tomorrow\u2014do you really want to lose her number because you messed up configuring&nbsp;<code>DAVx\u2075<\/code>? I didn\u2019t think so. It\u2019s too easy to mess up this section not to double-check.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>Trivia: I quit Avatar Studios in 2008, after working there for a year as an intern, then junior technician in the tech room. I made $7.50\/hr. Had I stayed there another 8 years, I wouldn\u2019t have started a business, a YouTube channel, or made more than $15\/hr; the other technician who had a master\u2019s degree &amp; was 13 years my senior made $15. However, I would\u2019ve gotten to say \u201chi\u201d to Ruby Lewis in person. Would it have been worth it to not quit to meet my celebrity crush? Absolutely.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p><strong>Important Notes:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Make sure your OpenVPN connection is active if you\u2019re not on your home network or this will not work. We intentionally set this server up to have no contact with the outside world with regards to contacts &amp; calendar syncing, so your phone must be connected to your home network via VPN for this to work.<\/li>\n\n\n\n<li><code>DAVx\u2075<\/code>&nbsp;typically syncs every 15 minutes, but you can force an immediate sync in the&nbsp;<code>DAVx\u2075<\/code>&nbsp;app.<\/li>\n\n\n\n<li>If contacts don\u2019t appear immediately, wait a few minutes or try forcing a sync in both&nbsp;<code>DAVx\u2075<\/code>&nbsp;and your Contacts app.<\/li>\n\n\n\n<li>Remember to choose to save contacts in your Mailcow-linked address book to make sure they sync properly.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106170046456.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106170349909.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106170237454.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106170546706.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">6.3 Exporting Contacts from Your Old Address Book[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=290\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=290\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In your&nbsp;<strong>Android Contacts app<\/strong>, go to&nbsp;<strong>Settings<\/strong>.<\/li>\n\n\n\n<li>Look for an option&nbsp;<strong>\u201cExport\u201d<\/strong>. Contacts app may be different from phone to phone, old version to new version, etc.<\/li>\n\n\n\n<li>Choose the account you want to export from (likely your old Google account or phone storage).<\/li>\n\n\n\n<li>Select&nbsp;<strong>Export to .vcf file<\/strong>.<\/li>\n\n\n\n<li>Choose a location to save the file, such as your phone\u2019s Downloads folder.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106170604109.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106170623962.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106170635966.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106170651317.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106170701373.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106171303341.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106171535285.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106171556372.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106171747070.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106172157386.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106173758592.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106174328393.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">6.4 Importing Contacts into Your New Mailcow Address Book[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=291\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=291\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the contacts app, click the three horizontal bars at the top you usually click before going to settings.<\/li>\n\n\n\n<li>Tap on your Mailcow account.<\/li>\n\n\n\n<li>Confirm that it only has the one contact that we added.<\/li>\n\n\n\n<li>Go back to the three-bar menu we were at before tapping the Mailcow account and tap settings.<\/li>\n\n\n\n<li>Find the option to \u201cImport contacts\u201d, usually called&nbsp;<strong>import.<\/strong><\/li>\n\n\n\n<li>Select the&nbsp;<code>.vcf<\/code>&nbsp;file you exported earlier.<\/li>\n\n\n\n<li>Choose \u201cDAVx\u2075 personal address book\u201d or your Mailcow-linked address book as the destination.<\/li>\n\n\n\n<li>Confirm the import. This process may take a few minutes depending on the number of contacts.<\/li>\n\n\n\n<li>Once it is done, customize your view by clicking \u201ccontacts to display\u201d in your settings. Turn off EVERYTHING besides the DAVx\u2075 Mailcow address book.<\/li>\n\n\n\n<li>Go back to the three-bar menu.<\/li>\n\n\n\n<li>Click onto your DAVx\u2075 Mailcow address book. Do you see your contacts? It worked.&nbsp;\ud83d\ude42<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_c7099f8b.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">6.5 Verifying Contacts in Mailcow Web Interface[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=292\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=292\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>On your computer, open a web browser and navigate to your Mailcow server\u2019s address.<\/li>\n\n\n\n<li>Log in with your Mailcow credentials. Go to the webmail app, the SOGo thing.<\/li>\n\n\n\n<li>Look for the \u201cContacts\u201d or \u201cAddress Book\u201d section.<\/li>\n\n\n\n<li>You should see the contacts you just imported listed here. \ud83d\ude00<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7: Setting Up and Using Your Mailcow Calendar[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=293\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=293\">edit source<\/a>]<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106175124281.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106175231132.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106175249692.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106175259734.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106175311876.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106175346849.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">7.1. Configuring Fossify Calendar App with DAVx\u2075-synced Mailcow Calendar[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=294\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=294\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the Fossify Calendar app on your Android phone.<\/li>\n\n\n\n<li>Tap the menu icon (usually three lines or dots) and select&nbsp;<code>Settings<\/code>.<\/li>\n\n\n\n<li>Check the box next to&nbsp;<strong>caldav sync<\/strong>.<\/li>\n\n\n\n<li>Tap&nbsp;<strong>Manage synced calendars<\/strong>.<\/li>\n\n\n\n<li>You should see a list of available calendars. Find the one associated with your Mailcow account and look for something with a familiar name to what you set up before.<\/li>\n\n\n\n<li>Make sure this calendar is checked or toggled on to display its events.<\/li>\n\n\n\n<li>If you don\u2019t see your Mailcow calendar, go back to the&nbsp;<code>DAVx\u2075<\/code>&nbsp;app, find your account, and make sure calendar sync is enabled.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106175409676.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106175424361.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106175544267.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106175452608.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_717bf114.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">7.2 Adding Events in Android Calendar App and Verifying in Mailcow[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=295\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=295\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the Fossify Calendar app, tap the \u201c+\u201d or&nbsp;<strong>Add event<\/strong>&nbsp;button.<\/li>\n\n\n\n<li>Enter event details:\n<ul class=\"wp-block-list\">\n<li><strong>Title<\/strong>: Give it a unique name (e.g., \u201cTest Android to Mailcow Sync\u201d)<\/li>\n\n\n\n<li><strong>Date and time<\/strong><\/li>\n\n\n\n<li>Any other details you want to add<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Important<\/strong>: Make sure you select your Mailcow calendar as the destination calendar (not \u201cStore locally only\u201d). THIS IS VERY EASY TO MESS UP. PAY ATTENTION.<\/p>\n<\/blockquote>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Save the event.<\/li>\n\n\n\n<li>Open a web browser and log into your Mailcow web interface.<\/li>\n\n\n\n<li>Navigate to the calendar section.<\/li>\n\n\n\n<li>You should see the event you just created appear in your Mailcow calendar. If it does not, you probably forgot to configure&nbsp;<code>DAVx\u2075<\/code>&nbsp;properly so that it syncs on local changes immediately. Or you\u2019re not on the VPN. Or you just messed up the configuration; do not pass go &amp; do not collect $200.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_7b768f4d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_58d82fba.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdhn_tmp_d4b8aa27.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106180513082.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106180657084.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241106180744849.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">7.3 Adding Events in Mailcow and Verifying on Android[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=296\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=296\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In your Mailcow web interface, navigate to the Calendar section.<\/li>\n\n\n\n<li>Find the option to add a new event (usually a \u201c+\u201d or&nbsp;<strong>New Event<\/strong>&nbsp;button).<\/li>\n\n\n\n<li>Create an event with a unique name (e.g., \u201cTest Mailcow to Android Sync\u201d).<\/li>\n\n\n\n<li>Set the date, time, and any other details.<\/li>\n\n\n\n<li>Save the event.<\/li>\n\n\n\n<li>On your Android phone, open the Fossify Calendar app.<\/li>\n\n\n\n<li>Swipe down or tap refresh.<\/li>\n\n\n\n<li>The new event should appear in your calendar view.<\/li>\n\n\n\n<li><em><strong>PSYCH!!!!<\/strong><\/em><\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">7.4 Refreshing Calendar Data[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=297\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=297\">edit source<\/a>]<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">Refresh button in Calendar app is not real[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=298\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=298\">edit source<\/a>]<\/h5>\n\n\n\n<p><strong>Refreshing directly in the Fossify Calendar app DOES NOT immediately show new events added on the server. For immediate updates:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the DAVx\u2075 app on your Android phone.<\/li>\n\n\n\n<li>Tap the&nbsp;<strong>Refresh<\/strong>, and then the&nbsp;<strong>Synchronize Now<\/strong>&nbsp;button.<\/li>\n\n\n\n<li>Tap this to force an immediate sync with your Mailcow server.<\/li>\n\n\n\n<li>After the sync completes in DAVx\u2075, open the Fossify Calendar app.<\/li>\n\n\n\n<li>Your calendar should now show the most up-to-date information.<\/li>\n<\/ol>\n\n\n\n<p>You may wonder why this is, given that the calendar app literally has an option that says, \u201cRefresh CalDAV Calendars.\u201d that does not refresh your calendar. Welcome to the beautiful world of open-source software!&nbsp;\ud83d\ude42 I hope you\u2019ll stay awhile. What we lack in functional UI, we make up for in not&nbsp;<a href=\"https:\/\/docs.fcc.gov\/public\/attachments\/FCC-24-40A2.pdf\">selling your data to bail bondsmen &amp; bounty hunters<\/a>. It\u2019s kinda worth it\u2026. kinda.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Why does it work this way?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=299\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=299\">edit source<\/a>]<\/h5>\n\n\n\n<p>When you tap&nbsp;<strong>\u201cRefresh CalDAV Calendars\u201d<\/strong>, what you\u2019re actually doing is asking the calendar app to check if anything has changed in CalDAV. You\u2019re not telling CalDAV to contact your server to fetch new entries.<\/p>\n\n\n\n<p>Here\u2019s how it works:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Mailcow server \u2192 CalDAV<\/strong>&nbsp;(Mailcow sends updates every 15 minutes)<\/li>\n\n\n\n<li><strong>CalDAV \u2192 Calendar app<\/strong>&nbsp;(The calendar app pulls from CalDAV)<\/li>\n<\/ol>\n\n\n\n<p>The calendar app will not immediately refresh unless you manually ask it to. And even when you do, it\u2019s just checking DAVx\u2075 for updates. It doesn\u2019t ask DAVx\u2075 to go and poll your Mailcow server.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Remember that automatic syncs occur every 15 minutes by default.<\/li>\n\n\n\n<li>Always make sure you\u2019re adding events to the correct calendar (your Mailcow calendar, not a local one).<\/li>\n\n\n\n<li>If you\u2019re away from your home network, make sure your OpenVPN connection is active for the sync to work.<\/li>\n\n\n\n<li>If you experience any sync issues, check your internet connection and OpenVPN status, then try a manual refresh in DAVx\u2075, NOT the calendar or contacts app first.<\/li>\n<\/ul>\n\n\n\n<p><strong>To force an immediate sync from the server at any time, you can tap refresh\/sync now within the DAVx\u2075 app or use a \u201cSync now\u201d option if available.<\/strong><\/p>\n\n\n\n<p><strong>THIS IS IMPORTANT: REFRESHING IN THE FOSSIFY CALENDAR APP WE INSTALL WILL NOT REFRESH INSTANTLY.<\/strong><\/p>\n\n\n\n<p>DAVx\u2075 grabs data from our home server. Calendar &amp; contacts apps grab the data from DAVx\u2075. When you tap&nbsp;<strong>\u201crefresh\u201d<\/strong>&nbsp;in your calendar app, what you\u2019re&nbsp;<em>actually<\/em>&nbsp;doing is grabbing the latest data from DAVx\u2075 on your phone. If DAVx\u2075 does not have new data, it doesn\u2019t matter if you just added a calendar event on your server &amp; you tap refresh furiously in the calendar app 50 times. The fossify calendar will still not see a new event on your server until&nbsp;<strong>DAVx\u2075<\/strong>&nbsp;refreshes. Fossify does not have a way to trigger DAVx\u2075 to refresh when you tap&nbsp;<strong>refresh<\/strong>&nbsp;in the fossify calendar app.<\/p>\n\n\n\n<p><strong>IF YOU WANT TO REFRESH TO SEE UPDATES IMMEDIATELY IN THE CALENDAR APP, YOU NEED TO HIT REFRESH\/SYNC IN THE DAVx\u2075 APP,&nbsp;<em>THEN<\/em>&nbsp;IN THE CALENDAR.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>I call this an&nbsp;<em>\u201cOPEN SOURCISM\u201d<\/em>&nbsp;&#8211; these are the byproducts of 20+ years of&nbsp;<a href=\"https:\/\/www.reddit.com\/r\/immich\/comments\/1codh0p\/comment\/l5rfpu7\/\">people thinking it\u2019s wrong for developers to get paid for their work<\/a>. It\u2019s why Google &amp; Apple win; for all their flaws, they understand that developers want to be able to pay their rent &amp; feed their family in exchange for working 10 hours a day to produce software people use. There is only so much a small band of enthusiasts can do in their spare time, given that they need to make money to live indoors &amp; pay for food like the rest of us.<\/li>\n\n\n\n<li>If you want this to get better, show that you are willing to pay for software so people put time &amp; effort into fixing all of this.<\/li>\n<\/ul>\n\n\n\n<p>By following these steps, you\u2019ve now set up&nbsp;<code>DAVx\u2075<\/code>&nbsp;to securely connect to your&nbsp;<code>mailcow<\/code>&nbsp;server and configured it to sync your data efficiently. As efficiently as it\u2019ll let you; welcome to the world of self-managed open source servers! \ud83d\ude00<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Self Managed Email with Mailcow &amp; Postmark[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=300\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=300\">edit source<\/a>]<\/h1>\n\n\n\n<p>Up to this point, we have only set up mailcow for contacts &amp; calendar syncing.&nbsp;<strong>This is as far as you should go.<\/strong>&nbsp;Self managed email is not for the faint of heart. If you are a beginner, do not pass go, do not collect $200, and skip on to the next section.<\/p>\n\n\n\n<p><strong>Choosing to do self managed email is like most of my relationship decisions:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Just because you can doesn\u2019t mean you should<\/li>\n\n\n\n<li>It\u2019s messy, complicated, high maintenance.<\/li>\n\n\n\n<li>You\u2019ll regret it later.<\/li>\n<\/ol>\n\n\n\n<p>That being said, if you wish to continue\u2026<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why do I need SMTP relay?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=301\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=301\">edit source<\/a>]<\/h2>\n\n\n\n<p>You need an SMTP relay server if you want people to actually see your email. No man is an island, and none of your mail is going to go anywhere without an SMTP relay. Gmail, etc., everyone will&nbsp;<em>\u201clol<\/em>\u201d at you if they see you sending email from your home email server.<\/p>\n\n\n\n<p>As a society, we have chosen being spam-free over email sovereignty. You\u2019re welcome to&nbsp;<em>try<\/em>&nbsp;running an email server on your residential internet account, but your mail is not going to get anywhere.<\/p>\n\n\n\n<p>I\u2019m not suggesting your email will end up in spam. It will be rejected by the server before its spam filter even sees it.<\/p>\n\n\n\n<p>99% of the time that a major email server receives mail from a server on a residential internet connection, it\u2019s from someone who got hacked &amp; is now unknowingly spamming half of the internet. We traded freedom to be rid of spam.<\/p>\n\n\n\n<p>Whether or not you think this is fair is irrelevant; it\u2019s how the world is. If you want your email to make it to most of your intended recipients, you need an SMTP relay.<\/p>\n\n\n\n<p>SMTP relay sends your mail through postmark\u2019s trusted server. Using postmark, icloud\/gmail will let your mail through, rather than assume some schmuck running windows xp service pack 1 with his banking password post-it-noted to his monitor is part of a spam botnet.<\/p>\n\n\n\n<p>Think of it like doing business in NYC. You are paying a troll toll for the ability to send email. But Postmark are nice people, so you\u2019ll enjoy it. I hope they don\u2019t cancel my services on account of me comparing them to&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=qFVwQCFhKSE&amp;list=PLkVbIsAWN2lvzWirQsz6haGEjJ2b2e6Ho&amp;index=2\">New York City government<\/a>. I\u2019m sorry, postmark; that was uncalled for.&nbsp;:\u2019(<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Setting Up Postmark as an SMTP Relay[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=302\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=302\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Create a Postmark Account[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=303\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=303\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to:&nbsp;<a href=\"https:\/\/postmarkapp.com\/\">postmarkapp.com<\/a><\/li>\n\n\n\n<li>Sign up: Click on the&nbsp;<strong>Start free trial<\/strong>&nbsp;button at the top right-hand corner of the page.\n<ul class=\"wp-block-list\">\n<li>This is a paid service and you are going to pay, one way or another. If you don\u2019t want to deal with forgetting you signed up for a trial, you can use&nbsp;<a href=\"https:\/\/privacy.com\/\">privacy.com<\/a>&nbsp;to create a temporary credit card that is authorized for $50, then delete it the second you put it into Postmark. But if you choose to go the self-hosted email route, you will be paying; keep that in mind.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Complete the registration: Enter the required details (email, password, etc.) and confirm your account through email verification.<\/li>\n<\/ul>\n\n\n\n<p><strong>Talk to Postmark; they need to know you are not a spammer.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Postmark isn\u2019t going to let you send email using their servers without taking them to dinner first. You need to get to know them &amp; they need to get to know you. They don\u2019t let just ANYONE use their servers.<\/li>\n\n\n\n<li>This will take a day, or a few days, for them to verify that you are not a known spammer\/scammer. This might require gentle nudging customer service if they do not get back to you quickly, but they usually do because Postmark is staffed by awesome people.<\/li>\n\n\n\n<li>They may ask for info about you.&nbsp;<strong>This is normal; no reputable SMTP relay wants to be responsible for helping deliver spam!<\/strong><\/li>\n<\/ul>\n\n\n\n<p>This may seem inconvenient, but it\u2019s for the greater good of a spam free internet. If you don\u2019t like that this is a thing, make sure to berate&nbsp;<em>(verbally, of course)<\/em>&nbsp;the next spammer you encounter. These people never refer to themselves by their proper name; they\u2019re not&nbsp;<em>\u201cspammers,\u201d<\/em>&nbsp;they\u2019re&nbsp;<em>\u201cemail marketers.\u201d<\/em><\/p>\n\n\n\n<p><strong>If you check two of these three boxes, you are very likely a spammer, and have contributed to the amount of annoyance, aggravation, &amp; irritation that good people experience:<\/strong><\/p>\n\n\n\n<p>Are you responsible for sending me email that:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>utilizes templates<\/li>\n\n\n\n<li>includes in-line images<\/li>\n\n\n\n<li>has an \u201cUNSUBSCRIBE\u201d button<\/li>\n<\/ol>\n\n\n\n<p>If you are,&nbsp;<strong>gargle my balls.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_2dbf5b37.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_1b2ce54b.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.2 Create a New Server[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=304\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=304\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to the&nbsp;<strong>Servers<\/strong>&nbsp;page:\n<ul class=\"wp-block-list\">\n<li>After logging in, go to&nbsp;<a href=\"https:\/\/account.postmarkapp.com\/servers\">https:\/\/account.postmarkapp.com\/servers<\/a>&nbsp;or find the \u201cServers\u201d tab in the top navigation bar.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Create a new server:\n<ul class=\"wp-block-list\">\n<li>Click on the&nbsp;<strong>Create Server<\/strong>&nbsp;button on the \u201cServers\u201d page.<\/li>\n\n\n\n<li><strong>Name your server<\/strong>: Enter a name for your pretty new SMTP relay server.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Save<\/strong>&nbsp;to create the server.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_b5a39c43.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.3 Configure Message Streams[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=305\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=305\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to the server you just set up by clicking on its name.<\/li>\n\n\n\n<li>Choose&nbsp;<strong>Default transaction stream<\/strong>&nbsp;from the three message streams it shows you.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;<code>Transactional<\/code>&nbsp;is for messages that are low volume but meant to be sent fast to an individual user,&nbsp;<code>broadcast<\/code>&nbsp;are for messages sent out to lots of users (aka spam) that are not time sensitive.<\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_50cffcf2.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.4. Get SMTP Relay Credentials[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=306\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=306\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to the&nbsp;<strong>Setup Instructions<\/strong>&nbsp;page after clicking onto your message stream.<\/li>\n\n\n\n<li>If you forgot how to do this, you click&nbsp;<strong>Servers \u2192 Default Transactional stream \u2192 Setup Instructions<\/strong>.<\/li>\n\n\n\n<li>After configuring the outbound stream, go to the&nbsp;<strong>Setup Instructions<\/strong>&nbsp;page for the&nbsp;<strong>Transactional Outbound Stream<\/strong>.<\/li>\n\n\n\n<li>You will be overwhelmed with options under&nbsp;<strong>Pick the library or integration<\/strong>&nbsp;\u2013 no need to fear, we are picking&nbsp;<strong>SMTP<\/strong>.<\/li>\n<\/ol>\n\n\n\n<p><strong>SMTP details:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Server<\/strong>:&nbsp;<code>smtp.postmarkapp.com<\/code><\/li>\n\n\n\n<li><strong>Ports<\/strong>: 25, 2525, or 587.&nbsp;<em>We will be using 587 with STARTTLS. You do not need to pick anything or configure anything here; this is just a page showing you your credentials you will put into Mailcow later. Save them securely. Pretend this is your bank password &amp; treat it accordingly.<\/em><\/li>\n\n\n\n<li><strong>Authentication<\/strong>: Postmark supports Plain Text, CRAM-MD5, or TLS.<\/li>\n\n\n\n<li><strong>Username<\/strong>: This is your Postmark server token. It will look like a long string of characters (e.g.,&nbsp;<code>1788dd83-9917-46e1-b90a-3b9a89c10bd7<\/code>).<\/li>\n\n\n\n<li><strong>Password<\/strong>: The same value as the username (Postmark uses the server token as both the username and password).<\/li>\n\n\n\n<li><strong>Note:<\/strong>&nbsp;As I go throughout this video, I will be using MY credentials as an example. THESE WILL NOT BE THE SAME AS YOURS. USE YOUR OWN CREDENTIALS.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_5a1ef5db.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_e265caf6.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_22cccc55.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Configuring Mailcow to use Postmark as SMTP relay[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=307\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=307\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">2.1. Access Mailcow Admin Interface[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=308\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=308\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Login to Mailcow<\/strong>:<\/li>\n\n\n\n<li>Navigate to your Mailcow instance by going to the admin interface URL (e.g.,&nbsp;<a href=\"https:\/\/192.168.5.3\/admin\">https:\/\/192.168.5.3\/admin<\/a>) or&nbsp;<a href=\"https:\/\/mailserver.home.arpa\/admin\">https:\/\/mailserver.home.arpa\/admin<\/a>.<\/li>\n\n\n\n<li>Use your administrator credentials to log in.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">2.2. Find SMTP relay section[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=309\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=309\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>From the main Mailcow admin dashboard, click&nbsp;<strong>System<\/strong>&nbsp;at the top and then click&nbsp;<strong>Configuration<\/strong>.<\/li>\n\n\n\n<li>Click onto the&nbsp;<strong>routing<\/strong>&nbsp;tab.<\/li>\n\n\n\n<li>Note the&nbsp;<strong>\u201cadd sender-dependent transport\u201d<\/strong>&nbsp;section. This is where we will be placing our Postmark credentials.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_e2f517bd.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_d0f1df1f.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_7f812343.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_259c85b9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_85086323.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 Enter Postmark SMTP Details[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=310\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=310\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Use the credentials provided by Postmark in the prior step, which have a screenshot included.\n<ul class=\"wp-block-list\">\n<li><strong>SMTP Server<\/strong>: Set the SMTP server to Postmark\u2019s SMTP, which at the time of writing for me was&nbsp;<code>smtp.postmarkapp.com:587<\/code>.<\/li>\n\n\n\n<li><strong>Ports<\/strong>: If Postmark is still using port 587 for TLS and offering it at the time of this writing, use port 587.<\/li>\n\n\n\n<li><strong>Username &amp; Password<\/strong>: Enter your Postmark server token (the token provided by Postmark when you created your server). This token serves as both the username and password. This is what you see on the&nbsp;<strong>servers \u2014&gt; default transactional stream \u2014&gt; setup instructions \u2014&gt; SMTP<\/strong>&nbsp;page under&nbsp;<em>\u201cAuthenticate with a server token and specify stream with a header\u201d<\/em><\/li>\n\n\n\n<li><strong>Example<\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong>Username<\/strong>:&nbsp;<code>1788dd83-9917-46e1-b90a-3b9a89c10bd7<\/code>&nbsp;(replace with your actual token).<\/li>\n\n\n\n<li><strong>Password<\/strong>: Same as the username (server token).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click&nbsp;<strong>Add<\/strong>.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_c2bfd8f9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_146d196d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_93c26e5c.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Adding a Domain Name &amp; Mailbox to Mailcow[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=311\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=311\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">3.1. Add a Domain[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=312\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=312\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Email \u2192 Configuration<\/strong>&nbsp;on the top menu.<\/li>\n\n\n\n<li>Go to the&nbsp;<strong>Domains<\/strong>&nbsp;tab.<\/li>\n\n\n\n<li>In the&nbsp;<strong>Domains<\/strong>&nbsp;tab, click&nbsp;<strong>Add domain<\/strong><\/li>\n\n\n\n<li>Enter your domain name (in my case, stevesavers.com).<\/li>\n\n\n\n<li>Set any desired options (quota, aliases, etc.).<\/li>\n\n\n\n<li>Make sure DKIM key length is at least 2048.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Add domain and restart SOGo<\/strong>.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_74c2130f.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_d74edddb.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_1aa99468.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_30fff2e9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_6eaf338a.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.2 Set Postmark as the Relay[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=313\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=313\">edit source<\/a>]<\/h4>\n\n\n\n<p><strong>IF YOU DO NOT DO THIS, NONE OF YOUR EMAIL WILL SEND!<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click&nbsp;<strong>Edit<\/strong>&nbsp;on the domain name you just created.<\/li>\n\n\n\n<li>Now you will see a NEW option:&nbsp;<strong>sender-dependent transports<\/strong>.<\/li>\n\n\n\n<li>In the domain settings, find the option labeled&nbsp;<strong>sender-dependent transports<\/strong>&nbsp;and select the newly created Postmark relay (e.g.,&nbsp;<code>smtp:postmarkapp.com<\/code>). Set this to the Postmark SMTP relay server you set up in the prior step. Sometimes this is already checked for you, but it is safe to&nbsp;<em><strong>inspect what you expect<\/strong><\/em>&nbsp;so you don\u2019t get screwed!<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_e994614f.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_6e65b29c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_10bee612.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_42594faf.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_aa150a6e.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.3. Add an Email Account[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=314\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=314\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to<strong>Email \u2192 Configuration \u2192 Mailboxes<\/strong>.<\/li>\n\n\n\n<li>In the&nbsp;<strong>Mailboxes<\/strong>&nbsp;tab, click&nbsp;<strong>Add mailbox<\/strong>.<\/li>\n\n\n\n<li>Enter the username (the part before @ in the email address).<\/li>\n\n\n\n<li>Choose the domain name (e.g.,&nbsp;<code>louis@yourdomain.com<\/code>).<\/li>\n\n\n\n<li>Set a password for the mailbox.<\/li>\n\n\n\n<li>Configure any additional options as you want.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Add mailbox<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.4 Save Changes and Apply[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=315\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=315\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>After choosing the&nbsp;<code>smtp.postmarkapp.com:587<\/code>&nbsp;SMTP relay, click&nbsp;<strong>Save Changes<\/strong>&nbsp;to apply the settings.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.5 Accessing SoGo Webmail\/calendar\/contacts[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=316\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=316\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to&nbsp;<a href=\"https:\/\/mailserver.home.arpa\/\">https:\/\/mailserver.home.arpa<\/a>, or in this case,&nbsp;<a href=\"https:\/\/192.168.5.3\/SoGo\">https:\/\/192.168.5.3\/SoGo<\/a>.<\/li>\n\n\n\n<li>Log in with your credentials.<\/li>\n\n\n\n<li>Click on&nbsp;<strong>Apps<\/strong>&nbsp;in the top right corner.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note<\/strong>: When logging in, make sure to use your full email address. This is necessary because Mailcow supports multiple domains, so the full email address is required to identify the correct account.<\/p>\n<\/blockquote>\n\n\n\n<p>You can also set up your email client or mobile device using the configuration details provided in the Mailcow interface.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Setting up DNS Records in your domain registrar[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=317\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=317\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Introduction to domain registrars[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=318\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=318\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">What is a domain registrar?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=319\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=319\">edit source<\/a>]<\/h4>\n\n\n\n<p>This is who you buy your website name from. If you don\u2019t know what this is\u2026 for the love of god skip the self-hosted email section.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Namecheap.com as an example[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=320\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=320\">edit source<\/a>]<\/h4>\n\n\n\n<p>Namecheap is a cheap &amp; easy way to register a domain name. I will use them as an example. Their interface for DNS configuration is similar to 99% of the available providers out there.<\/p>\n\n\n\n<p>If you have any trouble setting up these records, contact the support staff of your domain name provider who will happily provide you tech support commensurate with the fifteen dollars per year you pay them. No really, you\u2019re on your own here\u2026 do you&nbsp;<em>really<\/em>&nbsp;want to do this??<\/p>\n\n\n\n<p>I would love to show you how to do this on every provider, but at this time this manual is 605 pages, the video is 12+ hours, and I would like to return to my life. You will be able to find similar settings, menus, and fields in your DNS registrar if your provider isn\u2019t horrible.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Configuring DNS records in Namecheap[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=321\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=321\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_2c3c94e.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_703091b1.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">4.1. Find the DKIM thing for your domain[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=322\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=322\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Email \u2192 Configuration<\/strong>&nbsp;on the top menu.<\/li>\n\n\n\n<li>Go to the&nbsp;<strong>Domains<\/strong>&nbsp;tab.<\/li>\n\n\n\n<li>In the&nbsp;<strong>Domains<\/strong>&nbsp;tab, click&nbsp;<strong>edit<\/strong>&nbsp;on the domain you created (in my case, stevesavers.com).<\/li>\n\n\n\n<li>Scroll down to the DKIM section. Keep this tab open for now; we will come back to it later.<\/li>\n\n\n\n<li>We\u2019re not changing anything here, so there\u2019s no need to save changes or make any changes. We just want that DKIM thing.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_ffbba2cb.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">4.2 Configure DNS records in Namecheap[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=323\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=323\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Log into your Namecheap.com account.<\/li>\n\n\n\n<li>Go to Domain List and click&nbsp;<strong>Manage<\/strong>&nbsp;next to your domain.<\/li>\n\n\n\n<li>Navigate to the&nbsp;<strong>Advanced DNS<\/strong>&nbsp;tab.<\/li>\n\n\n\n<li>Here are the DNS records I added: you will fill them according to your specific setup.\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_39fbaebb.png\"><img decoding=\"async\" src=\"https:\/\/wiki.futo.org\/thumb.php?f=Lu55028jxdmy_tmp_39fbaebb.png&amp;width=404\" alt=\"\"\/><\/a><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\">CNAME Record[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=324\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=324\">edit source<\/a>]<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Host<\/strong>:&nbsp;<code>pm-bounces<\/code>&nbsp;(Keep this exactly the same)<\/li>\n\n\n\n<li><strong>Value<\/strong>:&nbsp;<code>pm.mtasv.net.<\/code>&nbsp;(Keep this exactly the same)<\/li>\n\n\n\n<li><strong>TTL<\/strong>: Automatic (Keep this the same unless your DNS provider requires a different TTL setting)<\/li>\n<\/ul>\n\n\n\n<p>This CNAME record is used by Postmark for handling email bounces. When an email bounces, it will be sent to&nbsp;<code>pm-bounces.[yourdomain]<\/code>, which forwards the bounce to Postmark\u2019s servers. No changes are needed unless you are using a different bounce-handling service.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_22a6cdb4.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">DMARC Record (TXT)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=325\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=325\">edit source<\/a>]<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Host<\/strong>:&nbsp;<code>_dmarc<\/code>&nbsp;(Keep this exactly the same)<\/li>\n\n\n\n<li><strong>Value<\/strong>:&nbsp;<code>v=DMARC1; p=none; rua=<a href=\"mailto:dmarc@stevesavers.com\">mailto:dmarc@stevesavers.com<\/a><\/code>&nbsp;<em>(Change only the email address after&nbsp;<code>rua=mailto:<\/code>&nbsp;to your own)<\/em><\/li>\n<\/ul>\n\n\n\n<p>Here\u2019s what stays the same and what changes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>v=DMARC1<\/code>: (Keep this exactly the same)<\/li>\n\n\n\n<li><code>p=none<\/code>: (Keep this exactly the same for monitoring; change to&nbsp;<code>p=quarantine<\/code>&nbsp;or&nbsp;<code>p=reject<\/code>&nbsp;once you\u2019re ready to enforce DMARC)<\/li>\n\n\n\n<li><code>rua=mailto:<\/code>&nbsp;<a href=\"mailto:dmarc@stevesavers.com\"><strong>dmarc@stevesavers.com<\/strong><\/a>: Change&nbsp;<code>stevesavers.com<\/code>&nbsp;to your own domain and use an email where you want to receive DMARC reports.<\/li>\n<\/ul>\n\n\n\n<p>This DMARC record helps protect your domain from email spoofing. For now, it\u2019s in monitoring mode, so keep&nbsp;<code>p=none<\/code>&nbsp;if you want to monitor. If you\u2019re ready to enforce policy, change&nbsp;<code>p=none<\/code>&nbsp;to&nbsp;<code>p=quarantine<\/code>&nbsp;or&nbsp;<code>p=reject<\/code>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_aa66e26f.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_257280e5.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_edea6316.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_65dc145a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_7c22f73c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_93ecca45.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_62fd886c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_2a58b7ee.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Postmark DKIM Record (TXT)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=326\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=326\">edit source<\/a>]<\/h5>\n\n\n\n<p>This you are going to get by doing as follows:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to postmark.com and log in<\/li>\n\n\n\n<li>Go to your domain interface, go to&nbsp;<strong>Sender Signatures<\/strong>, click&nbsp;<strong>Add Domain or Signature<\/strong>, then&nbsp;<strong>Add Sender Signature<\/strong>.<\/li>\n\n\n\n<li>Once you\u2019re done it\u2019ll present you with a DKIM record and a return path. I\u2019ll show you what we\u2019re doing with these below &amp; in the attached pictures:<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;When adding your domain, choose to send from any email address on the domain, not just a single one.<\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Host<\/strong>:&nbsp;<code>20241012215824pm._domainkey<\/code>&nbsp;(Postmark generates this value, so keep it exactly as provided by Postmark)<\/li>\n\n\n\n<li><strong>Value<\/strong>:&nbsp;<code>k=rsa; p=MIGfMA0GCSq...<\/code>&nbsp;(You will replace the long key string&nbsp;<code>p=<\/code>&nbsp;with the public key provided by Postmark)<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>IMPORTANT:<\/strong>&nbsp;The Host (<code>20241012215824pm._domainkey<\/code>) and&nbsp;<code>k=rsa<\/code>&nbsp;are specific to Postmark and should stay the same. You need to copy and paste this key exactly as Postmark provides it&nbsp;<strong>FROM POSTMARK, NOT FROM THIS GUIDE!<\/strong><\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_ab1378ba.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_ba775df9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_3ba69113.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_d073948d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_72c9d18.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_ccb1f143.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_d4f449eb.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">DKIM Record for Your Domain (TXT)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=327\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=327\">edit source<\/a>]<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Log into mailcow\u2019s administration interface.<\/li>\n\n\n\n<li>Go to&nbsp;<strong>Email \u2192 Configuration<\/strong>&nbsp;on the top menu.<\/li>\n\n\n\n<li>Go to the&nbsp;<strong>Domains<\/strong>&nbsp;tab.<\/li>\n\n\n\n<li>In the&nbsp;<strong>Domains<\/strong>&nbsp;tab, click&nbsp;<strong>edit<\/strong>&nbsp;on the domain you created (in my case, stevesavers.com).<\/li>\n\n\n\n<li>Scroll down to the DKIM section.<\/li>\n\n\n\n<li>Insert the record as follows:\n<ul class=\"wp-block-list\">\n<li><strong>Host<\/strong>:&nbsp;<code>dkim._domainkey<\/code>&nbsp;(Keep this exactly the same unless mailcow email provider tells you to use a different prefix)<\/li>\n\n\n\n<li><strong>Value<\/strong>:&nbsp;<code>v=DKIM1; k=rsa; t=s; s=email; p=MIIBIjANB...<\/code>&nbsp;(Replace this with the figure)<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>The Host should be&nbsp;<code>dkim._domainkey<\/code>&nbsp;unless your email provider asks for a different format. For the Value, keep&nbsp;<code>v=DKIM1; k=rsa; t=s; s=email<\/code>&nbsp;exactly the same. The part you need to change is the long public key string after&nbsp;<code>p=<\/code>, which will be provided by your email provider or mail server (like Mailcow). Copy and paste it carefully.<\/p>\n<\/blockquote>\n\n\n\n<h5 class=\"wp-block-heading\">SPF Record (TXT)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=328\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=328\">edit source<\/a>]<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Host<\/strong>:&nbsp;<code>@<\/code>&nbsp;(Keep this exactly the same)<\/li>\n\n\n\n<li><strong>Value<\/strong>:&nbsp;<code>v=spf1 mx a include:spf.mtasv.net ~all<\/code>&nbsp;(Enter this as it is: change the include value if using a different SMTP service than postmark or if&nbsp;<a href=\"https:\/\/postmarkapp.com\/glossary\/sender-policy-framework\">postmark changes this in the future<\/a>)<\/li>\n<\/ul>\n\n\n\n<p>Here\u2019s what stays the same and what you need to change:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Host<\/strong>: Always use&nbsp;<code>@<\/code>&nbsp;for your main domain.<\/li>\n\n\n\n<li><strong>Value<\/strong>:\n<ul class=\"wp-block-list\">\n<li><code>v=spf1 mx a<\/code>: Keep this exactly the same; it tells servers to check your MX and A records.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><code>include:spf.mtasv.net<\/code>: You will need to change this if you\u2019re using a different mail service than Postmark. Replace&nbsp;<code>spf.mtasv.net<\/code>&nbsp;with the SPF record provided by your SMTP service (e.g., if using a different relay like SendGrid or Amazon SES, they will give you a different include value).<\/li>\n\n\n\n<li><code>~all<\/code>: Keep this the same unless you want stricter enforcement. You can replace&nbsp;<code>~all<\/code>&nbsp;with&nbsp;<code>-all<\/code>&nbsp;for stricter failure rules.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Mail CNAME Record[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=329\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=329\">edit source<\/a>]<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Host<\/strong>: mail (Keep this exactly the same)<\/li>\n\n\n\n<li><strong>Value<\/strong>:&nbsp;<code>louishomeserver.chickenkiller.com.<\/code>&nbsp;(Change this to the domain or subdomain that hosts your mail server,&nbsp;<strong>this is what you set when you created a dynamic DNS domain at freedns!<\/strong>)<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>The Host mail stays the same. What you will change is the value after&nbsp;<code>Value:<\/code>, which should point to the domain or subdomain that hosts your mail server. Replace&nbsp;<code>louishomeserver.chickenkiller.com<\/code>&nbsp;with your actual mail server\u2019s domain or subdomain.<\/p>\n<\/blockquote>\n\n\n\n<h5 class=\"wp-block-heading\">Email Client Configuration CNAME Records[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=330\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=330\">edit source<\/a>]<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Host<\/strong>: autoconfig (Keep this exactly the same)<\/li>\n\n\n\n<li><strong>Value<\/strong>:&nbsp;<code>mail.stevesavers.com.<\/code>&nbsp;(Change this to the domain of your mail server)<\/li>\n\n\n\n<li><strong>Host<\/strong>: autodiscover (Keep this exactly the same)<\/li>\n\n\n\n<li><strong>Value<\/strong>:&nbsp;<code>mail.stevesavers.com.<\/code>&nbsp;(Change this to the domain of your mail server)<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Both Host fields (autoconfig and autodiscover) stay the same, as they are used for automatic email client configuration. You will change the Value to point to your mail server\u2019s domain or subdomain (in this case,&nbsp;<code>mail.stevesavers.com<\/code>). Replace this with your own mail server domain.<\/p>\n<\/blockquote>\n\n\n\n<h5 class=\"wp-block-heading\">MX Record[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=331\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=331\">edit source<\/a>]<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Host<\/strong>: @ (Keep this exactly the same)<\/li>\n\n\n\n<li><strong>Value<\/strong>:&nbsp;<code>mail.stevesavers.com.<\/code>&nbsp;(Change this to the domain of your mail server)<\/li>\n\n\n\n<li><strong>TTL<\/strong>: Automatic (Keep this the same unless your DNS provider requires a specific TTL)<\/li>\n<\/ul>\n\n\n\n<p>The Host @ stays the same to apply to your root domain. What you need to change is the value after&nbsp;<code>Value:<\/code>, which should point to the domain that handles incoming mail for your domain. Replace&nbsp;<code>mail.stevesavers.com<\/code>&nbsp;with your own mail server domain.<\/p>\n\n\n\n<p>These DNS records set up email services for your domain. For the third time, here\u2019s what stays the same and what needs changing:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SPF, DKIM, and DMARC<\/strong>: Most parts of these records remain the same, but you\u2019ll need to customize the DKIM public keys and the domain-specific parts (like email addresses for DMARC reports or SPF includes).<\/li>\n\n\n\n<li><strong>MX and CNAME records<\/strong>: The basic structure stays the same, but you\u2019ll need to update the domain values to point to your own mail server.<\/li>\n<\/ul>\n\n\n\n<p>By carefully adjusting the fields noted for customization, you can provide the DNS setup matches your unique mail and web infrastructure.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_3e7d5187.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_841a3e85.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_6d09e55d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_3abfd2ad.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">4.3 Go back to Postmark &amp; verify your DNS records.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=332\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=332\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to postmark.com and log in.<\/li>\n\n\n\n<li>Go to your domain interface, go to&nbsp;<strong>Sender Signatures<\/strong>.<\/li>\n\n\n\n<li>Click onto the ones you just created.<\/li>\n\n\n\n<li>Click&nbsp;<strong>VERIFY<\/strong>&nbsp;next to both&nbsp;<strong>DKIM<\/strong>&nbsp;and&nbsp;<strong>Return Path.<\/strong><\/li>\n\n\n\n<li>If it doesn\u2019t work yet, no big deal, DNS changes can take time to propagate.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: pfSense firewall introduction[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=333\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=333\">edit source<\/a>]<\/h2>\n\n\n\n<p>So you have a basic idea on how to use&nbsp;<strong>pfSense<\/strong>&nbsp;as a basic router, but we haven\u2019t dealt with&nbsp;<em><strong>port forwarding<\/strong><\/em>&nbsp;or messing with the firewall yet. Let\u2019s get into that.<\/p>\n\n\n\n<p>Before we move on to making the necessary firewall rules to allow us to receive email, let\u2019s discuss aliases.<\/p>\n\n\n\n<p>What makes firewall rules easy to manage are&nbsp;<strong>aliases.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Lesson 1: Aliases in pfSense[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=334\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=334\">edit source<\/a>]<\/h3>\n\n\n\n<h5 class=\"wp-block-heading\">What are Aliases in pfSense?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=335\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=335\">edit source<\/a>]<\/h5>\n\n\n\n<p>Aliases in&nbsp;<strong>pfSense<\/strong>&nbsp;are placeholders that can represent:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>IP addresses<\/li>\n\n\n\n<li>Networks<\/li>\n\n\n\n<li>Ports<\/li>\n\n\n\n<li>URLs<\/li>\n<\/ul>\n\n\n\n<p>For example, instead of having to make a separate NAT &amp; firewall rule to open port 993 for 8.8.8.8, 9.9.9.9, 10.10.10.10, etc., I can make ONE firewall rule and enter the \u201calias\u201d I created into the field where I would usually put an IP. I\u2019d create an alias for those three IPs.<\/p>\n\n\n\n<p>The cool part about this is if I ever want to add or remove one of those IPs, I don\u2019t have to change firewall rules or delete\/add firewall rules. I just change my alias.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Practical example:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=336\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=336\">edit source<\/a>]<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_942c4249.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you\u2019re using a service like Freshdesk (CRM system):<\/li>\n\n\n\n<li>Freshdesk needs to connect to your mail server<\/li>\n\n\n\n<li>You don\u2019t want to give Freshdesk VPN access<\/li>\n\n\n\n<li>Freshdesk doesn\u2019t have VPN access anyway<\/li>\n\n\n\n<li>Here\u2019s how you can handle this situation:<\/li>\n\n\n\n<li>Add their IPs to your alias<\/li>\n\n\n\n<li>Only those IPs will see your mail server<\/li>\n\n\n\n<li>Everyone else gets blocked before even seeing the service<\/li>\n\n\n\n<li>Using aliases this way means:<\/li>\n\n\n\n<li>Your mail server is invisible to random internet traffic<\/li>\n\n\n\n<li>Only trusted IPs can even attempt connection<\/li>\n\n\n\n<li>Much more secure than opening ports to everyone<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>IMPORTANT:<\/strong>&nbsp;While port 25 needs to be open to the world for receiving email, other mail-related ports (587, 993, etc.) should only be open to trusted IPs or VPN users.Let\u2019s say I am making firewall rules to allow Freshdesk customer service software to access my email system. Can you imagine making a firewall rule for EACH of these individually<\/p>\n<\/blockquote>\n\n\n\n<p>Can you imagine having to add all of those IPs as its own separate rule, or having to update them all each time freshdesk\u2019s IPs changed? That would be a nightmare!<\/p>\n\n\n\n<p>Aliases allow us to add all of these IP addresses to a single thing called&nbsp;<em>\u201cfreshdesk IP addresses\u201d<\/em>&nbsp;\u2013 then, all we have to do is make a firewall rule with&nbsp;<em>\u201cfreshdesk IP addresses\u201d<\/em>&nbsp;as the source or destination, rather than a bunch of rules for each individual IP.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Benefits of Using Aliases[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=337\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=337\">edit source<\/a>]<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Simplification<\/strong>: Instead of entering \u201c192.168.5.3\u201d into a firewall rule, if I make an alias, I can just enter \u201cmailserver\u201d, once I have set up a \u201cmailserver\u201d alias that directs to the mailserver.<\/li>\n\n\n\n<li><strong>I can add to it!<\/strong>&nbsp;Let\u2019s say I have 1 smart television in my house. I want to block it from going onto the internet to&nbsp;<em>anything<\/em>&nbsp;besides a single Netflix IP address, so I add a firewall rule to block it from going online to anything besides the Netflix IP address. Let\u2019s say my family buys 3 more smart TVs\u2026 I don\u2019t want to set up a new set of firewall rules each time. Aliases allow me to add&nbsp;<em><strong>multiple IP addresses to a single alias!<\/strong><\/em>&nbsp;Instead of having to make 5 new sets of rules, I can keep my existing firewall rules as they are, and simply add the new IP addresses to the alias.<\/li>\n\n\n\n<li><strong>Maintainability<\/strong>: When you need to update multiple firewall rules, you can just update the alias instead of each individual rule.<\/li>\n\n\n\n<li><strong>Readability<\/strong>: Aliases make firewall rules more understandable by using descriptive names instead of raw IP addresses or port numbers.<\/li>\n<\/ol>\n\n\n\n<h5 class=\"wp-block-heading\">WTF? OpenVPN was set up so we DON\u2019T open ports; why are we talking about opening ports?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=338\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=338\">edit source<\/a>]<\/h5>\n\n\n\n<p>If you are accessing your mailserver using OpenVPN (AS YOU SHOULD), this doesn\u2019t matter. You will be opening port 25 to the world so you can receive email, but for the rest of the ports, these are ONLY NECESSARY IF YOU WANT CLIENTS WHO ARE NOT CONNECTING TO YOUR VPN TO BE ABLE TO LOG INTO AN EMAIL ACCOUNT AND READ THEIR MAIL AND SEND MAIL ON YOUR MAILSERVER!!!<\/p>\n\n\n\n<p>Plus, the self-hosted phone system is going to require we allow some external IPs belonging to our SIP trunking provider (the thing that lets you receive &amp; send calls to other phones outside your house) to access our server anyway, so you might as well learn about aliases now.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">How to Set Up Aliases in pfSense[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=339\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=339\">edit source<\/a>]<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">5.1.1 Accessing the Aliases Page[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=340\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=340\">edit source<\/a>]<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Log into the&nbsp;<strong>pfSense<\/strong>&nbsp;web interface.<\/li>\n\n\n\n<li>Navigate to&nbsp;<strong>Firewall &gt; Aliases<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Add<\/strong><\/li>\n<\/ol>\n\n\n\n<h5 class=\"wp-block-heading\">5.1.2 Creating an Alias[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=341\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=341\">edit source<\/a>]<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the Name field, enter a descriptive name for your alias (e.g., \u201cWebServers\u201d or \u201cBlockedIPs\u201d).<\/li>\n\n\n\n<li>Select the Type of alias you want to create:\n<ul class=\"wp-block-list\">\n<li>Host: For single IP addresses<\/li>\n\n\n\n<li>Network: For subnets<\/li>\n\n\n\n<li>Port: For port numbers<\/li>\n\n\n\n<li>URL: For lists of IPs or networks from a URL<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>In the Description field, enter a brief explanation of the alias\u2019s purpose. Here, I would enter&nbsp;<code>mailserver<\/code>.<\/li>\n\n\n\n<li>In the Content box, enter the values for your alias:\n<ul class=\"wp-block-list\">\n<li>For IP aliases: Enter IP addresses, one per line, such as our mailserver at&nbsp;<code>192.168.5.2<\/code>.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h5 class=\"wp-block-heading\">5.1.3 Using Aliases in Firewall Rules[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=342\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=342\">edit source<\/a>]<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Firewall &gt; NAT<\/strong>.<\/li>\n\n\n\n<li>Add a new rule or edit an existing one.<\/li>\n\n\n\n<li>In the source or destination fields, you can now select your alias from the drop-down menu.<\/li>\n\n\n\n<li>For port fields, you can select port aliases.<\/li>\n<\/ol>\n\n\n\n<p>Example rule using aliases:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Action<\/strong>: Pass<\/li>\n\n\n\n<li><strong>Interface<\/strong>: WAN<\/li>\n\n\n\n<li><strong>Source<\/strong>: Any<\/li>\n\n\n\n<li><strong>Destination<\/strong>: WebServers (alias)<\/li>\n\n\n\n<li><strong>Destination Port<\/strong>: WebPorts (alias)<\/li>\n<\/ul>\n\n\n\n<p>This rule allows incoming traffic to the IP addresses defined in the&nbsp;<code>WebServers<\/code>&nbsp;alias on the ports defined in the&nbsp;<code>WebPorts<\/code>&nbsp;alias.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Using Aliases for Secure Access[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=343\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=343\">edit source<\/a>]<\/h3>\n\n\n\n<p>If you want external access to your mail server&nbsp;<em>without<\/em>&nbsp;requiring VPN, you\u2019ll need to set up aliases for trusted IPs; or open your server to the entire world, which is a poor idea.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Lesson 2: Setting Up pfSense Firewall Rules for a Mail Server[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=344\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=344\">edit source<\/a>]<\/h3>\n\n\n\n<h5 class=\"wp-block-heading\">Understanding NAT vs.&nbsp;Firewall Rules[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=345\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=345\">edit source<\/a>]<\/h5>\n\n\n\n<p>Let\u2019s understand the two types of rules you need to set up in&nbsp;<strong>pfSense<\/strong>:<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">NAT (Network Address Translation)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=346\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=346\">edit source<\/a>]<\/h5>\n\n\n\n<p>NAT determines&nbsp;<em>where<\/em>&nbsp;traffic goes. Here\u2019s why it matters:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Your network has one public IP that the world sees<\/li>\n\n\n\n<li>But you might have 200+ computers internally<\/li>\n\n\n\n<li>When someone sends you an email, NAT tells the router&nbsp;<em>\u201ctraffic on port 25 goes to the mail server, port 80 goes to the web server\u201d<\/em>&nbsp;etc.<\/li>\n<\/ul>\n\n\n\n<p>Think of NAT like a restaurant host &#8211; they decide which table gets which customers.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Firewall Rules[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=347\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=347\">edit source<\/a>]<\/h5>\n\n\n\n<p>Firewall rules determine if traffic is&nbsp;<em>allowed<\/em>&nbsp;to pass. After NAT directs traffic to a computer, firewall rules decide if it gets through.<\/p>\n\n\n\n<p>Think of firewall rules like the bouncer &#8211; they decide if you get in at all.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Practical Application[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=348\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=348\">edit source<\/a>]<\/h5>\n\n\n\n<p><strong>NAT port forward<\/strong>&nbsp;is when the router sees an email coming in on port 25 to my spectrum internet address, and sends that email to our mail server on port 25.<\/p>\n\n\n\n<p>Once NAT has sent that email to my mailserver on port 25, the&nbsp;<strong>firewall rule<\/strong>&nbsp;is what&nbsp;<strong>allows<\/strong>&nbsp;that traffic to access port 25 on our mailserver.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_1f1b2c6a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_31037c49.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_8d77cc05.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_54c8a9f1.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_17e7dded.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_cc025f84.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Setting Up Mail Server Port Forwarding so you Receive emails:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=349\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=349\">edit source<\/a>]<\/h4>\n\n\n\n<p>A \u201cmail client\u201d is a program you use to read &amp; send your email from the mail server (the mailcow machine we are setting up). Examples are k9 mail, Microsoft Outlook, Mozilla Thunderbird, etc., or just using the web interface.<\/p>\n\n\n\n<p>If you are going to use the mail server while connected to the VPN,&nbsp;<em><strong>THIS IS THE ONLY RULE YOU NEED TO ADD!<\/strong><\/em>&nbsp;This is for&nbsp;<strong>receiving email.<\/strong>&nbsp;This port&nbsp;<em><strong>must<\/strong><\/em>&nbsp;be opened to the public.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Create NAT Rule[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=350\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=350\">edit source<\/a>]<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Access&nbsp;<strong>pfSense<\/strong>&nbsp;at&nbsp;<code><a href=\"https:\/\/192.168.5.1\/\">https:\/\/192.168.5.1<\/a><\/code><\/li>\n\n\n\n<li>Go to&nbsp;<strong>Firewall \u2192 NAT<\/strong><\/li>\n\n\n\n<li>Under the&nbsp;<strong>Port Forward<\/strong>&nbsp;tab, click&nbsp;<strong>Add<\/strong><\/li>\n\n\n\n<li>Configure the following:\n<ul class=\"wp-block-list\">\n<li><strong>Interface<\/strong>: WAN (incoming traffic)<\/li>\n\n\n\n<li><strong>Protocol<\/strong>: TCP<\/li>\n\n\n\n<li><strong>Source<\/strong>: Any&nbsp;<em>(you can\u2019t predict which mail servers will email you)<\/em><\/li>\n\n\n\n<li><strong>Destination<\/strong>: WAN address<\/li>\n\n\n\n<li><strong>Destination Port Range<\/strong>: 25<\/li>\n\n\n\n<li><strong>Redirect Target IP<\/strong>: Your mail server IP (here in our example it\u2019s&nbsp;<code>192.168.5.3<\/code>)<\/li>\n\n\n\n<li><strong>Redirect Target Port<\/strong>: 25<\/li>\n\n\n\n<li><strong>Description<\/strong>: \u201cReceive Emails\u201d<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Important<\/strong>: Check \u201cAdd associated filter rule\u201d<\/li>\n\n\n\n<li>Click&nbsp;<strong>Save<\/strong><\/li>\n\n\n\n<li>Click&nbsp;<strong>Apply Changes<\/strong><\/li>\n<\/ol>\n\n\n\n<p><strong>Critical Note<\/strong>: Port 25 MUST be open or you\u2019ll never receive email. This is non-negotiable for a mail server.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;When setting up port forwarding for a mail server, make sure that your ISP isn\u2019t blocking it to stop spam. Yours might. It\u2019s not unheard of with residential internet providers. You are paying for a residential connection, not a business one, and they\u2019ll&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=izXnCkrfjO0\">remind you of it way they can<\/a>(actually, they\u2019ll do that even when you pay $409.99\/mo for the business one).<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Add pfSense Firewall Rules (for real)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=351\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=351\">edit source<\/a>]<\/h2>\n\n\n\n<p>You don\u2019t need to add ALL these rules below. If you are okay with being connected to your VPN, or on your local network, to receive &amp; send email, the only rule you need to add is rule #1 so you can receive mail which you just did.<\/p>\n\n\n\n<p>If you want to allow IP addresses that are NOT connecting to your server via VPN into your mail server, you would create an alias with those IPs using the steps in Lesson 1 above, and then use that alias (called&nbsp;<code>mailserver_trusted_clients<\/code>&nbsp;in this case) for everything.<\/p>\n\n\n\n<p>One instance would be if you use a service like&nbsp;<strong>Freshdesk<\/strong>&nbsp;for customer service &amp; opt to use your own mail server. In this case, you would have to&nbsp;<a href=\"https:\/\/support.freshdesk.com\/support\/solutions\/articles\/50000005619-allowlist-nat-ips\"><strong>allow their IP addresses to access your server<\/strong><\/a>&nbsp;so that Freshdesk can read your customer service inbox, and send emails as your customer service email.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_1f1b2c6a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_31037c49.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_8d77cc05.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_54c8a9f1.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_17e7dded.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_cc025f84.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Rule 1: Forwarding SMTP (Port 25) \u2013 the ONLY rule you need if you are using OpenVPN to connect to your mailserver![<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=352\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=352\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Protocol<\/strong>: IPv4 TCP<\/li>\n\n\n\n<li><strong>Source<\/strong>: Any<\/li>\n\n\n\n<li><strong>Destination<\/strong>: 192.168.5.3<\/li>\n\n\n\n<li><strong>Port<\/strong>: 25 (SMTP)<\/li>\n\n\n\n<li><strong>Description<\/strong>: NAT Forward Postfix SMTP to Mailcow<\/li>\n<\/ul>\n\n\n\n<p><strong>What this rule does:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This rule forwards unsecured SMTP traffic on port 25 to the Mailcow server at 192.168.5.3.<\/li>\n\n\n\n<li>SMTP on port 25 is traditionally used for sending emails between email servers. However, it\u2019s not encrypted by default, meaning the data can be sent in plain text.<\/li>\n\n\n\n<li><strong>Why this is ALWAYS needed<\/strong>: Although not as secure as SMTPS, port 25 is required for email delivery between servers on the internet. When your Mailcow server sends or receives emails from other email servers, it typically uses SMTP on port 25. This rule makes sure that your Mailcow server can communicate with other email servers to handle incoming and outgoing email traffic. Keeping port 25 closed means saying goodbye to receiving email. If you\u2019re like me, this might be step 1 to solving a lot of life\u2019s problems\u2026<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Rule 2: Forwarding SMTPS (Port 465)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=353\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=353\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Protocol<\/strong>: IPv4 TCP<\/li>\n\n\n\n<li><strong>Source<\/strong>:&nbsp;<code>mailserver_trusted_clients<\/code><\/li>\n\n\n\n<li><strong>Destination<\/strong>: 192.168.5.3<\/li>\n\n\n\n<li><strong>Port<\/strong>: 465 (SMTP\/S)<\/li>\n\n\n\n<li><strong>Description<\/strong>: NAT Forward Postfix SMTPS to Mailcow<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>What this rule does<\/strong>: &#8211; This rule allows secure SMTP (SMTPS) traffic on port 465 from the clients defined in the&nbsp;<code>mailserver_trusted_clients<\/code>&nbsp;alias to be forwarded to the Mailcow server running on 192.168.5.3. For instance, if you are integrating self-hosted-email with a service like&nbsp;<a href=\"https:\/\/support.freshdesk.com\/support\/solutions\/articles\/195170-using-custom-email-servers-to-set-up-support-emails\">freshdesk<\/a>, you would want to open this port so their app can send emails using your server. However, you would not want to open it to the entire world, just for the clients you want. In the case of freshdesk, you might make a&nbsp;<code>mailserver_trusted_clients<\/code>&nbsp;alias with all of&nbsp;<a href=\"https:\/\/support.freshdesk.com\/support\/solutions\/articles\/50000005619-allowlist-nat-ips\">freshdesk\u2019s IP addresses<\/a>&nbsp;so they make it through on port 465, but nobody else does. &#8211; SMTP (Simple Mail Transfer Protocol) is the protocol used for sending emails. The S at the end of SMTPS indicates that this is a secure version of SMTP, meaning the communication is encrypted using SSL\/TLS. &#8211;&nbsp;<strong>When this is needed<\/strong>: This rule allows email clients that are NOT connected to your server via VPN to send emails using encryption. If this port is closed, they will not be able to connect to your mail server to send mail. &#8211;&nbsp;<strong>When this NOT needed<\/strong>: This rule is unnecessary if you are sending mail by connecting to your mailserver via VPN, or locally on your home network. It is unnecessary if you do not have external services such as freshdesk that you integrate with your mailserver.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Rule 3: Forwarding Submission (Port 587)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=354\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=354\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Protocol<\/strong>: IPv4 TCP<\/li>\n\n\n\n<li><strong>Source<\/strong>:&nbsp;<code>mailserver_trusted_clients<\/code><\/li>\n\n\n\n<li><strong>Destination<\/strong>: 192.168.5.3<\/li>\n\n\n\n<li><strong>Port<\/strong>: 587 (SUBMISSION)<\/li>\n\n\n\n<li><strong>Description<\/strong>: NAT Forward Postfix Submission to Mailcow<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>What this rule does<\/strong>: &#8211; This rule forwards traffic on port 587 to your Mailcow server at 192.168.5.3.<\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Port 587 is used for email submission by clients (i.e., when you\u2019re sending an email through an email client like Outlook or Thunderbird). This port requires authentication and typically uses STARTTLS to secure the connection.<\/li>\n\n\n\n<li><strong>Why this is needed<\/strong>: Unlike port 25 (which is often used for server-to-server email transmission), port 587 is specifically used for sending emails from a client to the server. When you configure an email client to send messages, you often use port 587 with authentication. This rule makes sure that clients (in this case, the trusted clients defined in&nbsp;<code>mailserver_trusted_clients<\/code>) can securely submit their emails for sending through Mailcow.<\/li>\n\n\n\n<li><strong>When this NOT needed<\/strong>: This rule is unnecessary if you are sending mail by connecting to your mailserver via VPN, or locally on your home network. It is unnecessary if you do not have external services such as freshdesk that you integrate with your mailserver<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Rule 4: Forwarding IMAP (Port 143)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=355\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=355\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Protocol<\/strong>: IPv4 TCP<\/li>\n\n\n\n<li><strong>Source<\/strong>:&nbsp;<code>mailserver_trusted_clients<\/code><\/li>\n\n\n\n<li><strong>Destination<\/strong>: 192.168.5.3<\/li>\n\n\n\n<li><strong>Port<\/strong>: 143 (IMAP)<\/li>\n\n\n\n<li><strong>Description<\/strong>: NAT Forward Dovecot IMAP to Mailcow<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">What this rule does:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=356\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=356\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This rule forwards IMAP traffic on port 143 to the Mailcow server at 192.168.5.3.<\/li>\n\n\n\n<li>IMAP (Internet Message Access Protocol) is used by email clients to retrieve emails from the mail server. IMAP allows users to keep their emails on the server and access them from multiple devices.<\/li>\n\n\n\n<li><strong>Why this is needed<\/strong>: This rule allows clients to access their emails using the non-encrypted version of IMAP on port 143. It allows clients to view and manage their emails stored on the server without downloading them to their devices.<\/li>\n\n\n\n<li><strong>When this NOT needed<\/strong>: This rule is unnecessary if you are receiving mail by connecting to your mailserver via VPN, or locally on your home network. It is unnecessary if you do not have external services such as freshdesk that you integrate with your mailserver<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Rule 5: Forwarding IMAPS (Port 993)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=357\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=357\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Protocol<\/strong>: IPv4 TCP<\/li>\n\n\n\n<li><strong>Source<\/strong>:&nbsp;<code>mailserver_trusted_clients<\/code><\/li>\n\n\n\n<li><strong>Destination<\/strong>: 192.168.5.3<\/li>\n\n\n\n<li><strong>Port<\/strong>: 993 (IMAP\/S)<\/li>\n\n\n\n<li><strong>Description<\/strong>: NAT Forward Dovecot IMAPS to Mailcow<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">What this rule does:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=358\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=358\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This rule forwards secure IMAP traffic (IMAPS) on port 993 to the Mailcow server.<\/li>\n\n\n\n<li>IMAPS is the encrypted version of IMAP. It uses SSL\/TLS to secure communication between the email client and the server.<\/li>\n\n\n\n<li><strong>Why this is needed<\/strong>: This rule allows users to securely access their emails stored on the server using IMAP. This is the preferred method for most modern email clients, as it encrypts the communication, making sure that sensitive information like email contents and credentials are protected while being retrieved by the client.<\/li>\n\n\n\n<li><strong>When this NOT needed<\/strong>: This rule is unnecessary if you are receiving mail by connecting to your mailserver via VPN, or locally on your home network. It is unnecessary if you do not have external services such as freshdesk that you integrate with your mailserver<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Rule 6: Forwarding POP3 (Port 110)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=359\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=359\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Protocol<\/strong>: IPv4 TCP<\/li>\n\n\n\n<li><strong>Source<\/strong>:&nbsp;<code>mailserver_trusted_clients<\/code><\/li>\n\n\n\n<li><strong>Destination<\/strong>: 192.168.5.3<\/li>\n\n\n\n<li><strong>Port<\/strong>: 110 (POP3)<\/li>\n\n\n\n<li><strong>Description<\/strong>: NAT Forward Dovecot POP3 to Mailcow<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">What this rule does:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=360\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=360\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This rule forwards POP3 traffic on port 110 to the Mailcow server.<\/li>\n\n\n\n<li>POP3 (Post Office Protocol version 3) is another protocol used to retrieve emails from the server. Unlike IMAP, POP3 typically downloads emails to the local device and removes them from the server.<\/li>\n\n\n\n<li><strong>Why this is needed<\/strong>: This rule allows clients to retrieve emails using POP3. Some users or legacy email clients may prefer to use POP3 if they want to download and store emails locally rather than keeping them on the server.<\/li>\n\n\n\n<li><strong>When this NOT needed<\/strong>: This rule is unnecessary if you are receiving mail by connecting to your mailserver via VPN, or locally on your home network. Also, why are you even thinking of using POP3? Don\u2019t do this.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Rule 7: Forwarding POP3S (Port 995)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=361\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=361\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Protocol<\/strong>: IPv4 TCP<\/li>\n\n\n\n<li><strong>Source<\/strong>:&nbsp;<code>mailserver_trusted_clients<\/code><\/li>\n\n\n\n<li><strong>Destination<\/strong>: 192.168.5.3<\/li>\n\n\n\n<li><strong>Port<\/strong>: 995 (POP3\/S)<\/li>\n\n\n\n<li><strong>Description<\/strong>: NAT Forward Dovecot POP3S to Mailcow<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">What this rule does:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=362\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=362\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This rule forwards secure POP3 (POP3S) traffic on port 995 to the Mailcow server.<\/li>\n\n\n\n<li>POP3S is the encrypted version of POP3, using SSL\/TLS for secure communication.<\/li>\n\n\n\n<li><strong>Why this is needed<\/strong>: This rule enables users to securely retrieve their emails using POP3S. This is preferred over regular POP3 because it makes sure that the email contents and credentials are transmitted securely.<\/li>\n\n\n\n<li><strong>When this NOT needed<\/strong>: This rule is unnecessary if you are receiving mail by connecting to your mailserver via VPN, or locally on your home network. Also why are you even thinking of using POP3? Don\u2019t do this. Use IMAP, POP3 in 2024 is pure insanity.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Rule 8: Forwarding ManageSieve (Port 4190)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=363\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=363\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Protocol<\/strong>: IPv4 TCP<\/li>\n\n\n\n<li><strong>Source<\/strong>:&nbsp;<code>mailserver_trusted_clients<\/code><\/li>\n\n\n\n<li><strong>Destination<\/strong>: 192.168.5.3<\/li>\n\n\n\n<li><strong>Port<\/strong>: 4190<\/li>\n\n\n\n<li><strong>Description<\/strong>: NAT Forward Dovecot ManageSieve to Mailcow<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">What this rule does:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=364\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=364\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This rule forwards ManageSieve traffic on port 4190 to the Mailcow server.<\/li>\n\n\n\n<li>ManageSieve is a protocol used to manage server-side email filtering rules (such as automated sorting of emails into folders, marking emails as spam, etc.). This is done on the server side rather than through a client-side rule.<\/li>\n\n\n\n<li><strong>Why this is needed<\/strong>: This rule allows trusted clients to create and manage email filtering rules on the server. For example, users can create rules to automatically move incoming emails from a certain sender into a specific folder. It\u2019s useful for managing email organization and automating tasks at the server level. I don\u2019t bother with this, but you can if you want to.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">TL;DR of self-hosted email firewall rules:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=365\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=365\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Using OpenVPN to connect to your mailserver?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=366\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=366\">edit source<\/a>]<\/h3>\n\n\n\n<p>Port 25 is all you have to open to the public so you receive mail from other servers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Need clients outside LAN that don\u2019t have VPN access to connect to your mailserver?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=367\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=367\">edit source<\/a>]<\/h3>\n\n\n\n<p>Then you gotta make an alias with their IPs &amp; make all of the rules I provided above.<\/p>\n\n\n\n<p>Let\u2019s say you want ANY IP from ANYWHERE IN THE WORLD to connect to your mailserver; which is a horrible idea; instead of an alias, you\u2019d specify \u201cany\u201d in the \u201csource\u201d section.<\/p>\n\n\n\n<p>This is a bad idea, IMO, on par with the bad idea of being a newbie &amp; doing self-hosted mail.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>What you should do:<\/strong>&nbsp;Just stick to using a VPN to access your inbox, install OpenVPN &amp; K9 Mail on your Android phone and be done with it. Connecting to your VPN on a laptop as well is very easy, it\u2019s one click or one command in the terminal &amp; you should be doing that so you can access all of your other services anyway.**<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Port 25 (SMTP)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=368\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=368\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Why it is open to everyone<\/strong>: Port 25 is used for server-to-server email transmission, which means email servers from around the world need to be able to reach your Mailcow server to deliver incoming mail. Since this is a very important function for your mail server, it makes sense to allow traffic on port 25 from any source.<\/li>\n\n\n\n<li><strong>Security concerns<\/strong>: Since port 25 is open to the world, it can be targeted by spammers or malicious actors trying to exploit the service. However, this is mitigated by using tools such as&nbsp;<code>fail2ban<\/code>,&nbsp;<code>rspamd<\/code>, and strong SMTP authentication policies to detect and block abuse.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_d4378b80.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_7ea57844.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_9d6a661d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_279c986f.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_84524b73.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_6660b4ba.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_9116781d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_a783a2bb.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_e9001ea9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_690c5265.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_a8761f8d.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7: Verify SMTP Relay Setup[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=369\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=369\">edit source<\/a>]<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Test Email Delivery<\/strong>:<\/li>\n\n\n\n<li>Once the configuration is saved, send a test email to ensure Mailcow is using Postmark to relay emails successfully. I would suggest sending your test email to four addresses:\n<ul class=\"wp-block-list\">\n<li>Email to yourself (same email in Mailcow you are sending from).<\/li>\n\n\n\n<li>Email to another mailbox on Mailcow.<\/li>\n\n\n\n<li>Email to a \u201cfriendly\u201d server, i.e., something not hosted by the main mega providers (another person who hosts their own email).<\/li>\n\n\n\n<li>A Gmail\/iCloud\/Microsoft email address.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>Each one tests a portion of the chain.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If 1 doesn\u2019t work, you\u2019re hopelessly screwed.<\/li>\n\n\n\n<li>If 2 works but not 3, perhaps a network problem.<\/li>\n\n\n\n<li>If 1, 2, &amp; 3 work but not 4, you\u2019ve likely screwed up something in the SMTP relay or DNS records process, but the networking configuration and Mailcow setup in general is mostly working. It\u2019s also possible that you did everything right, but Google\/Apple\/Microsoft still hate you. It\u2019s ok. You can\u2019t hate them back though. As my first studio employer told me,&nbsp;<em>\u201cLouis, you hate nothing, you intensely dislike it!\u201d<\/em><\/li>\n<\/ul>\n\n\n\n<p>If all 4 work, great! If you get something like this in your email when sending, you made a stupid typo when setting up SMTP relay. Can you find mine?<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> &gt; This is the mail system at host mail.louishomeserver.chickenkiller.com.\n  &gt; I'm sorry to have to inform you that your message could not be delivered to one or more recipients. It's attached below. For further assistance, please send mail to postmaster. If you do so, please include this problem report. You can delete your own text from the attached returned message.\n  &gt; The mail system\n  &gt; &lt;rossmanngroup@gmail.com&gt;: Host or domain name not found. Name service error for name=smtp.postmark.com type=A: Host not found\n  &gt; &lt;louis@rossmanngroup.com&gt;: Host or domain name not found. Name service error for name=smtp.postmark.com type=A: Host not found<\/pre>\n\n\n\n<p>This concludes the guide on setting up Postmark as an SMTP relay for your Mailcow server, configuring DNS records, and setting up firewall rules. Remember to double-check all your configurations and test thoroughly to provide everything is working as expected. Or, don\u2019t &amp; give up. The latter is recommended.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 8 \u2013 Spam controls[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=370\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=370\">edit source<\/a>]<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_e4a0e1aa.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_4909c297.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_83cfe68f.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_a210ae1a.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Accessing the Rspamd Interface[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=371\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=371\">edit source<\/a>]<\/h4>\n\n\n\n<p>To access the Rspamd web interface, you need to be logged in as an administrator on Mailcow. Here\u2019s how you do it:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to&nbsp;<code><a href=\"http:\/\/your-mailcow-address\/admin\">http:\/\/your-mailcow-address\/admin<\/a><\/code><\/li>\n\n\n\n<li>Enter your admin password<\/li>\n\n\n\n<li>Navigate to&nbsp;<strong>System &gt; Configuration &gt; Actions &gt; Rspamd<\/strong><\/li>\n\n\n\n<li>Set your password for Rspamd<\/li>\n<\/ol>\n\n\n\n<p>Once you\u2019re in, you can train the system manually and upload things for it to learn from.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_3a6b6ed2.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_bd3e5f50.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_5792c482.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Accessing YOUR inbox\u2019s spam controls[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=372\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=372\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Log into the Mailcow interface with your EMAIL USERNAME &amp; PASSWORD, NOT AS ADMIN<\/li>\n\n\n\n<li>Go to&nbsp;<strong>Email \u2192 Spam Filter<\/strong><\/li>\n\n\n\n<li>Slide the slidy thingy &amp; have fun&nbsp;\ud83d\ude42<\/li>\n<\/ol>\n\n\n\n<p>To set the spam controls for your specific account, log in as your USER to the web interface, not an admin.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">pfBlockerNG for spam prevention[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=373\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=373\">edit source<\/a>]<\/h4>\n\n\n\n<p>Remember when we set up&nbsp;<strong>pfBlockerNG<\/strong>&nbsp;in our&nbsp;<strong>pfSense<\/strong>&nbsp;router?<\/p>\n\n\n\n<p><strong>pfBlockerNG<\/strong>&nbsp;has IPv4 blocklists like Lashback that are great for reducing spam from known bad actors, such as people who explicitly send email to addresses that they know are on&nbsp;<em>\u201cunsubscribe\u201d<\/em>&nbsp;lists. If you use&nbsp;<strong>pfBlockerNG<\/strong>&nbsp;with these lists, when servers with IPs on these blocklists try to send you mail on port 25, they will be blocked&nbsp;<em>at the router level<\/em>&nbsp;before these known bad actors even make their way to your&nbsp;<code>mailcow<\/code>&nbsp;server or spam filter.<\/p>\n\n\n\n<p>Take a look at these lists. They are incredibly useful!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Don\u2019t do this[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=374\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=374\">edit source<\/a>]<\/h2>\n\n\n\n<p><strong>Warning:<\/strong>&nbsp;Self-hosting email is a high-maintenance, complicated task. Just because you can do it doesn\u2019t mean you should. It\u2019s a decision you might regret later.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Home Assistant to control your air conditioners &amp; full smarthome control[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=375\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=375\">edit source<\/a>]<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_5994d652.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_fc2a8f08.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_d9a40228.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_de21b07.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">What is Home Assistant?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=376\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=376\">edit source<\/a>]<\/h2>\n\n\n\n<p>Home Assistant allows you to control everything from your lights to your air conditioner to your car\u2019s remote start, all within an open-source system that YOU control! It is a system that works with plugins developed by open-source devs around the world who are just as frustrated as you are that the smart home future we were promised is chock full of spyware, subscriptions, and enshittification. We\u2019re going to be using this to adjust an air conditioner\u2019s temperature, so if we\u2019re going to be home early, we can tell it to turn on remotely a little earlier without allowing the A\/C to connect to the internet, and also for getting alerts when someone walks by one of our security cameras.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Installing Home Assistant[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=377\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=377\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Download the Home Assistant KVM Image and Prepare it for Use[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=378\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=378\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to the&nbsp;<em><a href=\"https:\/\/www.home-assistant.io\/installation\/linux\">official Home Assistant website<\/a><\/em>.<\/li>\n\n\n\n<li><strong>Find the KVM Image<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Scroll down to the section titled \u201cKVM(virt-manager)\u201d.<\/li>\n\n\n\n<li>Click the link to download the latest KVM&nbsp;<code>.qcow2.xz<\/code>&nbsp;image from the official Home Assistant GitHub releases. Alternatively, you can download directly from the GitHub link provided&nbsp;<em><a href=\"https:\/\/github.com\/home-assistant\/operating-system\/releases\/download\/13.1\/haos_ova-13.1.qcow2.xz\">here<\/a><\/em>.<\/li>\n\n\n\n<li><em>(Note: This file version will change over time, so make sure you are downloading the latest release.)<\/em><\/li>\n\n\n\n<li><em>MAKE SURE YOU GRAB THE ONE FOR KVM VIRSH VIRTUAL MACHINE MANAGER IN LINUX, NOT THE VIRTUALBOX ONE!<\/em><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Download and Unzip the Image<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Once the download is complete, you\u2019ll need to unzip the&nbsp;<code>.qcow2.xz<\/code>&nbsp;file. Run the following command to decompress the file:xz -d haos_ova-13.1.qcow2.xz<\/li>\n\n\n\n<li><em>(Make sure the filename reflects the version you downloaded, as it may vary.)<\/em><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Move the Unzipped Image to the Correct Directory<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Move the decompressed&nbsp;<code>.qcow2<\/code>&nbsp;file to your virtual machine images directory, typically&nbsp;<code>\/var\/lib\/libvirt\/images\/<\/code>. Use the following command to move it:sudo mv ~\/Downloads\/haos_ova-13.1.qcow2 \/var\/lib\/libvirt\/images\/<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Set the Correct Ownership and Permissions<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Change the ownership of the image file so that it is owned by the&nbsp;<code>libvirt-qemu<\/code>&nbsp;user and group:sudo chown libvirt-qemu:libvirt \/var\/lib\/libvirt\/images\/haos_ova-13.1.qcow2<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Set the right permissions to make sure it is readable and writable by the owner, but not everyone else:<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo chmod 0640 \/var\/lib\/libvirt\/images\/haos_ova-13.1.qcow2<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_6a102293.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_fc378926.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_7540e9f2.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_c44a31fb.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_83761502.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_5af2cd09.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_696b6c09.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_48c367ce.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.2 Install the Home Assistant Virtual Machine on Ubuntu Server Linux[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=379\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=379\">edit source<\/a>]<\/h4>\n\n\n\n<p>Before, we chose \u201clocal install media\u201d when installing Ubuntu Server to our virtual machine for mailcow, but Home Assistant is a little different. It\u2019s an operating system that is all ready to go \u2013 it\u2019s installed, configured, etc. We are going to be choosing the \u201cimport existing disk image\u201d option to boot it up.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Open Virtual Machine Manager<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Right-click on the desktop of your Ubuntu Server.<\/li>\n\n\n\n<li>Navigate to&nbsp;<strong>Applications &gt; System &gt; Virtual Machine Manager<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Create a New Virtual Machine<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Once Virtual Machine Manager is open, click on&nbsp;<strong>Create a new virtual machine<\/strong>.<\/li>\n\n\n\n<li>In the wizard that appears, choose the option&nbsp;<strong>Import existing disk image<\/strong>.<\/li>\n\n\n\n<li>Unlike the past virtual machine where we were installing an operating system from scratch, this is an image of an operating system that has already been \u201cinstalled\u201d and configured elsewhere; therefore, all we need to do is import it.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Select the Home Assistant Image<\/strong>:\n<ul class=\"wp-block-list\">\n<li>When prompted to choose an installation source, browse to&nbsp;<code>\/var\/lib\/libvirt\/images\/<\/code>&nbsp;and select the Home Assistant&nbsp;<code>.qcow2<\/code>&nbsp;image you moved in the previous step.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Choose Operating System Type<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Select&nbsp;<strong>Generic Linux 2022<\/strong>&nbsp;as the operating system type. The official Home Assistant instructions suggest using a \u201cgeneric\u201d Linux option.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Set Memory and CPU Allocation<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Set the RAM to 2048 MB (2 GB).<\/li>\n\n\n\n<li>Assign 2 CPUs to the virtual machine.<\/li>\n\n\n\n<li>It is recommended to use 2 CPUs, even though this might feel like overkill for a thermostat-related function. And it does.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Name the Virtual Machine<\/strong>:\n<ul class=\"wp-block-list\">\n<li>In the same setup window, name the virtual machine&nbsp;<code>homeassistant<\/code>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Customize Configuration Before Installation<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Before clicking&nbsp;<strong>Finish<\/strong>, make sure you check the box that says&nbsp;<strong>Customize configuration before install<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Set Firmware to UEFI<\/strong>: you want UEFI x86-64:&nbsp;<code>\/usr\/share\/OVMF\/OVMF_CODE_4M.ms.fd<\/code>&nbsp;\u2013 DO NOT CHOOSE THE ONE THAT SAYS \u201cSECBOOT\u201d<\/li>\n<\/ul>\n\n\n\n<p><strong>Set up this virtual machine to start every time the host computer, happycloud, boots by typing this into a terminal:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">virsh autostart homeassistant<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check that this is set up properly by typing&nbsp;<code>virsh dominfo homeassistant<\/code>&nbsp;and seeing if the autostart line is set to enable.<\/li>\n\n\n\n<li>If you don\u2019t do this, you will realize once it is too late &amp; you\u2019ve left your house after you have rebooted your server (for whatever reason) that none of your services are working. This will suck.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_48c367ce.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_1f366dc.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_8ebe041d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_d116f2c3.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_2cfe4d00.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_9f65df5c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_c95bffa.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_d42cf5c1.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdmy_tmp_f0ebdd74.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Start and Configure Home Assistant[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=380\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=380\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 Start the Virtual Machine[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=381\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=381\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In&nbsp;<strong>Virtual Machine Manager<\/strong>, locate your Home Assistant virtual machine and start the VM.<\/li>\n\n\n\n<li>Wait for the machine to boot up fully.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 Identify the IP Address[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=382\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=382\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Once the virtual machine has finished booting, check the console within&nbsp;<strong>Virtual Machine Manager<\/strong>. You will see an IP address displayed (e.g., 192.168.5.16).<\/li>\n\n\n\n<li>We did not \u201cinstall\u201d this operating system like with the previous mailcow mailserver installation; we imported someone else\u2019s installation. This means we do not have its IP address, nor were we given an opportunity to set up Home Assistant with a static IP yet. It is good to pay attention here so you see its IP address and know where to find it.<\/li>\n\n\n\n<li>When it says the URL is&nbsp;<em><a href=\"http:\/\/homeassistant.local\/\">http:\/\/homeassistant.local<\/a><\/em>:8123, this is wrong. It is assuming that our \u201cdomain\u201d is&nbsp;<code>.local<\/code>. By default,&nbsp;<strong>pfSense<\/strong>&nbsp;sets this to&nbsp;<code>home.arpa<\/code>.<\/li>\n\n\n\n<li>If no IP address is displayed on the console, you can also check your DHCP server or router (like&nbsp;<strong>pfSense<\/strong>) to find the IP assigned to the Home Assistant VM.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 Access Home Assistant Web Interface[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=383\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=383\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open a web browser on your local machine.<\/li>\n\n\n\n<li>In the address bar, type the following to access the Home Assistant web interface:&nbsp;<code><a href=\"http:\/\/homeassistant.home.arpa:8123\/\">http:\/\/homeassistant.home.arpa:8123<\/a><\/code>&nbsp;(For example:&nbsp;<code><a href=\"http:\/\/192.168.5.16:8123\/\">http:\/\/192.168.5.16:8123<\/a><\/code>).<\/li>\n\n\n\n<li>At the time of writing this guide, Home Assistant will only load on&nbsp;<code>http:\/\/<\/code>&nbsp;by default when first started, not&nbsp;<code>https:\/\/<\/code>, if you use their fully-fledged HaOS virtual machine image. Don\u2019t worry, you didn\u2019t break anything.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.4 Follow On-Screen Setup Instructions[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=384\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=384\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>It will tell you to wait up to 20 minutes to load.<\/li>\n\n\n\n<li>You will be greeted by the Home Assistant setup wizard. Follow the on-screen instructions to complete the setup.<\/li>\n\n\n\n<li>Create a Home Assistant Account: Enter a username, password, and any additional information required.<\/li>\n\n\n\n<li>Configure Location &amp; Units: Choose your location and preferred units (imperial or metric).<\/li>\n\n\n\n<li>Add Devices and Services: Home Assistant will begin searching for devices on your network. Depending on your network configuration, devices may automatically be discovered. This is pretty cool. I like this.<\/li>\n\n\n\n<li>You don\u2019t have to \u201ctrust\u201d them, it\u2019s open source so you can see what it is doing while probing. This is not probing to mess with or spy on you, it\u2019s doing this to try to make your life easier\u2026 The thing technology was supposed to do for you.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.5 Complete Setup[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=385\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=385\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Once you\u2019ve created your account and finished the basic configuration, Home Assistant will finalize the installation and setup. You are now ready to take back your air conditioner from the proprietary cloud.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Configure Home Assistant with a Static IP[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=386\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=386\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Home Assistant Network Configuration:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=387\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=387\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_8dbeaafa.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_68d29356.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_25b69769.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.1 Access Home Assistant\u2019s Network Settings[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=388\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=388\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open the Home Assistant web interface by navigating to&nbsp;<code>http:\/\/[your_homeassistant_ip]:8123<\/code>.<\/li>\n\n\n\n<li>Once logged in, go to&nbsp;<strong>Settings<\/strong>&nbsp;(found at the bottom left of the sidebar).<\/li>\n\n\n\n<li>From the&nbsp;<strong>Settings<\/strong>&nbsp;page, click on&nbsp;<strong>System<\/strong>&nbsp;and then select&nbsp;<strong>Network<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.2 Modify Network Interface[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=389\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=389\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In the&nbsp;<strong>Network<\/strong>&nbsp;section, find the network interface (e.g.,&nbsp;<code>eth0<\/code>) that Home Assistant is using.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Configure<\/strong>&nbsp;next to the interface to edit its settings.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.3 Switch to a Static IP Configuration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=390\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=390\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Change the network type from&nbsp;<strong>DHCP<\/strong>&nbsp;to&nbsp;<strong>Static<\/strong>&nbsp;to manually configure the IP address.<\/li>\n\n\n\n<li>Set the following details:\n<ul class=\"wp-block-list\">\n<li><strong>IP Address:<\/strong>&nbsp;Enter the desired static IP address (e.g.,&nbsp;<code>192.168.5.4<\/code>).<\/li>\n\n\n\n<li><strong>Gateway:<\/strong>&nbsp;Enter the gateway IP address, the IP of your pfSense router (e.g.,&nbsp;<code>192.168.5.1<\/code>).<\/li>\n\n\n\n<li><strong>DNS Server:<\/strong>&nbsp;Enter the IP address of the DNS server (your pfSense router\u2019s IP, e.g.,&nbsp;<code>192.168.5.1<\/code>).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.4 Save the Configuration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=391\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=391\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Once you\u2019ve set the static IP, gateway, and DNS, click&nbsp;<strong>Save<\/strong>&nbsp;to apply the changes.<\/li>\n\n\n\n<li>Home Assistant will now be reachable at the static IP address you configured.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.5 Save the Configuration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=392\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=392\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Once you\u2019ve set the static IP, gateway, and DNS, click&nbsp;<strong>Save<\/strong>&nbsp;to apply the changes.<\/li>\n\n\n\n<li>Home Assistant will now be reachable at the static IP address you configured.<\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_fb68028c.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>![(images\/lu55028jxdtp_tmp_5504653d.png)<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_22a2f148.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Timeline_1_04_41_14_33.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_b09fba6a.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Add a Static IP mapping in pfSense[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=393\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=393\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">3.6 Log in to pfSense[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=394\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=394\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open your web browser and navigate to the pfSense web interface (e.g.,&nbsp;<code><a href=\"https:\/\/192.168.5.1\/\">https:\/\/192.168.5.1<\/a><\/code>&nbsp;or&nbsp;<code><a href=\"https:\/\/pfsense.home.arpa\/\">https:\/\/pfSense.home.arpa<\/a><\/code>).<\/li>\n\n\n\n<li>Log in using your admin credentials.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.7 Navigate to DHCP Server Settings[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=395\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=395\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Once inside pfSense, go to&nbsp;<strong>Services &gt; DHCP Server<\/strong>.<\/li>\n\n\n\n<li>In the DHCP Server settings, go to the&nbsp;<strong>LAN<\/strong>&nbsp;tab, as this is where you\u2019ll configure the static mapping for devices on your local network.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.8 Add a Static IP Mapping[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=396\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=396\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Scroll down to the&nbsp;<strong>DHCP Static Mappings<\/strong>&nbsp;section and click on&nbsp;<strong>Add Static Mapping<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.9 Enter the Information[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=397\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=397\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>MAC Address:<\/strong>&nbsp;Find the MAC address of your Home Assistant virtual machine. To do this:\n<ul class=\"wp-block-list\">\n<li>In pfSense, navigate to&nbsp;<strong>Diagnostics &gt; ARP Table<\/strong>.<\/li>\n\n\n\n<li>Look for the MAC address associated with the Home Assistant VM\u2019s current IP (this can also be found within the Virtual Machine Manager or via the Home Assistant network settings).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>IP Address:<\/strong>&nbsp;Enter the static IP address you configured earlier in Home Assistant (e.g.,&nbsp;<code>192.168.5.4<\/code>).<\/li>\n\n\n\n<li><strong>Description:<\/strong>&nbsp;Enter a description for easy identification (e.g., homeassistant).<\/li>\n\n\n\n<li><strong>Hostname:<\/strong>&nbsp;Enter&nbsp;<code>homeassistant<\/code><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.92 Save and Apply Changes[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=398\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=398\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click&nbsp;<strong>Save<\/strong>&nbsp;to add the static mapping.<\/li>\n\n\n\n<li>After saving, click&nbsp;<strong>Apply Changes<\/strong>&nbsp;to make sure the static IP reservation is applied on your network.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.94. Make Sure This Actually Works[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=399\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=399\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>After configuring the static IP and DHCP mapping:\n<ul class=\"wp-block-list\">\n<li>Make sure Home Assistant is reachable at the assigned IP (e.g.,&nbsp;<code><a href=\"http:\/\/192.168.5.4:8123\/\">http:\/\/192.168.5.4:8123<\/a><\/code>).<\/li>\n\n\n\n<li>In pfSense, you can check the&nbsp;<strong>Status &gt; DHCP Leases<\/strong>&nbsp;section to confirm that Home Assistant is using the correct IP address and that the static mapping is working.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_35f2d05.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_46f57247.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_134fbcd6.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_132130f0.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_9865e7ff.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_20521c00.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_dcbab263.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_8e2628b5.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_78c8cb71.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Set Up the Venstar Thermostat so Home Assistant can see it[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=400\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=400\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">4.1. Connect the Venstar Thermostat to Wi-Fi[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=401\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=401\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>On the thermostat, go to&nbsp;<strong>Wi-Fi Setup<\/strong>. The thermostat will display a list of available networks.<\/li>\n\n\n\n<li>Select your desired Wi-Fi network and enter the password if necessary.<\/li>\n\n\n\n<li>Once connected, make sure that the thermostat remains on the same network that your Home Assistant instance is on, or another network that can communicate with Home Assistant.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;Make sure you tap the right network; this garbage touchscreen makes it very easy to tap the wrong network &amp; not notice it. Whoever chose this touchscreen should be in the same prison with the engineers of the A1237\/A1304 model MacBook Air from 2008.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">4.2 Configure the Local API on the Thermostat[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=402\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=402\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>On the thermostat, navigate to the&nbsp;<strong>Local API Options<\/strong>.<\/li>\n\n\n\n<li>Turn on&nbsp;<strong>Local API access<\/strong>, which is necessary for Home Assistant to communicate with the thermostat.<\/li>\n\n\n\n<li>Set a username (e.g., second floor), and configure a Basic Auth password. You\u2019ll need this information when adding the thermostat in Home Assistant.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">4.3 Assign a Static IP to the Thermostat[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=403\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=403\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>On the thermostat, navigate to&nbsp;<strong>Manual Setup &gt; Network Settings<\/strong>.<\/li>\n\n\n\n<li>Assign a static IP to the thermostat. This ensures that the IP address does not change, which is very important or you will find yourself freezing to death when you can\u2019t turn off the A\/C.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;Home assistant needs to know where to find the thermostat; at the same place, every single time. Anytime you attach an IoT device to your network, it is a good practice to give it a static IP. You will find out later in the \u201csyncthing\u201d section why expecting \u201cauto locate\u201d features to work proprerly is a bad idea. Summers are 117 degrees fahrenheit in Texas; I\u2019m not trusting that to DHCP.<\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>IP Address:<\/strong>&nbsp;192.168.5.18 (or another appropriate IP in your network range)<\/li>\n\n\n\n<li><strong>Gateway:<\/strong>&nbsp;192.168.5.1 (typically your&nbsp;<strong>pfSense<\/strong>&nbsp;router\u2019s IP)<\/li>\n\n\n\n<li><strong>DNS Server:<\/strong>&nbsp;192.168.5.1<\/li>\n\n\n\n<li><strong>Subnet Mask:<\/strong>&nbsp;255.255.255.0<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">4.4 Confirm the Settings[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=404\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=404\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>After entering the network configuration, make sure that the thermostat is connected and reachable on your network.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_3756eeae.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_25adf640.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_a95a89f4.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_28b42c93.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_ff730254.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_83532402.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_8b9bc651.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_5e9c6f46.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_437e4496.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_f1dcce3c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_195f5ef1.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_9badefce.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_63c458ef.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_69ea9520.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Add the Venstar Integration in Home Assistant[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=405\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=405\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">5.1 Access Home Assistant[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=406\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=406\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open the Home Assistant web interface by navigating to&nbsp;<code>http:\/\/[your_homeassistant_ip]:8123<\/code>.<\/li>\n\n\n\n<li>Log in with your Home Assistant credentials.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.2 Navigate to the Integrations Section[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=407\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=407\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In Home Assistant, click on&nbsp;<strong>Settings<\/strong>&nbsp;from the sidebar.<\/li>\n\n\n\n<li>Under&nbsp;<strong>Settings<\/strong>, go to&nbsp;<strong>Devices &amp; Services<\/strong>.<\/li>\n\n\n\n<li>Click on&nbsp;<strong>Add Integration<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.3 Search for the Venstar Integration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=408\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=408\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In the search bar, type&nbsp;<strong>Venstar<\/strong>&nbsp;to find the Venstar integration.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.4 Enter Thermostat Details[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=409\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=409\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When prompted, enter the following information:\n<ul class=\"wp-block-list\">\n<li><strong>Host:<\/strong>&nbsp;Enter the static IP address you assigned to the thermostat (e.g., 192.168.5.18).<\/li>\n\n\n\n<li><strong>Username:<\/strong>&nbsp;Enter the username you set up on the thermostat (e.g., second floor).<\/li>\n\n\n\n<li><strong>PIN Code:<\/strong>&nbsp;If required by your thermostat model, enter the PIN code (optional). THIS THERMOSTAT DOES NOT REQUIRE PIN<\/li>\n\n\n\n<li><strong>SSL Certificate:<\/strong>&nbsp;yes by default for my thermostat, may be different for yours. For mine, it is yes.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.5 Submit the Integration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=410\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=410\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click&nbsp;<strong>Submit<\/strong>. Home Assistant will now attempt to connect to your Venstar thermostat using the provided details.<\/li>\n\n\n\n<li>If successful, the Venstar thermostat will be added as a device in Home Assistant.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Configure the Thermostat in Home Assistant[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=411\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=411\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">6.1 Assign the Thermostat to an Area[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=412\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=412\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>After adding the integration, you can assign the thermostat to an area, such as Living Room. This part confuses me, there are so many labels &amp; subcategories. It is easy to get lost in them all.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">6.2 Add Thermostat Controls to Your Dashboard[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=413\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=413\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Overview<\/strong>&nbsp;in Home Assistant.<\/li>\n\n\n\n<li>Click the diagonal line that is supposed to look like a pencil in the upper right hand corner.<\/li>\n\n\n\n<li>Now you are in the edit dashboard menu, that does absolutely nothing.<\/li>\n\n\n\n<li>Click the three dots in the upper right corner, then click&nbsp;<strong>take control<\/strong>&nbsp;so you can actually edit your dashboard.<\/li>\n\n\n\n<li>Click&nbsp;<strong>start with an empty dashboard<\/strong><\/li>\n\n\n\n<li>Click on&nbsp;<strong>Edit Dashboard<\/strong>, then click&nbsp;<strong>Add Card<\/strong>.<\/li>\n\n\n\n<li>Select&nbsp;<strong>Thermostat<\/strong>&nbsp;as the card type, and choose your Venstar thermostat from the list.<\/li>\n\n\n\n<li>Give the thermostat a cool name, like Second Floor Thermostat, and click&nbsp;<strong>Done<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">6.3 Customize the Dashboard[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=414\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=414\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you want to adjust or hide certain things, you need to click&nbsp;<strong>\u201cTake Control\u201d<\/strong>&nbsp;in what is some of the most confusing UI of all time.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;You have to hit&nbsp;<strong>Take Control<\/strong>&nbsp;in order to do anything with the interface. This is not obvious or intuitive. I set up my dashboard on android when I set up my own system, so I never saw the dashboard in the web interface. I tried the web interface dashboard for the first time when I did this guide. It owned me good.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">6.4. Use the Venstar Thermostat in Home Assistant[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=415\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=415\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Control the Thermostat\n<ul class=\"wp-block-list\">\n<li>From the dashboard, you can now adjust the temperature, set heating or cooling modes, and control the fan (e.g., always on or only when the compressor is active).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>View Historical Data\n<ul class=\"wp-block-list\">\n<li>Home Assistant provides historical graphs showing temperature changes and thermostat actions (e.g., target temperature vs.&nbsp;actual temperature) over time, which you can view directly in the thermostat card on your dashboard.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_42249f5f.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_d9a6710f.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_1308f505.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_d1f64c00.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_c83f5b97.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_f7a08a29.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_2cf2e4b1.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7: Install Home Assistant Application on Your Phone to Adjust POS Thermostat So You Never Have to Touch Its Touchscreen Again[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=416\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=416\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">7.1 Install the Home Assistant App on Android[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=417\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=417\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the Google Play Store\n<ul class=\"wp-block-list\">\n<li>On your Android device, open the&nbsp;<strong>Google Play Store<\/strong>&nbsp;app.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Search for Home Assistant\n<ul class=\"wp-block-list\">\n<li>In the search bar, type&nbsp;<strong>Home Assistant<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Install the App\n<ul class=\"wp-block-list\">\n<li>Once you find the Home Assistant app (from Nabu Casa), tap&nbsp;<strong>Install<\/strong>&nbsp;to download and install it on your phone.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Open the App\n<ul class=\"wp-block-list\">\n<li>After installation is complete, tap&nbsp;<strong>Open<\/strong>&nbsp;to start the Home Assistant app.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">7.2 Make Sure OpenVPN Connect is Connected[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=418\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=418\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open the&nbsp;<strong>OpenVPN Connect<\/strong>&nbsp;app and connect to the VPN profile you set up for accessing your home network.<\/li>\n<\/ul>\n\n\n\n<p>It\u2019s important that you are connected to your VPN when accessing Home Assistant from outside your local network! None of this is set up with open ports to the outside world. Without VPN, no air conditioning for you.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">7.3. Log In to Home Assistant on Android[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=419\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=419\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Launch the Home Assistant App<\/strong>\n<ul class=\"wp-block-list\">\n<li>Open the Home Assistant app you installed earlier.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Connect to Home Assistant<\/strong>\n<ul class=\"wp-block-list\">\n<li>The app may automatically search for your Home Assistant instance. If it doesn\u2019t find it, you can manually enter the IP address. Since you are connected via VPN, you\u2019ll enter your Home Assistant server\u2019s local IP, aka&nbsp;<a href=\"http:\/\/192.168.5.4\/\">http:\/\/192.168.5.4<\/a>:8123.<\/li>\n\n\n\n<li>You can\u2019t add&nbsp;<code>192.168.5.4<\/code>.<\/li>\n\n\n\n<li>You can\u2019t add&nbsp;<code>192.168.5.4:8123<\/code>.<\/li>\n\n\n\n<li>IT MUST BE&nbsp;<a href=\"http:\/\/192.168.5.4\/\">http:\/\/192.168.5.4<\/a>:8123.<\/li>\n\n\n\n<li>You have to have the&nbsp;<code>http:\/\/<\/code>&nbsp;and the port.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Log In<\/strong><\/li>\n\n\n\n<li><strong>Enable Location Tracking (Optional)<\/strong>\n<ul class=\"wp-block-list\">\n<li>You\u2019ll be prompted to enable location tracking. You can choose to allow or deny this depending on your preferences. They\u2019re not spying on you though; they\u2019re nice people, not like the&nbsp;<a href=\"https:\/\/www.texasattorneygeneral.gov\/news\/releases\/attorney-general-ken-paxton-sues-general-motors-unlawfully-collecting-drivers-private-data-and\">evil bastards<\/a>&nbsp;that sold you your car.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">7.4. Adjust the Thermostat Using the Home Assistant App[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=420\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=420\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Access the Thermostat in the App<\/strong>\n<ul class=\"wp-block-list\">\n<li>After logging in, you\u2019ll see the Home Assistant dashboard.<\/li>\n\n\n\n<li>FInd your Venstar Thermostat (e.g., Second Floor Thermostat) on the dashboard.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Control the Thermostat<\/strong>\n<ul class=\"wp-block-list\">\n<li>Tap on the thermostat card to open the controls.<\/li>\n\n\n\n<li>From here, you can:\n<ul class=\"wp-block-list\">\n<li><strong>Adjust the Temperature:<\/strong>&nbsp;Use the sliders or buttons to set the temperature.<\/li>\n\n\n\n<li><strong>Set Mode:<\/strong>&nbsp;Change the thermostat to Heat, Cool, or Auto.<\/li>\n\n\n\n<li><strong>Fan Control:<\/strong>&nbsp;Choose whether the fan should run Continuously or only when the heat\/AC is on.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Monitor Historical Data on when you Had it on<\/strong>\n<ul class=\"wp-block-list\">\n<li>The app will display historical data showing the target temperature and current room temperature over time, so you can see when it was on, etc.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Historical data will not show how many times you have punched the thermostat\u2019s touchscreen, cursed at Venstar, or threatened the lives of the people who engineered it. But it should.<\/p>\n<\/blockquote>\n\n\n\n<h1 class=\"wp-block-heading\">Home surveillance camera system with alerts:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=421\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=421\">edit source<\/a>]<\/h1>\n\n\n\n<p>Next up, I\u2019m going to show you how to set up a home surveillance system. This system will send alerts to your phone whenever someone passes by the cameras around your house. These security cameras use standard protocols like&nbsp;<code>RTSP<\/code>&nbsp;and&nbsp;<code>ONVIF<\/code>&nbsp;\u2013 they are STANDARDS, and as a result, they cannot be taken away from you later. When you buy these cameras, YOU own the cameras, YOU own the video, and YOU own the alerts system. No cloud subscriptions, nobody having the ability to change the terms of the sale. No bullshit.&nbsp;\ud83d\ude42<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Choosing cameras[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=422\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=422\">edit source<\/a>]<\/h2>\n\n\n\n<p>For this tutorial, I am using a Hikvision camera as an example.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why Choose Hikvision Cameras?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=423\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=423\">edit source<\/a>]<\/h3>\n\n\n\n<p>I\u2019m settling with Hikvision for the same reason your parents settled on each other; not because they\u2019re the best, but because they\u2019re good enough &amp; available. These cameras are everywhere, especially in small businesses in New York City. When businesses close and liquidate, you can find these cameras as cheap as $150 for a lot of eight, that do 2 megapixel video in good enough quality to see license plates and make out fine facial features.<\/p>\n\n\n\n<p>You can find these cameras on eBay for as low as $30 or $40 each, and sometimes even cheaper in bulk at liquidation sales. Because they\u2019re so popular, &amp; cheap for the quality you can get, I\u2019m using them as an example.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Alternatives for the Best Quality[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=424\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=424\">edit source<\/a>]<\/h3>\n\n\n\n<p>If you\u2019re looking for the best of the best, I suggest cameras from a company called Axis. They make really high-quality stuff, but you\u2019re not finding a lot of 8 for $150 in a liquidation sale.<\/p>\n\n\n\n<p>If you want the best, there\u2019s nothing like&nbsp;<strong>AXIS<\/strong>.<\/p>\n\n\n\n<p>If you are concerned about Chinese equipment phoning home &amp; sending Xi Jinping photos of you pissing in your backyard at 1 AM, I\u2019ll show you how to create a second network in&nbsp;<strong>pfSense<\/strong>&nbsp;at the end of this guide. Once that\u2019s done, you can make it way more difficult for Xi to get a good view.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Setting up the Hikvision Camera from Scratch[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=425\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=425\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 Introduction to Hikvision IP issues[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=426\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=426\">edit source<\/a>]<\/h4>\n\n\n\n<p>When you get a good camera, it usually uses DHCP to connect to your network. This means when you hook it up, you\u2019ll be able to see it in the ARP table on your&nbsp;<strong>pfSense<\/strong>&nbsp;router. It\u2019ll grab an IP address that your router provides, and boom, it\u2019s on the network.<\/p>\n\n\n\n<p>\u2026I said a GOOD camera. These are (likely grey market) Hikvisions set up into god knows what configuration being sold by a business liquidator.<\/p>\n\n\n\n<p>Cheaper cameras might not do this. They often come with some weird static IP like&nbsp;<code>192.0.0.64<\/code>, and you have no idea what it\u2019s trying to connect to. Hikvision cameras can be like this sometimes.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_99f3299b.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_3bd9e222.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_65220560.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 Download the SADP Tool[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=427\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=427\">edit source<\/a>]<\/h4>\n\n\n\n<p>To fix this IP issue, Hikvision offers a tool called SADP. Unfortunately, this tool requires Windows. So, I\u2019m booting up a sandboxed Windows computer here. It\u2019s a burner computer I use for college math classes because, apparently, you can\u2019t learn math on GNU\/Linux, so I keep it around for the cancer that is Pearson Vue.<\/p>\n\n\n\n<p><strong>Download and Install SADP<\/strong>: Grab it from&nbsp;<a href=\"https:\/\/www.hikvision.com\/us-en\/support\/tools\/hitools\/clea8b3e4ea7da90a9\/\">Hikvision\u2019s website<\/a>.<\/p>\n\n\n\n<p>Sometimes, these cameras come with passwords that even the seller doesn\u2019t know. You might have to reset it by hitting a button inside the camera to get it back to default settings.<\/p>\n\n\n\n<p><strong>Preparing the camera for login<\/strong><\/p>\n\n\n\n<p>Once SADP finds your camera, you can log in and configure it. Often, you\u2019ll need to look up the default password online or in the manual.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_5fb1fcd0.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_5748d3c3.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_4f3a2ffe.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_9ac7122.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 Running SADP to prepare camera for login[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=428\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=428\">edit source<\/a>]<\/h4>\n\n\n\n<p>Once installed, run SADP and have it find your camera. Once it finds your camera, click on that camera, set it to DHCP, and apply the configuration. You have to enter the password to do this.<\/p>\n\n\n\n<p>The reason we are using DHCP at first rather than static IP is because this is insanely janky &amp; I want to confirm that it even works &amp; lets you log in at all before going further.<\/p>\n\n\n\n<p>If you know the password, you\u2019re done with 99% of the setup. If it doesn\u2019t work, google the default password for that specific model of hikvision camera.<\/p>\n\n\n\n<p>If that doesn\u2019t work, you can either:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Message the seller and ask them, but 99% of the time they know less than you about whatever they\u2019re liquidating<\/li>\n\n\n\n<li>Open the camera physically &amp; find a button you can hit to reset it. At that point, the default user\/pass you find on google should now work.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_a01aaa48.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_1803a7a2.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_56b379c8.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.4 Logging into your newfound camera[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=429\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=429\">edit source<\/a>]<\/h4>\n\n\n\n<p>After this, sign into your&nbsp;<strong>pfSense<\/strong>&nbsp;router and go to&nbsp;<strong>Status \u2014&gt; DHCP Leases<\/strong>&nbsp;to find your camera. I used&nbsp;<strong>Diagnostics \u2014&gt; ARP Table<\/strong>&nbsp;since I\u2019m used to it. Once you know its IP, put it into your web browser and log right in.&nbsp;\ud83d\ude42<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_8bd543f6.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_8a8974a8.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.5 Configuring a Static IP[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=430\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=430\">edit source<\/a>]<\/h4>\n\n\n\n<p>First things first, you want to give your camera a static IP address. For instance, if you choose 192.168.5.19, you set it so you always know where to find it. This is necessary; imagine your system goes offline for a few minutes and something steals your camera\u2019s IP address, and now your security camera recorder is trying to get a video feed from your refrigerator? Sadly, by the time this is published, your fridge might actually have a video feed\u2026<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Configure network settings with a static IP:\n<ul class=\"wp-block-list\">\n<li>Click&nbsp;<strong>Configuration<\/strong><\/li>\n\n\n\n<li>Click&nbsp;<strong>Network<\/strong>&nbsp;on the left side<\/li>\n\n\n\n<li>Uncheck&nbsp;<strong>DHCP<\/strong><\/li>\n\n\n\n<li>Set an&nbsp;<strong>IPv4 Address<\/strong>&nbsp;on your subnet, anything from 192.168.5.5-192.168.5.254 will do here.<\/li>\n\n\n\n<li>Set the&nbsp;<strong>IPv4 Default Gateway<\/strong>&nbsp;to be your&nbsp;<strong>pfSense<\/strong>&nbsp;router.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Test<\/strong>&nbsp;to make sure you didn\u2019t screw something up before you save this configuration &amp; can no longer log into your camera.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Set&nbsp;<strong>Preferred DNS server<\/strong>&nbsp;and&nbsp;<strong>Alternate DNS server<\/strong>&nbsp;to the IP address of your&nbsp;<strong>pfSense<\/strong>&nbsp;router, which in our case is 192.168.5.1.<\/li>\n\n\n\n<li><strong>User management<\/strong>: Set a username and password for security.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.6 Configure a Static Mapping in pfSense[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=431\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=431\">edit source<\/a>]<\/h4>\n\n\n\n<p>Follow the same instructions from our prior static mappings to set up a static mapping for our camera so that other devices do not steal its IP address.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_f9b49c88.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_94640b52.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_8384a94b.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.7 Create a REAL Password for the camera[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=432\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=432\">edit source<\/a>]<\/h4>\n\n\n\n<p>No, we\u2019re not keeping the username and password to \u201cadmin\/password\u201d<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Once inside the camera\u2019s configuration interface, go to&nbsp;<strong>Configuration<\/strong>&nbsp;at the top.<\/li>\n\n\n\n<li>Go to&nbsp;<strong>System<\/strong>&nbsp;on the left side.<\/li>\n\n\n\n<li>Go to&nbsp;<strong>User Management<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Modify<\/strong>&nbsp;on the admin user.<\/li>\n\n\n\n<li>Don\u2019t use the word \u201cpassword\u201d or \u201c12345\u201d as your password.<\/li>\n\n\n\n<li>Put this in a password manager when you\u2019re done. Not a post-it on your monitor.<\/li>\n\n\n\n<li>Don\u2019t write the password on the camera. I will come through this screen like Samara from The Ring and drag you so deep down a well you\u2019ll end up on a&nbsp;<em><a href=\"https:\/\/www.youtube.com\/@fatal_breakdown\">cave diving YouTube channel<\/a><\/em>.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_a1c6507a.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.8 Change Video Codec to H.264[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=433\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=433\">edit source<\/a>]<\/h4>\n\n\n\n<p>When it comes to video encoding, I\u2019d use H.264 over H.265.&nbsp;<strong>Frigate<\/strong>&nbsp;&amp; web browsers can be fussy playing back H.265, and the quality bump is not something I notice enough to be worth the aggravation. Given this is a beginner\u2019s guide, the safe choice is to use the codec that is less likely to cause aggravation.<\/p>\n\n\n\n<p><strong>Frigate<\/strong>&nbsp;is going to have two streams \u2013 one that detects when something is going on (a dog, a cat, a car, a human, etc.), and another that does the recording. If we have a high-quality stream doing all of the detection work, our system is going to be killing itself all the time unnecessarily. We don\u2019t need 12k Blackmagic Ursa quality video to tell whether we\u2019re looking at a car\u2019s license plate or a plastic bag in the wind. We do need good quality to record, though.<\/p>\n\n\n\n<p>We\u2019re going to set up one high-quality stream for recording, and another lower-quality stream for monitoring what\u2019s going on. This way, we get high-quality video for playback, without unnecessarily blowing up the resource consumption on our computer.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>While logged into the camera interface, click&nbsp;<strong>Configuration<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Video\/Audio<\/strong>&nbsp;on the left side, and select&nbsp;<strong>Stream Type<\/strong>&nbsp;as&nbsp;<strong>Main Stream (Normal)<\/strong>. This is the feed we will be recording.\n<ul class=\"wp-block-list\">\n<li>For&nbsp;<strong>Main Stream (Normal)<\/strong>, set&nbsp;<strong>Video Encoding<\/strong>&nbsp;to&nbsp;<strong>H.264<\/strong>.<\/li>\n\n\n\n<li>Set&nbsp;<strong>Video Quality<\/strong>&nbsp;to&nbsp;<strong>Highest<\/strong>.<\/li>\n\n\n\n<li><strong>Resolution<\/strong>&nbsp;and&nbsp;<strong>Frame Rate<\/strong>&nbsp;are up to you \u2013 I like the highest resolution that gets me at least 20 frames per second. Lower than this and it starts to turn into a slideshow.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Now, select&nbsp;<strong>Stream Type<\/strong>&nbsp;and click onto the 2nd stream listed.<\/li>\n\n\n\n<li>Set a very low&nbsp;<strong>Resolution<\/strong>, something in the 600&#215;300-ish range.<\/li>\n\n\n\n<li>Set the&nbsp;<strong>Video Quality<\/strong>&nbsp;to medium.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.9 Finding the URL where we access the camera\u2019s stream[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=434\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=434\">edit source<\/a>]<\/h4>\n\n\n\n<p>Before setting up your NVR software, make sure you can view the stream using a program like VLC. Here\u2019s how you do it:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Find the stream address<\/strong>: Use&nbsp;<code>NMap<\/code>&nbsp;to discover all streams on port 554 (RTSP port).nmap -d &#8211;script rtsp-url-brute -p 554 192.168.5.19<\/li>\n\n\n\n<li><strong>Identify streams<\/strong>: Look for streams ending in&nbsp;<code>.sdp<\/code>, typically&nbsp;<code>stream1<\/code>&nbsp;for high quality and&nbsp;<code>stream2<\/code>&nbsp;for lower quality.<\/li>\n\n\n\n<li><strong>Modify the URL<\/strong>: Adjust the RTSP URL with your username and password.rtsp:\/\/username:password@&lt;camera_ip&gt;\/stream1.sdp<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Hint<\/strong>: You will see the high quality &amp; the low quality stream in this list. You\u2019ll have to mess around a bit to figure out which one is which; it should be obvious when you are viewing the high quality stream &amp; when you are viewing the low quality stream, based on the video quality.<\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_bf8f3071.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.99 Testing Streams in VLC[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=435\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=435\">edit source<\/a>]<\/h4>\n\n\n\n<p>Once you\u2019ve got the URLs, test them in&nbsp;<strong>VLC<\/strong>&nbsp;to ensure they work. You can click&nbsp;<strong>Media\u2014&gt; Open Network Stream<\/strong>&nbsp;and then enter the URL. If you don\u2019t have VLC\u2026 Get VLC. It is the best multi-format video player there is.<\/p>\n\n\n\n<p>Once you have a working &amp; properly set up camera, let\u2019s install our NVR \u2013 that stands for&nbsp;<strong>Network Video Recorder.<\/strong>&nbsp;This is what will monitor the video feeds coming from our cameras &amp; record it to disk for us.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Installing Docker and Setting Up Frigate with Specific Version 0.13.2[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=436\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=436\">edit source<\/a>]<\/h2>\n\n\n\n<p>Frigate is a lovely network video recorder.<\/p>\n\n\n\n<p>Next, we\u2019re going to clone the Frigate repository. I\u2019m going to download Frigate, but I\u2019m using the old version of Frigate rather than the new version. I\u2019ll show you why once I\u2019m done installing. The new version, in my opinion, took a well thought through user interface and destroyed it. I don\u2019t mean minor changes; think Amber Heard doing plastic surgery on Johnny Depp. It\u2019s that bad.<\/p>\n\n\n\n<p>Johnny Depp would still look better after that than Frigate looked from 0.13 \u2014&gt; 0.14. That\u2019s what happened to Frigate from version 0.13 to 0.14. They destroyed it. You can\u2019t even view events for more than one day at a time. It\u2019s horrifically bad.<\/p>\n\n\n\n<p>I\u2019m downloading an old version, and I\u2019ll show you the differences so you can decide for yourself. The setup routines are IDENTICAL with regards to configuring alerts in Home Assistant, etc.<\/p>\n\n\n\n<p>This project still deserves donations, purchases, &amp; funding for how good Frigate 0.13 is, as well as thanks &amp; praise for keeping it open source so we even HAVE the option to use older versions.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3.1 Install Docker[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=437\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=437\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Verify Existing Docker Installation:<\/strong>Run the command to check if Docker is installed:&nbsp;<code>docker --version<\/code>. Make sure the version is 24.0.0 or later. If it\u2019s an older version, remove it by using:sudo apt remove docker docker-engine docker.io containerd runc<\/li>\n\n\n\n<li><strong>Install the Latest Version of Docker:<\/strong>Download and install Docker using the official installation script. Run:curl -fsSL https:\/\/get.docker.com -o get-docker.sh sudo sh get-docker.sh<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;Use the official Docker installation, not the Snap version. The Snap version is&nbsp;<a href=\"https:\/\/www.reddit.com\/r\/docker\/comments\/shztqs\/wow_docker_works_a_lot_better_when_you_dont_have\/\"><em>horrible<\/em><\/a>&nbsp;&amp; causes tons of issues. If you got tricked into installing Docker at the end of the Ubuntu server installation prompts, I am sorry, but you have to remove that, it\u2019s garbage. Run&nbsp;<code>sudo snap remove docker<\/code>&nbsp;and never look back.<\/p>\n<\/blockquote>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Install Docker Compose:<\/strong>sudo apt install docker-compose-plugin -y<\/li>\n\n\n\n<li><strong>Verify Docker Compose Installation:<\/strong><\/li>\n\n\n\n<li>Make sure Docker Compose version is 2.0 or higher by running:docker compose version<\/li>\n\n\n\n<li><strong>Set Proper Permissions for Docker:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Docker typically requires root permissions, but you can add your user to the Docker group to avoid using&nbsp;<code>sudo<\/code>. Run:sudo usermod -aG docker $USER<\/li>\n\n\n\n<li>Log out and log back in, or run:newgrp docker<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">3.2 Install Frigate[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=438\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=438\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Create a Directory for Frigate:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Run the following command to create a directory to store Frigate files:mkdir -p \/home\/$USER\/Downloads\/programs cd ~\/Downloads\/programs<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Clone the Frigate Repository:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Clone the Frigate GitHub repository by running:git clone https:\/\/github.com\/blakeblackshear\/frigate.git cd frigate<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Set Up Docker Compose for Frigate:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Create and edit the&nbsp;<code>docker-compose.yml<\/code>&nbsp;file.&nbsp;<strong>Make sure it specifies Frigate version 0.13.2. New versions use a horrible user interface that is&nbsp;<a href=\"https:\/\/youtu.be\/uiFLqqKkj3M?t=117\">rage inducing.<\/a><\/strong>&nbsp;My example file below specifies version 0.13.2 for you. You\u2019ll need to set the container name, restart policy, image version, shared memory size, devices (e.g., USB Coral, PCIe Coral, video device for Raspberry Pi), and volumes for storing local time, config files, media, and cache. Be sure to open necessary ports (e.g., 5000, 8971, 8554, 8555).<\/li>\n\n\n\n<li>*<strong>If any of what I said<\/strong>&nbsp;in the last bulletpoint after the \u201crage inducing\u201d part&nbsp;<strong>confuses the hell out of you<\/strong>, don\u2019t worry: you have the easiest path there is;&nbsp;<strong>JUST COPY AND PASTE BELOW WITHOUT MESSING WITH IT!<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">version: \"3.9\"\nservices:\n  frigate:\n    container_name: frigate\n    privileged: true # This may not be necessary for all setups\n    restart: unless-stopped\n    image: ghcr.io\/blakeblackshear\/frigate:0.13.2 # Last good version\n    shm_size: \"64mb\" # Update for your cameras based on requirements\n    devices:\n      - \/dev\/bus\/usb:\/dev\/bus\/usb # USB Coral, modify for other hardware\n      - \/dev\/apex_0:\/dev\/apex_0 # PCIe Coral, modify based on your setup\n      - \/dev\/video11:\/dev\/video11 # For Raspberry Pi 4B\n      - \/dev\/dri\/renderD128:\/dev\/dri\/renderD128 # Intel hwaccel, update for your hardware\n    volumes:\n      - \/etc\/localtime:\/etc\/localtime:ro\n      - .\/config:\/config\n      - .\/storage:\/media\/frigate\n      - .\/database:\/data\/db\n      - type: tmpfs # Optional: Reduces SSD wear\n        target: \/tmp\/cache\n        tmpfs:\n          size: 1000000000\n    ports:\n      - \"8971:8971\"\n      - \"5000:5000\" # Internal unauthenticated access. Be careful with exposure.\n      - \"8554:8554\" # RTSP feeds\n      - \"8555:8555\/tcp\" # WebRTC over TCP\n      - \"8555:8555\/udp\" # WebRTC over UDP\n    environment:\n      FRIGATE_RTSP_PASSWORD: \"password\"<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>IMPORTANT NOTE:<\/strong>&nbsp;This is going to record to your solid state drive for your main drive by default, which is very bad practice. The only reason it is configured this way is because we have not gotten to the zfs pool creation part of the guide, where we will create a redundant, encrypted, self-healing array of drives as a zfs pool. We want to record camera footage to large hard drives, not tiny solid state drives.<\/p>\n\n\n\n<p>Later on in the guide, you will want to change this once ZFS is set up. The two lines of interest will be:<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-preformatted\">      - .\/storage:\/media\/frigate\n      - .\/database:\/data\/db<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This is still set to record everything to main drive: we will come back to edit this later once we have set up a ZFS pool at the end. &gt;&nbsp;<strong>DOCKER CHEAT SHEET: breaking down the&nbsp;<code>docker-compose.yml<\/code>&nbsp;File for Frigate<\/strong><\/li>\n<\/ul>\n\n\n\n<p>&gt; Every line of this&nbsp;<code>docker-compose.yml<\/code>&nbsp;is there for a reason. You likely have no clue what this is all for if you are reading this, so let\u2019s go through it. &gt; &gt;&nbsp;<strong>1.&nbsp;<code>version: \"3.9\"<\/code><\/strong>&nbsp;&gt; This is the version of Docker Compose file format. Version&nbsp;<code>3.9<\/code>&nbsp;is compatible with new Docker setups &gt; &gt;&nbsp;<strong>2.&nbsp;<code>services:<\/code><\/strong>&nbsp;&gt; This section defines the \u201cservices\u201d you want to run, which are containers. Here, we only have one container:&nbsp;<code>frigate<\/code>. &gt; &gt;&nbsp;<strong>3.&nbsp;<code>frigate:<\/code><\/strong>&nbsp;&gt; This is the name of the service(container). It helps you identify the container in logs or commands like&nbsp;<code>docker ps<\/code>. You can name it anything you like, but&nbsp;<code>frigate<\/code>&nbsp;makes sense since that\u2019s the application we\u2019re running. &gt; &gt;&nbsp;<strong>4.&nbsp;<code>container_name: frigate<\/code><\/strong>&nbsp;&gt; Custom name for the frigate container so it is easy to find when you type&nbsp;<code>docker ps -a<\/code>&nbsp;. Sometimes while debugging things that are not working you may want to enter the environment of the virtual container<em>(this is like sshing into your server, but into the virtual server that runs frigate)<\/em>, which you can do by typing&nbsp;<code>docker exec -it frigate bash<\/code>&nbsp;&#8211; but to do that you need to know which container is which! This is where using sensible names comes into play. &gt; &gt;&nbsp;<strong>5.&nbsp;<code>privileged: true<\/code><\/strong>&nbsp;&gt; Running the container in \u201cprivileged mode\u201d allows it to access hardware devices like USB or PCIe directly. This is done because frigate can use devices you plug in(like a coral) to improve the performance of the machine learning for detecting items on camera(car, human, bird, etc) &gt; &gt;&nbsp;<em>Warning:<\/em>&nbsp;This gives the container elevated permissions, so only use it if absolutely needed (like here). &gt; &gt;&nbsp;<strong>6.&nbsp;<code>restart: unless-stopped<\/code><\/strong>&nbsp;&gt; This tells Docker to restart the container unless you stop it. If the computer reboots or the container crashes, it will turn back on automatically &gt; &gt;&nbsp;<strong>7.&nbsp;<code>image: ghcr.io\/blakeblackshear\/frigate:0.13.2<\/code><\/strong>&nbsp;&gt; This tells it what Docker image to use. Here, we\u2019re pulling version&nbsp;<code>0.13.2<\/code>&nbsp;of Frigate from github container registry (<code>ghcr.io<\/code>) instead of the newest one because the user interface was tortured &amp; butchered to death with new releases. They destroyed it. It makes me sad how bad new versions are. &gt; &gt;&nbsp;<strong>8.&nbsp;<code>shm_size: \"64mb\"<\/code><\/strong>&nbsp;&gt; This sets the size of shared memory available to the container. frigate uses shared memory for hardware acceleration and video processing. frigate documentation tells you how to increase this based on how many cameras you have running. &gt; &gt;&nbsp;<strong>9.&nbsp;<code>devices:<\/code><\/strong>&nbsp;&gt; This part of the docker-compose file maps hardware devices from your host system<em>(the physical computer you are installing this program onto)<\/em>&nbsp;into the container. Frigate needs access to specific hardware for video processing. Let\u2019s explain each line: &gt; &gt; &#8211;&nbsp;<code>\/dev\/bus\/usb:\/dev\/bus\/usb<\/code>: Maps USB devices for hardware like a USB Coral accelerator which can improve\/speed up object detection &amp; take the load off of the host computer. &gt; &#8211;&nbsp;<code>\/dev\/apex_0:\/dev\/apex_0<\/code>: Maps a pci express coral thing for faster object detection. &gt; &#8211;&nbsp;<code>\/dev\/video11:\/dev\/video11<\/code>: Maps a video input device, like a camera, for systems like Raspberry Pi. &gt; &#8211;&nbsp;<code>\/dev\/dri\/renderD128:\/dev\/dri\/renderD128<\/code>: Maps Intel hardware acceleration for video encoding\/decoding. &gt; &gt;&nbsp;<strong>10.&nbsp;<code>volumes:<\/code><\/strong>&nbsp;&gt; This section maps directories or volumes between the host and the container. Volumes are where we save configuration, media, and data outside the container so they continue existing even if the container is restarted\/deleted\/shut off. &gt; &gt; &#8211;&nbsp;<code>\/etc\/localtime:\/etc\/localtime:ro<\/code>: This maps the time of the host computer to the time of the container(\u201ccomputer\u201d) running frigate. The&nbsp;<code>:ro<\/code>&nbsp;means \u201cread-only,\u201d so the container can\u2019t cause the host machine to time travel. Time travel is cool though. If you agree, watch the movie&nbsp;<strong>Primer<\/strong>&nbsp;&#8211; you won\u2019t be disappointed.&nbsp;<strong>Triangle<\/strong>&nbsp;is a close second. The ending messes me up every time. &gt; &#8211;&nbsp;<code>.\/config:\/config<\/code>: Maps the&nbsp;<code>config<\/code>&nbsp;directory on the host to&nbsp;<code>\/config<\/code>&nbsp;in the container, where Frigate expects its configuration file. &gt; &#8211;&nbsp;<code>.\/storage:\/media\/frigate<\/code>: Maps the&nbsp;<code>storage<\/code>&nbsp;directory on the host to&nbsp;<code>\/media\/frigate<\/code>&nbsp;in the container, where Frigate saves camera recordings. &gt; &#8211;&nbsp;<code>.\/database:\/data\/db<\/code>: Maps the&nbsp;<code>database<\/code>&nbsp;directory on the host to&nbsp;<code>\/data\/db<\/code>&nbsp;in the container, where Frigate stores metadata and video analytics. &gt; &#8211;&nbsp;<code>type: tmpfs<\/code>: Creates a temporary file system in memory. This reduces wear on SSDs by storing cache data in RAM. &gt; &#8211;&nbsp;<code>target: \/tmp\/cache<\/code>: Specifies the location of the cache inside the container. &gt; &#8211;&nbsp;<code>tmpfs.size: 1000000000<\/code>: Limits the cache size to 1 GB. &gt; &gt;&nbsp;<strong>11.&nbsp;<code>ports:<\/code><\/strong>&nbsp;&gt; This section maps network ports on the host to ports in the container. It allows you to access Frigate\u2019s web interface and services. &gt; &#8211;&nbsp;<code>\"8971:8971\"<\/code>: Exposes Frigate\u2019s main web interface on port&nbsp;<code>8971<\/code>. &gt; &#8211;&nbsp;<code>\"5000:5000\"<\/code>: Exposes an internal port for access without username\/password authentication. We will fix this later using nginx &amp; an authentication setup. &gt; &#8211;&nbsp;<code>\"8554:8554\"<\/code>: Exposes Real-Time Streaming Protocol (RTSP) feeds for viewing video streams. &gt; &#8211;&nbsp;<code>\"8555:8555\/tcp\"<\/code>&nbsp;and&nbsp;<code>\"8555:8555\/udp\"<\/code>: Expose WebRTC services over TCP and UDP, allowing low-latency streaming. &gt; &gt;&nbsp;<strong>12.&nbsp;<code>environment:<\/code><\/strong>&nbsp;&gt; This section defines environment variables, which are key-value pairs that configure the container. &gt; &gt; &#8211;&nbsp;<code>FRIGATE_RTSP_PASSWORD: \"password\"<\/code>: Sets the password for accessing RTSP streams in Frigate. &gt;&nbsp;<strong>13. Important Warning About Default Storage<\/strong>&nbsp;&gt; By default, this configuration saves camera footage (<code>.\/storage:\/media\/frigate<\/code>) and metadata (<code>.\/database:\/data\/db<\/code>) to your main drive. This is fine for testing, but long-term use will fill up and wear out your SSD. Later in the guide, you\u2019ll learn to change these paths to a ZFS pool for redundant, self-healing storage that provides us with way more space than our operating system\u2019d SSD.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3.3 Create Frigate Configuration File[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=439\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=439\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Create and Edit the&nbsp;<code>config.yml<\/code>&nbsp;File:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Create a&nbsp;<code>config\/config.yml<\/code>&nbsp;file to define your cameras &amp; MQTT setup.<\/li>\n\n\n\n<li><em>I have provided a template below. Creating yml files is painful and very easy to mess up. So I provided a known-working file for you to start with.<\/em><\/li>\n\n\n\n<li><strong>YOU WILL HAVE TO EDIT THE IP ADDRESSES, USERNAMES, AND PASSWORDS IN EACH PATH LINE TO THE URL OF YOUR ACTUAL CAMERA. YOUR CAMERAS WILL ALSO HAVE DIFFERENT URLS THAN MINE. I DID MOST OF THE WORK FOR YOU, BUT DON\u2019T BE SO LAZY THAT YOU DON\u2019T EVEN CHANGE THE CAMERA IPs &amp; USERNAMES &amp; PASSWORDS TO YOURS!<\/strong><\/li>\n\n\n\n<li>To find the RTSP URLs of your camera, you can install&nbsp;<code>nmap<\/code>&nbsp;on Ubuntu with:sudo apt install nmap -y<\/li>\n\n\n\n<li>Then you go to your terminal and type the following, replacing the IP address of&nbsp;<code>192.168.3.120<\/code>&nbsp;with the IP address of your camera:sudo nmap &#8211;script rtsp-url-brute -p 554 192.168.5.19 sudo nmap &#8211;script rtsp-url-brute -p 8554 192.168.5.19<\/li>\n\n\n\n<li>You will receive a list of stream URLs. Let\u2019s say one of them is&nbsp;<code>\"rtsp:\/\/192.168.5.19\/Streaming\/Channels\/101\"<\/code>.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You need to add your username &amp; password here. So&nbsp;<code>rtsp:\/\/192.168.5.19\/Streaming\/Channels\/101<\/code>&nbsp;will become&nbsp;<code>rtsp:\/\/username:password@192.168.5.19\/Streaming\/Channels\/101<\/code>.<\/li>\n\n\n\n<li>Test that this works in a video player like VLC. In VLC, go&nbsp;<strong>Media<\/strong>&nbsp;\u2192&nbsp;<strong>Open Network Stream<\/strong>&nbsp;\u2192&nbsp;<strong>Network URL<\/strong>&nbsp;\u2192 enter the URL \u2192 click&nbsp;<strong>Play<\/strong>.<\/li>\n\n\n\n<li>If it works, it can be entered into the&nbsp;<code>path<\/code>&nbsp;line and replace my URLs in the config file below.<\/li>\n\n\n\n<li>The first four lines are going to be for MQTT, which sends messages to Home Assistant so that Home Assistant can send alerts to your phone when someone tries to steal your catalytic converter.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">mqtt:\n  host: homeassistant.home.arpa  \n  port: 1883\n  user: louis\n  password: passwordman\n\ncameras:\n  front_door_closeup:\n    ffmpeg:\n      inputs:\n        - path: rtsp:\/\/CAMERAUSERNAMEGOESHERE:CAMERAPASSWORDGOESHERE@192.168.3.101:554\/Streaming\/Channels\/101\n          roles:\n            - record\n        - path: rtsp:\/\/CAMERAUSERNAMEGOESHERE:CAMERAPASSWORDGOESHERE@192.168.3.101:554\/Streaming\/Channels\/102\n          roles:\n            - detect\n      output_args:\n        record: -f segment -segment_time 60 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c copy\n    detect:\n      width: 640\n      height: 360\n      fps: 20\n    objects:\n      track:\n        - person\n        - car\n        - motorcycle\n        - bird\n        - cat\n        - dog\n        - horse\n        - sheep\n        - cow\n        - bear\n        - zebra\n        - giraffe\n        - elephant\n        - mouse\n      filters:\n        person:\n          mask: 570,299,545,0\n        cat:\n          min_score: 0.01\n          threshold: 0.02\n        dog:\n          min_score: 0.01\n          threshold: 0.02\n        bird:\n          min_score: 0.01\n          threshold: 0.02\n    motion:\n      mask:\n        - 473,0,21,156,53,317,140,312\n    record:\n      enabled: true\n      events:\n        pre_capture: 5\n        post_capture: 5\n        objects:\n          - person\n          - car\n          - motorcycle\n          - bird\n          - cat\n          - dog\n          - horse\n          - sheep\n          - cow\n          - bear\n          - zebra\n          - giraffe\n          - elephant\n          - mouse\n\n  driveway:\n    ffmpeg:\n      inputs:\n        - path: rtsp:\/\/CAMERAUSERNAMEGOESHERE:CAMERAPASSWORDGOESHERE@192.168.3.102:554\/Streaming\/Channels\/101\n          roles:\n            - record\n        - path: rtsp:\/\/CAMERAUSERNAMEGOESHERE:CAMERAPASSWORDGOESHERE@192.168.3.102:554\/Streaming\/Channels\/102\n          roles:\n            - detect\n      output_args:\n        record: -f segment -segment_time 60 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c copy\n    detect:\n      width: 640\n      height: 360\n      fps: 20\n    objects:\n      track:\n        - person\n        - car\n        - motorcycle\n        - bird\n        - cat\n        - dog\n        - horse\n        - sheep\n        - cow\n        - bear\n        - zebra\n        - giraffe\n        - elephant\n        - mouse\n      filters:\n        car:\n          min_score: 0.01\n          threshold: 0.03\n        cat:\n          min_score: 0.01\n          threshold: 0.02\n        dog:\n          min_score: 0.01\n          threshold: 0.02\n        bird:\n          min_score: 0.01\n          threshold: 0.02\n    record:\n      enabled: true\n      events:\n        pre_capture: 5\n        post_capture: 5\n        objects:\n          - person\n          - car\n          - motorcycle\n          - bird\n          - cat\n          - dog\n          - horse\n          - sheep\n          - cow\n          - bear\n          - zebra\n          - giraffe\n          - elephant\n          - mouse\n\n  side_door_closeup:\n    ffmpeg:\n      inputs:\n        - path: rtsp:\/\/CAMERAUSERNAMEGOESHERE:CAMERAPASSWORDGOESHERE@192.168.3.104:554\/Streaming\/Channels\/101\n          roles:\n            - record\n        - path: rtsp:\/\/CAMERAUSERNAMEGOESHERE:CAMERAPASSWORDGOESHERE@192.168.3.104:554\/Streaming\/Channels\/102\n          roles:\n            - detect\n      output_args:\n        record: -f segment -segment_time 60 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c copy\n    detect:\n      width: 640\n      height: 360\n      fps: 20\n    objects:\n      track:\n        - person\n        - bird\n        - cat\n        - dog\n        - horse\n        - sheep\n        - cow\n        - bear\n        - zebra\n        - giraffe\n        - elephant\n        - mouse\n      filters:\n        car:\n          min_score: 0.01\n          threshold: 0.03\n        cat:\n          min_score: 0.01\n          threshold: 0.02\n        dog:\n          min_score: 0.01\n          threshold: 0.02\n        bird:\n          min_score: 0.70\n          threshold: 0.75\n    record:\n      enabled: true\n      events:\n        pre_capture: 5\n        post_capture: 5\n        objects:\n          - person\n          - car\n          - bird\n          - cat\n          - dog\n          - horse\n          - sheep\n          - cow\n          - bear\n          - zebra\n          - giraffe\n          - elephant\n          - mouse\n\n  back_door_closeup:\n    ffmpeg:\n      inputs:\n        - path: rtsp:\/\/CAMERAUSERNAMEGOESHERE:CAMERAPASSWORDGOESHERE@192.168.3.103:554\/Streaming\/Channels\/101\n          roles:\n            - record\n        - path: rtsp:\/\/CAMERAUSERNAMEGOESHERE:CAMERAPASSWORDGOESHERE@192.168.3.103:554\/Streaming\/Channels\/102\n          roles:\n            - detect\n      output_args:\n        record: -f segment -segment_time 60 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c copy\n    detect:\n      width: 640\n      height: 360\n      fps: 20\n    objects:\n      track:\n        - person\n        - car\n        - bird\n        - cat\n        - dog\n        - horse\n        - sheep\n        - cow\n        - bear\n        - zebra\n        - giraffe\n        - elephant\n        - mouse\n      filters:\n        car:\n          min_score: 0.75\n          threshold: 0.75\n        cat:\n          min_score: 0.01\n          threshold: 0.02\n        dog:\n          min_score: 0.01\n          threshold: 0.02\n        bird:\n          min_score: 0.01\n          threshold: 0.02\n    record:\n      enabled: true\n      events:\n        pre_capture: 5\n        post_capture: 5\n        objects:\n          - person\n          - car\n          - bird\n          - cat\n          - dog\n          - horse\n          - sheep\n          - cow\n          - bear\n          - zebra\n          - giraffe\n          - elephant\n          - mouse\n\n  front_porch_wide_angle:\n    ffmpeg:\n      inputs:\n        - path: rtsp:\/\/CAMERAUSERNAMEGOESHERE:CAMERAPASSWORDGOESHERE@192.168.3.106:554\/Streaming\/Channels\/101\n          roles:\n            - record\n        - path: rtsp:\/\/CAMERAUSERNAMEGOESHERE:CAMERAPASSWORDGOESHERE@192.168.3.106:554\/Streaming\/Channels\/102\n          roles:\n            - detect\n      output_args:\n        record: -f segment -segment_time 60 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c copy\n    detect:\n      width: 640\n      height: 360\n      fps: 20\n    objects:\n      track:\n        - person\n        - car\n        - motorcycle\n        - bird\n        - cat\n        - dog\n        - horse\n        - sheep\n        - cow\n        - bear\n        - zebra\n        - giraffe\n        - elephant\n        - mouse\n      filters:\n        person:\n          min_score: 0.8\n          threshold: 0.8\n        car:\n          min_score: 0.6\n          threshold: 0.7\n        cat:\n          min_score: 0.01\n          threshold: 0.02\n        dog:\n          min_score: 0.01\n          threshold: 0.02\n        bird:\n          min_score: 0.6\n          threshold: 0.65\n    record:\n      enabled: true\n      events:\n        pre_capture: 5\n        post_capture: 5\n        objects:\n          - person\n          - car\n          - motorcycle\n          - bird\n          - cat\n          - dog\n          - horse\n          - sheep\n          - cow\n          - bear\n          - zebra\n          - giraffe\n          - elephant\n          - mouse\n\n  fishcam:\n    ffmpeg:\n      inputs:\n        - path: rtsp:\/\/louis:passwordroflcopter@192.168.3.120:554\/stream1\n          roles:\n            - record\n        - path: rtsp:\/\/louis:passwordroflcopter@192.168.3.120:554\/stream1\n          roles:\n            - detect\n      output_args:\n        record: -f segment -segment_time 60 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c copy\n    detect:\n      width: 640\n      height: 360\n      fps: 20\n    objects:\n      track:\n        - person\n      filters:\n        person:\n          min_score: 0.3\n          threshold: 0.3\n    record:\n      enabled: true\n      events:\n        pre_capture: 15\n        post_capture: 15\n        objects:\n          - fish\n\ndatabase:\n  path: \/data\/db\/frigate.db\n#version: 0.14<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;For each camera, configure the RTSP inputs for recording and detection streams. Define output arguments, detection settings (e.g., width, height, fps), and tracked objects (e.g., person, car, bird, dog). You can set filters for specific objects, mask areas for motion detection, and enable event recording with pre-capture and post-capture times. Repeat for additional cameras as needed.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">3.4 Running Frigate[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=440\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=440\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Start Frigate:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Start Frigate by running:&nbsp;<code>docker compose up -d<\/code>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Access the Frigate Web Interface:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Open your web browser and navigate to&nbsp;<code><a href=\"http:\/\/192.168.5.2:5000\/\">http:\/\/192.168.5.2:5000<\/a><\/code>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Configure Additional Settings:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Edit the&nbsp;<code>config.yml<\/code>&nbsp;file as needed to add or modify cameras, object tracking settings, or motion detection masks.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Note on Storage:<\/strong>\n<ul class=\"wp-block-list\">\n<li>It\u2019s recommended to use a separate storage device for Frigate\u2019s media to avoid unnecessary wear on your primary SSD. We\u2019ll go into detail about setting up ZFS pools &amp; external storage later.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_54097ca6.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.5 Enjoy Frigate![<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=441\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=441\">edit source<\/a>]<\/h4>\n\n\n\n<p>You have the best NVR software there is, and no cancerous hideous modern UI. Enjoy!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Make sure it all works.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=442\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=442\">edit source<\/a>]<\/h2>\n\n\n\n<p>There\u2019s nothing worse than someone kidnapping your kid or killing your dog &amp; not being able to see who did it because you set your threshold too low in a yaml file. Extensively test everything. Assume it won\u2019t work later, because often with camera systems, it doesn\u2019t.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Get Instant Camera Alerts On Your Phone[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=443\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=443\">edit source<\/a>]<\/h2>\n\n\n\n<p>Now you have a camera you can see when you log into it, but don\u2019t you want to get an alert if some weirdo is walking through your backyard? Home Assistant and Frigate can talk to each other to make this happen.<\/p>\n\n\n\n<p>Home Assistant needs two things:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>To receive communication from Frigate<\/li>\n\n\n\n<li>A client and a broker that understand that communication.<\/li>\n<\/ul>\n\n\n\n<p>We are going to go over how to set all of this up \u2013 and use a handy extension that allows us to avoid miserable YAML files for setting this all up, that is simple, point, and click.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">5.1 Switch gears &amp; go back to Home Assistant[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=444\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=444\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open web browser<\/li>\n\n\n\n<li>Go to&nbsp;<a href=\"http:\/\/192.168.1.7:8123\/\">http:\/\/192.168.1.7:8123<\/a>&nbsp;or&nbsp;<a href=\"http:\/\/homeassistant.home.arpa:8123\/\">http:\/\/homeassistant.home.arpa:8123<\/a><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_73352a27.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_fc4eb41f.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_12b8030b.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_deda9e79.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_598cb682.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_68982d5e.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_d991780a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_b201bbe8.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_272b62c8.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_16db9dd9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_50c0fdd2.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_f69d8e0e.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_88fe4866.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_ee1dcb43.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_904be7b9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_21da8192.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_55120826.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_7c2ff154.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_b0c46153.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_44a26f8c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_e003f8b9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_78a73239.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_aff05f0f.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_cf418dfc.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_584df2f7.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_e3b61efd.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_8749f406.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_99985c72.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.2 Download and Install HACS[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=445\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=445\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Download HACS (Home Assistant Community Store):<\/strong>\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<a href=\"https:\/\/www.hacs.xyz\/docs\/use\/download\/download\/\">HACS \u2192 Download<\/a>&nbsp;on their website.<\/li>\n\n\n\n<li>Click onto the&nbsp;<strong>OS\/supervised<\/strong>&nbsp;version, as that\u2019s the version of Home Assistant we have installed.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Open the HACS Add-on Repository:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Click the link provided to add the HACS repository to your Home Assistant instance. It\u2019ll ask you to&nbsp;<strong>Add missing<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Enter Home Assistant URL:<\/strong>\n<ul class=\"wp-block-list\">\n<li>It will ask for your Home Assistant link.<\/li>\n\n\n\n<li>By default, Home Assistant may attempt to use&nbsp;<code>homeassistant.local:8123<\/code>, which will fail.<\/li>\n\n\n\n<li>If you are following this guide\u2019s setup, use one of the following URLs:\n<ul class=\"wp-block-list\">\n<li>Local Domain:&nbsp;<code><a href=\"http:\/\/homeassistant.home.arpa:8123\/\">http:\/\/homeassistant.home.arpa:8123<\/a><\/code><\/li>\n\n\n\n<li>Direct IP:&nbsp;<code><a href=\"http:\/\/192.168.5.4:8123\/\">http:\/\/192.168.5.4:8123<\/a><\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Replace these with your actual Home Assistant domain or IP address if different.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Install HACS:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Follow the prompts to install HACS in Home Assistant.<\/li>\n\n\n\n<li><em>BE PATIENT!<\/em>&nbsp;Click on the LOGS tab and wait for it to be&nbsp;<em><strong>DONE!!!<\/strong><\/em>&nbsp;before you try to start adding things, or nothing will work.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Restart Home Assistant:<\/strong>\n<ul class=\"wp-block-list\">\n<li>After installation, restart your Home Assistant instance for the changes to take effect.<\/li>\n\n\n\n<li>Go to settings \u2192 system \u2192 power button icon in the upper right-hand corner, click the power button, and click \u201crestart home assistant.\u201d&nbsp;<em><strong>DO NOT DO THIS UNTIL THE LOGS TAB FOR HACS SAYS EVERYTHING IS DONE<\/strong><\/em><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Clear your browser cache, cookies, etc.<\/strong><\/li>\n\n\n\n<li><strong>Log back into Home Assistant.<\/strong><\/li>\n\n\n\n<li><strong>Go to Settings \u2192 Devices &amp; Services \u2192 Add Integration &amp; Search for HACS<\/strong>\n<ul class=\"wp-block-list\">\n<li>If it doesn\u2019t show up, do not pass go, do not collect $200 \u2013 re-follow the instructions&nbsp;<a href=\"https:\/\/www.hacs.xyz\/docs\/use\/download\/download\/\">here<\/a>&nbsp;and&nbsp;<a href=\"https:\/\/www.hacs.xyz\/docs\/use\/configuration\/basic\/#setting-up-the-hacs-integration\">here<\/a>. Clear your browser cache\/cookies, choose the option to reboot Home Assistant rather than restart Home Assistant when you go to settings \u2192 system \u2192 power button icon in the upper right-hand corner, clear cache\/cookies in the browser, go to settings \u2192 addons \u2192 get HACS \u2192 CLICK START.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Go to logs<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>Wait! Don\u2019t be impatient!<\/em>&nbsp;Wait for it to be done. You will see the following at the end of the log when it is done:INFO: Installation complete. INFO: Remember to restart Home Assistant before you configure it. s6-rc: info: service legacy-services: stopping s6-rc: info: service legacy-services successfully stopped s6-rc: info: service legacy-cont-init: stopping s6-rc: info: service legacy-cont-init successfully stopped s6-rc: info: service fix-attrs: stopping s6-rc: info: service fix-attrs successfully stopped s6-rc: info: service s6rc-oneshot-runner: stopping s6-rc: info: service s6rc-oneshot-runner successfully stopped<\/li>\n<\/ul>\n\n\n\n<ol start=\"10\" class=\"wp-block-list\">\n<li><strong>Add Integration Properly:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Settings \u2013&gt; Devices \u2192 Devices &amp; Integrations \u2192 Add Integration<\/strong>&nbsp;&amp; search for HACS.<\/li>\n\n\n\n<li>Check the boxes.<\/li>\n\n\n\n<li>Click submit.<\/li>\n\n\n\n<li>It will ask you to open a link to log into GitHub, and insert a code. Click it.<\/li>\n\n\n\n<li>Go to GitHub. If you lack an account, make one. If you have a GitHub account, log in.<\/li>\n\n\n\n<li>Enter code.<\/li>\n\n\n\n<li>Authorize HACS.<\/li>\n\n\n\n<li>Add HACS to an \u201carea.\u201d<\/li>\n\n\n\n<li>Click finish.<\/li>\n\n\n\n<li>Next step!<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_4a627a28.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_6e463f1.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_25f1321.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_bd48c948.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_7d0028c9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_136e049.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_ce8689b1.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_c6badc81.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_d4c54e09.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_69f853e4.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_c6c7c21e.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_d892307f.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_e2f2eaf6.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_b15f4ff6.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_f2ef1560.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_408094f6.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.3 Add Frigate Add-ons to Home Assistant[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=446\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=446\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Visit&nbsp;<a href=\"http:\/\/homeassistant.home.arpa:8123\/hacs\/repository\/311536795\"><strong>Frigate Home Assistant Add-ons page<\/strong><\/a><\/li>\n\n\n\n<li><strong>Log back into Home Assistant when it prompts you to.<\/strong><\/li>\n\n\n\n<li><strong>Add Frigate Repository:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Click the bright blue&nbsp;<strong>\u201cAdd-on repository to my Home Assistant\u201d<\/strong>&nbsp;button.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Download and Install Frigate:<\/strong>\n<ul class=\"wp-block-list\">\n<li>You\u2019ll see two buttons. One is a blue button that says \u201cOpen with Home Assistant Store,\u201d and the other is for downloading the add-on.<\/li>\n\n\n\n<li><strong>Important:<\/strong>&nbsp;The blue button in the middle refreshes the page without installing anything.<\/li>\n\n\n\n<li>To download and install Frigate, make sure to click the Download button at the bottom.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Access Home Assistant Again:<\/strong>\n<ul class=\"wp-block-list\">\n<li>You\u2019ll be prompted again to enter your Home Assistant domain with&nbsp;<code>:8123<\/code>.<\/li>\n\n\n\n<li>Remember, the default URL&nbsp;<code>homeassistant.local:8123<\/code>&nbsp;won\u2019t work. HomeAssistant assumes you\u2019re using a standard router where the domain is&nbsp;<code>.local<\/code>&nbsp;&#8211; but with pfsense, it is&nbsp;<code>.home.arpa<\/code>&nbsp;Use one of the following:\n<ul class=\"wp-block-list\">\n<li><strong>Local Domain:<\/strong>&nbsp;<a href=\"http:\/\/homeassistant.home.arpa:8123\/\">http:\/\/homeassistant.home.arpa:8123<\/a><\/li>\n\n\n\n<li><strong>Direct IP:<\/strong>&nbsp;<a href=\"http:\/\/192.168.5.4:8123\/\">http:\/\/192.168.5.4:8123<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cDownload\u201d<\/strong>&nbsp;in the lower left corner.<\/li>\n\n\n\n<li>Continue with installing, wait for it to install \u2014 it should be quick.<\/li>\n\n\n\n<li>Go to&nbsp;<strong>Home Assistant Settings<\/strong>&nbsp;in the lower left corner.<\/li>\n\n\n\n<li>It will say&nbsp;<strong>\u201c1 repair, restart required\u201d<\/strong>&nbsp;with the little Frigate logo at the top, or just&nbsp;<strong>restart required<\/strong>&nbsp;at the top.<\/li>\n\n\n\n<li>Click this, follow prompts, and restart Home Assistant.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">5.4 Add Frigate Integration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=447\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=447\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Add Frigate integration to Home Assistant<\/strong>\n<ol class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Settings<\/strong>&nbsp;in the Home Assistant menu.<\/li>\n\n\n\n<li>Navigate to&nbsp;<strong>Devices &amp; Integrations<\/strong>.<\/li>\n\n\n\n<li>Click Add Integration, and search for Frigate in the list. Follow the prompts to add it.<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li><strong>Enter Frigate URL:<\/strong>\n<ol class=\"wp-block-list\">\n<li>The URL will be the IP address you chose for the server you installed Frigate on, or its hostname: in my case&nbsp;<code><a href=\"http:\/\/192.168.5.2:5000\/\">http:\/\/192.168.5.2:5000<\/a><\/code>, OR&nbsp;<a href=\"http:\/\/happycloud.home.arpa:5000\/\">http:\/\/happycloud.home.arpa:5000<\/a>&nbsp;with the examples I have provided.<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>Once Frigate is integrated, you\u2019ll be asked to assign cameras to specific areas within Home Assistant. Select the appropriate areas for your cameras.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_11421791.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_b46921b6.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_20eefd9e.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_240785dd.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_21cd7be8.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_63ccf803.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_6c42c4c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_a1ab324e.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_37888578.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_4d8907f9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_61ecad83.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_20c1c405.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.5: Configure Mosquito Broker &amp; MQTT (in that order)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=448\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=448\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Check if MQTT Broker (Mosquitto) is Installed:<\/strong>&nbsp;Go to&nbsp;<strong>Settings &gt; Add-ons<\/strong>&nbsp;and find the blue&nbsp;<strong>add-on Store button<\/strong>&nbsp;at the bottom right.<\/li>\n\n\n\n<li><strong>Look for Mosquitto Broker.<\/strong><\/li>\n\n\n\n<li><strong>Click Install.<\/strong><\/li>\n\n\n\n<li>Once installed, start the add-on and make sure Start on Boot is enabled, and hit start.<\/li>\n\n\n\n<li><strong>Configure MQTT Broker in Home Assistant:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Settings &gt; Devices &amp; Services &gt; Add Integration<\/strong>.<\/li>\n\n\n\n<li>Search for&nbsp;<strong>MQTT<\/strong>&nbsp;and select it. Go into MQTT by clicking it and add it.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Autoconfigure Prompt:<\/strong>\n<ul class=\"wp-block-list\">\n<li>It should prompt you to autoconfigure it with the mosquito broker you just installed.<\/li>\n\n\n\n<li>Remember the order \u2013 install mosquito broker from addons FIRST, THEN install MQTT from&nbsp;<strong>Settings &gt; Devices &amp; Services &gt; Add Integration<\/strong>, or MQTT may not auto-configure itself the same way.\n<ul class=\"wp-block-list\">\n<li>Broker:&nbsp;<code>core-mosquitto<\/code>&nbsp;(since Mosquitto is running on Home Assistant OS). This will auto configure by default.<\/li>\n\n\n\n<li>Don\u2019t worry if the MQTT thing has no working configure buttons, those are as optional as the JTAG connector on a MacBook motherboard.<\/li>\n\n\n\n<li>Port: 1883 (default MQTT port). This will auto configure by default.<\/li>\n\n\n\n<li>Username and Password: Mosquitto broker allows Home Assistant users to log in so you don\u2019t have to worry about this. When we enter this information into Frigate, we will be using the username &amp; password we use to log into home assistant.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_ca1b97c5.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_b6564f8b.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_c414c9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_21dbe66b.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_1008176c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_a1f44605.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.6 Set Up Frigate Mobile App Notifications[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=449\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=449\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Download Notification Blueprint:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Go to the&nbsp;<a href=\"https:\/\/community.home-assistant.io\/t\/frigate-mobile-app-notifications-2-0\/559732\">Frigate Mobile App Notifications<\/a>&nbsp;2.0 page.<\/li>\n\n\n\n<li>Follow the instructions on this page to download the notification blueprint into your Home Assistant.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>You need this unless you want to be in hell writing YAML files yourself. You don\u2019t want to do that, right? I thought so.<\/strong><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_cf0e970f.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_b21d7dac.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_34426308.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_3ddaeebf.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_240dc338.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_bed46eef.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_ab6084f9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_837df932.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_6e9bae11.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_d45994a6.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_a8dc04b5.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_bd7663b7.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_e21b65cd.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_cf25be7a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxdtp_tmp_7ad3f32e.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.7 Configure Automations for Camera and Notifications[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=450\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=450\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Access Automation Editor:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Go to your automation editor at:&nbsp;<code><a href=\"http:\/\/192.168.5.4:8123\/config\/automation\/dashboard\">http:\/\/192.168.5.4:8123\/config\/automation\/dashboard<\/a><\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Use Frigate Notifications Blueprint:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Click&nbsp;<strong>\u201cBlueprints\u201d<\/strong>&nbsp;at the top right.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cFrigate Notifications\u201d<\/strong>&nbsp;which is what you want.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Configure Automation:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Here you scroll down to choose your camera, and your mobile device, the name of the automation, etc.<\/li>\n\n\n\n<li>Most important thing to get right is the name of the camera &amp; the mobile device, everything else you can customize and it\u2019s not for me to tell you how to.<strong>NOTE:<\/strong>&nbsp;If your mobile device does not show up, log into Home Assistant on your phone and add it as a device to Home Assistant. It will prompt you to do this by default when you first set up the app. Then go back here and redo this step (you will have to close out of the window you just opened after clicking&nbsp;<strong>Blueprints \u2192 Frigate Notifications<\/strong>&nbsp;&amp; reclick it so the dialog box for your phone will show your phone)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Make sure MQTT is set up in the&nbsp;<code>frigate config.yml<\/code>&nbsp;file:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Make sure in Frigate\u2019s&nbsp;<strong>Config<\/strong>&nbsp;menu, in the&nbsp;<code>config.yml<\/code>&nbsp;file, MQTT is set up as follows, with the username &amp; password matching your homeassistant login, and your host matching the IP address of the home assistant server:<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">mqtt:\n  host: homeassistant.home.arpa\n  port: 1883\n  user: louis\n  password: passwordman<\/pre>\n\n\n\n<ol start=\"6\" class=\"wp-block-list\">\n<li><strong>Enjoy Your New Frigate Integration with Home Assistant!<\/strong><\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Making Frigate Secure[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=451\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=451\">edit source<\/a>]<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;(if the complexities of docker networking confuse you, skip ahead to \u201csteps\u201d)<\/p>\n<\/blockquote>\n\n\n\n<p>Newer frigate has username\/password authentication, but it is so useless you will not want to ever log into it. That isn\u2019t helpful.<\/p>\n\n\n\n<p>Older frigate has no authentication, so anyone who goes to&nbsp;<code><a href=\"http:\/\/192.168.5.2:5000\/\">http:\/\/192.168.5.2:5000<\/a><\/code>&nbsp;on your local network has admin access to everything. They can stop recording, delete recordings, have your setup record&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Goatse.cx\">goatse<\/a>, etc.&nbsp;<strong>VERY BAD<\/strong>.<\/p>\n\n\n\n<p>Further complicating things, our Frigate plugin on Home Assistant, at&nbsp;<code>192.168.5.4<\/code>, needs to communicate with&nbsp;<code>192.168.5.2<\/code>&nbsp;in order to grab Frigate\u2019s camera setup, on port 5000 \u2013 WITHOUT authentication. The communication to grab the camera setup is separate from the mqtt traffic.&nbsp;\ud83d\ude41 This makes it difficult to secure versions of Frigate that have a functioning UI.<\/p>\n\n\n\n<p>We can set up&nbsp;<code>nginx<\/code>&nbsp;as a reverse proxy \u2013 this directs all traffic that is received on port 80 &amp; 443 to&nbsp;<code>https:\/\/<\/code>&nbsp;traffic that directs to Frigate on port 5000. We can add username\/password authentication using&nbsp;<code>nginx<\/code>&nbsp;here, so that people need a password to view it. Then, we can block port 5000 by binding Frigate to only work on localhost.<\/p>\n\n\n\n<p>But this means that Home Assistant won\u2019t be able to connect to it \u2013 since it\u2019s running on another machine.&nbsp;<strong>F&amp;^!<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Plan to set up username\/password authentication for Frigate:\n<ul class=\"wp-block-list\">\n<li>Use&nbsp;<code>iptables<\/code>&nbsp;to allow all traffic to port 5000 from&nbsp;<code>127.0.0.1<\/code>&nbsp;(localhost, the computer running Frigate), so that&nbsp;<code>nginx<\/code>&nbsp;can connect to Frigate.<\/li>\n\n\n\n<li>Allow all traffic from&nbsp;<code>192.168.5.4<\/code>, our Home Assistant virtual machine, to connect to port 5000 Frigate.<\/li>\n\n\n\n<li>Block EVERYTHING ELSE on port 5000.<\/li>\n\n\n\n<li>Set up&nbsp;<code>nginx<\/code>&nbsp;as a webserver on port 443 with https &amp; ssl.<\/li>\n\n\n\n<li>Tell&nbsp;<code>nginx<\/code>&nbsp;anyone accessing the&nbsp;<code>nginx<\/code>&nbsp;webserver they need to submit a username &amp; password to get in.<\/li>\n\n\n\n<li>Tell&nbsp;<code>nginx<\/code>&nbsp;to show anyone who enters that user\/pass when showing up on port 443 to be able to see Frigate on port 5000.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>TL;DR<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>We\u2019re telling everyone who wants to view the cameras they have to enter a username &amp; password.<\/li>\n\n\n\n<li>This allows you to view your cameras just fine.<\/li>\n\n\n\n<li>This tells anyone who tries to get into your system without a password to gargle your balls.<\/li>\n\n\n\n<li>This allows homeassistant to connect without being blocked.<\/li>\n<\/ul>\n\n\n\n<p>We have to do this on the machine itself, since people on our LAN are not going to have to talk to the router in order to log into Frigate, since they are on the same network. These rules will be added on&nbsp;<code>192.168.5.2<\/code>, aka&nbsp;<code>happycloud.home.arpa<\/code>, our machine that is running Frigate.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">6.1 Making iptables rules[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=452\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=452\">edit source<\/a>]<\/h4>\n\n\n\n<p>Allow established connections (makes https more stable,&nbsp;<a href=\"https:\/\/www.reddit.com\/r\/radiohead\/comments\/ovvkrg\/understanding_ok_computers_fitter_happier\/\">fitter, happier, more productive<\/a>. Not eating too much)<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Allow localhost access to port 5000:<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo iptables -A INPUT -i lo -p tcp --dport 5000 -j ACCEPT<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Allow Home Assistant access to port 5000<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo iptables -A INPUT -s 192.168.5.4 -p tcp --dport 5000 -j ACCEPT<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Block all other access to port 5000<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo iptables -A INPUT -p tcp --dport 5000 -j DROP<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Make sure Docker respects these rules<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo iptables -I DOCKER-USER -j RETURN<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Install the&nbsp;<code>iptables-persistent<\/code>&nbsp;package:<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install iptables-persistent<\/pre>\n\n\n\n<ol class=\"wp-block-list\">\n<li>During installation, you\u2019ll be asked if you want to save the current iptables rules. Choose Yes.<\/li>\n\n\n\n<li>If you\u2019re not prompted, you can manually save the rules by running:&nbsp;<code>sudo netfilter-persistent save<\/code><\/li>\n\n\n\n<li>YOU NEED TO INSTALL&nbsp;<code>IPTABLES-PERSISTENT<\/code>&nbsp;AND TELL IT TO SAVE YOUR RULES OR ELSE YOU HAVE TO RUN THIS EVERY TIME YOU BOOT!<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">6.2 Installing nginx[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=453\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=453\">edit source<\/a>]<\/h4>\n\n\n\n<p>Next up, it\u2019s time to install nginx &amp; everything necessary for us to have it ask for a username and a password to log in.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Install Nginx:<\/strong>sudo apt install nginx<\/li>\n\n\n\n<li><strong>Run the following commands:<\/strong>sudo apt update sudo apt install nginx -y<\/li>\n\n\n\n<li><strong>Create a Self-Signed SSL Certificate<\/strong>&nbsp;Generate the certificate:sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout \/etc\/ssl\/private\/nginx-selfsigned.key -out \/etc\/ssl\/certs\/nginx-selfsigned.crt<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;For the Common Name (CN), use your local domain (e.g., happycloud.home.arpa).<\/p>\n<\/blockquote>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>Create Strong Diffie-Hellman Group<\/strong>, makes security and https better, because we totally need more security on a LAN connection nobody else will be able to connect to besides your kid who\u2019s trying to troll you withsudo openssl dhparam -out \/etc\/ssl\/certs\/dhparam.pem 2048<\/li>\n\n\n\n<li><strong>Create Password File for Basic Auth<\/strong>&nbsp;Install apache2-utils and create the password file:sudo apt install apache2-utils sudo htpasswd -c \/etc\/nginx\/.htpasswd your_username<\/li>\n\n\n\n<li>Replace your_username with your desired username.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">6.3 Configure Nginx[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=454\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=454\">edit source<\/a>]<\/h4>\n\n\n\n<p>Create a new Nginx configuration file:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo nano \/etc\/nginx\/sites-available\/frigate<\/pre>\n\n\n\n<p>If this directory does not exist, you might be using a newer version of nginx, which places configuration files in&nbsp;<code>\/etc\/nginx\/conf.d<\/code>&nbsp;instead. Running&nbsp;<code>nginx -v<\/code>&nbsp;will tell you whether you are using an older version that defaults to&nbsp;<a href=\"https:\/\/www.reddit.com\/r\/nginx\/comments\/re8ksm\/why_is_sitesenabled_and_sitesavailable_deprecated\/\"><code>\/etc\/nginx\/sites-available<\/code>&nbsp;and&nbsp;<code>\/etc\/nginx\/sites-enabled<\/code><\/a>&nbsp;or a newer version that uses&nbsp;<code>\/etc\/nginx\/conf.d\/<\/code>&nbsp;in that case:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo nano \/etc\/nginx\/sites-available\/frigate<\/pre>\n\n\n\n<p>Add the following configuration: remember to replace&nbsp;<strong>\u201chappycloud.home.arpa\u201d<\/strong>&nbsp;as well as&nbsp;<strong>\u201c192.168.5.2\u201d<\/strong>&nbsp;with the hostname &amp; IP address of YOUR server!<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">server {\n    listen 80;\n    server_name happycloud.home.arpa 192.168.5.2;\n    return 301 https:\/\/$host$request_uri;\n}\nserver {\n    listen 443 ssl;\n    server_name happycloud.home.arpa 192.168.5.2;\n    ssl_certificate \/etc\/ssl\/certs\/nginx-selfsigned.crt;\n    ssl_certificate_key \/etc\/ssl\/private\/nginx-selfsigned.key;\n    ssl_dhparam \/etc\/ssl\/certs\/dhparam.pem;\n    ssl_session_timeout 10m;\n    ssl_session_cache shared:SSL:10m;\n    ssl_session_tickets off;\n    auth_basic \"Restricted Access\";\n    auth_basic_user_file \/etc\/nginx\/.htpasswd;\n    location \/ {\n        proxy_pass http:\/\/127.0.0.1:5000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n    location \/ws {\n        proxy_pass http:\/\/127.0.0.1:5000;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_set_header Host $host;\n    }\n}<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE<\/strong>: Many open source projects suggest using nginx as a reverse proxy. They are kind &amp; cordial enough to provide their own configuration files for you so you don\u2019t have to write everything above &amp; configure it yourself.<\/p>\n\n\n\n<p>While well meaning, many of them set the cipher(security thingie) manually, a throwback tot he days when nginx used to default to insecure ciphers. So you may see old docs by developers that MEANT WELL to provide you a helping hand with stuff like this in their nginx configuration files:<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-preformatted\">    ssl_protocols TLSv1.2 TLSv1.3;\n    ssl_prefer_server_ciphers on;\n    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384;<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>This is bad. Remove things like this as long as you are using a modern version of nginx. These change often and if you are manually setting it, that is not a great thing to be doing. Also consider politely<em>(POLITELY)<\/em>&nbsp;mentioning to the devs who had that in there that this isn\u2019t necessary anymore since nginx no longer defaults to insecure ciphers.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">6.4 Enable the Nginx Configuration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=455\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=455\">edit source<\/a>]<\/h4>\n\n\n\n<p>Enable the configuration and reload Nginx. The commands below do the following:<\/p>\n\n\n\n<p><code>sudo ln -s \/etc\/nginx\/sites-available\/frigate \/etc\/nginx\/sites-enabled\/<\/code>&nbsp;This takes our configuration file out of the \u201cchamber\u201d (sites-available) and into the breech (sites-enabled). Your configuration file you place in sites-available will not work unless it is in sites-enabled.&nbsp;<code>ln -s<\/code>&nbsp;creates a symlink, similar to how a shortcut works in Windows.&nbsp;<code>nginx -t<\/code>&nbsp;checks our configuration file for errors.&nbsp;<code>sudo systemctl reload nginx<\/code>&nbsp;allows nginx to load a new configuration file&nbsp;<em>without<\/em>&nbsp;shutting down.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo ln -s \/etc\/nginx\/sites-available\/frigate \/etc\/nginx\/sites-enabled\/ \nsudo nginx -t # This checks if config is bad &amp; tells us what we did wrong\nsudo systemctl reload nginx<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">6.5 Test Frigate; does it require user\/pass?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=456\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=456\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Log into&nbsp;<code><a href=\"http:\/\/192.168.5.2:5000\/\">http:\/\/192.168.5.2:5000<\/a><\/code>&nbsp;from other computers on your LAN. If it doesn\u2019t work, you did good.<\/li>\n\n\n\n<li>Your nephew can no longer replace your cameras with goatse.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">6.6 Make sure Home Assistant still connects to Frigate.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=457\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=457\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go over to Home Assistant at&nbsp;<code><a href=\"http:\/\/192.168.5.4:8123\/\">http:\/\/192.168.5.4:8123<\/a><\/code>&nbsp;or&nbsp;<code><a href=\"http:\/\/homeassistant.home.arpa\/\">http:\/\/homeassistant.home.arpa<\/a><\/code><\/li>\n\n\n\n<li>Go to&nbsp;<strong>Settings \u2192 Devices &amp; Integrations \u2192 Frigate<\/strong><\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cADD DEVICE\u201d<\/strong>&nbsp;blue button on bottom right<\/li>\n\n\n\n<li>Enter the IP or hostname, along with port, of the machine running Frigate on port 5000 like such:&nbsp;<code><a href=\"http:\/\/192.168.5.2:5000\/\">http:\/\/192.168.5.2:5000<\/a><\/code>&nbsp;or&nbsp;<code><a href=\"http:\/\/happycloud.home.arpa:5000\/\">http:\/\/happycloud.home.arpa:5000<\/a><\/code><\/li>\n\n\n\n<li>Click&nbsp;<strong>SUBMIT<\/strong>.<\/li>\n\n\n\n<li>If Home Assistant\u2019s Frigate plugin can find your cameras by connecting to Frigate on port 5000, but no other computer on your LAN can, YOU DID GOOD.<\/li>\n\n\n\n<li>Go to&nbsp;<a href=\"http:\/\/192.168.5.2\/\">http:\/\/192.168.5.2<\/a>&nbsp;\u2013 it should auto-redirect you to SSL&nbsp;<a href=\"https:\/\/192.168.5.2\/\">https:\/\/192.168.5.2<\/a>&nbsp;&amp; then ask for username &amp; password.<\/li>\n\n\n\n<li>Enter your username &amp; password.<\/li>\n\n\n\n<li>If you are now in Frigate, you done good.<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\">Replacing Google Drive, Photos, Docs, Sheets, &amp; Keep[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=458\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=458\">edit source<\/a>]<\/h1>\n\n\n\n<p>Next up, we\u2019ll be setting up a complete app suite so those of you used to iCloud for photos, Google Docs for online office, backup, etc., don\u2019t feel like you\u2019re making big sacrifices. The programs we\u2019ll be installing are as follows:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Immich, to replace Google Photos\/iCloud Photos<\/li>\n\n\n\n<li>Onlyoffice, to replace Google Docs &amp; Google Sheets<\/li>\n\n\n\n<li>Syncthing, to replace iCloud &amp; Google Drive<\/li>\n\n\n\n<li>Samba, to allow easy access in any file explorer in any operating system to users connected via VPN<\/li>\n\n\n\n<li>Nextcloud Notes for a Google Keep-like notes system.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Making a new virtual machine[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=459\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=459\">edit source<\/a>]<\/h2>\n\n\n\n<p>We are going to create a second Ubuntu server virtual machine for our next task \u2013 setting up Immich, Onlyoffice, and Syncthing. These instructions are virtually identical to the instructions for installing a virtual machine for Mailcow.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What makes this virtual machine installation different from Mailcow\u2019s VM installation?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=460\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=460\">edit source<\/a>]<\/h3>\n\n\n\n<p>We want more RAM &amp; CPU power for this instance because:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Immich is going to transcode videos we upload to video proxies<\/li>\n\n\n\n<li>Immich is going to run machine learning tasks on your photos (LOCALLY)<\/li>\n\n\n\n<li>Immich is going to create thumbnails of our photos<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Note: What is a video proxy? Video proxies &amp; photo thumbnails are smaller, more compressed versions of the original video or picture that allow you to load them quickly even when your internet connection is slow.<\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_a05cc5c9.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Setting up Virtual Machine Manager (virsh)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=461\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=461\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_b51c10bd.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In&nbsp;<strong>Virtual Machine Manager<\/strong>, click&nbsp;<strong>File &gt; New Virtual Machine<\/strong>&nbsp;from the menu.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_151745e3.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_9a251511.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_8bf9cc92.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Choose Installation Media[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=462\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=462\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Select&nbsp;<strong>\u201cLocal install media (ISO image or CDROM)\u201d<\/strong>&nbsp;and click&nbsp;<strong>\u201cForward\u201d<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cBrowse\u201d<\/strong>&nbsp;to select your Ubuntu Server ISO.<\/li>\n\n\n\n<li>Choose the ISO file you prepared earlier (e.g.,&nbsp;<code>\/var\/lib\/libvirt\/images\/ubuntu-server.iso<\/code>) and click&nbsp;<strong>\u201cForward\u201d<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.2 Choose Operating System Version:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=463\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=463\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Virtual Machine Manager may automatically detect the OS. If not, search for&nbsp;<code>ubuntu<\/code>&nbsp;and choose what is closest to your version. When in total doubt,&nbsp;<code>linux generic 2022<\/code>&nbsp;works.<\/li>\n\n\n\n<li>Click<strong>\u201cForward\u201d<\/strong>.<\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_f72805e.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.3 Configure Memory and CPU:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=464\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=464\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Allocate the resources for your VM:\n<ul class=\"wp-block-list\">\n<li><strong>Set RAM<\/strong>: I would use at LEAST 75% of your machine\u2019s RAM.<\/li>\n\n\n\n<li><strong>Set vCPUs<\/strong>: I would set this to at least 75% of your CPU\u2019s cores.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click \u201cForward\u201d.<\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_52d81284.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.4 Configure Storage:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=465\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=465\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Select&nbsp;<strong>Create a disk image for the virtual machine<\/strong>.<\/li>\n\n\n\n<li>I would make this as large as you imagine your entire smartphone backup to be, plus extra for padding.<\/li>\n\n\n\n<li>What is the size of ALL of your photos, videos, and files on your phone? That\u2019s the size to choose here.<\/li>\n\n\n\n<li><strong>When I say videos, I do not mean things you want to watch at home\/on your TV \u2013 we will have another setup for that. I mean your personal photo albums\/videos recorded on your phone.<\/strong><\/li>\n\n\n\n<li>Make sure the disk image format is QCOW2. This format supports resizing, and other cool features.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cForward\u201d<\/strong>.<\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_f64d0065.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.5 Set Up Networking with the Bridge Interface[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=466\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=466\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Choose&nbsp;<strong>\u201cSpecify shared device name\u201d<\/strong>&nbsp;under&nbsp;<strong>\u201cNetwork Selection\u201d<\/strong>.<\/li>\n\n\n\n<li>In the Device Name field, type&nbsp;<code>br0<\/code>&nbsp;(or whatever name you have given your bridge interface).<\/li>\n\n\n\n<li>This will allow the VM to grab a static IP from the same network as your host machine, making sure it acts like an independent hardware device.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cForward\u201d<\/strong>.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_60757ece.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.6 Finish &amp; Customize Before Installing[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=467\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=467\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Name your virtual machine (e.g., \u201candroidstuff\u201d), something suitable for what this machine will do.<\/li>\n\n\n\n<li>Before clicking&nbsp;<strong>\u201cFinish\u201d<\/strong>, check the box that says&nbsp;<strong>\u201cCustomize configuration before install\u201d<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cFinish\u201d<\/strong>.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_f5a5b1fa.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Install Ubuntu Server as a Virtual Machine[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=468\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=468\">edit source<\/a>]<\/h3>\n\n\n\n<p><strong>I will be blazing through this since we did this already once &#8211; refer to Installing Ubuntu Server with RAID 1, LVM, and LUKS Encryption above.<\/strong><\/p>\n\n\n\n<p><strong>Keep in mind the following:<\/strong><\/p>\n\n\n\n<p>We are NOT using LUKS encryption here. There is no need since the image is going to be stored on an encrypted partition.<\/p>\n\n\n\n<p>We are NOT using RAID \u2013 this is a disk image that is being stored on a RAID array, so we are not doing that.<\/p>\n\n\n\n<p>We are configuring networking the same as we did before, but we will be using a&nbsp;<em><strong>different<\/strong><\/em>&nbsp;IP address!<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 Start the installation process in the virtual machine[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=469\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=469\">edit source<\/a>]<\/h4>\n\n\n\n<p>Choose your language and select&nbsp;<strong>\u201cTry or install Ubuntu Server\u201d<\/strong>.<\/p>\n\n\n\n<p>Follow the installation prompts.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_ec4e8896.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_578acc67.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 Configure Static IP Address[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=470\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=470\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When you reach the Network configuration screen, select the network interface that corresponds to your network interface.<\/li>\n\n\n\n<li>Choose the option&nbsp;<strong>\u201cConfigure network manually\u201d<\/strong>.<\/li>\n\n\n\n<li>Enter the following details:\n<ul class=\"wp-block-list\">\n<li>IP Address:&nbsp;<strong>192.168.5.5<\/strong><\/li>\n\n\n\n<li>Subnet:&nbsp;<strong>192.168.5.0\/24<\/strong><\/li>\n\n\n\n<li>Gateway:&nbsp;<strong>192.168.5.1<\/strong><\/li>\n\n\n\n<li>Nameserver:&nbsp;<strong>192.168.5.1<\/strong><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Make sure you enter all the details correctly to provide the virtual machine has the correct static IP configuration.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_96b658d9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_db73416d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_395bacbb.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_11e6c2bf.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_b4d42965.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_c3cac3b1.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_d358ecfb.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_35442bae.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_42a93091.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_f21e3690.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_220bed13.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_36760d5c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_eb8a4fe0.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_64120bbe.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_8281f281.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_b6f1ac1f.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_89692e7.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 Partition the virtual \u201cdrive\u201d[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=471\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=471\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When you reach the Filesystem setup section, select \u201cUse an entire disk\u201d and then choose the disk you want to install Ubuntu Server on.<\/li>\n\n\n\n<li>Choose the option \u201cSet up this disk as an LVM group\u201d.<\/li>\n\n\n\n<li><strong>Important:<\/strong>&nbsp;At this stage, edit the partition sizes as Ubuntu\u2019s installer usually allocates 2 GB for boot which is ridiculous and even worse it only uses half the available space for your LVM &amp; root. The Ubuntu auto partitioner is horrible.<\/li>\n\n\n\n<li>Reduce the boot partition to 512 MB.<\/li>\n\n\n\n<li>Delete the old LVM &amp; root partition.<\/li>\n\n\n\n<li>Create a new LVM taking up the entire disk.<\/li>\n\n\n\n<li>Create a logical volume for the root filesystem, using all available space.<\/li>\n\n\n\n<li><strong>Do not encrypt the volume<\/strong>&nbsp;(it\u2019s unnecessary since the host drive is already encrypted, and it is not my intention for you to have these VMs running on other people\u2019s servers).<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_3d6c5298.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_751040c0.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.4 Finalize installation &amp; do not install docker[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=472\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=472\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Set up your username and password.<\/li>\n\n\n\n<li><strong>Choose to install OpenSSH server.<\/strong><\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>WARNING:<\/strong>&nbsp;DO NOT CHOOSE TO INSTALL DOCKER USING THE PROMPT AFTER THIS!<\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li>After configuring the partition sizes, proceed with the installation process as usual, following the prompts to set up any additional software you want to install.<\/li>\n\n\n\n<li>Once the installation is complete, the system will automatically apply your network &amp; partitioning settings.<\/li>\n\n\n\n<li>When prompted, remove the installation media (ISO) disk image from the virtual machine settings.<\/li>\n\n\n\n<li>Restart the virtual machine.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_ce86cb27.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_b291175e.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_b1c36016.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.5 Remove the CDROM[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=473\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=473\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>View \u2014&gt; Details<\/strong>&nbsp;in&nbsp;<strong>Virtual Machine Manager<\/strong><\/li>\n\n\n\n<li>Go to&nbsp;<strong>\u201cSATA CDROM\u201d<\/strong>&nbsp;on the left side.<\/li>\n\n\n\n<li>Confirm that the&nbsp;<strong>\u201csource path\u201d<\/strong>&nbsp;is the ubuntu iso we downloaded for installing Ubuntu server on this virtual machine<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cremove\u201d<\/strong>&nbsp;in the lower right corner.<\/li>\n\n\n\n<li>UNCHECK&nbsp;<strong>\u201cdelete associated storage files\u201d<\/strong>&nbsp;\u2013 we will use this image again later!<\/li>\n\n\n\n<li>Click delete.<\/li>\n\n\n\n<li>You may have to turn off the VM to do this.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_fb68028c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_28adba83.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_85359533.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_74771b5d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_83560fb2.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_f5637068.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_e789b00f.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.6 Set Up Static IP Mapping in pfSense:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=474\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=474\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Log into your&nbsp;<strong>pfSense<\/strong>&nbsp;router.<\/li>\n\n\n\n<li>Go to&nbsp;<strong>Status &gt; Diagnostics &gt; ARP Table<\/strong>.<\/li>\n\n\n\n<li>Find the MAC address associated with your server\u2019s IP (in our case this is,&nbsp;<strong>192.168.5.5<\/strong>), copy it.<\/li>\n\n\n\n<li>Go to&nbsp;<strong>Services &gt; DHCP Server<\/strong>.<\/li>\n\n\n\n<li>Scroll to the bottom and click&nbsp;<strong>\u201cAdd Static Mapping\u201d<\/strong>.<\/li>\n\n\n\n<li>Enter the MAC address and IP address of your server.<\/li>\n\n\n\n<li>Give it a descriptive name (such as \u201candroidstuff static IP\u201d).<\/li>\n\n\n\n<li>Set the hostname to&nbsp;<code>androidstuff<\/code>.<\/li>\n\n\n\n<li>Save and apply changes.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;This makes sure that this IP address is reserved for this computer to connect to, so that no other device can take it (unless they are spoofing MAC addresses, but if someone does, that\u2019s a different story).<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">2.7 Set up this virtual machine to start at boot:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=475\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=475\">edit source<\/a>]<\/h4>\n\n\n\n<p>Type the follodwing into the terminal at&nbsp;<code>happycloud<\/code>, which is our main server that we are creating all of these virtual machines on at&nbsp;<code>192.168.5.2<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">virsh autostart androidstuff<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check that this is set up properly by typing&nbsp;<code>virsh dominfo androidstuff<\/code>&nbsp;and seeing if the autostart line is set to enable.<\/li>\n\n\n\n<li>If you don\u2019t do this, you will realize once it is too late &amp; you\u2019ve left your house after you have rebooted your server (for whatever reason) that none of your services are working. This will suck.<\/li>\n\n\n\n<li>This command makes it so that the virtual machine starts each time we boot the computer.<\/li>\n<\/ul>\n\n\n\n<p>You\u2019ve now successfully set up an&nbsp;<strong>Ubuntu Server<\/strong>&nbsp;virtual machine using Virtual Machine Manager, configured with a static IP address and LVM partitioning. We have a virtual machine that we just created that we can use to set up our second server for android backups, image search using machine learning &amp; face detection with local models that don\u2019t connect to the internet.&nbsp;<strong>EXCITED<\/strong>??? I AM! \ud83d\ude00 \ud83d\ude00 \ud83d\ude00<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Setting up Syncthing for android backups[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=476\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=476\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Install syncthing[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=477\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=477\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Add the Syncthing Repository[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=478\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=478\">edit source<\/a>]<\/h4>\n\n\n\n<p>First, we need to add the Syncthing repository and its PGP key for package verification.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create a directory for the keyring:sudo mkdir -p \/etc\/apt\/keyrings<\/li>\n\n\n\n<li>Download the Syncthing release PGP key:sudo curl -L -o \/etc\/apt\/keyrings\/syncthing-archive-keyring.gpg https:\/\/syncthing.net\/release-key.gpg<\/li>\n\n\n\n<li>Add the Syncthing stable repository to your APT sources:echo &#8222;deb [signed-by=\/etc\/apt\/keyrings\/syncthing-archive-keyring.gpg] https:\/\/apt.syncthing.net\/ syncthing stable&#8221; | sudo tee \/etc\/apt\/sources.list.d\/syncthing.list<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">1.2 Make Sure Syncthing Repository Takes Priority[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=479\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=479\">edit source<\/a>]<\/h4>\n\n\n\n<p>To make sure the system packages don\u2019t take preference over the ones in the Syncthing repository:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create a preferences file for APT:sudo nano \/etc\/apt\/preferences.d\/syncthing<\/li>\n\n\n\n<li>Add the following content to the file:Package: * Pin: origin apt.syncthing.net Pin-Priority: 990<\/li>\n\n\n\n<li>Save &amp; exit the editor (in nano, press&nbsp;<code>Ctrl+X<\/code>, then&nbsp;<code>Y<\/code>, then&nbsp;<code>Enter<\/code>).<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.3 Install Syncthing[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=480\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=480\">edit source<\/a>]<\/h4>\n\n\n\n<p>Now that we\u2019ve added the repository and made sure its priority, let\u2019s install Syncthing:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Update the package lists and make sure your system is up to date:sudo apt-get update sudo apt-get upgrade -y<\/li>\n\n\n\n<li>Install Syncthing:sudo apt-get install syncthing -y<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Setting Up Syncthing as a System Service[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=481\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=481\">edit source<\/a>]<\/h3>\n\n\n\n<p>To have Syncthing start automatically on system boot, even without user login, we\u2019ll set it up as a&nbsp;<code>systemd<\/code>&nbsp;service that runs as our user, even if we haven\u2019t logged in yet.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 Create a Systemd Service File[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=482\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=482\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create a new service file:sudo nano \/etc\/systemd\/system\/syncthing@$USER.service<\/li>\n\n\n\n<li>Add the following content to the file:[Unit] Description=Syncthing Documentation=man:syncthing After=network.target [Service] User=%i ExecStart=\/usr\/bin\/syncthing -no-browser -gui-address=0.0.0.0:8384 Restart=on-failure RestartSec=5 SuccessExitStatus=3 4 RestartForceExitStatus=3 4 # Harder ProtectSystem=full PrivateTmp=true SystemCallArchitectures=native MemoryDenyWriteExecute=true NoNewPrivileges=true [Install] WantedBy=multi-user.target<\/li>\n\n\n\n<li>Save and exit the editor, hit&nbsp;<code>Ctrl+X<\/code>&nbsp;then&nbsp;<code>Y<\/code>&nbsp;to save.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 Configure the Service[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=483\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=483\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Enable the service:sudo systemctl enable syncthing@$USER.service<\/li>\n\n\n\n<li>Start the service:sudo systemctl start syncthing@$USER.service<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Securing Syncthing\u2019s Web Interface[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=484\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=484\">edit source<\/a>]<\/h3>\n\n\n\n<p>By default, Syncthing\u2019s web interface is accessible from any device that can reach your server. This makes it very important to secure the interface with a strong password.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_a1d1627a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_7548e599.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_79b6bf05.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_e4e01235.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_3e71e99.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.1 Access the Web Interface[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=485\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=485\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open a web browser and navigate to&nbsp;<code><a href=\"http:\/\/192.168.5.5:8384\/\">http:\/\/192.168.5.5:8384<\/a><\/code>&nbsp;or&nbsp;<code><a href=\"http:\/\/androidstuff.home.arpa\/\">http:\/\/androidstuff.home.arpa<\/a><\/code>.<\/li>\n\n\n\n<li>You should see the Syncthing web interface.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">3.2 Add a GUI Password[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=486\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=486\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the web interface, click on the \u201cActions\u201d button (gear icon) in the top right corner.<\/li>\n\n\n\n<li>Select&nbsp;<strong>\u201cSettings\u201d<\/strong>&nbsp;from the dropdown menu.<\/li>\n\n\n\n<li>In the Settings page, scroll down to the&nbsp;<strong>\u201cGUI\u201d<\/strong>&nbsp;section.<\/li>\n\n\n\n<li>Find the&nbsp;<strong>\u201cGUI Authentication User\u201d<\/strong>&nbsp;field and enter a username.<\/li>\n\n\n\n<li>In the&nbsp;<strong>\u201cGUI Authentication Password\u201d<\/strong>&nbsp;field, enter a strong password.<\/li>\n\n\n\n<li>Check&nbsp;<strong>\u201cUse HTTPS for GUI\u201d<\/strong>&nbsp;so we can visit the server using&nbsp;<a href=\"https:\/\/androidstuff.home.arpa:8384\/\">https:\/\/androidstuff.home.arpa:8384<\/a>&nbsp;instead. It\u2019s a good habit.&nbsp;\ud83d\ude42<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;Choose a complex password so some random perosn who attaches to your home wifi if you forget to set up a guest network that has no LAN access can\u2019t mess with your Syncthing configuration.<\/p>\n<\/blockquote>\n\n\n\n<ol start=\"7\" class=\"wp-block-list\">\n<li>Click&nbsp;<strong>\u201cSave\u201d<\/strong>&nbsp;at the bottom of the page.<\/li>\n\n\n\n<li>Syncthing will prompt you to confirm the changes. Click&nbsp;<strong>\u201cYes\u201d<\/strong>&nbsp;to apply the new settings.<\/li>\n\n\n\n<li>You\u2019ll be logged out and prompted to log in with your new credentials.<\/li>\n\n\n\n<li>Attempt to access the interface again. You should be prompted for the username and password you set. If not, you messed something up. Do not pass go, do not collect $200, until this asks you for a password to log in.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Configuring Syncthing Discovery Settings[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=487\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=487\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">4.1 Understanding Discovery Methods &amp; why we DON\u2019T USE THEM.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=488\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=488\">edit source<\/a>]<\/h4>\n\n\n\n<p>Discovery methods are how the syncthing app on your phone will \u201cfind\u201d the server you set up as your backup server.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;Our server has a static IP:&nbsp;<code>192.168.5.5<\/code>. We went through the trouble to make sure it always lives at&nbsp;<code>192.168.5.5<\/code>&nbsp;via static mappings in&nbsp;<strong>pfSense<\/strong>&nbsp;and configuring a static IP in the server\u2019s networking setting sOur server will&nbsp;<strong>always<\/strong>&nbsp;be present at&nbsp;<code>192.168.5.5<\/code>&nbsp;or&nbsp;<code>androidstuff.home.arpa<\/code>&nbsp;while we are connected via VPN. All Syncthing \u201cdiscovery\u201d is doing is trying to find our machine, but why use a find feature when we already know where it is? This adds another point of failure for no good reason! Think of it like making your iPhone invisible &amp; then enabling&nbsp;<strong>\u201cfind my iPhone.\u201d<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p>This setup we are installing syncthing onto has the following:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A static IP configured, so that it is&nbsp;<strong>always<\/strong>&nbsp;<code>192.168.5.5<\/code><\/li>\n\n\n\n<li>A static IP mapping configured in our router, so that no other device on our network can ever steal&nbsp;<code>192.168.5.5<\/code>&nbsp;from the computer running syncthing.<\/li>\n\n\n\n<li>A static hostname of&nbsp;<code>androidstuff<\/code>&nbsp;that does not change.<\/li>\n\n\n\n<li>Dynamic DNS for our main internet connection, so when we are outside our network our&nbsp;<strong>pfSense<\/strong>&nbsp;router &amp;&nbsp;<code>FreeDNS<\/code>&nbsp;will make sure that&nbsp;<code>louishomeserver.chickenkiller.com<\/code>&nbsp;always points to our home network IP address.<\/li>\n<\/ol>\n\n\n\n<p><strong>I will showcase local discovery failing on video.<\/strong>&nbsp;It&nbsp;<em>\u201cworks\u201d<\/em>&nbsp;when I initially connect to my server via QR code &amp; visiting it in the browser, but fails when I try to connect again. This is because my VPN is on network&nbsp;<code>192.168.6.0\/24<\/code>&nbsp;and my Syncthing is on&nbsp;<code>192.168.5.0\/24<\/code>. I was hoping local discovery would be \u201csmart\u201d enough to remember the last IP address my server was on since it had not changed, but it did not.<\/p>\n\n\n\n<p><strong>NEVER RELY ON SOMETHING ELSE TO BE \u201cSMART\u201d IN SOLVING A PROBLEM THAT DOES NOT HAVE TO EXIST IN THE FIRST PLACE!<\/strong><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4.2 Local Discovery \u2013 DO NOT TRUST![<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=489\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=489\">edit source<\/a>]<\/h4>\n\n\n\n<p>Local discovery allows Syncthing to find other devices on your local network automatically. Key word,&nbsp;<em>local<\/em>&nbsp;\u2013 meaning your subnet of&nbsp;<code>192.168.5.0\/24<\/code>. What if you connect via your VPN, which is on&nbsp;<code>192.168.6.0\/24<\/code>?<\/p>\n\n\n\n<p>When we first add the QR code of our Syncthing instance to our Android phone Syncthing app, Syncthing will connect to our desktop server running Syncthing. HOWEVER: our Android application will NOT find the Syncthing server the NEXT time we connect. THIS IS BAD!!<\/p>\n\n\n\n<p>This is even worse than it not working at all, as it will give the false impression that it works. This is how people who have set up \u201cbackup solutions\u201d end up as customers of Rossmann Repair Group paying $2000 to recover a hard drive that fell off a balcony.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Connecting Reliably to Syncthing without Discovery Hassles[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=490\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=490\">edit source<\/a>]<\/h5>\n\n\n\n<p>This situation is actually&nbsp;<strong>worse<\/strong>&nbsp;than if Syncthing had no Local Discovery feature at all. If it didn\u2019t work from the start, you\u2019d know you couldn\u2019t rely on it and would just hardcode the IP of your Syncthing server right into your Android app, using the server\u2019s local IP to connect directly.<\/p>\n\n\n\n<p>What\u2019s dangerous is that Syncthing\u2019s Android app connects the first time by scanning the QR code on the server, making it seem like it\u2019s actually discovering your computer. But it\u2019s not. Next time you try to connect\u2014especially if you\u2019re on a different subnet via VPN\u2014it\u2019ll fail to find the server.<\/p>\n\n\n\n<p><strong>Syncthing doesn\u2019t even remember the last IP address it used, so it ends up trying to rediscover it, failing again.<\/strong><\/p>\n\n\n\n<p>I get it. If it can\u2019t find the server on a different subnet when you\u2019re using a VPN, fine, but it\u2019s dangerous that Syncthing doesn\u2019t try the last known IP to see if it still works.<\/p>\n\n\n\n<p><strong>TL;DR \u2013 to avoid becoming a data recovery customer, don\u2019t trust local or global discovery. Just use the IP address of the server, which in our case is&nbsp;<code>192.168.5.5<\/code>, and check that it works three separate times under three separate conditions before ever assuming that it is working, as you should with ANY backup solution!<\/strong><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4.3 Global Discovery[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=491\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=491\">edit source<\/a>]<\/h4>\n\n\n\n<p>Global discovery helps Syncthing find your devices over the internet. It works by periodically announcing your device\u2019s presence to global discovery servers.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Privacy Implications:<\/strong>&nbsp;Higher risk, as it involves sharing your device\u2019s information with external servers. This could potentially expose:\n<ul class=\"wp-block-list\">\n<li>Your IP address<\/li>\n\n\n\n<li>The fact that you\u2019re using Syncthing<\/li>\n\n\n\n<li>When your device is online<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>The bigger issue with this is not privacy,&nbsp;<em>it\u2019s that it is unnecessary<\/em>&nbsp;and adds another point of failure over entering the hostname manually.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4.2 Configuring Discovery Settings[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=492\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=492\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Access Syncthing Settings<\/strong>\n<ol class=\"wp-block-list\">\n<li>Open the Syncthing web interface (typically&nbsp;<code><a href=\"https:\/\/192.168.5.5\/\">https:\/\/192.168.5.5<\/a><\/code>&nbsp;or&nbsp;<code><a href=\"https:\/\/androidstuff.home.arpa:8384\/\">https:\/\/androidstuff.home.arpa:8384<\/a><\/code>).<\/li>\n\n\n\n<li>Click on the \u201cActions\u201d button (gear icon) in the top right corner.<\/li>\n\n\n\n<li>Select \u201cSettings\u201d from the dropdown menu.<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li><strong>Adjust Discovery Settings<\/strong>\n<ol class=\"wp-block-list\">\n<li>In the Settings page, scroll to the \u201cConnections\u201d section.<\/li>\n\n\n\n<li>Find the following options:\n<ul class=\"wp-block-list\">\n<li><strong>Enable Local Discovery:<\/strong>&nbsp;Keep this checked.<\/li>\n\n\n\n<li><strong>Enable Global Discovery:<\/strong>&nbsp;Uncheck this box.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click \u201cSave\u201d at the bottom of the page.<\/li>\n\n\n\n<li>Syncthing will prompt you to confirm the changes. Click \u201cYes\u201d to apply the new settings.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5: Connecting server syncthing to android syncthing[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=493\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=493\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_90112fd.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_5f13fe67.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_98846264.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_7cd671c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_9884f00d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_1527f750.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_27000b93.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_2a5ef23.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_66c6b48d.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.0 \u2013 Connect to your VPN.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=494\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=494\">edit source<\/a>]<\/h4>\n\n\n\n<p>Your android phone must be connected to your VPN for you to connect to your server if your phone is not on the same wifi network as the virtual machine running the syncthing server.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">5.1 Install syncthing from the f-droid store.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=495\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=495\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to the&nbsp;<em><a href=\"https:\/\/f-droid.org\/en\/packages\/com.github.catfriend1.syncthingandroid\/\">F-Droid Store to install syncthing-fork<\/a><\/em><\/li>\n\n\n\n<li>Upon starting syncthing, provide it permissions for notifications.<\/li>\n\n\n\n<li>Permissions for location are not necessary.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.2 Avoid becoming a data recovery customer[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=496\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=496\">edit source<\/a>]<\/h4>\n\n\n\n<p><strong>Delete the Camera Folder<\/strong>: Not from the device, just from the sync list, within syncthing. Tap on the camera folder &amp; hit the trash bin in the upper right.<\/p>\n\n\n\n<p>There\u2019s a good reason for that. You might think, \u201cWhy? I WANT to sync and back up my photos and videos!!\u201d Here\u2019s the thing: sometimes, camera apps switch folders without you knowing. I\u2019ve seen cases where photos were saved in a different folder INSIDE the DCIM folder, and the gallery app only showed one specific folder.<\/p>\n\n\n\n<p>I\u2019m not a predatory technician that&nbsp;<em><a href=\"https:\/\/www.youtube.com\/watch?v=OVZTBhVV5tI&amp;pp=ygUVZHJpdmVzYXZlcnMgIHJvc3NtYW5u\">bills people $3000 for a bad iPhone screen or charge port<\/a><\/em>. But they are out there, and someone was close to paying $500 to a different scam artist data recovery company because their gallery app wasn\u2019t checking a 2nd folder inside of the DCIM folder where another program was saving photos to.<\/p>\n\n\n\n<p>We are not going to back up the camera folder&nbsp;<em>within<\/em>&nbsp;the DCIM folder. We are going to back up the&nbsp;<strong>entire DCIM folder.<\/strong><\/p>\n\n\n\n<p>For those who don\u2019t know, on 99% of Android devices,&nbsp;<strong>DCIM<\/strong>&nbsp;is a folder in the root directory of the&nbsp;<em>\u201cvisible\u201d<\/em>&nbsp;filesystem within which the subfolders storing your recorded videos &amp; pictures reside.<\/p>\n\n\n\n<p>Next, I am going to do something different. I wanted to show you what happens when you use local discovery\/dynamic rather than inserting your actual server IP address into the server field. This meant including screenshots from a LATER step, after I had already added folders that we are going to sync, to show you how syncthing fails with local discovery.&nbsp;<strong>It\u2019s important to me that you understand how this fails with images for yourself, so you don\u2019t create a setup that makes you a data recovery customer.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_621c170c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_fb6bf453.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_364a837e.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_d9c45480.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_1948d4b.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_2bfff860.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_2a5c001f.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>hEREEEEEEEEEEEEEE<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_cc3f5925.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_62d8fd43.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_f74f4252.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_cb876287.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_123b314.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_4e264fbe.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p><strong>Here is what will happen if you set this up with dynamic, disconnect, and then reconnect. Note how it shows up as \u201cidle\u201d for syncing and \u201cdisconnected\u201d on the android phone; it is transferring NOTHING, even though the desktop syncthing server GUI shows that we are out of sync.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_b52ee6c4.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_30c1edaf.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.3 Add a device to syncthing android app[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=497\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=497\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>On the top, you\u2019ll see&nbsp;<strong>Folders<\/strong>&nbsp;and&nbsp;<strong>Devices<\/strong>.<\/li>\n\n\n\n<li>Tap&nbsp;<strong>Devices<\/strong>.<\/li>\n\n\n\n<li>Tap the plus in the upper right corner to add a device.<\/li>\n\n\n\n<li>Tap the QR code next to&nbsp;<strong>Device ID<\/strong>&nbsp;in the upper right.<\/li>\n\n\n\n<li>Go back to the&nbsp;<strong>Ubuntu Server Syncthing Web Interface<\/strong>.\n<ul class=\"wp-block-list\">\n<li>Open a web browser and navigate to&nbsp;<code><a href=\"http:\/\/192.168.5.5:8384\/\">http:\/\/192.168.5.5:8384<\/a><\/code>&nbsp;or&nbsp;<a href=\"http:\/\/androidstuff.home.arpa:8384\/\">http:\/\/androidstuff.home.arpa:8384<\/a>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Obtain Device ID and QR Code\n<ul class=\"wp-block-list\">\n<li>In the web interface, click on the blue gobbledygook of numbers &amp; letters next to&nbsp;<strong>\u201cIdentification\u201d<\/strong>&nbsp;under&nbsp;<strong>\u201cThis Device\u201d<\/strong>&nbsp;(gear icon) in the top right.<\/li>\n\n\n\n<li>Select&nbsp;<strong>\u201cShow ID\u201d<\/strong>.<\/li>\n\n\n\n<li>You\u2019ll see a QR code and the device ID.&nbsp;<em>SCAN YOURS. DO NOT SCAN MINE. I SHOWED A PICTURE OF MINE SO YOU CAN SEE WHAT IT LOOKS LIKE.<\/em><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Configure Device Settings on Android\n<ul class=\"wp-block-list\">\n<li><strong>Device Name:<\/strong>&nbsp;Enter a recognizable name (e.g., \u201cUbuntu Server\u201d).<\/li>\n\n\n\n<li><strong>Addresses:<\/strong>&nbsp;<em>DO NOT CHOOSE DYNAMIC. USING DYNAMIC WILL CAUSE IT TO NOT SYNC WHEN YOU DISCONNECT &amp; RECONNECT FROM YOUR NETWORK. IT WILL WORK THE FIRST TIME, AND THEN NEVER SYNC AGAIN, AND YOU WILL BE PAYING DATA RECOVERY DOUCHEBAGS TO RECOVER YOUR PHONE.<\/em><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>How dynamic failed:<\/strong>&nbsp;I used \u201cdynamic\u201d as an example of why it doesn\u2019t make sense to use autodiscovery when you KNOW where your server is. I chose dynamic, and it connected &amp; worked. When I disconnected from my network &amp; reconnected, the&nbsp;<em>Devices<\/em>&nbsp;tab in the Syncthing Android app showed me to be&nbsp;<em>disconnected<\/em>&nbsp;and the&nbsp;<em>Folders<\/em>&nbsp;tab showed the folders to be&nbsp;<em>idle<\/em>&nbsp;even though the web GUI for Syncthing said that my folder was&nbsp;<em>Out of sync<\/em>&nbsp;and&nbsp;<em>Remote Devices<\/em>&nbsp;showed my phone as&nbsp;<em>Disconnected<\/em>.<\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li>FILL IN&nbsp;<strong>\u201cAddress\u201d<\/strong>&nbsp;when adding a device as follows, if you used the setup I was using within this guide to Syncthing.tcp:\/\/192.168.5.5:22000<\/li>\n\n\n\n<li>ORtcp:\/\/androidstuff.home.arpa:22000<\/li>\n\n\n\n<li>The format is&nbsp;<code>tcp:\/\/<\/code>, then your IP address, then&nbsp;<code>:22000<\/code>&nbsp;for the port.<\/li>\n\n\n\n<li>No need to check \u201cIntroduce new devices\u201d.<\/li>\n\n\n\n<li><strong>Did you include the&nbsp;<code>tcp:\/\/<\/code>&nbsp;at the beginning, and the&nbsp;<code>:22000<\/code>&nbsp;at the end for the port? You\u2019d better have!<\/strong><\/li>\n\n\n\n<li>Save and continue.<\/li>\n<\/ul>\n\n\n\n<ol start=\"8\" class=\"wp-block-list\">\n<li><strong>Approve the Connection on Ubuntu Server<\/strong>\n<ul class=\"wp-block-list\">\n<li>Return to the Ubuntu Server web interface.<\/li>\n\n\n\n<li>You should see a prompt to add a new device.<\/li>\n\n\n\n<li>Verify the Device ID matches your Android device.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cAdd Device\u201d<\/strong>.<\/li>\n\n\n\n<li>Set a name for the Android device (e.g., \u201cAndroid Phone\u201d).<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cSave\u201d<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Check the Connection<\/strong>\n<ul class=\"wp-block-list\">\n<li>On both devices, check that the other device appears as connected. The connection might take a few moments to establish.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;Make sure that port&nbsp;<code>22000<\/code>&nbsp;(or your configured Syncthing port) is open in your Ubuntu Server\u2019s firewall for incoming connections from your local network. B<strong>y default&nbsp;<code>ufw<\/code>&nbsp;is not running and blocking things when you first boot Ubuntu Server<\/strong>&nbsp;but that may change at a later date, same way they snuck in the suggestion of pre-installing a snap version of Docker.<\/p>\n<\/blockquote>\n\n\n\n<p>Now you\u2019ve added your Ubuntu Server Syncthing instance to your phone; no open ports, will sync whenever you are on wifi with your VPN on, and continuously back up your phone. Beautiful.&nbsp;\ud83d\ude42<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>REMEMBER \u2013 DO NOT SET \u201cADDRESSES\u201d TO \u201cDYNAMIC\u201d \u2013 TAP \u201cDYNAMIC\u201d AND REPLACE IT WITH<\/strong>&nbsp;<code>tcp:\/\/youripaddress:22000<\/code>&nbsp;<strong>REPLACING \u201cyouripaddress\u201d WITH THE IP ADDRESS OF THE VIRTUAL MACHINE THAT IS RUNNING SYNCTHING.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_65626c83.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_135ac5ce.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_ffc850bf.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_23122602.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_4468da5a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_a83ae883.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 6: Configuring Syncthing for Organized Android Backups[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=498\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=498\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">6.1 Configure Android Syncthing App[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=499\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=499\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open Syncthing on your Android device.<\/li>\n\n\n\n<li>For each folder you want to sync:\n<ul class=\"wp-block-list\">\n<li>Tap the plus icon in the upper right in the folders part of the app.<\/li>\n\n\n\n<li>Tap folder label and label it.<\/li>\n\n\n\n<li>Tap the directory and choose your directory you want to sync (it\u2019ll let you choose everything besides the download folder on android).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>MAKE SURE TO TOGGLE THE SERVER SWITCH UNDER WHERE YOU TAPPED TO CHOOSE THE DIRECTORY YOU WANTED TO SYNC SO THAT IT ACTUALLY BACKS UP.<\/strong>\n<ul class=\"wp-block-list\">\n<li>Choose&nbsp;<em>send &amp; receive<\/em>&nbsp;if you want two-way folder sync.<\/li>\n\n\n\n<li>Choose&nbsp;<em>send<\/em>&nbsp;if you want it to only send files to your server.<\/li>\n\n\n\n<li>Choose&nbsp;<em>receive<\/em>&nbsp;if you only want it to receive files from your server<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>A good rule of thumb: For smaller folders and stuff you transfer to your phone to read on a trip, audiobooks, etc., I choose&nbsp;<em>SEND &amp; RECEIVE<\/em>&nbsp;so I can transfer both ways. For stuff like videos I record and photos I take (the DCIM folder), I choose&nbsp;<em>SEND ONLY<\/em>. I have a 256 GB phone, and over 1.3 terabytes of videos I have recorded\u2026 I can\u2019t sync all of that to my phone or it will fill up. But I have less than 1 GB of audiobooks, books, and max 20 GB of movies I am watching at any given time on my phone.<\/p>\n\n\n\n<ol start=\"7\" class=\"wp-block-list\">\n<li><strong>Tap checkbox in upper right corner when done.<\/strong><\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">6.2 Syncing on wifi only \u2013 yes or no?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=500\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=500\">edit source<\/a>]<\/h4>\n\n\n\n<p>Your Android device can connect to Syncthing, and you can configure Syncthing while you\u2019re on the go. But by default, your Android device must be on wifi in order for file transfer and backup to occur. Even if you are connected to your VPN, your Android device is not going to transfer files if you are not on wifi.<\/p>\n\n\n\n<p>The way you change this is by editing the folder settings in the Syncthing Android app, and disabling the \u201csync on wifi only\u201d option. I would suggest doing this for folders with SMALL files like documents, audiobooks, and not for folders with LARGE files like the DCIM folder with your recorded videos and camera pictures.<\/p>\n\n\n\n<p>Unlimited plans have data caps; try using 200 GB in 10 days on any&nbsp;<em>\u201cunlimited\u201d<\/em>&nbsp;wireless data plan in the United States and watch your&nbsp;<em>\u201cunlimited 5G\u201d<\/em>&nbsp;turn into a 56k modem. The only reason they can market using this wankery is because consumer protection law in the United States is a joke.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_32088dd0.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_40872f6d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_5f537918.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_5b05dae0.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_a7b2093d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_16c65783.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_19a75a7a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_ceaf4d3d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxef6_tmp_9bd9aead.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">6.3 Accept Folders on Ubuntu Server[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=501\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=501\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>On the Syncthing web interface of your Ubuntu server, you\u2019ll see notifications for new folders.<\/li>\n\n\n\n<li>For each folder: Click&nbsp;<strong>\u201cAdd\u201d<\/strong>.<\/li>\n\n\n\n<li>CHANGE THE BASE DIRECTORY FROM&nbsp;<code>~\/(foldernamehere)<\/code>&nbsp;<strong>to<\/strong>&nbsp;<code>~\/androidbackup\/(foldernamehere)<\/code>&nbsp;so you don\u2019t clog up your base directory. This makes it easy to see in one click what everything we\u2019re backing up from the android phone is.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Save<\/strong>.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">6.4 Creating New Folders on Ubuntu Server[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=502\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=502\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>It does it for you. What a beautiful program, right?&nbsp;\ud83d\ude42<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 7: Verify and Test \u2013 INSPECT WHAT YOU EXPECT![<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=503\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=503\">edit source<\/a>]<\/h3>\n\n\n\n<p><strong>Don\u2019t become a data recovery customer. Syncthing is used for backing up your phone &#8211; arguably the most important part of this entire process.<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>99% of the people who show up for data recovery at a data recovery business thought their data was backing up.<\/li>\n\n\n\n<li><strong>It was not.<\/strong><\/li>\n\n\n\n<li>Use common sense, look through the folders on your server, look at the web interface, make sure things open.<\/li>\n<\/ol>\n\n\n\n<p><strong>You now have working Android backups!<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>All folders from your Android device will be organized within the&nbsp;<code>~\/androidbackup<\/code>&nbsp;directory.<\/li>\n\n\n\n<li>Each Android folder will have its own subdirectory for better organization.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Installing ONLYOFFICE Workspace and WsgiDAV to replace Google Docs[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=504\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=504\">edit source<\/a>]<\/h2>\n\n\n\n<p>So we have Syncthing, but how do we edit documents we have on our backup server? SSH in? vi? nano?<\/p>\n\n\n\n<p>No.<\/p>\n\n\n\n<p>We are going to use the same virtual machine for this that we used for Syncthing and install something called ONLYOFFICE.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Nextcloud?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=505\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=505\">edit source<\/a>]<\/h3>\n\n\n\n<p>The first thing many people are going to suggest is Nextcloud. Nextcloud is that all-in-one cloud suite that will change your contacts from read-write to read-only so that your contacts get deleted when you update&nbsp;<em>(without telling you, of course)<\/em>, that&nbsp;<em><a href=\"https:\/\/help.nextcloud.com\/t\/calendar-timezone-bug\/178056\">can\u2019t tell time<\/a><\/em>. Might it surprise you if I told you that it is miserably slow, and that it gave errors unless you clicked a separate submenu to open a document?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Moving to OnlyOffice[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=506\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=506\">edit source<\/a>]<\/h3>\n\n\n\n<p>OnlyOffice is fast, and it is used by people who actually pay them. This means that their software has to work, and it does!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 0: Install docker properly.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=507\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=507\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Never use Ubuntu\u2019s snap version of docker[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=508\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=508\">edit source<\/a>]<\/h4>\n\n\n\n<p>Ubuntu installs docker by default using the cancerous snap. We do not want to use snap. Ubuntu installer will ask if you want to install Docker, and you should always say No.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Doesn\u2019t onlyoffice\u2019s install script install docker for me?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=509\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=509\">edit source<\/a>]<\/h4>\n\n\n\n<p>Onlyoffice\u2019s installation script&nbsp;<strong>DOES<\/strong>&nbsp;install docker for you. I am still going to have you do it manually.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you choose to not install onlyoffice, and wish to install Immich, I want you to know how to install docker on this virtual machine&nbsp;<em>yourself.<\/em><\/li>\n\n\n\n<li>I don\u2019t want to rely on onlyoffice\u2019s script. It won\u2019t install docker for us if it detects Docker already, so we\u2019re not going to do a double install. What if onlyoffice\u2019s installation script stops installing docker the same way in a new version, or stops installing docker at all within its script?<\/li>\n<\/ul>\n\n\n\n<p>It\u2019s little work to install Docker the right way for our purposes manually, and it\u2019s good to have it documented so that you can use docker for immich even if you elect not to install Onlyoffice.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">0.1 Update and upgrade your system[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=510\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=510\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update &amp;&amp; sudo apt upgrade -y\nsudo apt install curl git wget -y<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">0.2 Check for other Docker installations:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=511\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=511\">edit source<\/a>]<\/h4>\n\n\n\n<p>Run&nbsp;<code>docker --version<\/code>&nbsp;and see what is installed. Nothing should be installed yet since this is a fresh system. If something is installed, remove it.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Just incase you accidentally installed snap version of docker:\n\nsudo snap remove docker\n\nFor other versions of docker: \n\nsudo apt remove docker docker-engine docker.io containerd runc<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">0.3 Install Docker using official Docker script:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=512\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=512\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">curl -fsSL https:\/\/get.docker.com -o get-docker.sh\nsudo sh get-docker.sh<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;It\u2019s very important to use the official Docker installation and not the Snap version. The Snap version can cause issues due to its sandboxed nature, making it a mess for mailcow\u2019s requirements. Docker snap makes me sad, and it\u2019ll make you sad too if you try to make things work with it.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">0.4 Install Docker Compose:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=513\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=513\">edit source<\/a>]<\/h4>\n\n\n\n<p>Ubuntu\u2019s&nbsp;<code>docker-compose-plugin<\/code>&nbsp;is safe to use, it is not snap cancer.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install docker-compose-plugin -y\nsudo systemctl enable --now docker<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">0.5 Verify the install[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=514\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=514\">edit source<\/a>]<\/h4>\n\n\n\n<p>Run&nbsp;<code>docker compose version<\/code>&nbsp;and make sure the version is 2.0 or higher. Run&nbsp;<code>docker --version<\/code>&nbsp;and make sure version is 24.0.0 or higher<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">0.6 Set proper permissions:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=515\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=515\">edit source<\/a>]<\/h4>\n\n\n\n<p>Docker needs to be run as root for some operations, but you can add your user to the docker group to avoid using&nbsp;<code>sudo<\/code>&nbsp;all the time. To be clear, mailcow\u2019s own&nbsp;<a href=\"https:\/\/docs.mailcow.email\/getstarted\/install\/#check-selinux-specifics\">documentation<\/a>&nbsp;and&nbsp;<a href=\"https:\/\/community.mailcow.email\/d\/59-mailcow-containers-running-as-root\">community<\/a>&nbsp;suggest starting with root or&nbsp;<code>sudo<\/code>, and you should trust them more than me. To quote mailcow developers,&nbsp;<em>\u201cControlling the Docker daemon as non-root user does not give you additional security. The unprivileged user will spawn the containers as root likewise. The behaviour of the stack is identical.\u201d<\/em>&nbsp;Run this command to add your user:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo usermod -aG docker $USER<\/pre>\n\n\n\n<p>Log out and log back in, or run:&nbsp;<code>newgrp docker<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Install ONLYOFFICE Workspace Community Edition[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=516\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=516\">edit source<\/a>]<\/h3>\n\n\n\n<p>It is very important that you follow the right steps. OnlyOffice\u2019s website is a minefield of documentation that will lead to broken installations like this, even if you follow their instructions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_3797c4d2.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>OR<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_4b463750.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_6712c2a2.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_36c5237e.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_a479215.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>You\u2019re going to avoid the open-source hellscape above, by installing like this:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>SSH into the&nbsp;<code>androidstuff<\/code>&nbsp;virtual machine we created at&nbsp;<code>192.168.5.5<\/code>ssh username@192.168.5.5<\/li>\n\n\n\n<li><strong>Download the ONLYOFFICE Workspace installation script:<\/strong>wget https:\/\/download.onlyoffice.com\/install\/workspace-install.sh<\/li>\n\n\n\n<li><strong>Make the script executable:<\/strong>chmod +x workspace-install.shThis changes the file permissions to allow execution.<\/li>\n\n\n\n<li><strong>Run the installation script:<\/strong>sudo bash workspace-install.sh -it WORKSPACE -md fakedomainname.comReplace \u201cfakedomainname\u201d with your actual domain name from the mailcow section. You can also leave out&nbsp;<code>-md<\/code>&nbsp;and not install it.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>CAUTION:<\/strong>&nbsp;Instructions within documentation on OnlyOffice website will lead to a broken installation. Use the command line above so it actually works.<\/p>\n<\/blockquote>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>Once this is done, log in by going to&nbsp;<a href=\"http:\/\/192.168.5.5\/\">http:\/\/192.168.5.5<\/a><\/li>\n\n\n\n<li>It will prompt you to make a username and a password. Go for it.<\/li>\n\n\n\n<li>Once logged in, make an HTTPS SSL certificate so we can log in via HTTPS:<\/li>\n<\/ol>\n\n\n\n<p>Go to&nbsp;<strong>Control Panel<\/strong>, the big icon on the main home screen.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>HTTPS<\/strong>&nbsp;on the top of the left menu.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Generate and apply<\/strong>.<\/li>\n\n\n\n<li>Be happy.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_24ca3e8b.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_d8250288.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_9dc6bcc4.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_b9441e34.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_dd4bee59.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_5206382b.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_4a1d5bab.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_7d1ddacb.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_4468b1aa.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_d27c50f2.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_b3292451.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Local file access[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=517\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=517\">edit source<\/a>]<\/h3>\n\n\n\n<p>Once you\u2019re in, you\u2019ll set up everything. Enter a password, agree to the terms of the license, and you\u2019re good to go. I suggest entering administration settings and setting up HTTPS &#8211; it will make a self-signed certificate for you!<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 Diving into \u201copen sourcey\u201d software[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=518\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=518\">edit source<\/a>]<\/h4>\n\n\n\n<p>You can open a sample document. But what if I want this workspace server to be able to access&nbsp;<em>files stored on the server??<\/em>&nbsp;I want to open a document that\u2019s on this computer; here\u2019s where the fun begins.&nbsp;\ud83d\ude42<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 The Rabbit Hole to hell for Local File Access[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=519\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=519\">edit source<\/a>]<\/h4>\n\n\n\n<p>So, where do I go? There\u2019s \u201cShared with me,\u201d \u201cFavorites,\u201d \u201cReasons,\u201d \u201cPrivate room,\u201d \u201cCommon in projects,\u201d and \u201cInvite users to Portal.\u201d Maybe the settings? Let\u2019s try that. Administrator profile settings, control panel\u2026 and oh, look, \u201cStorage\u201d &#8211; maybe I can add a local directory!!! \u2026 no, it\u2019s all a mirage<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Open Sourcism:<\/strong>&nbsp;You can\u2019t just open a document from your server. It\u2019s not a feature. You need to pass the direct URL to the document using a WebDAV server. Can you believe this? Welcome to the world of open source software!<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 Mounting volumes in Docker failed me[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=520\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=520\">edit source<\/a>]<\/h4>\n\n\n\n<p>I went down the rabbit hole to figure this out when I tried weening myself off nextcloud a few years ago.<\/p>\n\n\n\n<p>When you choose to install with Docker, there\u2019s a script that gets downloaded. I explored the directory where this is installed\u2014<code>onlyoffice<\/code>\u2014and found the&nbsp;<code>document server<\/code>,&nbsp;<code>control panel<\/code>,&nbsp;<code>community server<\/code>,&nbsp;<code>MySQL setup<\/code>, and&nbsp;<code>mail server<\/code>.<\/p>\n\n\n\n<p>In the&nbsp;<code>document server<\/code>, there\u2019s a&nbsp;<code>data<\/code>&nbsp;directory. So, I thought, \u201cSurely, I can mount it as a volume using Docker.\u201d I searched for&nbsp;<code>:rw<\/code>&nbsp;to find where they\u2019re specifying all the Docker volumes. It looks like a typical Docker Compose YAML file. I tried adding an argument for my directory, like&nbsp;<code>home\/louis\/Documents<\/code>, and mounted it in almost every possible location.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Important Note:<\/strong>&nbsp;The problem isn\u2019t that the volume isn\u2019t mounted. The issue is that this feature was never implemented in the software. They never thought a document server would need to access files on it. This is, again, the most open sourcey thing I\u2019ve seen in a long time.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">2.4 Fighting open source &amp; winning[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=521\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=521\">edit source<\/a>]<\/h4>\n\n\n\n<p>There\u2019s a way to get files into this, but it won\u2019t be immediately obvious. Going back to settings, there\u2019s a menu called&nbsp;<strong>\u201cConnected clouds\u201d<\/strong>; we will use this to connect a WebDAV server to serve ourselves files.<\/p>\n\n\n\n<p>We have to set up a webdav server, on our server, to serve files to the same virtual machine.<\/p>\n\n\n\n<p>The whole idea of cloud server software is that you should be able to edit your documents in the cloud. No matter what computer you\u2019re on, your files should be right there. But\u2026 my cloud server software can\u2019t even read the files from my cloud server computer. Even if I mount those directories within the Docker volume, it still won\u2019t work. The software wasn\u2019t designed to see items in its own document data directory. But wait, it gets better.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.5 The \u201cSolution\u201d[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=522\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=522\">edit source<\/a>]<\/h4>\n\n\n\n<p>There\u2019s a workaround for this. You can connect a new cloud. That you create, within your cloud. schrodinger\u2019s cloud.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go through the settings and head to the control panel.<\/li>\n\n\n\n<li>You\u2019ll see something called storage. You might think, \u201cOh, that\u2019s where I can change things, right?\u201d Wrong. There\u2019s nothing there for connecting to local storage.<\/li>\n\n\n\n<li>Go back and find the connect button. It\u2019s on the home screen under documents.<\/li>\n\n\n\n<li>Click \u201cConnect\u201d and we\u2019re going to connect another cloud to our cloud.<\/li>\n<\/ol>\n\n\n\n<p>We\u2019re going to create a WebDAV server on our computer to feed files over to OnlyOffice. It\u2019ll look like your directories are available, like it\u2019s reading them off your computer, but we\u2019re actually using WebDAV.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.6 Setting Up WebDAV[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=523\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=523\">edit source<\/a>]<\/h4>\n\n\n\n<p>We\u2019re setting up a separate server to feed files to our server, on our server. There\u2019s this small Python program called&nbsp;<code>wsgidav<\/code>. It\u2019s a lightweight WebDAV server, not like setting up Apache or Nginx.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.7 The Directory Problem[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=524\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=524\">edit source<\/a>]<\/h4>\n\n\n\n<p>Let\u2019s say I want two directories: a&nbsp;<code>documents<\/code>&nbsp;directory and an&nbsp;<code>Android backup<\/code>&nbsp;directory. I can\u2019t map both to WebDAV like you can in a Docker container. You can only log into one at a time.<\/p>\n\n\n\n<p>Imagine having five different directories in one Docker volume but only being able to use&nbsp;<em>one at a time.<\/em>&nbsp;You\u2019d have to log in differently each time.<\/p>\n\n\n\n<p>You might think,&nbsp;<em>\u201cLouis, just create a new directory and symlink all the directories you want into it. What\u2019s the problem?\u201d<\/em>&nbsp;Well, here\u2019s where the open source rabbit hole goes deeper\u2026 the documentation for the software has an option called&nbsp;<code>follow symlinks<\/code>. You can set it to true, but it doesn\u2019t work. Not unless you install a different version of the software because the version you get on PIP doesn\u2019t work.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Warning:<\/strong>&nbsp;This will gaslight you to tears. You\u2019ll pull your hair out wondering if you set up your symlinks right. It\u2019s like a mirage\u2014everything looks like it should work, but it doesn\u2019t. I\u2019m here to remind you that you are not insane.<\/p>\n<\/blockquote>\n\n\n\n<p>As Ralph Kramden would say, it doesn\u2019t mean to be mean; it was just born that way.<\/p>\n\n\n\n<p>I promise, this is all worth it to never have to use Nextcloud again. This is still better than Nextcloud, which tells you how bad Nextcloud is.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Setting Up a WebDAV Server on GNU\/Linux[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=525\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=525\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">3.1 Install and Configure WsgiDAV[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=526\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=526\">edit source<\/a>]<\/h4>\n\n\n\n<p>WsgiDAV is a WebDAV server implementation written in Python.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Install WsgiDAV and its dependencies:<\/strong>sudo apt install python3-pip python3-dev libssl-dev libpam0g-dev -y sudo pip3 install cheroot six python-pam sudo pip install git+https:\/\/github.com\/mar10\/wsgidav.git<strong>CAUTION:<\/strong>&nbsp;Do not install pip version of WsgiDAV as it will not work with the follow symlink option! These commands will install Python development files, SSL development files, WsgiDAV from github, and Cheroot (a WSGI server).<\/li>\n\n\n\n<li><strong>Create WsgiDAV configuration directory:<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo mkdir -p \/etc\/wsgidav<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Generate an SSL certificate for WsgiDAV:<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"> sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout \/etc\/ssl\/private\/wsgidav.key -out \/etc\/ssl\/certs\/wsgidav.crt<\/pre>\n\n\n\n<p>This creates a self-signed SSL certificate. In a production environment, use a certificate from a trusted Certificate Authority. When having localhost connect to localhost in your closet\u2026 this will do.<\/p>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>Create and edit the WsgiDAV configuration file:<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo nano \/etc\/wsgidav\/wsgidav.yaml<\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li><strong>Add the following content to the configuration file, editing&nbsp;<code>\/home\/louis\/webdavroot<\/code>&nbsp;with the directory you will use for documents:<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">  host: 0.0.0.0\n  port: 8080\n  ssl_certificate: \/etc\/ssl\/certs\/wsgidav.crt\n  ssl_private_key: \/etc\/ssl\/private\/wsgidav.key\n  enable_https: true\n  \n  \n  fs_dav_provider:\n      follow_symlinks: true\n  \n  `provider_mapping:\n      '\/webdav': '\/home\/louis\/webdavroot'\n  \n  \n  http_authenticator:\n    domain_controller: wsgidav.dc.pam_dc.PAMDomainController\n    accept_basic: true\n    accept_digest: false\n    default_to_digest: false\n  \n  pam_dc:\n    service: \"login\"\n    allow_users: \"all\"\n  \n  verbose: 3\n  \n  property_manager: true\n  lock_storage: true\n  \n  middleware_stack:\n    - wsgidav.error_printer.ErrorPrinter\n    - wsgidav.http_authenticator.HTTPAuthenticator\n    - wsgidav.dir_browser.WsgiDavDirBrowser\n    - wsgidav.request_resolver.RequestResolver\n  \n  dir_browser:\n    enable: true\n    icon: true\n    response_trailer: true<\/pre>\n\n\n\n<p>This configuration sets up SSL, defines shared directories, and configures authentication.<\/p>\n\n\n\n<ol start=\"7\" class=\"wp-block-list\">\n<li><strong>Add the following content to the service file:<\/strong>[Unit] Description=WsgiDAV WebDAV Server After=network.target [Service] ExecStart=\/usr\/local\/bin\/wsgidav &#8211;config=\/etc\/wsgidav\/wsgidav.yaml Restart=always [Install] WantedBy=multi-user.targetThis creates a systemd service for automatically starting WsgiDAV.<\/li>\n\n\n\n<li><strong>Set correct permissions for the configuration file:<\/strong>sudo chown root:root \/etc\/wsgidav\/wsgidav.yaml sudo chmod 644 \/etc\/wsgidav\/wsgidav.yamlThis make sures only root can modify the configuration file.<\/li>\n\n\n\n<li><strong>Enable and start the WsgiDAV service:<\/strong>sudo systemctl enable wsgidav.service sudo systemctl start wsgidav.serviceThis enables the service to start on boot and starts it immediately.<\/li>\n<\/ol>\n\n\n\n<p>Now, it\u2019s time to go back to the onlyoffice window we were at before to enter the WebDAV server information.&nbsp;<strong>See how mine is \/webdav? That\u2019s because<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_77f5a739.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.2 Understanding file locations[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=527\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=527\">edit source<\/a>]<\/h4>\n\n\n\n<p>These lines in the WsgiDAV configuration file are responsible for setting the directory that onlyoffice will see on our system. Obviously, if your name is not louis, yours will be different. Edit it accordingly.<\/p>\n\n\n\n<p><code>provider_mapping: '\/webdav': '\/home\/louis\/webdavroot'<\/code><\/p>\n\n\n\n<p><strong>Remember, WsgiDAV will only let me have one directory that I can get into when I start it up. The way I got around this was as follows, so that my Documents directory and my androidbackup directories would both be visible by onlyoffice:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ln -s \/home\/louis\/Documents \/home\/louis\/webdavroot\nln -s \/home\/louis\/androidstuff \/home\/louis\/webdavroot<\/pre>\n\n\n\n<p>Now, my&nbsp;<strong>Documents<\/strong>&nbsp;folder in my home directory as well as my&nbsp;<strong>androidstuff<\/strong>&nbsp;syncthing backup directory with all of my phone\u2019s files will be viewable by onlyoffice!<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3.3 Configure Firewall (UFW)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=528\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=528\">edit source<\/a>]<\/h4>\n\n\n\n<p>UFW (Uncomplicated Firewall) provides a user-friendly interface for managing iptables. There is no need for anything besides onlyoffice to ever contact our WebDAV server, so we are going to make sure only localhost can contact our WebDAV server.<\/p>\n\n\n\n<p>If you think this is ridiculous, it is. Onlyoffice needs to let me access files on my local server that are already there.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Allow all outgoing traffic:<\/strong>sudo ufw default allow outgoing<\/li>\n\n\n\n<li><strong>Allow incoming traffic on port 8080 from specific sources:<\/strong>sudo ufw allow from 192.168.5.5 to any port 8080 proto tcp sudo ufw allow from 127.0.0.1 to any port 8080 proto tcp sudo ufw allow from 172.17.0.0\/16 to any port 8080 proto tcp sudo ufw allow from 172.18.0.0\/16 to any port 8080 proto tcpThis allows HTTPS traffic to WsgiDAV only from specific IP ranges.<\/li>\n\n\n\n<li><strong>Enable the firewall:<\/strong>sudo ufw enableThis activates the firewall with the configured rules.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Make sure this works[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=529\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=529\">edit source<\/a>]<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open onlyoffice, and try to open files<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_1b047a4c.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_6153f9b3.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_dab77d16.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_f9684b3a.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_56592c9d.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_5931a5e.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_38c777ab.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_5925a9a4.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxemg_tmp_148a1456.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5 (optional): set up email in onlyoffice[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=530\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=530\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Viewing email right in the web browser[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=531\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=531\">edit source<\/a>]<\/h3>\n\n\n\n<p>If you set up onlyoffice as an email client for your mailcow server, you can view your email within onlyoffice. This means you can open documents directly within onlyoffice within the browser tab where you have your email loaded. Very nice!<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">FreePBX and UniTel SIP Trunking Setup[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=532\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=532\">edit source<\/a>]<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=533\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=533\">edit source<\/a>]<\/h2>\n\n\n\n<p>Just like with self managed mail; this will be high maintenance, low reward, and is a very bad idea &#8211; like anything worth doing. This guide provides detailed instructions on setting up a&nbsp;<strong>FreePBX<\/strong>&nbsp;system with&nbsp;<strong>UniTel SIP Trunking<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why Customize Your Phone System?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=534\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=534\">edit source<\/a>]<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_7fc7682.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">CallerID hacks to make calls go faster[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=535\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=535\">edit source<\/a>]<\/h3>\n\n\n\n<p>One of the fun things you can do with this setup is integrate it with your customer relationship management software like I did with repairshopr. So, instead of the usual caller ID, you can have the status of a customer\u2019s ticket show up. Back when I was the only one doing repairs at my store, this was a lifesaver. Most calls were simple status checks, and I could handle them while soldering, thanks to a Bluetooth headset.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Caller ID Customization<\/strong>: Instead of just a name, I saw ticket status in the caller ID too!<\/li>\n\n\n\n<li><strong>Efficiency<\/strong>: I could handle calls without stopping my work!<\/li>\n\n\n\n<li><strong>Customer Satisfaction<\/strong>: Instant info made customers feel like you know them better than they know themselves.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Automatically send mean customers to an extension where Allison Smith tells them to go fuck themselves :D[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=536\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=536\">edit source<\/a>]<\/h3>\n\n\n\n<p>Rossmann Repair has never made use of this feature.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Make telemarketers miserable by installing a program that messes with them: Lenny[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=537\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=537\">edit source<\/a>]<\/h3>\n\n\n\n<p>The customization possibilities are endless, and that\u2019s what makes this so much fun. Now, let\u2019s get into how to build your own system.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Preparing a FreePBX installation[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=538\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=538\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Set up a FreePBX virtual machine[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=539\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=539\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_bfad3d9b.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Download Debian 12 ISO[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=540\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=540\">edit source<\/a>]<\/h4>\n\n\n\n<p>You used to download FreePBX as its own distro, which was based on CentOS. They switched to Debian after some recent CentOS\/Red Hat controversy.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open a terminal window or use a web browser within your&nbsp;<strong>happycloud<\/strong>&nbsp;server that is running&nbsp;<strong>Virtual Machine Manager<\/strong>&nbsp;to host all of your virtual machines. In our case, that\u2019s&nbsp;<strong>192.168.5.2<\/strong>.<\/li>\n\n\n\n<li><strong>Download and install<\/strong>&nbsp;<a href=\"https:\/\/www.debian.org\/CD\/\"><em>Debian 12<\/em><\/a>&nbsp;on the machine designated for FreePBX.wget https:\/\/cdimage.debian.org\/debian-cd\/current\/amd64\/iso-cd\/debian-12.0.0-amd64-netinst.iso -P ~\/Downloads<\/li>\n\n\n\n<li>Make sure the download completes successfully.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">1.2 Move the Debian ISO to the Correct Directory[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=541\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=541\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Move the downloaded ISO to&nbsp;<code>\/var\/lib\/libvirt\/images<\/code>:sudo mv ~\/Downloads\/debian-12.0.0-amd64-netinst.iso \/var\/lib\/libvirt\/images\/<\/li>\n\n\n\n<li>Set the correct permissions and ownership for the ISO:sudo chmod 644 \/var\/lib\/libvirt\/images\/debian-12.0.0-amd64-netinst.iso sudo chown libvirt-qemu:kvm \/var\/lib\/libvirt\/images\/debian-12.0.0-amd64-netinst.iso\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_b51c10bd.png\"><\/a><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">1.3: Launch Virtual Machine Manager[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=542\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=542\">edit source<\/a>]<\/h4>\n\n\n\n<p>Open Virtual Machine Manager from the Openbox menu by right-clicking the desktop, going to system, and then running virtual machine manager. Or run:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">virt-manager<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_151745e3.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.4 Create a New Virtual Machine[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=543\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=543\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click&nbsp;<strong>Create a new virtual machine<\/strong>.<\/li>\n\n\n\n<li>Select&nbsp;<strong>Local install media (ISO image or CDROM)<\/strong>&nbsp;and click&nbsp;<strong>Forward<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Browse\u2026<\/strong>&nbsp;and navigate to&nbsp;<code>\/var\/lib\/libvirt\/images\/<\/code>&nbsp;to select&nbsp;<code>debian-12.0.0-amd64-netinst.iso<\/code>.<\/li>\n\n\n\n<li>Choose&nbsp;<strong>Detect automatically<\/strong>&nbsp;for the OS type or manually set it as&nbsp;<strong>Debian 12<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Forward<\/strong>.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_4bc43bb4.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_ba3e10c4.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.5: Configure VM Resources[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=544\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=544\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Memory &amp; CPU:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Assign&nbsp;<strong>4096 MB<\/strong>&nbsp;of RAM (or more, but the idea of giving more than 4 gigs to a phone system hurts me).<\/li>\n\n\n\n<li>Assign&nbsp;<strong>2 CPUs<\/strong>&nbsp;(adjust based on available resources).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Storage:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Select&nbsp;<strong>Create a disk image for the virtual machine<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Allocate at least&nbsp;<strong>20 GB<\/strong>&nbsp;for storage. Choose more if you expect larger usage.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Forward<\/strong>.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_47157042.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.6 Set Up Networking[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=545\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=545\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Make sure the network selection is set to&nbsp;<strong>Bridge<\/strong>&nbsp;and matches your LAN network (e.g.,&nbsp;<code>br0<\/code>). This will allow your VM to get a static IP from your existing network. Under&nbsp;<strong>Network<\/strong>&nbsp;settings, make sure it\u2019s set to&nbsp;<strong>Bridge mode<\/strong>&nbsp;for proper network integration.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.7 Set up FreePBX to start on boot[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=546\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=546\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">virsh autostart freepbx<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check that this is set up properly by typing&nbsp;<code>virsh dominfo freepbx<\/code>&nbsp;and seeing if the autostart line is set to enable.<\/li>\n\n\n\n<li>If you don\u2019t do this, you will realize once it is too late and you\u2019ve left your house after you have rebooted your server (for whatever reason) that your phone system is dead. Don\u2019t do that.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_e22151da.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_299cdef5.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_331573f2.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_c164c52b.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_474da8d6.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_b401b780.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_27a9fd11.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_f48a1f82.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_f01c615f.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_daa809f6.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_3938eead.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_863c1219.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_989c8592.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_e4c7555a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_12e25dc6.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_362ff89f.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_82b7c46.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_fb20c8a5.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_c84cc7cd.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_e0ce50d3.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_40edf977.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_53383ce3.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_e0e659a5.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_d7ccc18d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_d5c2b085.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.8 Debian 12 Installation Setup[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=547\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=547\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Follow the Debian installer prompts:\n<ul class=\"wp-block-list\">\n<li><strong>Language<\/strong>: Choose your preferred language.<\/li>\n\n\n\n<li><strong>Location<\/strong>: Set your country.<\/li>\n\n\n\n<li><strong>Keyboard<\/strong>: Select your preferred layout.<\/li>\n\n\n\n<li><strong>Hostname<\/strong>: Set the hostname as&nbsp;<code>freepbx<\/code>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Domain Name<\/strong>:\n<ul class=\"wp-block-list\">\n<li>You can leave this blank.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Set the Root Password<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Choose a secure password and confirm it.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Create a New User<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Add a user. I added a user named&nbsp;<code>louis<\/code>&nbsp;for myself.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Partitioning<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Choose&nbsp;<strong>\u201cGuided &#8211; use entire disk and set up LVM\u201d<\/strong>.<\/li>\n\n\n\n<li>DO NOT USE ENCRYPTION &#8211; REMEMBER, THE HOST SYSTEM THIS IMAGE IS ON IS ALREADY AN ENCRYPTED DISK!!<\/li>\n\n\n\n<li>Select the disk and proceed.<\/li>\n\n\n\n<li>Confirm changes to write the partitions.<\/li>\n\n\n\n<li>The disk device will most likely be something like&nbsp;<code>\/dev\/vda<\/code>.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">1.9 Post-Installation Configuration Test[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=548\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=548\">edit source<\/a>]<\/h4>\n\n\n\n<p>After rebooting, log in as root or your user.<\/p>\n\n\n\n<p>Make sure network connectivity works:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ping 8.8.8.8\nhostnamectl<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Preparing Debian 12 for FreePBX Installation[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=549\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=549\">edit source<\/a>]<\/h3>\n\n\n\n<p>This guide provides instructions on performing basic maintenance on a fresh Debian 12 installation and then downloading and running the FreePBX installation script. Follow the steps carefully to ensure a smooth setup.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 Configure Network Settings[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=550\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=550\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Log in with your username and password on the virt-manager screen on your host computer (the one hosting all the virtual machines).<\/li>\n\n\n\n<li>Type&nbsp;<code>ip addr show<\/code>&nbsp;and find which interface shows your IP address.\n<ul class=\"wp-block-list\">\n<li>Remember its name for later.<\/li>\n\n\n\n<li>It should be something like&nbsp;<code>enp1s0<\/code>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Become root:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">su<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Make a network configuration file like this:Use the name of your network interface in place of&nbsp;<code>enp1s0<\/code>.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">nano -w \/etc\/systemd\/network\/enp1s0.network<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">[Match]\nName=enp1s0 #put name of your network interface in place of enp1s0\n\n[Network]\nAddress=192.168.5.6\/24\nGateway=192.168.5.1\nDNS=192.168.5.1<\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>Hit&nbsp;<code>ctrl-x<\/code>, then&nbsp;<code>y<\/code>&nbsp;to save.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">systemctl restart systemd-networkd<\/pre>\n\n\n\n<ol start=\"6\" class=\"wp-block-list\">\n<li>Make sure your IP address has changed to a static IP by typing&nbsp;<code>ip addr show<\/code>&nbsp;and checking.\n<ul class=\"wp-block-list\">\n<li><strong>Static IP<\/strong>: Set the IP address to 192.168.5.6.<\/li>\n\n\n\n<li><strong>Gateway<\/strong>: Use 192.168.5.1.<\/li>\n\n\n\n<li><strong>DNS Server<\/strong>: Set to 192.168.5.1.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 Do Basic Maintenance on Debian 12[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=551\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=551\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Update Package Lists<\/strong><ul><li>Refresh the package lists to make sure you get the latest versions<\/li><li>Upgrade packages<\/li><li>Remove junk, all with the following line:<\/li><\/ul>sudo apt update&nbsp;; sudo apt upgrade -y&nbsp;; sudo apt autoremove -y<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 Download &amp; run&nbsp;<em><a href=\"https:\/\/github.com\/FreePBX\/sng_freepbx_debian_install\">FreePBX install script<\/a><\/em>[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=552\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=552\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>ssh<\/code>&nbsp;to the Debian system as&nbsp;<code>louis<\/code><\/li>\n\n\n\n<li>Check&nbsp;<em><a href=\"https:\/\/github.com\/FreePBX\/sng_freepbx_debian_install\">FreePBX page<\/a><\/em>&nbsp;for the latest script since the URL will change over time.<\/li>\n\n\n\n<li>Download the file using&nbsp;<code>wget<\/code>:su wget https:\/\/github.com\/FreePBX\/sng_freepbx_debian_install\/raw\/master\/sng_freepbx_debian_install.sh -O \/tmp\/sng_freepbx_debian_install.sh<\/li>\n\n\n\n<li>Make the script executable<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">   su # become root user\n   chmod +x \/tmp\/sng_freepbx_debian_install.sh<\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>Run the FreePBX Installation Scriptbash \/tmp\/sng_freepbx_debian_install.sh\n<ul class=\"wp-block-list\">\n<li>The script will handle the setup of Asterisk, Apache, MySQL, Postfix, etc., all necessary FreePBX modules.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Visit FreePBX Web Interface[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=553\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=553\">edit source<\/a>]<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Open a Web Browser<\/strong>\n<ul class=\"wp-block-list\">\n<li>Use a browser on a device connected to the same network, or a device that is connected via OpenVPN. Remember, none of this is open to the public!<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Navigate to the FreePBX IP<\/strong>\n<ul class=\"wp-block-list\">\n<li>Access FreePBX by entering the following URL:&nbsp;<em><a href=\"http:\/\/192.168.5.6\/admin\">http:\/\/192.168.5.6\/admin<\/a><\/em><\/li>\n\n\n\n<li>If you used a different IP configuration than I did, enter that IP.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Answer prompts for user\/password<\/strong>\n<ul class=\"wp-block-list\">\n<li>Follow the setup wizard to configure your admin user, language settings, &amp; other preferences. But don\u2019t get started messing around with anything serious just yet.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Configuring UniTel as Phone Service Provider[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=554\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=554\">edit source<\/a>]<\/h2>\n\n\n\n<p>Now that we have a working FreePBX installation, we\u2019re ready to set things up with an SIP trunk provider, aka&nbsp;<em>\u201cthe phone company\u201d<\/em>. I use UniTel for this at the UniTel Customer Portal at&nbsp;<em>unitelcustomer.com<\/em>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Setting up SIP trunking[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=555\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=555\">edit source<\/a>]<\/h3>\n\n\n\n<p>A SIP trunk account is like your phone\u2019s connection to the outside world. Think of it as paying for internet but for your phone calls. Without it, your PBX system is just an intercom for internal calls. You need a SIP trunk to make and receive calls from the outside world.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Choosing an SIP Trunk Provider[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=556\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=556\">edit source<\/a>]<\/h3>\n\n\n\n<p>I recommend&nbsp;<strong>Unitel<\/strong>&nbsp;for SIP trunking. They\u2019re solid, reliable, and unlike some other providers, they don\u2019t just resell AWS in the cheapest way possible. I used to use VoicePulse, but they were terrible and went out of business a few years ago. They had no redundancy, so if some single AWS instance went down, you were out of luck.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">John Grossbard: Studio Landlord &amp; Seinfeld Character[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=557\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=557\">edit source<\/a>]<\/h3>\n\n\n\n<p>There was an episode of Seinfeld where he said&nbsp;<em>\u201cI GOT GROSSBAR\u2019D!\u201d<\/em>&nbsp;Supposedly this was a reference to a minor argument between him and Larry David.<\/p>\n\n\n\n<p>John Grossbard was the owner of Planet to Planet Studios when I rented a space from him for my screen wholesaling company in the basement of 251 W. 30th St in NYC, back when this was called the \u201cMusic Building,\u201d before it was remodeled to appeal to hipster-0%-interest-rate-funded-fad-yuppie-startups.<\/p>\n\n\n\n<p>I was here because I had no credit and he didn\u2019t ask for a security deposit. When a friend of mine brought up an issue of bedbugs, he looked at us and said&nbsp;<em>\u201cIf I made this place any nicer, you couldn\u2019t afford it.\u201d<\/em><\/p>\n\n\n\n<p>He wasn\u2019t wrong. This stuck with me my entire adult life.<\/p>\n\n\n\n<p>Unitel has two websites. One is their main website, and one is a website that looks like some 1997 Slashdot site. The website with the 1997 Slashdot look is what we want. It\u2019s not too nice \u2013 that means we can&nbsp;<em>\u201cafford\u201d<\/em>&nbsp;it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Benefits of Your Own PBX; Revisited[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=558\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=558\">edit source<\/a>]<\/h3>\n\n\n\n<p>In all seriousness, one of the benefits of hosting our own PBX is that we&nbsp;<strong>DON\u2019T<\/strong>&nbsp;pay by the user. We&nbsp;<strong>DON\u2019T<\/strong>&nbsp;pay by the feature. All we pay for is SIP trunking\u2014any features &amp; functionality are added by&nbsp;<strong>US<\/strong>, to&nbsp;<strong>OUR<\/strong>&nbsp;PBX, that we control.<\/p>\n\n\n\n<p>We don\u2019t need them to make it any nicer. If they did, you couldn\u2019t afford it.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_df8469aa.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_a1bc014.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_ea4afdcf.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_9c0b5e5b.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>HINT:<\/strong>&nbsp;Avoid the fancy, infinite-scrolly websites like UnitelPhone.com. Instead, go for the classic UnitelCustomer.com. If it looks like it\u2019s from 1997, you\u2019re in the right place! It\u2019s straightforward and gets the job done.<\/p>\n<\/blockquote>\n\n\n\n<p>Having your own PBX means no more paying per user. You pay based on trunk usage, not the number of users. Some providers nickel and dime you on the number of extensions you have, visual voicemail, call recording, etc. With SIP trunking, they have no idea what is going on, so they can\u2019t bill you by-the-extension or by-the-feature. It\u2019s like a VPN for your calls\u2014they don\u2019t know how many extensions you have or if you\u2019re recording calls. All they know is the call came in or went out. No extra charges for features like visual voicemail, lenny, call recording, or the voice of Allison Smith telling callers to go fuck themselves; which is the reason I set this up to begin with 14 years ago. \ud83d\ude00<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3.1 Register for a Unitel Account[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=559\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=559\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open a web browser and navigate to:&nbsp;<a href=\"https:\/\/signup.unitelgroup.com\/sip-trunking-plans\">https:\/\/signup.unitelgroup.com\/sip-trunking-plans<\/a><\/li>\n\n\n\n<li>Create an account with the nice SIP trunking people<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_be593c35.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_3fa0de28.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_6a3ae870.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.2 Set Up an Endpoint (This is Where Inbound Calls Get Sent To)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=560\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=560\">edit source<\/a>]<\/h4>\n\n\n\n<p>Endpoints are where your call is sent when a call comes in on a number you have in Unitel. When you create a phone number in Unitel, it will ask where you want to send calls that come into that number. We\u2019re going to set up the endpoint first so when we create a number, we\u2019ll already have an endpoint to send it to.<\/p>\n\n\n\n<p><strong>Navigate to the \u201cEndpoints\u201d Section<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>From the main dashboard, go to&nbsp;<strong>\u201cSettings\u201d<\/strong>.<\/li>\n\n\n\n<li>Click on&nbsp;<strong>\u201cEndpoints\u201d<\/strong>.<\/li>\n\n\n\n<li><strong>Create a New Endpoint<\/strong><\/li>\n\n\n\n<li>Click on&nbsp;<strong>\u201cAdd Endpoint\u201d<\/strong>.\n<ul class=\"wp-block-list\">\n<li>Fill in the following details:\n<ul class=\"wp-block-list\">\n<li><strong>Endpoint Description<\/strong>: Enter a name that describes the endpoint (e.g., closet pbx).<\/li>\n\n\n\n<li><strong>Endpoint Destination<\/strong>: Insert the dynamic DNS entry (e.g.<code>louishomeserver.chickenkiller.com<\/code>) that you set up back in the FreeDNS Dynamic DNS section of this guide. This should resolve to your PBX\u2019s external IP address. When a call comes in on a specific number, it is going to send the call to your PBX at this IP.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cAdd Endpoint\u201d<\/strong>&nbsp;to complete the setup.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_8b8d5b23.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_70f53605.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_70f56fbb.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_ae6d3290.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_16e56098.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.3 Get &amp; Configure Phone Numbers[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=561\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=561\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Navigate to the \u201cNumbers\u201d Section<\/strong>\n<ul class=\"wp-block-list\">\n<li>From the main dashboard, after clicking on&nbsp;<strong>\u201cNumbers\u201d<\/strong>, click on&nbsp;<strong>\u201cAdd Number\u201d<\/strong>.<\/li>\n\n\n\n<li>Buy a number.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Assign the Purchased Number to the Endpoint<\/strong>\n<ul class=\"wp-block-list\">\n<li>After purchasing, go to&nbsp;<strong>\u201cManage Numbers\u201d<\/strong>.<\/li>\n\n\n\n<li>Find the purchased number and click the dropdown under&nbsp;<strong>\u201cActions\u201d<\/strong>&nbsp;and click&nbsp;<strong>\u201cNumber Mode\u201d<\/strong>.<\/li>\n\n\n\n<li>Select&nbsp;<strong>\u201cForward to Endpoint\u201d<\/strong>: Select the endpoint you created earlier (e.g., closet pbx).<\/li>\n\n\n\n<li>Click&nbsp;<strong>Update<\/strong>.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_351530c2.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_5d30f03a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_5eb714e2.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.4 Add a Trunk in Unitel[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=562\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=562\">edit source<\/a>]<\/h4>\n\n\n\n<p><strong>Purpose of an SIP trunk:<\/strong><\/p>\n\n\n\n<p>An SIP trunk is what attaches you to the world, similar to how your cable modem &amp; spectrum or verizon connects you to the rest of the internet. A&nbsp;<strong>trunk<\/strong>&nbsp;is a connection between your phone system (PBX) and the external phone network. It allows your system to make and receive calls to\/from the outside world. Setting up a trunk in Unitel is necessary.<\/p>\n\n\n\n<p>The purpose of the trunk is to provide a pathway for your PBX to route calls to and from the public telephone network. Without a properly configured trunk, your system won\u2019t be able to communicate with external phone numbers. Which is what I have been doing for three weeks while writing this guide.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Log in to the Unitel Admin Interface<\/strong>\n<ul class=\"wp-block-list\">\n<li>Open your web browser and go to the Unitel admin interface.<\/li>\n\n\n\n<li>Log in using your credentials.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Step 2: Add a New Trunk<\/strong>\n<ul class=\"wp-block-list\">\n<li>Navigate to Manage SIP Trunks.<\/li>\n\n\n\n<li>Click on Add Trunk.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Step 3: Configure Trunk Details<\/strong>\n<ul class=\"wp-block-list\">\n<li>Trunk Description: Enter a descriptive name for your trunk (e.g., Main Trunk).<\/li>\n\n\n\n<li>Trunk Type: Select&nbsp;<strong>General use\/Conversational<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click Add Trunk to save the new trunk.<\/li>\n\n\n\n<li>Click Apply Config to activate the trunk.<\/li>\n\n\n\n<li><strong>NOTE YOUR CREDENTIALS!<\/strong>\n<ul class=\"wp-block-list\">\n<li>During the trunk setup, you will be provided with a username and password. Be sure to note your username &amp; password in a password manager of some sort as it will be needed later when configuring the trunk in your PBX system.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Setting up FreePBX with Unitel phone service[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=563\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=563\">edit source<\/a>]<\/h2>\n\n\n\n<p>Now that your phone service provider is set up, we can configure&nbsp;<code>freepbx<\/code>&nbsp;to connect to it &amp; receive &amp; send phone calls. We\u2019ll be using UniTel credentials to sign into our trunk.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_2708b4e9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_dcdd2d35.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_dcb5bd91.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_cfef6f4a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_d36e7da6.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_2df4038d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_88afd9c8.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_f1c06a36.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_7fdbd089.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_9a45904f.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_bfc2022b.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>Get into FreePBX interface:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open a web browser and navigate to:<code><a href=\"http:\/\/freepbx.home.arpa\/\">http:\/\/freepbx.home.arpa\/<\/a><\/code>&nbsp;or&nbsp;<code><a href=\"http:\/\/192.168.5.5\/\">http:\/\/192.168.5.5\/<\/a><\/code><\/li>\n\n\n\n<li>Log in<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">4.1 Add a New SIP Trunk[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=564\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=564\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Navigate to the Trunk Configuration<\/strong><\/li>\n\n\n\n<li>Go to&nbsp;<strong>Connectivity<\/strong>&nbsp;&gt;&nbsp;<strong>Trunks<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Add Trunk<\/strong>&nbsp;and choose&nbsp;<strong>Add SIP (chan_pjsip) Trunk<\/strong>.<\/li>\n\n\n\n<li><strong>Configure the General Settings<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Trunk Name<\/strong>: Enter a happy name, like UniTel_SIP.<\/li>\n\n\n\n<li><strong>Hide CallerID<\/strong>: Set to No.<\/li>\n\n\n\n<li><strong>Outbound CallerID<\/strong>: Enter your UniTel DID (your phone number) in e.164 format (e.g., 13475522258 for rossmann repair group).<\/li>\n\n\n\n<li><strong>CID Options<\/strong>: Choose Allow Any CID.<\/li>\n\n\n\n<li><strong>Dial Number Manipulation Rules<\/strong><\/li>\n\n\n\n<li><strong>Outbound Dial Prefix<\/strong>: Make sure all outgoing calls use the 11-digit e.164 format (e.g., 1NXXNXXXXXX).<\/li>\n\n\n\n<li>Add a rule if needed to prepend 1 for local or long-distance numbers:\n<ul class=\"wp-block-list\">\n<li>Match Pattern: NXXNXXXXXX<\/li>\n\n\n\n<li>Prepend: 1<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_8b0dd42e.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_dcdd4148.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_f5e688e2.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_cb4b6061.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_46f1721e.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_c63f74a0.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_77abb232.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">4.2 PJSIP Settings Configuration in trunk configuration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=565\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=565\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Go to the \u201cPJSIP Settings\u201d Tab<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Username<\/strong>: Enter the SIP username provided by UniTel.<\/li>\n\n\n\n<li><strong>Secret<\/strong>: Enter the SIP password from UniTel.<\/li>\n\n\n\n<li><strong>SIP Server (SIP Host)<\/strong>: Set to&nbsp;<code>sip.unitelgroup.com<\/code>,&nbsp;<strong>this may change over time. Make sure you check Unitel\u2019s instructions that they offer on unitelcustomer.com after you log in.<\/strong>&nbsp;They\u2019re nice people &amp; provide all this for you in plain English.<\/li>\n\n\n\n<li><strong>Authentication<\/strong>: Set to Outbound, should be checked by default.<\/li>\n\n\n\n<li><strong>Registration<\/strong>: Choose Send, should be checked by default.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Advanced Options<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>From Domain<\/strong>: Enter&nbsp;<code>sip.unitelgroup.com<\/code>.<\/li>\n\n\n\n<li><strong>Context<\/strong>: Use&nbsp;<code>from-pstn-toheader<\/code>&nbsp;(This allows FreePBX to correctly handle incoming SIP headers from UniTel). This should be set by default.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Go to&nbsp;<strong>\u201cCodecs\u201d tab<\/strong>\n<ul class=\"wp-block-list\">\n<li>Check the&nbsp;<a href=\"https:\/\/www.unitelcustomer.com\/sip-getting-started-guide\">codecs that Unitel allows<\/a>.\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_e238d46d.png\"><img decoding=\"async\" src=\"https:\/\/wiki.futo.org\/images\/5\/51\/Lu67917r1ezu_tmp_e238d46d.png\" alt=\"\"\/><\/a><\/figure>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\n<ul class=\"wp-block-list\">\n<li>\n<ul class=\"wp-block-list\">\n<li>G723<\/li>\n\n\n\n<li>G729<\/li>\n\n\n\n<li>G711\n<ul class=\"wp-block-list\">\n<li>G711 is actually&nbsp;<strong>ulaw<\/strong>&nbsp;and&nbsp;<strong>alaw<\/strong>&nbsp;in the list.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>This may change over time, check&nbsp;<a href=\"https:\/\/www.unitelcustomer.com\/sip-getting-started-guide\">Unitel\u2019s page<\/a>&nbsp;for details.<\/li>\n\n\n\n<li>Unitel are nice people &amp; want you to be successful in setting up your PBX. They provide you with all of this information.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Submit and Apply<\/strong>\n<ul class=\"wp-block-list\">\n<li>Click&nbsp;<strong>Submit<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Apply Config<\/strong>&nbsp;on the top-right to save changes and reload the configuration.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Internal Call Handling and Call Routing Setup[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=566\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=566\">edit source<\/a>]<\/h2>\n\n\n\n<p>Now we start the process of setting up internal call handling by creating extensions and ring groups, as well as defining call routing to manage inbound and outbound calls using the UniTel SIP trunk in FreePBX 17. Having a trunk is useless if we don\u2019t have any phones set up.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_ce66bf80.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_9780cee6.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_de1c9c6c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_cbd71b4b.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_ece5f184.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_ba101465.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_20ad80b1.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>5.1 Create an Extension<\/p>\n\n\n\n<p>Extensions are individual phones. Alice has an extension for a phone on her desk, Mark has an extension for a phone on his desk, and so on and so forth. Each extension has a number for internal calls. Your desk phone could be 101 &#8211; this means people inside FreePBX connected directly to your PBX can call 101. This needs to be done first.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Log in to the FreePBX Admin Interface<\/strong><\/li>\n\n\n\n<li><strong>Navigate to Extensions<\/strong>\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Connectivity<\/strong>&nbsp;&gt;&nbsp;<strong>Extensions<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Add Extension<\/strong>.<\/li>\n\n\n\n<li>Choose&nbsp;<strong>Add SIP (chan_pjsip) Extension<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Configure the Extension<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>User Extension<\/strong>: Enter a unique extension number (e.g., 101).<\/li>\n\n\n\n<li><strong>Display Name<\/strong>: Enter the name for this extension (e.g., Office Phone).<\/li>\n\n\n\n<li><strong>Secret<\/strong>: Enter a strong password for the extension or let FreePBX generate one automatically. It\u2019s a good idea to add this to your password manager like Bitwarden so you have it later. Don\u2019t put this on a post-it note.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Voicemail<\/strong>: Enable if you want voicemail for this extension.\n<ul class=\"wp-block-list\">\n<li>Set email address to the email you want voicemail sent to.<\/li>\n\n\n\n<li>Set Voicemail password to the password you want to have to dial to access voicemail (we will never use this archaic method, we will get voicemails emailed to us).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>In&nbsp;<strong>Advanced<\/strong>&nbsp;you can set up call recording.<\/li>\n\n\n\n<li><strong>Submit and Apply Changes<\/strong><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_e706e9c9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_82fe25e7.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_a8632a6a.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>5.2 Configure Ring Groups<\/p>\n\n\n\n<p>When someone calls 3475522258 for my business, I don\u2019t want one phone to ring. I want all of them to ring. This is what ring groups are for. We create one number that rings a bunch of different phones.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Applications<\/strong>&nbsp;&gt;&nbsp;<strong>Ring Groups<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cAdd Ring Group\u201d<\/strong>.\n<ul class=\"wp-block-list\">\n<li><strong>Ring Group Number<\/strong>: Enter a unique number for the ring group (e.g., 600).<\/li>\n\n\n\n<li><strong>Group Description<\/strong>: Enter a name for this ring group (e.g., Office Ring Group).<\/li>\n\n\n\n<li><strong>Ring Strategy<\/strong>: Choose how calls should be distributed (e.g., Ringall to ring all devices simultaneously).&nbsp;<strong>Ringall is what you want 99% of the time. Use ringall if you are confused.<\/strong><\/li>\n\n\n\n<li><strong>Extension List<\/strong>: Add the extensions you want to include in this ring group (e.g., 101). Everyone here will have their phone ring when this ring group is called. In an office with one phone number, you would want to put every extension here of the people you want to pick up the phone when a customer calls.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Customize settings like&nbsp;<strong>Ring Time<\/strong>,&nbsp;<strong>Destination if No Answer<\/strong>, and&nbsp;<strong>Call Recording<\/strong>. I usually set this to the voicemail of a particular extension.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cSubmit\u201d<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cApply Config\u201d<\/strong>&nbsp;to activate the ring group.<\/li>\n\n\n\n<li><strong>REMEMBER, YOU NEED TO SET A DESTINATION IF NO ANSWER SO THAT PEOPLE CAN LEAVE VOICEMAILS.<\/strong>\n<ul class=\"wp-block-list\">\n<li>Mitt Romney famously said&nbsp;<em><a href=\"https:\/\/youtu.be\/KlPQkd_AA6c?t=4\">\u201cring groups are people, my friend.\u201d<\/a><\/em><\/li>\n\n\n\n<li>They are not!&nbsp;<em>People have voicemails \u2013 ring groups do not.<\/em><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Define Call Routing[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=567\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=567\">edit source<\/a>]<\/h2>\n\n\n\n<p>Inbound routes define what we do when someone calls a particular phone number.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_c7b43510.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_97e7fd79.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_df1b9161.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">6.1 Set Up Call Flow Control[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=568\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=568\">edit source<\/a>]<\/h4>\n\n\n\n<p>Call flow control allows you to change where calls go by dialing a number on your phone.<\/p>\n\n\n\n<p>For instance, let\u2019s say your business hours are 11 AM to 7 PM. You can set it up so that when you close, you dial&nbsp;<code>*2886<\/code>&nbsp;on your phone to send the calls directly to voicemail. Then, when you open the next day, you dial&nbsp;<code>*2886<\/code>&nbsp;again and your calls switch back to going to all of your business phones rather than go to voicemail.<\/p>\n\n\n\n<p>I like this more than I like call scheduling because I set it manually. If I come to work early, I may want to answer the phone early. If I stay late, I may want to answer the phone late.<\/p>\n\n\n\n<p>Rather than set up my phone number to go straight to my ring group, I set it up to go to call flow control. Then, I set up call flow control to go to my ring group, and my ring group to go to my extensions.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Navigate to Inbound Routes<\/strong><\/li>\n\n\n\n<li>Go to&nbsp;<strong>\u201cApplications\u201d<\/strong>&nbsp;&gt;&nbsp;<strong>\u201cCall Flow Control\u201d<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201c+ Add\u201d<\/strong>.<\/li>\n\n\n\n<li><strong>Configure the Call Flow Control<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Call Flow Toggle Feature Code Index<\/strong>: This just means what number you enter into your phone to change it. Whatever you add here will be&nbsp;<em>in front<\/em>&nbsp;of a 28. So, if you enter 86, that means dialing&nbsp;<code>*2886<\/code>&nbsp;on your phone will toggle where your calls go.\n<ul class=\"wp-block-list\">\n<li>On older phones like the Cisco SPA525G, this doesn\u2019t work since they seem to only support&nbsp;<em>two digits<\/em>&nbsp;in front of a&nbsp;<code>*<\/code>&nbsp;rather than four.&nbsp;\ud83d\ude41<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Description<\/strong>: Describe what the point of this is so you know for later.<\/li>\n\n\n\n<li><strong>Current Mode<\/strong>: This sets how calls are going when you initially finish setting this up.<\/li>\n\n\n\n<li><strong>Normal Flow<\/strong>: This sets where calls go before you toggle call flow control. Put the default here. For me, that\u2019s ringing all of my office phones at the&nbsp;<strong>Ring Group<\/strong>&nbsp;I set up earlier. Enter&nbsp;<strong>Ring Groups<\/strong>&nbsp;and then put the&nbsp;<strong>Ring Group<\/strong>&nbsp;you created here.<\/li>\n\n\n\n<li><strong>Override Flow<\/strong>: This is where calls will go when you dial&nbsp;<code>*2886<\/code>&nbsp;and toggle this feature on. Set this to&nbsp;<strong>Voicemail<\/strong>&nbsp;and then the voicemail of the extension we created.<\/li>\n\n\n\n<li><strong>CallerID Number<\/strong>: Same as the DID number.<\/li>\n\n\n\n<li><strong>Description<\/strong>: Provide a description for this route (e.g., Rossmann repair business number).<\/li>\n\n\n\n<li><strong>Set Destination<\/strong>: Choose&nbsp;<strong>\u201cRing Groups\u201d<\/strong>&nbsp;and select the ring group number you created earlier (e.g., 600 &#8211; Office Ring Group).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Submit and Apply Changes<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_2d63ee.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_2457af08.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_cd27e90.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">6.2 Set Up an Inbound Route[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=569\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=569\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Navigate to Inbound Routes<\/strong><\/li>\n\n\n\n<li>Go to&nbsp;<strong>\u201cConnectivity\u201d<\/strong>&nbsp;&gt;&nbsp;<strong>\u201cInbound Routes\u201d<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201c+ Add Inbound Route\u201d<\/strong>.<\/li>\n\n\n\n<li><strong>Configure the Inbound Route<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>DID Number<\/strong>: Enter your UniTel DID in e.164 format (e.g., 13475522258).&nbsp;<em>Put a 1 in front of your number in the US!<\/em><\/li>\n\n\n\n<li><strong>CallerID Number<\/strong>: Same as the DID number.<\/li>\n\n\n\n<li><strong>Description<\/strong>: Provide a description for this route (e.g., rossmann repair business number).<\/li>\n\n\n\n<li><strong>Set Destination<\/strong>: Choose&nbsp;<strong>\u201cRing Groups\u201d<\/strong>&nbsp;and select the ring group number you created earlier (e.g., 600 &#8211; Office Ring Group).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Submit and Apply Changes<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_1602ae25.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_69cfd1f3.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_5fce659.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">6.3 Set Up CallerID[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=570\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=570\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Navigate to CID Superfecta<\/strong>\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>\u201cAdmin\u201d<\/strong>&nbsp;&gt;&nbsp;<strong>\u201cCID Superfecta\u201d<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Yes<\/strong>&nbsp;on the callerID sources you think would be useful.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Navigate to Inbound Routes<\/strong>\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Connectivity<\/strong>&nbsp;&gt;&nbsp;<strong>Inbound Routes<\/strong>.<\/li>\n\n\n\n<li>Go to the&nbsp;<strong>Other<\/strong>&nbsp;tab.<\/li>\n\n\n\n<li>Choose&nbsp;<strong>CID Lookup Source<\/strong>&nbsp;as&nbsp;<strong>CID Superfecta<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Submit and Apply Changes<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_e50a92c9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_94ce168a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_3871242b.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_a057d15a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_704ad695.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_65faf5c2.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_755f860.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">6.4 Configure Outbound Route for Making Calls[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=571\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=571\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Navigate to Outbound Routes<\/strong>\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Connectivity<\/strong>&nbsp;&gt;&nbsp;<strong>Outbound Routes<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>+ Add Outbound Route<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Set Up the Outbound Route<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Route Name<\/strong>: Enter&nbsp;<code>UniTel_Outbound<\/code>.<\/li>\n\n\n\n<li><strong>Route CID<\/strong>: Enter your UniTel DID (in e.164 format, e.g., 13475522258).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Assign Trunk to Route<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Trunk Sequence for Matched Routes<\/strong>: Select&nbsp;<code>UniTel_SIP<\/code>&nbsp;(the trunk created earlier). We don\u2019t have multiple trunks.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Navigate to Dial Patterns<\/strong>\n<ul class=\"wp-block-list\">\n<li>Click&nbsp;<strong>Dial patterns wizards<\/strong>.<\/li>\n\n\n\n<li>Click the dial plans that make sense for your locale.<\/li>\n\n\n\n<li>This is a conversation for you to have with your SIP trunking provider based on your region. Open a ticket with them and make sure you choose the right options here!<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Submit and Apply<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click&nbsp;<strong>Submit<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Apply Config<\/strong>&nbsp;to save and activate the outbound route.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_ef8d201c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_58e2fa70.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_4bc11745.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_1252fdc2.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_2106a642.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_7330e060.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7: Configure IP subnets in FreePBX[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=572\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=572\">edit source<\/a>]<\/h2>\n\n\n\n<p>FreePBX configures it to work automatically with the LAN subnet. For instance, if you chose&nbsp;<code>192.168.5.0\/24<\/code>&nbsp;for your local network, it will configure FreePBX to work properly with your LAN subnet.<\/p>\n\n\n\n<p>However, it doesn\u2019t know you have a VPN. Remember that I suggest you not open ports. If you want this to work on your Android phone or iPhone when you connect to your home network, you have to add your VPN subnet manually. To do so, follow these instructions:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Add VPN subnet to local networks in FreePBX[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=573\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=573\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Navigate to SIP Settings<\/strong><\/li>\n\n\n\n<li>Go to&nbsp;<strong>\u201cSettings\u201d<\/strong>&nbsp;&gt;&nbsp;<strong>\u201cAdvanced SIP Settings\u201d<\/strong>.<\/li>\n\n\n\n<li>Make sure you are on the&nbsp;<strong>\u201cGeneral\u201d<\/strong>&nbsp;tab.<\/li>\n\n\n\n<li>Find the&nbsp;<strong>Local Networks<\/strong>&nbsp;section.<\/li>\n\n\n\n<li>Log into the&nbsp;<strong>pfSense<\/strong>&nbsp;firewall in a new browser tab.<\/li>\n\n\n\n<li>Go to&nbsp;<strong>\u201cVPN\u201d \u2014&gt; \u201cOpenVPN\u201d<\/strong>&nbsp;at the top menu.<\/li>\n\n\n\n<li>Find the&nbsp;<strong>Tunnel Network<\/strong>&nbsp;for your VPN, which will be in the list of&nbsp;<strong>OpenVPN servers<\/strong>.<\/li>\n\n\n\n<li>Return to the FreePBX browser tab and click&nbsp;<strong>Add Local Network Field<\/strong>.<\/li>\n\n\n\n<li>Add the&nbsp;<strong>Tunnel Network<\/strong>&nbsp;of your VPN.<\/li>\n\n\n\n<li><strong>Submit and Apply Changes<\/strong>\n<ul class=\"wp-block-list\">\n<li>Click&nbsp;<strong>\u201cSubmit\u201d<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cApply Config\u201d<\/strong>&nbsp;to activate the outbound route.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_ce66bf80.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_2e61fc14.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_b500d2da.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 8: Setting up a softphone[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=574\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=574\">edit source<\/a>]<\/h2>\n\n\n\n<p>A softphone is a software phone. I\u2019ll show you how to use this; the instructions are about the same as configuring a hardware phone. It also allows me to create instructions that allow anyone watching this to confirm their system works without having to provide generalized instructions that aren\u2019t precise to every single smartphone.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">8.1 Download Zoiper[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=575\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=575\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to Zoiper.<\/li>\n\n\n\n<li>Download Zoiper&nbsp;<a href=\"https:\/\/www.zoiper.com\/\">here.<\/a><\/li>\n\n\n\n<li>Install Zoiper.<\/li>\n\n\n\n<li>Run Zoiper.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">8.2 Get credentials for your extension.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=576\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=576\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Log in to the FreePBX Admin Interface<\/strong><\/li>\n\n\n\n<li><strong>Navigate to Extensions<\/strong>\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Connectivity &gt; Extensions<\/strong>.<\/li>\n\n\n\n<li>Click your extension.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Get your&nbsp;<strong>extension number<\/strong>, which is your&nbsp;<strong>username<\/strong>, and your&nbsp;<strong>secret<\/strong>, which is your&nbsp;<strong>password<\/strong>.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_5a55c888.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_4285096.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_3955f9e6.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_c8bb85.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_f287090.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>8.3 Configure Zoiper<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open Zoiper and select&nbsp;<strong>Create New Account<\/strong>.<\/li>\n\n\n\n<li>Enter the following details:\n<ul class=\"wp-block-list\">\n<li><strong>Username<\/strong>: Your extension number (e.g., 401).<\/li>\n\n\n\n<li><strong>Password<\/strong>: Your secret (password).<\/li>\n\n\n\n<li><strong>Domain<\/strong>: Your server\u2019s IP address or hostname (for us,&nbsp;<code>192.168.5.6:5060<\/code>).\n<ul class=\"wp-block-list\">\n<li>The format will be&nbsp;<code>username@ip:port<\/code>&nbsp;with the&nbsp;<strong>password<\/strong>&nbsp;in its own field.<\/li>\n\n\n\n<li>In my setup with my example, it would be&nbsp;<a href=\"http:\/\/401@192.168.5.6\/\"><strong>401@192.168.5.6<\/strong><\/a>:5060 or&nbsp;<a href=\"http:\/\/401@freepbx.home.arpa\/\"><strong>401@freepbx.home.arpa<\/strong><\/a>:5060.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Skip Outbound Proxy.<\/li>\n\n\n\n<li>Select Transport Protocol&nbsp;<strong>SIP UDP<\/strong>.<\/li>\n\n\n\n<li>Choose SIP UDP as most setups use UDP by default.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Test Configuration:\n<ul class=\"wp-block-list\">\n<li>If you see a green checkmark, you did good.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">8.4 Test Audio Settings[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=577\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=577\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to options.<\/li>\n\n\n\n<li>Select Input and Output Devices.<\/li>\n\n\n\n<li><strong>Set Input Device<\/strong>&nbsp;to your microphone.<\/li>\n\n\n\n<li><strong>Set Output Device<\/strong>&nbsp;to your speakers or headphones.<\/li>\n\n\n\n<li><strong>Test Audio<\/strong>: Speak into the microphone to check input levels. For output, press play to confirm audio works.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 9: Configuring Voicemail and Email Notifications in FreePBX 17[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=578\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=578\">edit source<\/a>]<\/h2>\n\n\n\n<p>This guide provides step-by-step instructions to configure voicemail for an extension and ring group in FreePBX 17, making sure that voicemail messages are sent via email with audio file attachments. We will also set up your custom mail server for sending these email notification; we\u2019re not calling into a voicemail system in 2024.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">9.1 Enable Voicemail for the Extension[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=579\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=579\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Log in to the FreePBX Admin Interface<\/strong>\n<ul class=\"wp-block-list\">\n<li><code><a href=\"http:\/\/192.168.5.5\/admin\">http:\/\/192.168.5.5\/admin<\/a><\/code><\/li>\n\n\n\n<li>Log in with your admin credentials.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Navigate to Extensions<\/strong>\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>\u201cApplications\u201d<\/strong>&nbsp;&gt;&nbsp;<strong>\u201cExtensions\u201d<\/strong>.<\/li>\n\n\n\n<li>Find and select the extension (e.g.,&nbsp;<code>401<\/code>) that you want to set up.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Enable Voicemail for the Extension<\/strong>\n<ul class=\"wp-block-list\">\n<li>Scroll down to the&nbsp;<strong>Voicemail<\/strong>&nbsp;section.<\/li>\n\n\n\n<li><strong>Enable Voicemail<\/strong>: Set to&nbsp;<code>Yes<\/code>.<\/li>\n\n\n\n<li><strong>Voicemail Password<\/strong>: Enter a numerical for accessing voicemail which we will never use.<\/li>\n\n\n\n<li><strong>Email Address<\/strong>: Enter the email address where voicemail notifications should be sent (e.g.,&nbsp;<code>user@example.com<\/code>).<\/li>\n\n\n\n<li><strong>Attach Voicemail<\/strong>: Set to&nbsp;<code>Yes<\/code>&nbsp;(this will attach the audio file of the voicemail to the email notification).<\/li>\n\n\n\n<li><strong>Delete Voicemail<\/strong>: Set to&nbsp;<code>No<\/code>&nbsp;(keeps a copy of the voicemail on the system even after sending the email). Until we know if our system works, keep this to no. Once it is emailing us our voicemails as a wav file, then we can change this to yes.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Submit and Apply Changes<\/strong>\n<ul class=\"wp-block-list\">\n<li>Click&nbsp;<strong>\u201cSubmit\u201d<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cApply Config\u201d<\/strong>&nbsp;to save the voicemail settings for the extension.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">9.2 Configure Voicemail for the Ring Group[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=580\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=580\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Navigate to Ring Groups<\/strong>\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>\u201cApplications\u201d<\/strong>&nbsp;&gt;&nbsp;<strong>\u201cRing Groups\u201d<\/strong>.<\/li>\n\n\n\n<li>Select the ring group you configured earlier (e.g.,&nbsp;<code>600 - Office Ring Group<\/code>).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Set Ring Group to Go to Voicemail<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Destination if No Answer<\/strong>: Choose&nbsp;<strong>\u201cVoicemail\u201d<\/strong>, and select the extension\u2019s voicemail (e.g.,&nbsp;<code>101<\/code>).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Submit and Apply Changes<\/strong>\n<ul class=\"wp-block-list\">\n<li>Click&nbsp;<strong>\u201cSubmit\u201d<\/strong>.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Step 9.3: Configure FreePBX to Send Email Notifications via Custom Mail Server[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=581\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=581\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Navigate to System Admin Module<\/strong>\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>\u201cAdmin\u201d<\/strong>&nbsp;&gt;&nbsp;<strong>\u201cSystem Admin\u201d<\/strong>.<\/li>\n\n\n\n<li>Click on&nbsp;<strong>\u201cEmail Setup\u201d<\/strong>\u2026.&nbsp;<em><strong>GOTCHA!!<\/strong><\/em>&nbsp;This is GNU\/Linux, nothing is easy. I had you for a moment there, didn\u2019t I? \ud83d\ude00<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>This is actually going to be a fun journey of configuring postfix manually. That is a long way away, at the end.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 10: Setting Up pfSense Firewall Rules for FreePBX with UniTel SIP Services[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=582\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=582\">edit source<\/a>]<\/h2>\n\n\n\n<p>To make sure your FreePBX system (located at&nbsp;<code>192.168.5.6<\/code>) is able to connect to UniTel\u2019s SIP service and receive calls with two-way audio that actually work, we need to create NAT rules &amp; corresponding firewall rules that only allow traffic from UniTel\u2019s approved IPs. Next we\u2019ll walk you through setting up aliases for UniTel\u2019s IPs, creating NAT rules, &amp; making sure SIP and RTP traffic flows correctly.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_694465ad.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_f3d60c6e.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>Create aliases for UniTel\u2019s IPs<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Step 10.1: Log in to Your pfSense Web Interface[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=583\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=583\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open a web browser and navigate to:&nbsp;<code><a href=\"https:\/\/pfsense.home.arpa\/\">https:\/\/pfsense.home.arpa<\/a><\/code>&nbsp;or&nbsp;<a href=\"https:\/\/192.168.5.1\/\">https:\/\/192.168.5.1<\/a><\/li>\n\n\n\n<li>Enter your pfSense admin credentials.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Step 10.2: Add an Alias for UniTel\u2019s SIP Signaling IPs[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=584\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=584\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Firewall<\/strong>&nbsp;&gt;&nbsp;<strong>Aliases<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Add<\/strong>&nbsp;(+) to create a new alias.<\/li>\n\n\n\n<li>Configure the alias as follows:\n<ul class=\"wp-block-list\">\n<li><strong>Name<\/strong>:&nbsp;<code>Unitel_SIP_IPs<\/code><\/li>\n\n\n\n<li><strong>Description<\/strong>:&nbsp;<code>SIP Signaling IPs from UniTel<\/code><\/li>\n\n\n\n<li><strong>Type<\/strong>:&nbsp;<code>Host(s)<\/code><\/li>\n\n\n\n<li><strong>IP Addresses<\/strong>:<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>Add each of the following SIP IP addresses:&nbsp;<em><strong>THIS MAY CHANGE, CHECK UNITEL GETTING STARTED PAGE TO MAKE SURE THESE ARE THE RIGHT ONES!<\/strong><\/em><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\n<ul class=\"wp-block-list\">\n<li>\n<ul class=\"wp-block-list\">\n<li><code>199.180.220.89<\/code><\/li>\n\n\n\n<li><code>199.180.220.91<\/code><\/li>\n\n\n\n<li><code>208.89.104.3<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click&nbsp;<strong>Save<\/strong>, then&nbsp;<strong>Apply Changes<\/strong>.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Step 10.3: Add an Alias for UniTel\u2019s Media IPs[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=585\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=585\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the&nbsp;<strong>Aliases<\/strong>&nbsp;section, click&nbsp;<strong>Add<\/strong>&nbsp;again to create another alias.<\/li>\n\n\n\n<li>Configure the alias as follows:<\/li>\n\n\n\n<li><strong>Name<\/strong>: Unitel_Media_IPs<\/li>\n\n\n\n<li><strong>Description<\/strong>: Media IPs for UniTel SIP Services<\/li>\n\n\n\n<li><strong>Type<\/strong>: Host(s)<\/li>\n\n\n\n<li><strong>IP Addresses<\/strong>: Add each of the following media IP addresses:&nbsp;<em><strong>THIS MAY CHANGE, CHECK UNITEL GETTING STARTED PAGE TO MAKE SURE THESE ARE THE RIGHT ONES!<\/strong><\/em>\n<ul class=\"wp-block-list\">\n<li>199.180.223.109<\/li>\n\n\n\n<li>45.55.33.77<\/li>\n\n\n\n<li>157.230.238.197<\/li>\n\n\n\n<li>45.33.70.196<\/li>\n\n\n\n<li>45.33.71.83<\/li>\n\n\n\n<li>159.65.107.252<\/li>\n\n\n\n<li>45.33.14.21<\/li>\n\n\n\n<li>159.89.122.218<\/li>\n\n\n\n<li>167.71.237.189<\/li>\n\n\n\n<li>172.104.226.108<\/li>\n\n\n\n<li>139.162.250.71<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click&nbsp;<strong>Save<\/strong>, then&nbsp;<strong>Apply Changes<\/strong>.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Setting up NAT port forward &amp; firewall rules[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=586\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=586\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_3c485302.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241107012035037.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241107012048982.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241107012056979.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">10.4 Configure NAT port forwards for FreePBX signalling[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=587\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=587\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to&nbsp;<strong>Firewall<\/strong>&nbsp;&gt;&nbsp;<strong>NAT<\/strong>.<\/li>\n\n\n\n<li>Under the&nbsp;<strong>Port Forward<\/strong>&nbsp;tab, click&nbsp;<strong>Add<\/strong>&nbsp;to create a new NAT rule.<\/li>\n\n\n\n<li>Configure the rule as follows:\n<ul class=\"wp-block-list\">\n<li><strong>Interface<\/strong>: WAN<\/li>\n\n\n\n<li><strong>Protocol<\/strong>: UDP<\/li>\n\n\n\n<li><strong>Destination<\/strong>: WAN address<\/li>\n\n\n\n<li><strong>Destination Port Range<\/strong>:\n<ul class=\"wp-block-list\">\n<li>From: 5060<\/li>\n\n\n\n<li>To: 5065 (for SIP signaling)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Redirect Target IP<\/strong>: Enter your PBX IP: 192.168.5.6<\/li>\n\n\n\n<li><strong>Redirect Target Port<\/strong>:\n<ul class=\"wp-block-list\">\n<li>From: 5060<\/li>\n\n\n\n<li>To: 5065<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Source<\/strong>: Select Single host or alias and choose Unitel_SIP_IPs.<\/li>\n\n\n\n<li><strong>Description<\/strong>: Forward SIP Traffic from UniTel to FreePBX<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click&nbsp;<strong>Save<\/strong>, then&nbsp;<strong>Apply Changes<\/strong>.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241107012336127.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">10.5 Set Up NAT port forwards for RTP (Media) Traffic[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=588\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=588\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the&nbsp;<strong>Port Forward<\/strong>&nbsp;tab, click&nbsp;<strong>Add<\/strong>&nbsp;to create another NAT rule.<\/li>\n\n\n\n<li>Configure the rule as follows:\n<ul class=\"wp-block-list\">\n<li><strong>Interface<\/strong>: WAN<\/li>\n\n\n\n<li><strong>Protocol<\/strong>: UDP<\/li>\n\n\n\n<li><strong>Destination<\/strong>: WAN address<\/li>\n\n\n\n<li><strong>Destination Port Range<\/strong>:\n<ul class=\"wp-block-list\">\n<li>From: 10000<\/li>\n\n\n\n<li>To: 20000 (for RTP media traffic)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Redirect Target IP<\/strong>: Enter your PBX IP: 192.168.5.6<\/li>\n\n\n\n<li><strong>Redirect Target Port<\/strong>:\n<ul class=\"wp-block-list\">\n<li>From: 10000<\/li>\n\n\n\n<li>To: 20000<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Source<\/strong>: Select Single host or alias and choose&nbsp;<code>Unitel_Media_IPs<\/code>.<\/li>\n\n\n\n<li><strong>Description<\/strong>: Forward RTP Traffic from UniTel to FreePBX\n<ul class=\"wp-block-list\">\n<li>Click&nbsp;<strong>Save<\/strong>, then&nbsp;<strong>Apply Changes<\/strong>.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">10.6 Verify Automatic Firewall Rules[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=589\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=589\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>After creating the NAT rules, go to&nbsp;<strong>Firewall<\/strong>&nbsp;&gt;&nbsp;<strong>Rules<\/strong>.<\/li>\n\n\n\n<li>In the&nbsp;<strong>WAN<\/strong>&nbsp;tab, confirm that the firewall rules were automatically created for:\n<ol class=\"wp-block-list\">\n<li><strong>SIP Traffic<\/strong>&nbsp;(ports 5060-5065) pointing to 192.168.5.6 and restricted to&nbsp;<code>Unitel_SIP_IPs<\/code>.<\/li>\n\n\n\n<li><strong>RTP Traffic<\/strong>&nbsp;(ports 10000-20000) pointing to 192.168.5.6 and restricted to&nbsp;<code>Unitel_Media_IPs<\/code>.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">10.7 Test the Configuration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=590\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=590\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Make sure that your FreePBX system can register with UniTel\u2019s SIP servers.<\/li>\n\n\n\n<li>Make a test call to make sure both SIP signaling and media (audio) traffic are functioning correctly.<\/li>\n\n\n\n<li>Make sure that when you end a phone call, both the caller &amp; recipient notice that it has ended immediately.<\/li>\n\n\n\n<li>Make sure you have two-way audio.<\/li>\n\n\n\n<li>Leave a call on for fifteen minutes and make sure it doesn\u2019t hang up by itself.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 11: Troubleshooting when it doesn\u2019t work. It\u2019s open source, so\u2026.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=591\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=591\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Introduction to Network Rules[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=592\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=592\">edit source<\/a>]<\/h3>\n\n\n\n<p>We set up two sets of rules:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>SIP Trunk rules<\/strong>&nbsp;(Ports 5060-5065)\n<ul class=\"wp-block-list\">\n<li>Allows Unitel to talk to our PBX<\/li>\n\n\n\n<li>Deals with signaling &amp; connection management<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Media Proxy Rules<\/strong>&nbsp;(Ports 10000-20000)\n<ul class=\"wp-block-list\">\n<li>Manages the actual audio transmission<\/li>\n\n\n\n<li>Handles voice data going back and forth<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">What are NAT port forwards vs Firewall Rules?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=593\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=593\">edit source<\/a>]<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">Network Address Translation (NAT) Port Forwards[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=594\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=594\">edit source<\/a>]<\/h5>\n\n\n\n<p>NAT is like the restaurant host who brings guests to specific tables. It allows specific machines behind your network to get traffic depending on the port that the traffic was trying to access when the traffic got to your cable modem &amp; firewall.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Firewall Rules[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=595\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=595\">edit source<\/a>]<\/h5>\n\n\n\n<p>The firewall acts as a bouncer. Even when NAT directs traffic to the right computer, the firewall can still block problematic connections.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Order:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=596\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=596\">edit source<\/a>]<\/h5>\n\n\n\n<p><code>pfSense<\/code>&nbsp;will add a firewall rule AUTOMATICALLY each time you create a NAT port forward, as long as you do not change that option at the end of the NAT port forward rule creation page. I circled this to make sure you would get it right.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Set up NAT rules first<\/li>\n\n\n\n<li>Configure firewall rules second<\/li>\n<\/ol>\n\n\n\n<h5 class=\"wp-block-heading\">Our Setup[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=597\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=597\">edit source<\/a>]<\/h5>\n\n\n\n<p>FreePBX box IP address: 192.168.5.6<\/p>\n\n\n\n<p>Internet Traffic \u2192 NAT (Traffic Direction) \u2192 Firewall (Security Check) \u2192 FreePBX virtual machine<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">When Things Don\u2019t Work (Common Scenario)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=598\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=598\">edit source<\/a>]<\/h3>\n\n\n\n<p>This is an open source firewall combined with self-managed SIP trunking. If something works on the first go, you should be very concerned \u2013 this likely means you are in a coma &amp; dreaming. Try to wake up. If you can\u2019t, something is wrong.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>IMPORTANT:<\/strong>&nbsp;Follow along in the video as this is best explained there as I go. This is one of the few sections where I believe the video is a must-have to understand how troubleshooting an issue here would work in real time.<\/p>\n<\/blockquote>\n\n\n\n<p>When initial setup doesn\u2019t work, follow this troubleshooting sequence:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Clear ARP Tables<\/strong>\n<ul class=\"wp-block-list\">\n<li>Navigate to&nbsp;<strong>Diagnostics \u2192 ARP Table \u2192 Clear<\/strong><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Reset States<\/strong>\n<ul class=\"wp-block-list\">\n<li>Navigate to&nbsp;<strong>Diagnostics \u2192 States \u2192 Reset States<\/strong><\/li>\n\n\n\n<li>States are current connections<\/li>\n\n\n\n<li>Must be reset on both routers<\/li>\n\n\n\n<li>Wait 90 seconds after reset (best practice)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Reload Filter Rules<\/strong>\n<ul class=\"wp-block-list\">\n<li>Navigate to&nbsp;<strong>Status \u2192 Filter \u2192<\/strong>&nbsp;then click ** Reload**<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Using Packet Capture for Diagnostics[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=599\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=599\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to:&nbsp;<strong>Diagnostics \u2192 Packet Capture<\/strong><\/li>\n\n\n\n<li>Configure capture:\n<ul class=\"wp-block-list\">\n<li>Interface: WAN or LAN depending on test<\/li>\n\n\n\n<li>Port: 5060, 5061, 5062, 5063, 5064, 5065 for SIP traffic<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Reading Packet Capture Results[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=600\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=600\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Example of captured traffic: 199.18.220.89 (Unitel\u2019s IP in my case)<\/li>\n\n\n\n<li>You\u2019re looking to see if the port 5060 traffic is actually being directed to your PBX. You\u2019re also looking to see if it is even coming in at all.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Stuff we use to troubleshoot:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=601\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=601\">edit source<\/a>]<\/h3>\n\n\n\n<p>When dealing with miserable issues:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Check Logs<\/strong><strong>Status \u2192 System Logs \u2192 Firewall \u2192 Normal View<\/strong>\n<ul class=\"wp-block-list\">\n<li>Sort by newest first<\/li>\n\n\n\n<li>Enable logging for allowed and blocked traffic<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Use diagnosing tools<\/strong>\n<ul class=\"wp-block-list\">\n<li>Packet capture shows where things are going<\/li>\n\n\n\n<li>Firewall logs show what\u2019s being blocked\/allowed<\/li>\n\n\n\n<li>Side-by-side comparison of rules vs.&nbsp;actual traffic<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Reset Everything<\/strong>\n<ul class=\"wp-block-list\">\n<li>Clear ARP tables<\/li>\n\n\n\n<li>Reset state tables<\/li>\n\n\n\n<li>Reload filter rules<\/li>\n\n\n\n<li>None of this will work because it\u2019s open source, SO:<\/li>\n\n\n\n<li>Reboot the router<\/li>\n\n\n\n<li>Look for hints &amp; clues.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Important takeaway from this[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=602\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=602\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In the video, I did all of the above. The router magically started passing traffic after a reboot.<\/li>\n\n\n\n<li>Even when everything is configured correctly, it may not work correctly \u2013 it\u2019s open source.<\/li>\n\n\n\n<li>Consumer routers vs Enterprise\/Open Source firewalls:\n<ul class=\"wp-block-list\">\n<li>$20 consumer router: \u201cIt just works\u201d<\/li>\n\n\n\n<li>Enterprise-grade open source firewall: Requires patience and systematic troubleshooting<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>It\u2019s still better to use this than a traditional router so you don\u2019t get hacked &amp; owned via lack of updates.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 12: Install Lenny on FreePBX 17[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=603\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=603\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">12.1 Prepare to Access Your FreePBX System[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=604\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=604\">edit source<\/a>]<\/h4>\n\n\n\n<p>You need to SSH into the FreePBX VM to install Lenny. Open a terminal on your local machine and connect via SSH:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ssh louis@192.168.5.6\nsu<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">12.2 Add Lenny\u2019s Custom Context in Asterisk[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=605\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=605\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the&nbsp;<code>extensions_custom.conf<\/code>&nbsp;file for editing:nano \/etc\/asterisk\/extensions_custom.conf<\/li>\n\n\n\n<li>Add the following lines to define the Lenny context:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">[Lenny]\nexten =&gt; talk,1,Set(i=${IF($[\"0${i}\"=\"016\"]?7:$[0${i}+1])})\nsame =&gt; n,ExecIf($[${i}=1]?MixMonitor(${UNIQUEID}.wav))\nsame =&gt; n,Playback(Lenny\/Lenny${i})\nsame =&gt; n,BackgroundDetect(Lenny\/backgroundnoise,1500)<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Save and exit the editor by pressing&nbsp;<code>Ctrl + X<\/code>, then&nbsp;<code>Y<\/code>, and&nbsp;<code>Enter<\/code>.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">12.3 Download Lenny\u2019s Sound Files[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=606\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=606\">edit source<\/a>]<\/h4>\n\n\n\n<p>Continue with the necessary steps to download and configure Lenny\u2019s sound files as required.<\/p>\n\n\n\n<p>Lenny works by playing recorded audio. You\u2019ll need to download these audio files to the correct directory on your FreePBX system.<\/p>\n\n\n\n<p>Download Lenny\u2019s sound files&nbsp;<a href=\"https:\/\/www.crosstalksolutions.com\/pub\/Lenny.zip\">from this link<\/a>. Crosstalk solutions is a hero for continuing to host this. Tell him thank you.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/var\/lib\/asterisk\/sounds\/\nwget https:\/\/www.crosstalksolutions.com\/pub\/Lenny.zip\nunzip Lenny.zip\nchown asterisk:asterisk \/var\/lib\/asterisk\/sounds\/Lenny\/* -R\nchmod -R 755 \/var\/lib\/asterisk\/sounds\/Lenny\/* -R<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_89b069de.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_6b11bfcb.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_410d95bf.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_cdc425ee.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">12.4 Create a Custom Destination in FreePBX[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=607\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=607\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Log in to the FreePBX web interface.<\/li>\n\n\n\n<li>Navigate to&nbsp;<strong>Admin &gt; Custom Destinations<\/strong>.<\/li>\n\n\n\n<li>Add a new custom destination with the following details:\n<ul class=\"wp-block-list\">\n<li><strong>Custom Destination:<\/strong>&nbsp;<code>Lenny,talk,1<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>This may be called TARGET instead of CUSTOM DESTINATION IN NEW VERSIONS\n<ul class=\"wp-block-list\">\n<li><strong>Description:<\/strong>&nbsp;Lenny<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click&nbsp;<strong>Submit<\/strong>&nbsp;and then&nbsp;<strong>Apply Config<\/strong>&nbsp;to save the changes.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_5e139a78.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_35e121d2.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_91b7118c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_77d50bb9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_c6db1985.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">12.5 Set Lenny as a Destination[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=608\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=608\">edit source<\/a>]<\/h4>\n\n\n\n<p>You now have multiple options for how to use Lenny.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Manual Transfers to Lenny:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Navigate to&nbsp;<strong>Connectivity \u2014&gt; Extensions<\/strong><\/li>\n\n\n\n<li>Create a new&nbsp;<strong>Virtual Extension<\/strong><\/li>\n\n\n\n<li>Set the extension to whatever you want it to be; this is the number you dial to get Lenny &amp; the number you transfer people to for Lenny<\/li>\n\n\n\n<li>Click on the Advanced tab<\/li>\n\n\n\n<li>Scroll to the bottom for destinations when nobody answers.<\/li>\n\n\n\n<li>Set each of the three to&nbsp;<strong>Custom Destinations \u2014&gt; Lenny<\/strong><\/li>\n\n\n\n<li>Enjoy transferring telemarketers to Lenny at his extension.&nbsp;\ud83d\ude42<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">12.6 Reload things in the terminal.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=609\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=609\">edit source<\/a>]<\/h4>\n\n\n\n<p>In your SSH terminal, type the following:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">fwconsole reload<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>IMPORTANT:<\/strong>&nbsp;Hitting the red&nbsp;<strong>\u201cApply Config\u201d<\/strong>&nbsp;button in the upper right corner of the FreePBX webpage is not enough here. For this to work, you must run&nbsp;<code>fwconsole reload<\/code>&nbsp;in the terminal.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">12.7 Sending blocked numbers to Lenny[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=610\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=610\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>After hanging up on someone you hate, hit&nbsp;<code>*32<\/code>&nbsp;quickly which will block their number.<\/li>\n\n\n\n<li>Navigate to&nbsp;<strong>Admin \u2014&gt; Blacklist<\/strong>.<\/li>\n\n\n\n<li>Click onto&nbsp;<strong>Settings<\/strong>.<\/li>\n\n\n\n<li>Set the&nbsp;<strong>Destination for BlackListed Calls<\/strong>&nbsp;to&nbsp;<strong>Custom Destination \u2014&gt; Lenny<\/strong>.<\/li>\n<\/ol>\n\n\n\n<p>Now every time you get a call from someone you hate, you can dial&nbsp;<code>*32<\/code>&nbsp;&amp; they will be routed to Lenny as soon as they call back. But remember, in the words of one of my first recording studio job bosses in 2007 &#8211;&nbsp;<em>\u201cLouis, you hate nothing; you intensely dislike it!\u201d<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 12: Hiring a virtual receptionist who tells annoying people to&nbsp;<em>\u201cget the fuck outta here!\u201d<\/em>[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=611\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=611\">edit source<\/a>]<\/h2>\n\n\n\n<p>This is the primary reason to have a self managed PBX.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">12.1 Download the Sound Files[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=612\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=612\">edit source<\/a>]<\/h4>\n\n\n\n<p>First, SSH into your FreePBX machine:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ssh louis@freepbx.home.arpa<\/pre>\n\n\n\n<p>Download the sound files from the given URL using&nbsp;<code>wget<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">wget http:\/\/downloads.asterisk.org\/pub\/telephony\/sounds\/asterisk-extra-sounds-en-g722-current.tar.gz<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">12.2 Place the Files in the Proper Directory[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=613\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=613\">edit source<\/a>]<\/h4>\n\n\n\n<p>After downloading the archive, extract it and move the files to the appropriate directory in FreePBX. Asterisk sound files typically reside in&nbsp;<code>\/var\/lib\/asterisk\/sounds<\/code>.<\/p>\n\n\n\n<p>Extract the tarball:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">tar -xvzf asterisk-extra-sounds-en-g722-current.tar.gz<\/pre>\n\n\n\n<p>Move the extracted files into the custom sound directory for FreePBX:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mv asterisk-extra-sounds-en-g722 \/var\/lib\/asterisk\/sounds\/custom<\/pre>\n\n\n\n<p>If the&nbsp;<code>custom<\/code>&nbsp;directory doesn\u2019t exist, you can create it:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mkdir \/var\/lib\/asterisk\/sounds\/custom<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">12.3 Set Correct Permissions[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=614\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=614\">edit source<\/a>]<\/h4>\n\n\n\n<p>Make sure that FreePBX and Asterisk can access the sound files by setting the correct ownership and permissions. FreePBX generally runs under the&nbsp;<code>asterisk<\/code>&nbsp;user:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">chown -R asterisk:asterisk \/var\/lib\/asterisk\/sounds\/custom\/* -R\nchmod -R 755 \/var\/lib\/asterisk\/sounds\/custom\/* -R<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_3725236e.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_8a2cf792.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_2abf75f3.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>12.4 Find the Sound Files in the FreePBX GUI<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Log in to the&nbsp;<strong>FreePBX Admin Interface<\/strong>.<\/li>\n\n\n\n<li>Navigate to&nbsp;<strong>Admin &gt; System Recordings<\/strong>.<\/li>\n\n\n\n<li>Under&nbsp;<strong>Add Recording<\/strong>, you should now be able to see &amp; use the uploaded sound files from the&nbsp;<code>\/var\/lib\/asterisk\/sounds\/custom<\/code>&nbsp;directory.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">12.5 Combine Sound Prompts into a Sequence[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=615\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=615\">edit source<\/a>]<\/h4>\n\n\n\n<p>To combine multiple sound files into a single prompt sequence, use the&nbsp;<strong>System Recordings<\/strong>&nbsp;feature in FreePBX:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Admin &gt; System Recordings<\/strong>&nbsp;and create a new recording.\n<ul class=\"wp-block-list\">\n<li>Select the option to&nbsp;<strong>Add Sound Recording<\/strong>&nbsp;by combining the existing files.<\/li>\n\n\n\n<li>Add the sound files in the order you want them to play.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Choose the following codecs:\n<ul class=\"wp-block-list\">\n<li>alaw<\/li>\n\n\n\n<li>g722<\/li>\n\n\n\n<li>gsm<\/li>\n\n\n\n<li>ulaw<\/li>\n\n\n\n<li>wav<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>EXCLUDE the following codecs:\n<ul class=\"wp-block-list\">\n<li>g729<\/li>\n\n\n\n<li>sln<\/li>\n\n\n\n<li>sln16<\/li>\n\n\n\n<li>sln48<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Save the combined sound as a new recording.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">12.6 Create an Extension That Plays the Sound Prompts[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=616\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=616\">edit source<\/a>]<\/h4>\n\n\n\n<p>To forward someone to an extension that plays back the sound prompts:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Log in to the&nbsp;<strong>FreePBX Admin Interface<\/strong>.<\/li>\n\n\n\n<li>Navigate to&nbsp;<strong>Applications &gt; Extensions<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Add Extension<\/strong>&nbsp;and select&nbsp;<strong>Custom Extension<\/strong>.<\/li>\n\n\n\n<li>Set destination of unanswered to play your recording.<\/li>\n\n\n\n<li><strong>Save, Submit<\/strong>&nbsp;and&nbsp;<strong>Apply Config<\/strong>.<\/li>\n<\/ol>\n\n\n\n<p>Now, you can transfer calls to this extension, and the selected sound prompts will be played back. Allison Smith will tell.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 13: Get emails with voicemails using Postfix with Postmark SMTP Relay[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=617\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=617\">edit source<\/a>]<\/h2>\n\n\n\n<p>We are not doing the 1990s calling into voicemail system nonsense. That is miserable.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_aaeb276e.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_8c59ac9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_8cb7f78.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">13.1 Configure the FROM Address in FreePBX[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=618\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=618\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Log into your FreePBX web interface.<\/li>\n\n\n\n<li>Navigate to&nbsp;<strong>Settings \u2192 Voicemail Admin<\/strong>.<\/li>\n\n\n\n<li>Click the&nbsp;<strong>Settings<\/strong>&nbsp;tab.<\/li>\n\n\n\n<li>Click on the&nbsp;<strong>Email Config<\/strong>&nbsp;tab.<\/li>\n\n\n\n<li>Set the&nbsp;<strong>Server Email<\/strong>&nbsp;to an email address of your choice.\n<ul class=\"wp-block-list\">\n<li>I suggest this address be within the domain of the email you set up in mailcow.<\/li>\n\n\n\n<li>For instance, if you set up an email for yourself called&nbsp;<a href=\"http:\/\/steve@stevesavers.com\/\"><strong>steve@stevesavers.com<\/strong><\/a>&nbsp;in mailcow, make this&nbsp;<strong>voicemails@stevesavers.com<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click&nbsp;<strong>Submit<\/strong>, then&nbsp;<strong>Apply Config<\/strong>&nbsp;(red button in the upper right corner).<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_7c7fe30c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_926f2cd4.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_82ab253e.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_302269b1.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_5b69f714.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_4ea2455d.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">13.2 Configure user access to voicemail[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=619\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=619\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to&nbsp;<strong>Admin \u2014&gt; User Management<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Edit<\/strong>&nbsp;next to the user.\n<ul class=\"wp-block-list\">\n<li>Click the&nbsp;<strong>User Details<\/strong>&nbsp;tab at the top.\n<ul class=\"wp-block-list\">\n<li>Check that the email address is correct.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click the&nbsp;<strong>UCP<\/strong>&nbsp;tab at the top.\n<ul class=\"wp-block-list\">\n<li>Click the&nbsp;<strong>Call History<\/strong>&nbsp;sub-tab.\n<ul class=\"wp-block-list\">\n<li>In&nbsp;<strong>CDR Access<\/strong>, add the extensions for which you want to allow this user to listen to call recordings. So if your extension is&nbsp;<strong>401<\/strong>, then&nbsp;<strong>401<\/strong>&nbsp;should be in this list.<\/li>\n\n\n\n<li>Set&nbsp;<strong>Allow CDR<\/strong>&nbsp;to&nbsp;<strong>Yes<\/strong>.<\/li>\n\n\n\n<li>Set&nbsp;<strong>Allow CDR Downloads<\/strong>&nbsp;to&nbsp;<strong>Yes<\/strong>.<\/li>\n\n\n\n<li>Set&nbsp;<strong>Allow CDR Playback<\/strong>&nbsp;to&nbsp;<strong>Yes<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click the&nbsp;<strong>Voicemail<\/strong>&nbsp;sub-tab.\n<ul class=\"wp-block-list\">\n<li>Make sure every option here is set to&nbsp;<strong>Yes<\/strong>.<\/li>\n\n\n\n<li>In&nbsp;<strong>Allowed Voicemail<\/strong>, make sure that your extension is in the list. So if your extension is&nbsp;<strong>401<\/strong>, then&nbsp;<strong>401<\/strong>&nbsp;should be in this list.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click&nbsp;<strong>Submit<\/strong>, then&nbsp;<strong>Apply Config<\/strong>&nbsp;(red button in the upper right corner).<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_dd6f816d.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_653952c.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_d77e3b32.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_56847681.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_aa85fde6.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_6bcaece6.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_abb6e1ff.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_df1ec9c8.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">13.3 Configure extension for voicemail[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=620\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=620\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to&nbsp;<strong>Connectivity \u2014&gt; Extensions<\/strong>\n<ul class=\"wp-block-list\">\n<li>Choose your extension<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Go to&nbsp;<strong>Voicemail<\/strong>\n<ul class=\"wp-block-list\">\n<li>Set your&nbsp;<strong>Voicemail password<\/strong><\/li>\n\n\n\n<li>Set the&nbsp;<strong>Email Address<\/strong>&nbsp;to the email address you want it to email.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Submit<\/strong>, then&nbsp;<strong>Apply Config<\/strong>&nbsp;red button in the upper right corner<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click&nbsp;<strong>UCP<\/strong>&nbsp;on the top menu to enter the User Control Panel\n<ul class=\"wp-block-list\">\n<li>Click the plus sign in the upper left to add a panel.<\/li>\n\n\n\n<li>Choose&nbsp;<strong>Voicemail.<\/strong><\/li>\n\n\n\n<li>Choose your extension, in this case,&nbsp;<strong>401<\/strong><\/li>\n\n\n\n<li>Go to the little gear on the upper right corner of the panel you just added to open the&nbsp;<strong>settings<\/strong>&nbsp;menu<\/li>\n\n\n\n<li>Make sure&nbsp;<strong>Email Attachment<\/strong>&nbsp;is&nbsp;<strong>On<\/strong><\/li>\n\n\n\n<li><strong>Email Address<\/strong>&nbsp;should be the address that you want voicemails to go to.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">13.4 Get Postmark Credentials for SMTP relay[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=621\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=621\">edit source<\/a>]<\/h4>\n\n\n\n<p>We are using Postmark for SMTP relay so our emails are not immediately rejected by most providers.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to postmarkapp.com<\/li>\n\n\n\n<li>Log in and click Servers<\/li>\n\n\n\n<li>Click onto the server you made earlier.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Default Transactional Stream<\/strong><\/li>\n\n\n\n<li>Navigate to the&nbsp;<strong>Setup Instructions page<\/strong>&nbsp;after clicking onto your message stream.\n<ul class=\"wp-block-list\">\n<li>Under&nbsp;<strong>\u201cPick the library or integration\u201d<\/strong>&nbsp;\u2013 pick \u201cSMTP\u201d.<\/li>\n\n\n\n<li><strong>This is the same thing we did when we set up mailcow with Postmark for SMTP relay in the mailcow section!<\/strong><\/li>\n\n\n\n<li>Take note of these, as we will be using them with FreePBX<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">13.5 Modify Postfix Configuration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=622\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=622\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Edit the main configuration file:sudo nano \/etc\/postfix\/main.cf<\/li>\n\n\n\n<li>Find and modify\/add these lines. Keep everything elsein the&nbsp;<code>main.cf<\/code>&nbsp;file unchanged. Adjust the&nbsp;<code>sender_canonical_maps = static:voicemailalert@stevesavers.com<\/code>&nbsp;to the email address you wish to use.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">relayhost = [smtp.postmarkapp.com]:587\nsmtp_use_tls = yes\nsmtp_sasl_auth_enable = yes\nsmtp_sasl_password_maps = hash:\/etc\/postfix\/sasl_passwd\nsmtp_sasl_security_options = noanonymous\nsmtp_sasl_mechanism_filter = plain\nsender_canonical_maps = static:voicemailalert@stevesavers.com<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">13.6 Set Up Authentication[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=623\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=623\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Ssh into the FreePBX virtual machine:ssh louis@192.168.5.6<\/li>\n\n\n\n<li>Create\/edit the SASL password file:sudo nano \/etc\/postfix\/sasl_passwd<\/li>\n\n\n\n<li>Add this line (replace&nbsp;<code>USERNAME:PASSWORD<\/code>&nbsp;with your Postmark credentials):[smtp.postmarkapp.com]:587 USERNAME:PASSWORD<\/li>\n\n\n\n<li>Create the hash database and set permissions:sudo postmap \/etc\/postfix\/sasl_passwd sudo chmod 600 \/etc\/postfix\/sasl_passwd*<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">13.7 Restart Postfix[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=624\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=624\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo systemctl restart postfix<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">13.8 Test Configuration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=625\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=625\">edit source<\/a>]<\/h4>\n\n\n\n<p>Send a test email:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cat &lt;&lt; EOF | sendmail l.a.rossmann@gmail.com\nFrom: voicemailalert@stevesavers.com\nTo: l.a.rossmann@gmail.com\nSubject: Test Email\nContent-Type: text\/plain\nX-PM-Message-Stream: outbound\n\nThis is a test email body.\nEOF<\/pre>\n\n\n\n<p>Check mail logs for errors:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo tail -f \/var\/log\/mail.log<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Troubleshooting[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=626\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=626\">edit source<\/a>]<\/h4>\n\n\n\n<p>If emails aren\u2019t sending:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Check&nbsp;<code>\/var\/log\/mail.log<\/code>&nbsp;for errors<\/li>\n\n\n\n<li>Check that Postmark credentials are correct (if you typed&nbsp;<code>postmark.com<\/code>&nbsp;instead of&nbsp;<code>postmarkapp.com<\/code>&nbsp;for server, etc)<\/li>\n\n\n\n<li>Verify sender domain (<code>stevesavers.com<\/code>) is properly configured in Postmark<\/li>\n\n\n\n<li>Check the activity tab on the transactional stream in Postmark<\/li>\n\n\n\n<li>Mail log will tell you what you fkd up 99% of time.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_923a1598.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>!(Postmark Activity monitor](old\/images\/lu67917r1ezu_tmp_f60bd933.png)<\/p>\n\n\n\n<p>!(Postmark Activity monitor](old\/images\/lu67917r1ezu_tmp_c39a116d.png)<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Postmark Activity Monitor:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=627\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=627\">edit source<\/a>]<\/h5>\n\n\n\n<p>If you want more troubleshooting information, check Postmark.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Log into Postmark.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Servers<\/strong><\/li>\n\n\n\n<li>Click onto the server you made.<\/li>\n\n\n\n<li>Click onto your&nbsp;<strong>Default Transactional Stream<\/strong><\/li>\n\n\n\n<li>Click&nbsp;<strong>Activity<\/strong><\/li>\n\n\n\n<li>Poke around.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Default \/etc\/postfix\/main.cf config file[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=628\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=628\">edit source<\/a>]<\/h4>\n\n\n\n<p>Just in case you mess something up, here\u2019s the default one, because the ones in \/usr\/share\/postfix require configuration from scratch. What they mean when they say&nbsp;<em>\u201cmore complete\u201d<\/em>&nbsp;version is&nbsp;<em>\u201cwe don\u2019t offer a copy anywhere of the just working version\u201d<\/em>, because it\u2019s\u2026 GNU\/Linux.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># See \/usr\/share\/postfix\/main.cf.dist for a commented, more complete version\n\n\n# Debian specific:  Specifying a file name will cause the first\n# line of that file to be used as the name.  The Debian default\n# is \/etc\/mailname.\n#myorigin = \/etc\/mailname\n\nsmtpd_banner = $myhostname ESMTP $mail_name (Debian\/GNU)\nbiff = no\n\n# appending .domain is the MUA's job.\nappend_dot_mydomain = no\n\n# Uncomment the next line to generate \"delayed mail\" warnings\n#delay_warning_time = 4h\n\nreadme_directory = no\n\n# See http:\/\/www.postfix.org\/COMPATIBILITY_README.html -- default to 3.6 on\n# fresh installs.\ncompatibility_level = 3.6\n\n\n\n# TLS parameters\nsmtpd_tls_cert_file=\/etc\/ssl\/certs\/ssl-cert-snakeoil.pem\nsmtpd_tls_key_file=\/etc\/ssl\/private\/ssl-cert-snakeoil.key\nsmtpd_tls_security_level=may\n\nsmtp_tls_CApath=\/etc\/ssl\/certs\nsmtp_tls_security_level=may\nsmtp_tls_session_cache_database = btree:${data_directory}\/smtp_scache\n\n\nsmtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination\nmyhostname = debian.home.arpa\nalias_maps = hash:\/etc\/aliases\nalias_database = hash:\/etc\/aliases\nmydestination = $myhostname, debian, localhost.localdomain, localhost\nrelayhost = \nmynetworks = 127.0.0.0\/8 [::ffff:127.0.0.0]\/104 [::1]\/128\nmailbox_size_limit = 0\nrecipient_delimiter = +\n# WARNING: Changing the inet_interfaces to an IP other than 127.0.0.1 may expose Postfix to external network connections.\n# Only modify this setting if you understand the implications and have specific network requirements.\ninet_interfaces = 127.0.0.1\ninet_protocols = all\nmessage_size_limit = 102400000<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Self-Hosted Bitwarden Password manager:<\/strong>[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=629\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=629\">edit source<\/a>]<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">This is a bad idea.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=630\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=630\">edit source<\/a>]<\/h2>\n\n\n\n<p>We are going to set this up on our mailcow virtual machine at 192.168.5.3.<\/p>\n\n\n\n<p>This is a bad idea. You shouldn\u2019t do this. Not only are you starting off as a beginner self-managing something that literally is the key to every aspect of your life, but you aren\u2019t even saving money. Simple basics like the&nbsp;<code>haveibeenpwned<\/code>&nbsp;integration to check for leaked passwords will cost you more to do yourself when self-hosting than it would if you just paid Bitwarden.<\/p>\n\n\n\n<p>A big reason we\u2019re doing this is freedom; we want freedom from crappy companies. Bitwarden isn\u2019t a bad company. They treat users well, and they give you the freedom to self-host your own instance with software they\u2019ve open-sourced. If anything, these are the types of companies that have done more to earn the public\u2019s trust than the rest.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_8197e237.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_8ad58b71.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_251d8ba7.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1:&nbsp;<strong>Configure DNS Resolution in pfSense<\/strong>[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=631\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=631\">edit source<\/a>]<\/h2>\n\n\n\n<p>Before installing Bitwarden, we should configure DNS resolution since our server (192.168.5.3) already resolves to&nbsp;<code>mailserver.home.arpa<\/code>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_6b44e385.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_b1a9776a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_32ced0e0.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p><strong>Add Additional DNS Entry<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Log into your pfSense dashboard.<\/li>\n\n\n\n<li>Navigate to&nbsp;<strong>Services<\/strong>&nbsp;&gt;&nbsp;<strong>DNS Resolver<\/strong>.<\/li>\n\n\n\n<li>Scroll down to&nbsp;<strong>Host Overrides<\/strong>.<\/li>\n\n\n\n<li>Click the plus (<strong>+<\/strong>) button to add a new entry.<\/li>\n\n\n\n<li>Fill in the following:\n<ul class=\"wp-block-list\">\n<li><strong>Host<\/strong>:&nbsp;<code>bitwarden<\/code><\/li>\n\n\n\n<li><strong>Domain<\/strong>:&nbsp;<code>home.arpa<\/code><\/li>\n\n\n\n<li><strong>IP Address<\/strong>:&nbsp;<code>192.168.5.3<\/code><\/li>\n\n\n\n<li><strong>Description<\/strong>: Bitwarden Password Manager<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>For&nbsp;<strong>Additional Names for this Host<\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong>Host name<\/strong>&nbsp;should be&nbsp;<code>mailserver<\/code>&nbsp;since 192.168.5.3 is also our mailserver and already has a static mapping as a mailserver.<\/li>\n\n\n\n<li><strong>Domain<\/strong>&nbsp;should be&nbsp;<code>home.arpa<\/code>&nbsp;(or whatever you set as your domain in&nbsp;<strong>System \u2014&gt; General Settings<\/strong>).<\/li>\n\n\n\n<li><strong>Description<\/strong>&nbsp;can be anything you want.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click&nbsp;<strong>Save<\/strong>.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Apply Changes<\/strong>.<\/li>\n<\/ol>\n\n\n\n<p><strong>Note<\/strong>: This server will now respond to both&nbsp;<code>mailserver.home.arpa<\/code>&nbsp;and&nbsp;<code>bitwarden.home.arpa<\/code>.<\/p>\n\n\n\n<p><strong>Step 2 below is only necessary if you did NOT follow these while you were setting up this virtual machine for&nbsp;<code>mailcow<\/code>&nbsp;mailserver. Skip ahead to Step 3 if you already did this when setting up&nbsp;<code>mailcow<\/code>.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Prepare system for Bitwarden installation:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=632\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=632\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">2.0 SSH into the mailserver computer[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=633\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=633\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">ssh louis@192.168.5.3<\/pre>\n\n\n\n<p>OR<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ssh louis@bitwarden.home.arpa<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 Update and upgrade your system[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=634\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=634\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update &amp;&amp; sudo apt upgrade -y\nsudo apt install curl git wget apt-transport-https ca-certificates software-properties-common -y<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 Verify Docker installation:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=635\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=635\">edit source<\/a>]<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">IF YOU ELECTED TO INSTALL MAILCOW ALREADY, THIS PART IS ALREADY DONE &amp; YOU CAN SKIP TO STEP 3![<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=636\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=636\">edit source<\/a>]<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\n<ul class=\"wp-block-list\">\n<li>If you installed mailcow &amp; followed the instructions for it, you already installed docker properly on this virtual machine, and have no need to do this again. Skip to step 3 if that is the case.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Run&nbsp;<code>docker --version<\/code>&nbsp;and make sure the version is 24.0.0 or later. If not, remove the old version:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt remove docker docker-engine docker.io containerd runc<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 Install Docker using official Docker script:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=637\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=637\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">curl -fsSL https:\/\/get.docker.com -o get-docker.sh\nsudo sh get-docker.sh<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;It\u2019s very important to use the official Docker installation and not the Snap version. The Snap version can cause issues due to its sandboxed nature, making it a mess for&nbsp;<code>mailcow<\/code>\u2019s requirements. It is bad for our purposes, don\u2019t use it.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">2.4 Install Docker Compose &amp; prerequisites:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=638\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=638\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install docker-compose-plugin -y\nsudo systemctl enable --now docker<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.5 Make sure it worked[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=639\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=639\">edit source<\/a>]<\/h4>\n\n\n\n<p>Run&nbsp;<code>docker compose version<\/code>&nbsp;and make sure the version is 2.0 or higher.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Configure Bitwarden Environment[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=640\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=640\">edit source<\/a>]<\/h2>\n\n\n\n<p><em><a href=\"https:\/\/bitwarden.com\/help\/install-on-premise-linux\/#install-docker-and-docker-compose\">Bitwarden\u2019s installation instructions<\/a><\/em>&nbsp;are the opposite of Onlyoffice\u2019s. They actually work, and their documentation is amazing. You can find them&nbsp;<em><a href=\"https:\/\/bitwarden.com\/help\/install-on-premise-linux\/#install-docker-and-docker-compose\">here<\/a><\/em>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3.1 Create Bitwarden user and set permissions[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=641\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=641\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo adduser bitwarden\nsudo usermod -aG docker bitwarden<\/pre>\n\n\n\n<p>Use the following command to log in as the new user,&nbsp;<code>bitwarden<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo login<\/pre>\n\n\n\n<p>Enter credentials for the&nbsp;<code>bitwarden<\/code>&nbsp;user to log in.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3.2: Create and Configure Bitwarden Directory[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=642\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=642\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo mkdir \/opt\/bitwarden\nsudo chmod -R 700 \/opt\/bitwarden\nsudo chown -R bitwarden:bitwarden \/opt\/bitwarden<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3.3: Enable Docker Service[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=643\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=643\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo systemctl start docker\nsudo systemctl enable docker<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3.4: Download and Prepare Installation Script[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=644\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=644\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/opt\/bitwarden\ncurl -Lso bitwarden.sh \"https:\/\/func.bitwarden.com\/api\/dl\/?app=self-host&amp;platform=linux\"\nchmod +x bitwarden.sh<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3.5: Run the Installation Script[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=645\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=645\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">.\/bitwarden.sh install<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241107020120196.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241107020217334.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.6 Installation Configuration Notes[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=646\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=646\">edit source<\/a>]<\/h4>\n\n\n\n<p>During installation, you\u2019ll need to provide:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Domain Name<\/strong>: Use&nbsp;<code>bitwarden.home.arpa<\/code><\/li>\n\n\n\n<li><strong>SSL Certificate<\/strong>: Choose \u2018n\u2019 for Let\u2019s Encrypt if using a self-signed certificate\n<ul class=\"wp-block-list\">\n<li>Bitwarden auto-generates a self-signed certificate for you. Isn\u2019t Bitwarden nice?<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Installation Credentials<\/strong>: Get these from&nbsp;<a href=\"https:\/\/bitwarden.com\/host\/\">bitwarden.com\/host<\/a><\/li>\n<\/ul>\n\n\n\n<p><strong>Important<\/strong>: Your installation ID and key will look similar to:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">462b197d-14f0-410e-a2c6-b21200fd09f2\nPcf8vNk5udgT3dI9OWJj<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3.7 Port Configuration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=647\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=647\">edit source<\/a>]<\/h4>\n\n\n\n<p>If running multiple services (like mailcow), you\u2019ll need to modify the ports in&nbsp;<code>\/opt\/bitwarden\/bwdata\/config.yml<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">http_port: 81    # Changed from 80\nhttps_port: 444  # Changed from 443<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Configure Bitwarden Settings[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=648\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=648\">edit source<\/a>]<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_923a1598.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_f60bd933.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_4581e09b.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">4.1: Set Up Domain and Email Settings[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=649\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=649\">edit source<\/a>]<\/h4>\n\n\n\n<p>Edit the environment file:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">nano \/opt\/bitwarden\/bwdata\/env\/global.override.env<\/pre>\n\n\n\n<p>Add the following configurations. Use the credentials from your Postmark SMTP relay account to fill in the username, password,&nbsp;<code>globalSettings__mail__smtp__port<\/code>, and&nbsp;<code>globalSettings__mail__smtp__host<\/code>&nbsp;below. Feel free to adjust them based on your email and who you are using for SMTP relay.&nbsp;<strong>This assumes that you set up Postmark as an SMTP relay in the mailcow\/mailserver section of this guide! If you did not, you will have to find another SMTP relay service<\/strong>; Gmail offers one. This is needed so that your Bitwarden instance can send emails to you without them going straight to spam.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">globalSettings__domain__baseUrl=https:\/\/bitwarden.home.arpa\nglobalSettings__mail__smtp__host=smtp.postmarkapp.com\nglobalSettings__mail__smtp__port=587\nglobalSettings__mail__smtp__ssl=false\nglobalSettings__mail__smtp__username=&lt;your_email_username&gt;\nglobalSettings__mail__smtp__password=&lt;your_email_password&gt;\nglobalSettings__mail__smtp__from=putfromemailhere@youremail.com\nadminSettings__admins=putanadminemailhere@youremail.com<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4.2 Apply changes and start service[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=650\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=650\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">.\/bitwarden.sh rebuild\n.\/bitwarden.sh start<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_99b3c521.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_9005c753.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_7df1fc57.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_4832b6bd.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_8d7c905.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_e7d3966a.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_bc67ac1b.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_a557cbd9.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_bda10420.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_d6aa6557.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_eb377cee.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_6543bc05.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_cb1afd48.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_235ea9d2.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_323c7ce.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Browser Extension Setup[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=651\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=651\">edit source<\/a>]<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Make sure VPN Connection<\/strong>: Connect to your home server VPN<\/li>\n\n\n\n<li><strong>Install Extension<\/strong>:\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/chrome.google.com\/webstore\/detail\/bitwarden-free-password-ma\/nngceckbapebfimnlniiiahkandclblb\">Chrome Web Store<\/a><\/li>\n\n\n\n<li>Firefox:&nbsp;<a href=\"https:\/\/addons.mozilla.org\/en-US\/firefox\/addon\/bitwarden-password-manager\/\">Firefox Add-ons<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Critical Step<\/strong>: When logging in, change the server URL from bitwarden.com to your self-hosted instance (e.g.,&nbsp;<code><a href=\"https:\/\/bitwarden.home.arpa:444\/\">https:\/\/bitwarden.home.arpa:444<\/a><\/code>)&nbsp;<strong>DON\u2019T FORGET THE ALTERNATIVE PORT AT THE END IF YOU CHOSE AN ALTERNATIVE PORT!<\/strong><\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">Optional: Pin Extension[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=652\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=652\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>For Chrome\/Brave: Right-click the Bitwarden icon and select \u201cPin\u201d<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Setting up ZFS for data storage[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=653\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=653\">edit source<\/a>]<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">How we\u2019re storing our data:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=654\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=654\">edit source<\/a>]<\/h2>\n\n\n\n<p>We\u2019re not keeping your 40 terabytes of GNU\/Linux ISOs on solid state storage. That is a waste of money &amp; resources (unless you\u2019re insanely rich). I set up the system drives on SSDs so that my photos, documents, mail, and android backups would be quickly accessible and these services highly responsive. I don\u2019t need that level of responsiveness for my collection of GNU\/Linux ISOs, though. This is where ZFS pools come into play.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What is ZFS?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=655\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=655\">edit source<\/a>]<\/h3>\n\n\n\n<p>ZFS is a complete storage management system that combines:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>File system functionality<\/li>\n\n\n\n<li>Volume management<\/li>\n\n\n\n<li>RAID capabilities<\/li>\n\n\n\n<li>Data integrity checking<\/li>\n\n\n\n<li>Automatic repair features<\/li>\n<\/ul>\n\n\n\n<p>It\u2019s like having a RAID controller, Linux LVM, and a file system all in one.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why ZFS?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=656\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=656\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1. Data Integrity Built-In[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=657\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=657\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ZFS constantly checks for corruption using checksums<\/li>\n\n\n\n<li>ZFS automatically repairs corrupted files if you have redundancy<\/li>\n\n\n\n<li>ZFS saved me twice from the consequences of my bad decisions when I bought Seagate products.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2. Snapshots That Actually Work (although I\u2019m not getting into that here)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=658\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=658\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Take instant snapshots that don\u2019t eat up space<\/li>\n\n\n\n<li>Roll back changes when you inevitably mess something up<\/li>\n\n\n\n<li>Keep multiple versions of files without doubling storage needs<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3. Dynamic Stripe Sizes[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=659\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=659\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Unlike hardware RAID, ZFS can adjust stripe size on the fly<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">ZFS Encryption:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=660\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=660\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Setting Up Encryption[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=661\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=661\">edit source<\/a>]<\/h3>\n\n\n\n<p>You have two choices:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Pool-wide encryption<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Everything in the pool is encrypted, or<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Dataset-level encryption<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Encrypt only specific datasets<\/li>\n\n\n\n<li>Different keys for different datasets<\/li>\n\n\n\n<li>More confusing, not necessary IMO here.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE<\/strong>: If you\u2019re encrypting a pool for home use, pool-wide encryption is usually the way to go. Keep it simple unless you have a specific reason not to.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">What\u2019s a ZFS Pool?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=662\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=662\">edit source<\/a>]<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Traditional setup: Disk \u2192 Partition \u2192 Filesystem<\/li>\n\n\n\n<li>ZFS setup: Disks \u2192 Pool \u2192 Datasets<\/li>\n<\/ul>\n\n\n\n<p>The pool:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Manages all your physical drives<\/li>\n\n\n\n<li>Handles redundancy (like RAID)<\/li>\n\n\n\n<li>Provides a storage \u201cpool\u201d that datasets can use<\/li>\n<\/ul>\n\n\n\n<p>It\u2019s like having a fish pond (the pool) that different fish (datasets) can draw from, rather than a different water tank for each koi fishy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Understanding ZFS Redundancy[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=663\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=663\">edit source<\/a>]<\/h2>\n\n\n\n<p>ZFS has built-in redundancy options that are similar to RAID but better implemented. Here are the main types. You choose what works for you:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mirror (Similar to RAID 1)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=664\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=664\">edit source<\/a>]<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">Disk 1 \u2500\u2500\u2500\u2510\n         \u251c\u2500\u2500 Identical copies\nDisk 2 \u2500\u2500\u2500\u2518<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Writes data to multiple disks<\/li>\n\n\n\n<li>Can lose any disk and still work<\/li>\n\n\n\n<li>50% storage efficiency (2 drives = 1 drive\u2019s worth of storage)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">RAIDZ1 (Similar to RAID 5)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=665\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=665\">edit source<\/a>]<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">Disk 1 \u2500\u2500\u2500\u2510\nDisk 2 \u2500\u2500\u2500\u253c\u2500\u2500 Distributed data + parity\nDisk 3 \u2500\u2500\u2500\u2518<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Can lose one drive<\/li>\n\n\n\n<li>~67-75% storage efficiency<\/li>\n\n\n\n<li>Minimum 3 drives needed<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">RAIDZ2 (Similar to RAID 6)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=666\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=666\">edit source<\/a>]<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">Disk 1 \u2500\u2500\u2500\u2510\nDisk 2 \u2500\u2500\u2500\u2524\nDisk 3 \u2500\u2500\u2500\u253c\u2500\u2500 Distributed data + double parity\nDisk 4 \u2500\u2500\u2500\u2524\nDisk 5 \u2500\u2500\u2500\u2518<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Can lose ANY two drives<\/li>\n\n\n\n<li>~60-80% storage efficiency<\/li>\n\n\n\n<li>Minimum 4 drives needed<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Key Differences from Hardware RAID:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=667\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=667\">edit source<\/a>]<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>No RAID controller needed<\/strong><\/li>\n\n\n\n<li><strong>Self-healing<\/strong>\n<ul class=\"wp-block-list\">\n<li>Detects &amp; fixes corruption automatically<\/li>\n\n\n\n<li>Hardware RAID only handles drive failures though.<\/li>\n\n\n\n<li>ZFS handles drive failures AND data corruption!<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>HINT<\/strong>:&nbsp;<strong>ZFS IS NOT A BACKUP!<\/strong>&nbsp;ZFS redundancy protects against drive failures, but it\u2019s NOT a backup. If you accidentally delete a file or your server dies in a fire, redundancy won\u2019t help you. This is PART of a proper backup solution, it is not in &amp; of itself THE backup solution! Always have proper backups!<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Choose Hard Drives That Won\u2019t Send you to&nbsp;<a href=\"https:\/\/rossmanngroup.com\/hard-drive-data-recovery-service\/\">Rossmann Data Recovery<\/a>&nbsp;using&nbsp;<a href=\"https:\/\/www.backblaze.com\/cloud-storage\/resources\/hard-drive-test-data\">Backblaze Data<\/a>[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=668\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=668\">edit source<\/a>]<\/h2>\n\n\n\n<p>If you spend nine hours setting this server up only to put your data on a Seagate rosewood, I will come through your television like Samara from the ring and pull you down a well. You could either<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>trust&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=qZCMislL6_I&amp;t=49s\">amazon reviews<\/a>.<\/li>\n\n\n\n<li>use data from a company that runs over 260,000 hard drives &amp; publishes their failure rates quarterly<\/li>\n\n\n\n<li>Use a seagate EXOS or rosewood<\/li>\n<\/ol>\n\n\n\n<p>In order of bad ideas, C, A, then B. We will be doing B.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Find Backblaze\u2019s Drive Stats&nbsp;<a href=\"https:\/\/www.backblaze.com\/cloud-storage\/resources\/hard-drive-test-data\">here<\/a>[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=669\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=669\">edit source<\/a>]<\/h3>\n\n\n\n<p>When Backblaze publishes failure rates, they\u2019re telling you what drives cost them money to replace. They don\u2019t care which manufacturer looks good. They are honest about which drives are trash, they run them 24\/7 in actual mission-critical server environments.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tips for reading their reports:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=670\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=670\">edit source<\/a>]<\/h3>\n\n\n\n<p>When you look at their quarterly reports, focus on:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Annualized Failure Rate (AFR)<\/strong>\n<ul class=\"wp-block-list\">\n<li>Under 1% = Great<\/li>\n\n\n\n<li>1-2% = Acceptable<\/li>\n\n\n\n<li>Over 2% = No.<\/li>\n\n\n\n<li>Over 3% = Probably a seagate rosewood or grenada, you might as well be giving your data to a&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=qFVwQCFhKSE\">NYS tax collector<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Drive Age &amp; Sample Size<\/strong>\n<ul class=\"wp-block-list\">\n<li>A 0% failure rate is useless if they only have 10 drives, Look for models with 1,000+ samples<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_a8d16e37.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/index.php?title=Special:Upload&amp;wpDestFile=Lu67917r1ezu_tmp_5c0f8fea.png\">File:Lu67917r1ezu tmp 5c0f8fea.png<\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pay attention to how long they\u2019ve been using the drive you\u2019re looking at.<\/li>\n<\/ul>\n\n\n\n<p><strong>Remember: The goal isn\u2019t to spend five hours figuring out what drives are the best, it\u2019s to spend a few minutes to learn which are the worst. A 0.32% vs 0.34% failure rate difference doesn\u2019t matter, a 0.32% to 3.2% difference is what we\u2019re looking to avoid.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1.5: Label your drive bays as you plug them in.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=671\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=671\">edit source<\/a>]<\/h2>\n\n\n\n<p>I like to put the serial number of the drive on my bays, or if not possible to do this without blocking airflow, on the bottom or top of the case in-line with the drive bay. This way if I need to take a drive out I don\u2019t have to guess which is which.<\/p>\n\n\n\n<p>The&nbsp;<em><a href=\"https:\/\/www.rosewill.com\/rosewill-rsv-l4412u-black\/p\/9SIA072GJ92847?seoLink=server-components&amp;seoName=Server%20Chassis\">Rosewill RSV-L4412U server case<\/a><\/em>&nbsp;is a very nice case for this purpose.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_49d72764.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_1f3f2e5c.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Installing ZFS on Ubuntu Server[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=672\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=672\">edit source<\/a>]<\/h2>\n\n\n\n<p>We are setting up ZFS on our host system that all of our virtual machines are running on, which is&nbsp;<code>happycloud.home.arpa<\/code>&nbsp;at&nbsp;<code>192.168.5.2<\/code>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 Update System Packages[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=673\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=673\">edit source<\/a>]<\/h4>\n\n\n\n<p>First, make sure your system is up to date:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update &amp;&amp; sudo apt upgrade -y<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 Install ZFS &amp; Drive Monitoring Packages[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=674\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=674\">edit source<\/a>]<\/h4>\n\n\n\n<p>Install the ZFS utilities:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install zfsutils-linux smartmontools -y<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 Load ZFS Kernel Module[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=675\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=675\">edit source<\/a>]<\/h4>\n\n\n\n<p>ZFS should load automatically, but make sure it\u2019s loaded:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">lsmod | grep zfs<\/pre>\n\n\n\n<p>If you don\u2019t see output, load it manually:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo modprobe zfs<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.4 Configure System for ZFS[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=676\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=676\">edit source<\/a>]<\/h4>\n\n\n\n<p><strong>Adjust ARC (Adaptive Replacement Cache) Size:<\/strong><\/p>\n\n\n\n<p>Create a new sysctl configuration file:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo nano \/etc\/sysctl.d\/10-zfs.conf<\/pre>\n\n\n\n<p>Add these lines to limit ZFS memory usage to 50% of RAM:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># ZFS Maximum ARC Size (50% of RAM)\nvm.swappiness=1\nvm.min_free_kbytes=1524288\nvm.watermark_scale_factor=200<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.5 Apply Sysctl Settings[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=677\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=677\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo sysctl -p \/etc\/sysctl.d\/10-zfs.conf<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.6. Set Up Automatic Module Loading[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=678\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=678\">edit source<\/a>]<\/h4>\n\n\n\n<p>Create a new file to make sure ZFS loads at boot:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo nano \/etc\/modules-load.d\/zfs.conf<\/pre>\n\n\n\n<p>Add this line:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">zfs<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.7 Make Sure Install Worked[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=679\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=679\">edit source<\/a>]<\/h4>\n\n\n\n<p>Run a quick check of ZFS commands:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Check ZFS command availability\nzfs list\nzpool list\n\n# Both commands should work (though they'll show no pools yet)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Best Practices:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=680\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=680\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Set&nbsp;<code>vm.swappiness=1<\/code>&nbsp;(use swap only when necessary)<\/li>\n\n\n\n<li>Keep around 1 gigabyte of RAM per 1TB storage for basic usage<\/li>\n\n\n\n<li>Use separate boot drive from ZFS pool<\/li>\n\n\n\n<li>Set up notifications if something dies (we\u2019ll cover this later)<\/li>\n\n\n\n<li>Plan regular scrub schedule<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Identify Your Hard Drives in Ubuntu Server[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=681\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=681\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Quick Commands to List Drives[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=682\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=682\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">3.1 List Basic Drive Info[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=683\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=683\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">lsblk<\/pre>\n\n\n\n<p>Example output:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">louis@happycloud:~$ lsblk\nNAME                             MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS\nsda                                8:0    0 232.9G  0 disk  \n\u251c\u2500sda1                             8:1    0   512M  0 part  \n\u251c\u2500sda2                             8:2    0     1G  0 part  \n\u2502 \u2514\u2500md127                          9:127  0  1022M  0 raid1 \/boot\n\u2514\u2500sda3                             8:3    0 231.4G  0 part  \n  \u2514\u2500md126                          9:126  0 231.3G  0 raid1 \n    \u2514\u2500dm_crypt-0                 252:0    0 231.2G  0 crypt \n      \u2514\u2500ubuntuinstall-ubunturoot 252:1    0 231.2G  0 lvm   \/\nsdb                                8:16   0   7.3T  0 disk  \nsdc                                8:32   0 232.9G  0 disk  \n\u251c\u2500sdc1                             8:33   0   512M  0 part  \/boot\/efi\n\u251c\u2500sdc2                             8:34   0     1G  0 part  \n\u2502 \u2514\u2500md127                          9:127  0  1022M  0 raid1 \/boot\n\u2514\u2500sdc3                             8:35   0 231.4G  0 part  \n  \u2514\u2500md126                          9:126  0 231.3G  0 raid1 \n    \u2514\u2500dm_crypt-0                 252:0    0 231.2G  0 crypt \n      \u2514\u2500ubuntuinstall-ubunturoot 252:1    0 231.2G  0 lvm   \/\nsdd                                8:48   0   7.3T  0 disk  \nsde                                8:64   0   7.3T  0 disk  \nsdf                                8:80   0   7.3T  0 disk  \nsdg                                8:96   0   7.3T  0 disk  \nsdh                                8:112  0   7.3T  0 disk  <\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3.2 Show More Detailed Info (including serial numbers)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=684\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=684\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">lsblk -o NAME,SIZE,MODEL,SERIAL<\/pre>\n\n\n\n<p>Example output:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">louis@happycloud:~$ lsblk -o NAME,SIZE,MODEL,SERIAL\nNAME                               SIZE MODEL            SERIAL\nsda                              232.9G Samsung SSD 870  S61VNJ0R413909T\n\u251c\u2500sda1                             512M                  \n\u251c\u2500sda2                               1G                  \n\u2502 \u2514\u2500md127                         1022M                  \n\u2514\u2500sda3                           231.4G                  \n  \u2514\u2500md126                        231.3G                  \n    \u2514\u2500dm_crypt-0                 231.2G                  \n      \u2514\u2500ubuntuinstall-ubunturoot 231.2G                  \nsdb                                7.3T ST8000VN004-2M21 WSD5720G\nsdc                              232.9G Samsung SSD 870  S61VNG0NC09403N\n\u251c\u2500sdc1                             512M                  \n\u251c\u2500sdc2                               1G                  \n\u2502 \u2514\u2500md127                         1022M                  \n\u2514\u2500sdc3                           231.4G                  \n  \u2514\u2500md126                        231.3G                  \n    \u2514\u2500dm_crypt-0                 231.2G                  \n      \u2514\u2500ubuntuinstall-ubunturoot 231.2G                  \nsdd                                7.3T ST8000VN004-2M21 WSD5725W\nsde                                7.3T WDC WD80EFZX-68U VKJ28YJX\nsdf                                7.3T WDC WD80EFZX-68U VKJ02D0X\nsdg                                7.3T WDC WD80EFZX-68U VKHZVJ7X\nsdh                                7.3T WDC WD80EFZX-68U VKJ1N8KX\nlouis@happycloud:~$ \n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3.3 Check Drive Health and Additional Info[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=685\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=685\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">louis@happycloud:~$ sudo smartctl -i \/dev\/sdd\nsmartctl 7.4 2023-08-01 r5530 [x86_64-linux-6.8.0-47-generic] (local build)\nCopyright (C) 2002-23, Bruce Allen, Christian Franke, www.smartmontools.org\n\n=== START OF INFORMATION SECTION ===\nModel Family:     Seagate IronWolf\nDevice Model:     ST8000VN004-2M2101\nSerial Number:    WSD5725W\nLU WWN Device Id: 5 000c50 0e3407989\nFirmware Version: SC60\nUser Capacity:    8,001,563,222,016 bytes [8.00 TB]\nSector Sizes:     512 bytes logical, 4096 bytes physical\nRotation Rate:    7200 rpm\nForm Factor:      3.5 inches\nDevice is:        In smartctl database 7.3\/5528\nATA Version is:   ACS-4 (minor revision not indicated)\nSATA Version is:  SATA 3.3, 6.0 Gb\/s (current: 6.0 Gb\/s)\nLocal Time is:    Wed Oct 23 21:10:14 2024 UTC\nSMART support is: Available - device has SMART capability.\nSMART support is: Enabled\n\nlouis@happycloud:~$ sudo smartctl -a \/dev\/sdd | grep -E 'Command_Timeout|Error_Rate';     echo \"\"; \n  1 Raw_Read_Error_Rate     0x000f   074   064   044    Pre-fail  Always       -       26263737\n  7 Seek_Error_Rate         0x000f   089   060   045    Pre-fail  Always       -       766811756\n188 Command_Timeout         0x0032   100   100   000    Old_age   Always       -       0<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>HINT<\/strong>: Write down the serial numbers of your drives and which ports they\u2019re connected to. If a drive fails, you\u2019ll want to know exactly which physical drive to replace.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">3.4 Understanding the Output:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=686\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=686\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In this case,&nbsp;<code>\/dev\/sda<\/code>&nbsp;and&nbsp;<code>\/dev\/sdc<\/code>&nbsp;are the two SSDs that comprise the RAID 1 array that Ubuntu Linux Server is installed on.<\/li>\n\n\n\n<li><code>sdb<\/code>,&nbsp;<code>sdd<\/code>,&nbsp;<code>sde<\/code>,&nbsp;<code>sdf<\/code>, and&nbsp;<code>sdg<\/code>&nbsp;are the hard drives we plugged in.<\/li>\n\n\n\n<li>The letters go in order of how they\u2019re connected to the motherboard (sometimes).<\/li>\n\n\n\n<li>Numbers after letters (like&nbsp;<code>sda1<\/code>) represent partitions<\/li>\n<\/ul>\n\n\n\n<p>Now you know which drive is which, so let\u2019s set up a ZFS pool.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Creating an Encrypted ZFS Pool with Single-Drive Redundancy[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=687\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=687\">edit source<\/a>]<\/h2>\n\n\n\n<p><strong>What We\u2019re Setting Up<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>6 drives in a RAIDZ2 configuration (similar to RAID6)<\/li>\n\n\n\n<li>Full encryption with password<\/li>\n\n\n\n<li>Two drives worth of redundancy<\/li>\n\n\n\n<li>Ability to survive one drive failure<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4.1 Verify Our Drives[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=688\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=688\">edit source<\/a>]<\/h3>\n\n\n\n<p>First, let\u2019s double-check we\u2019re using the right drives:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">lsblk -o NAME,SIZE,MODEL,SERIAL<\/pre>\n\n\n\n<p>You should see your two operating system drives listed, and the six hard drives we plugged in. Let\u2019s make absolutely sure they\u2019re empty:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Check if drives have any existing partitions\nsudo fdisk -l \/dev\/sd[bdefgh]<\/pre>\n\n\n\n<p>If you see any partitions, you might want to clear them:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Only run these if you're SURE these are the right drives\n# THIS WILL ERASE ALL DATA ON THESE DRIVES\nsudo wipefs -a \/dev\/sdb\nsudo wipefs -a \/dev\/sdd\nsudo wipefs -a \/dev\/sde\nsudo wipefs -a \/dev\/sdf\nsudo wipefs -a \/dev\/sdg\nsudo wipefs -a \/dev\/sdh<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4.2 Create the Encrypted Pool[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=689\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=689\">edit source<\/a>]<\/h4>\n\n\n\n<p>We\u2019ll create a RAIDZ2 pool (similar to RAID6) with encryption:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo zpool create -o ashift=12 \n   -O encryption=aes-256-gcm \n   -O keylocation=prompt \n   -O keyformat=passphrase \n   mediapool raidz2 \/dev\/sdb \/dev\/sdd \/dev\/sde \/dev\/sdf \/dev\/sdg \/dev\/sdh<\/pre>\n\n\n\n<p>What do these commands do?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>-o ashift=12<\/code>: Optimizes for 4K sector drives<\/li>\n\n\n\n<li><code>-O encryption=aes-256-gcm<\/code>: Enables strong encryption<\/li>\n\n\n\n<li><code>-O keylocation=prompt<\/code>: Tells ZFS to ask for password<\/li>\n\n\n\n<li><code>-O keyformat=passphrase<\/code>: Use a password instead of keyfile<\/li>\n\n\n\n<li><code>raidz2<\/code>: Two drive redundancy<\/li>\n\n\n\n<li><code>mediapool<\/code>: Name of your pool (can be whatever you want)<\/li>\n<\/ul>\n\n\n\n<p>You\u2019ll be prompted for a password.&nbsp;<strong>USE A STRONG PASSWORD AND DON\u2019T FORGET IT!<\/strong><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4.3 Set Good Pool Properties[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=690\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=690\">edit source<\/a>]<\/h4>\n\n\n\n<p>After creation, let\u2019s set some good default properties:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Enable compression\nsudo zfs set compression=lz4 mediapool\n\n# Disable atime updates (better performance)<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo zfs set atime=off mediapool\n\n# Set correct recordsize for general media storage\nsudo zfs set recordsize=1M mediapool<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4.4 Verify Pool Creation[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=691\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=691\">edit source<\/a>]<\/h4>\n\n\n\n<p>Check that everything is set up correctly:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Check pool status\nsudo zpool status mediapool\n\n# Check pool properties\nsudo zpool get all mediapool\n\n# Check encryption is enabled\nsudo zfs get encryption mediapool<\/pre>\n\n\n\n<p>The&nbsp;<code>zpool status<\/code>&nbsp;output should show something like:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">louis@happycloud:~$ sudo zpool status mediapool\n  pool: mediapool\n state: ONLINE\nconfig:\n\n    NAME        STATE     READ WRITE CKSUM\n    mediapool   ONLINE       0     0     0\n      raidz2-0  ONLINE       0     0     0\n        sdb     ONLINE       0     0     0\n        sdd     ONLINE       0     0     0\n        sde     ONLINE       0     0     0\n        sdf     ONLINE       0     0     0\n        sdg     ONLINE       0     0     0\n        sdh     ONLINE       0     0     0\n\nerrors: No known data errors<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4.5: Create the Datasets for your data &amp; virtual machine Backups[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=692\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=692\">edit source<\/a>]<\/h4>\n\n\n\n<p>Set permissions:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Set ownership (replace 'louis' with your actual username)\nsudo chown louis:louis \/mediapool\n\n# Set permissions (only you can access it)\nsudo chmod 700 \/mediapool<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4.6 Test Pool Import\/Export[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=693\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=693\">edit source<\/a>]<\/h4>\n\n\n\n<p>Let\u2019s make sure we can properly mount\/unmount the pool:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Export (unmount) the pool\nsudo zpool export mediapool\n\n# Import it back\nsudo zpool import mediapool<\/pre>\n\n\n\n<p>You\u2019ll have to enter the password with&nbsp;<code>sudo zfs load-key mediapool<\/code>&nbsp;in order to do anything with it, but we will do that later. You will be prompted for the password again when importing.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Important Notes[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=694\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=694\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>BACKUP YOUR POOL PASSWORD!<\/strong>\n<ul class=\"wp-block-list\">\n<li>If you lose it, your data is GONE<\/li>\n\n\n\n<li>Store it in a password manager (that you don\u2019t self-host)<\/li>\n\n\n\n<li>Consider a paper backup in a secure location that is not a post-it-note on your monitor.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Space Available<\/strong>\n<ul class=\"wp-block-list\">\n<li>Total raw capacity: 6 \u00d7 8TB = 48TB<\/li>\n\n\n\n<li>RAIDZ2 uses 2 drives for parity, so you lose 2 drives worth of capacity<\/li>\n\n\n\n<li>Usable space is 4 \u00d7 8TB = 32TB<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>What Redundancy Gives You<\/strong>\n<ul class=\"wp-block-list\">\n<li>Can survive one drive failure<\/li>\n\n\n\n<li>Can survive two drive failures<\/li>\n\n\n\n<li><strong>Not a backup! Still need proper backups<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Setting Up ZFS Pool Mount Points and Permissions[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=695\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=695\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">5.1 Creating the Base Dataset Structure[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=696\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=696\">edit source<\/a>]<\/h4>\n\n\n\n<p>First, let\u2019s create our main dataset and its subdirectories:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Load the encryption key so we can work:\nsudo zfs load-key mediapool\n\n# Create mount points if they don't exist\n\n# Create the virtual machine backup dataset where we'll store VM images\nsudo zfs create -o mountpoint=\/mediapool\/vmbackups mediapool\/vmbackups\n\n# Create the storage backup dataset where we'll store Linux ISOs and cooking recipes\nsudo zfs create -o mountpoint=\/mediapool\/archive mediapool\/archive<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">5.2 Setting Permissions for Regular User Access[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=697\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=697\">edit source<\/a>]<\/h4>\n\n\n\n<p>Set ownership for the main archive directory:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Set ownership of the main archive directory to louis\nsudo chown louis:louis \/mediapool\/archive\n\n# Set base permissions (rwx for owner, rx for group and others)\nsudo chmod 755 \/mediapool\/archive<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">5.3 Securing vmbackups Directory for Root Only[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=698\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=698\">edit source<\/a>]<\/h4>\n\n\n\n<p>Set restricted permissions on the vmbackups directory:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Set vmbackups to be owned by root\nsudo chown root:root \/mediapool\/vmbackups\n\n# Set permissions to allow only root access (rwx for root, none for others)\nsudo chmod 700 \/mediapool\/vmbackups<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">5.4 Verify the Settings[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=699\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=699\">edit source<\/a>]<\/h4>\n\n\n\n<p>Check that everything is set correctly:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Check ZFS mountpoints\nzfs get mountpoint mediapool\/archive\nzfs get mountpoint mediapool\/vmbackups\n\n# Check permissions\nls -la \/mediapool\/archive\nls -la \/mediapool\/vmbackups\n\n# Verify dataset properties\nzfs get all mediapool\/archive\nzfs get all mediapool\/vmbackups<\/pre>\n\n\n\n<p>Expected output for permissions check, note that user&nbsp;<code>louis<\/code>&nbsp;cannot list the&nbsp;<code>vmbackups<\/code>&nbsp;directory without sudo.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">louis@happycloud:~$ zfs get mountpoint mediapool\/archive\nNAME               PROPERTY    VALUE               SOURCE\nmediapool\/archive  mountpoint  \/mediapool\/archive  local\n\nlouis@happycloud:~$ zfs get mountpoint mediapool\/vmbackups\nNAME                 PROPERTY    VALUE                 SOURCE\nmediapool\/vmbackups  mountpoint  \/mediapool\/vmbackups  local\n\nlouis@happycloud:~$ ls -la \/mediapool\/archive\ntotal 21\ndrwxr-xr-x 2 louis louis    2 Oct 23 21:45 .\ndrwxr-xr-x 4 root  root  4096 Oct 23 21:45 ..\n\nlouis@happycloud:~$ ls -la \/mediapool\/vmbackups\nls: cannot open directory '\/mediapool\/vmbackups': Permission denied\n\nlouis@happycloud:~$ sudo ls -la \/mediapool\/vmbackups\ntotal 21\ndrwx------ 2 root root    2 Oct 23 21:44 .\ndrwxr-xr-x 4 root root 4096 Oct 23 21:45 ..\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">5.5 Test Access[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=700\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=700\">edit source<\/a>]<\/h4>\n\n\n\n<p>Test the permissions are working:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>As user \u2018louis\u2019:# Should work touch \/mediapool\/archive\/testfile # Should fail touch \/mediapool\/vmbackups\/testfile<\/li>\n\n\n\n<li>As root:# Should work sudo touch \/mediapool\/vmbackups\/testfile<\/li>\n<\/ol>\n\n\n\n<p>If any of these tests don\u2019t work as expected, double-check the permissions and ownership settings above.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">5.6 frigate camera footage storage[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=701\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=701\">edit source<\/a>]<\/h4>\n\n\n\n<p>Earlier in the guide, we set up&nbsp;<strong>frigate<\/strong>&nbsp;for recording security camera footage. We left it recording to the frigate installation folder.&nbsp;<strong>This is bad. Recording to the main solid state drive is a waste of space &amp; SSD life.<\/strong><\/p>\n\n\n\n<p>Archived camera footage belongs on a giant hard drive, not an expensive SSD. If you\u2019d like, you can now go back to the frigate config section and change these two lines:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">      - .\/storage:\/media\/frigate\n      - .\/database:\/data\/db<\/pre>\n\n\n\n<p>to something like:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">      - .\/storage:\/mediapool\/archive\/camerafootage\/media\/frigate\n      - .\/database:\/mediapool\/archive\/camerafootage\/data\/db<\/pre>\n\n\n\n<p>Of course, make the directories first:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mkdir -p \/mediapool\/archive\/camerafootage\/data\/db\nmkdir -p \/mediapool\/archive\/camerafootage\/media\/frigate<\/pre>\n\n\n\n<p>If you want to keep things separate, you could create a third dataset called&nbsp;<code>camerafootage<\/code>, mount it to&nbsp;<code>\/mediapool\/camerafootage<\/code>, and then edit the&nbsp;<code>docker-compose.yml<\/code>&nbsp;file to look like this:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">      - .\/storage:\/mediapool\/camerafootage\/media\/frigate\n      - .\/database:\/mediapool\/camerafootage\/data\/db<\/pre>\n\n\n\n<p>And make sure the directories have been created before running frigate:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mkdir -p \/mediapool\/camerafootage\/data\/db\nmkdir -p \/mediapool\/camerafootage\/media\/frigate<\/pre>\n\n\n\n<p>The full file is provided below, with the assumption that you decided to make a&nbsp;<code>camerafootage<\/code>&nbsp;dataset that is mounted on&nbsp;<code>\/mediapool\/camerafootage<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">version: \"3.9\"\nservices:\n  frigate:\n    container_name: frigate\n    privileged: true # This may not be necessary for all setups\n    restart: unless-stopped\n    image: ghcr.io\/blakeblackshear\/frigate:0.13.2 # Last good version\n    shm_size: \"64mb\" # Update for your cameras based on requirements\n    devices:\n      - \/dev\/bus\/usb:\/dev\/bus\/usb # USB Coral, modify for other hardware\n      - \/dev\/apex_0:\/dev\/apex_0 # PCIe Coral, modify based on your setup\n      - \/dev\/video11:\/dev\/video11 # For Raspberry Pi 4B\n      - \/dev\/dri\/renderD128:\/dev\/dri\/renderD128 # Intel hwaccel, update for your hardware\n    volumes:\n      - \/etc\/localtime:\/etc\/localtime:ro\n      - .\/config:\/config\n      - .\/storage:\/mediapool\/camerafootage\/media\/frigate # Changed media directory to ZFS pool\n      - .\/database:\/mediapool\/camerafootage\/data\/db # Changed database directory to ZFS pool\n      - type: tmpfs # Optional: Reduces SSD wear\n        target: \/tmp\/cache\n        tmpfs:\n          size: 1000000000\n    ports:\n      - \"8971:8971\"\n      - \"5000:5000\" # Internal unauthenticated access. Be careful with exposure.\n      - \"8554:8554\" # RTSP feeds\n      - \"8555:8555\/tcp\" # WebRTC over TCP\n      - \"8555:8555\/udp\" # WebRTC over UDP\n    environment:\n      FRIGATE_RTSP_PASSWORD: \"password\"<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Setting Up Samba to Share ZFS Pool Directories[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=702\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=702\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">6.1 Installing Samba[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=703\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=703\">edit source<\/a>]<\/h4>\n\n\n\n<p>First, let\u2019s install Samba and its utilities:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Update package list\nsudo apt update\n\n# Install Samba packages\nsudo apt install samba samba-common-bin -y<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">6.2 Backup Original Samba Config[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=704\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=704\">edit source<\/a>]<\/h4>\n\n\n\n<p>Always backup before making changes:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo cp \/etc\/samba\/smb.conf \/etc\/samba\/smb.conf.backup<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">6.3 Configure Samba Share[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=705\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=705\">edit source<\/a>]<\/h4>\n\n\n\n<p>Create a new Samba configuration:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Clear existing config (but keep our backup)\nsudo bash -c 'echo \"\" &gt; \/etc\/samba\/smb.conf'\n\n# Edit the config file\nsudo nano \/etc\/samba\/smb.conf<\/pre>\n\n\n\n<p>Add this configuration to&nbsp;<code>smb.conf<\/code>, and change the&nbsp;<code>realm<\/code>&nbsp;to the domain you chose in&nbsp;<code>pfsense<\/code>&nbsp;under&nbsp;<code>system ---&gt; general setup<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[global]\n    # Network settings\n    workgroup = HOME\n    realm = home.arpa\n    netbios name = happycloud\n    server string = ZFS Archive Server\n    dns proxy = no\n    \n    # Security settings\n    security = user\n    map to guest = bad user\n    server signing = auto\n    client signing = auto\n    \n    # Logging\n    log level = 1\n    log file = \/var\/log\/samba\/%m.log\n    max log size = 1000\n    \n    # Performance optimization\n    socket options = TCP_NODELAY IPTOS_LOWDELAY\n    read raw = yes\n    write raw = yes\n    use sendfile = yes\n    min receivefile size = 16384\n    aio read size = 16384\n    aio write size = 16384\n    \n    # Multichannel support\n    server multi channel support = yes\n    \n    # Disable unused services\n    load printers = no\n    printing = bsd\n    printcap name = \/dev\/null\n    disable spoolss = yes\n    \n    # Character\/Unix settings\n    unix charset = UTF-8\n    dos charset = CP932<\/pre>\n\n\n<p>[archive]<\/p>\n\n\n\n<p>comment = ZFS Archive Share path = \/mediapool\/archive valid users = louis invalid users = root browseable = yes read only = no writable = yes create mask = 0644 force create mode = 0644 directory mask = 0755 force directory mode = 0755 force user = louis force group = louis veto files = \/._*\/.DS_Store\/.Thumbs.db\/.Trashes\/ delete veto files = yes follow symlinks = yes wide links = yes ea support = yes inherit acls = yes hide unreadable = yes<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">6.4 Verify Samba Configuration[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=706\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=706\">edit source<\/a>]<\/h4>\n\n\n\n<p>Check if your config is valid:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">testparm<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">6.5 Create Samba User[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=707\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=707\">edit source<\/a>]<\/h4>\n\n\n\n<p>Add your GNU\/Linux user to Samba and set a password:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Add Samba password for user 'louis'\nsudo smbpasswd -a louis\n\n# Enable the user\nsudo smbpasswd -e louis<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">6.6 Start and Enable Samba[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=708\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=708\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\"># Restart Samba services\nsudo systemctl restart smbd\nsudo systemctl restart nmbd\n\n# Enable them to start at boot\nsudo systemctl enable smbd\nsudo systemctl enable nmbd<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7: Connecting to your Samba Share[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=709\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=709\">edit source<\/a>]<\/h2>\n\n\n\n<p>What\u2019s the point of this if we can\u2019t access it from other systems?<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Windows Systems[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=710\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=710\">edit source<\/a>]<\/h4>\n\n\n\n<p>Connect using one of the following in the address bar of Windows Explorer:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>\\\\happycloud.home.arpa\\archive<\/code><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">GNU\/Linux Systems[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=711\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=711\">edit source<\/a>]<\/h4>\n\n\n\n<p>Connect in a file manager like Thunar (my personal favorite) by putting this in the address bar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>smb:\/\/happycloud.home.arpa\/archive<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>File Manager Navigation:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Press&nbsp;<code>Ctrl+L<\/code>&nbsp;to open location bar<\/li>\n\n\n\n<li>Enter the SMB URL<\/li>\n\n\n\n<li>Enter credentials when prompted<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">macOS Systems[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=712\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=712\">edit source<\/a>]<\/h4>\n\n\n\n<p>Connect using Finder by selecting&nbsp;<code>Go<\/code>&nbsp;&gt;&nbsp;<code>Connect to Server<\/code>&nbsp;and entering the SMB URL.<\/p>\n\n\n\n<p>Connect using:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>smb:\/\/happycloud.home.arpa\/archive<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>Finder Navigation:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Press&nbsp;<code>Cmd+K<\/code><\/li>\n\n\n\n<li>Enter the SMB URL<\/li>\n\n\n\n<li>Click \u2018Connect\u2019<\/li>\n\n\n\n<li>Enter credentials when prompted<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Mounting from Command Line (GNU\/Linux)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=713\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=713\">edit source<\/a>]<\/h4>\n\n\n\n<p>If you want the share to show up as if it were just another directory on your system, you could do this:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Create mount point\nmkdir -p ~\/archive\n\n# Mount by entering credentials when prompted\nsudo mount -t cifs \/\/happycloud.home.arpa\/archive ~\/archive -o username=louis,uid=1000,gid=1000,vers=3.1.1,seal\n\n# Check that the `testfile` we made earlier shows up here. If you see the following, congratulations, you did not mess it up!!\n\n[louis@studiobauer ~]$ ls -la ~\/archive\ntotal 13\ndrwxr-xr-x  2 louis louis     0 Oct 23 18:11 .\ndrwx------ 48 louis louis 12288 Oct 23 18:14 ..\n-rwxr-xr-x  1 louis louis     0 Oct 23 18:11 testfile<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>HINT<\/strong>: If you can\u2019t connect via VPN, try from local network first. If that works, then troubleshoot VPN\/remote access issues afterwards.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Security Notes[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=714\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=714\">edit source<\/a>]<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>The share is only accessible to authenticated users<\/li>\n\n\n\n<li>Files created will be owned by \u2018louis\u2019<\/li>\n\n\n\n<li>The VMBackups directory remains inaccessible (root only)<\/li>\n\n\n\n<li>Password is stored separately from system password<\/li>\n\n\n\n<li>All traffic is unencrypted &#8211; use VPN for remote access!<\/li>\n<\/ol>\n\n\n\n<p>Now you should be able to access your ZFS pool\u2019s archive directory from any device on your network, with proper authentication as user \u2018louis\u2019.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Step 7: Backing up virtual machines[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=715\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=715\">edit source<\/a>]<\/h1>\n\n\n\n<p>Now that we have a giant storage array that will continue working even in the event of multiple drive deaths, we can set up our virtual machines to back up regularly. This way, if we destroy one with idiocy, or if it becomes corrupt, we can restore it instantly to what it was like before the mess happened.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">7.1 Backup script creation:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=716\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=716\">edit source<\/a>]<\/h4>\n\n\n\n<p>This script below will allow you to have your virtual machines backed up automatically. It does the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Shuts down the virtual machine<\/li>\n\n\n\n<li>Copies its disk image qcow2 file to the&nbsp;<code>\/mediapool\/vmbackups<\/code>&nbsp;zfs dataset<\/li>\n\n\n\n<li>Copies its configuration so it can be set up again<\/li>\n\n\n\n<li>Keeps five backups but deletes the oldest ones after you have five.<\/li>\n<\/ul>\n\n\n\n<p>This means the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You can mess things up by deleting files you weren\u2019t supposed to, mess up configurations and programs, and restore everything to where it was last week with one or two kindergarten level GNU\/Linux commands.<\/li>\n\n\n\n<li>You can migrate this to another computer entirely &amp; start the virtual machine up there.<\/li>\n<\/ul>\n\n\n\n<p>shuts each virtual machine down one by one, backs up the virtual<\/p>\n\n\n\n<p>Save this as&nbsp;<code>\/root\/vm_backup.sh<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Open the text editor\nsudo nano -w \/root\/vm_backup.sh<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">#!\/bin\/bash\n\n# thank you to stack overflow for giving me the courage to wade through 100s of posts and hack together something that looks like it works. \n\n# config for backups\nBACKUP_DIR=\"\/mediapool\/vmbackups\"\nLOG_FILE=\"\/var\/log\/vm_backups.log\"\nRETENTION_DAYS=56  # how long to keep backups\n\n# Function to write messages to our log file`\nlog_message() {\n    # Get the current timestamp and message\n    echo \"[$(date '+%Y-%m-%d %H:%M:%S')] $1\" | tee -a \"$LOG_FILE\"\n}\n\n# Function to find the actual disk path for a VM when the default path doesn't exist\n# Uses virsh dumpxml to get the disk source path from the VM's XML configuration\nfind_vm_disk_path() {\n    local vm_name=$1\n    # Get the VM's XML configuration and extract the first disk source path\n    # Using grep with -o to only output the matched portion\n    # Using sed to extract just the path part from the source attribute\n    local disk_path=$(virsh dumpxml \"$vm_name\" | grep -o \"source file='[^']*'\" | head -n1 | sed \"s\/source file='\\(.*\\)'\/\\1\/\")\n    \n    # Check if we found a path and if it exists\n    if [ -n \"$disk_path\" ] &amp;&amp; [ -f \"$disk_path\" ]; then\n        echo \"$disk_path\"\n        return 0\n    else\n        return 1\n    fi\n}\n\n# main backup function \nbackup_vm() {\n    local virtual_machine_name=$1  # The name of the virtual machine we're backing up\n    local date_stamp=$(date +%Y%m%d)  # Today's date for the backup file name\n    local source_file=\"\/var\/lib\/libvirt\/images\/${virtual_machine_name}.qcow2\"  # Where the virtual machine is\n    \n    # If the default path doesn't exist, try to find the actual disk path\n    if [&nbsp;! -f \"$source_file\" ]; then\n        log_message \"Default disk path not found for ${virtual_machine_name}, searching XML configuration...\"\n        local found_path=$(find_vm_disk_path \"$virtual_machine_name\")\n        \n        # If we found a valid path, use it instead\n        if [ -n \"$found_path\" ]; then\n            log_message \"Found alternate disk path: ${found_path}\"\n            source_file=\"$found_path\"\n        fi\n    fi\n    \n    local backup_file=\"${BACKUP_DIR}\/${virtual_machine_name}-${date_stamp}.qcow2\"  # Where we're putting the backup of it\n    local config_file=\"${BACKUP_DIR}\/${virtual_machine_name}-${date_stamp}.xml\"  # Where it saves the virtual machine config\n    \n    # Check if source file exists before attempting backup\n    if [&nbsp;! -f \"$source_file\" ]; then\n        log_message \"ERROR: Source file $source_file does not exist for ${virtual_machine_name}\"\n        return 1\n    fi\n    \n    # Announce backup is starting\n    log_message \"Starting backup process for ${virtual_machine_name}\"\n    \n    # Save virtual machine's config\n    virsh dumpxml \"$virtual_machine_name\" &gt; \"$config_file\"\n    \n    # Set ownership and permissions for config file\n    chown libvirt-qemu:kvm \"$config_file\"\n    chmod 644 \"$config_file\"\n\n    # Try to shut down the virtual machine nicely \n    log_message \"Shutting down ${virtual_machine_name}\"\n    virsh shutdown \"$virtual_machine_name\"\n    \n    # Wait patiently for the virtual machine to shut down \n    local count=0\n    while [ \"$(virsh domstate $virtual_machine_name)\"&nbsp;!= \"shut off\" ] &amp;&amp; [ $count -lt 30 ]; do\n        sleep 10\n        count=$((count + 1))\n    done\n    \n    # If it doesn't turn off, make it turn off(like holding the power button)\n    if [ \"$(virsh domstate $virtual_machine_name)\"&nbsp;!= \"shut off\" ]; then\n        log_message \"WARNING: Force shutting down ${virtual_machine_name}\"\n        virsh destroy \"$virtual_machine_name\"\n        sleep 10\n    fi\n    \n    # Make sure it's actually off - trust but verify\n    if [ \"$(virsh domstate $virtual_machine_name)\"&nbsp;!= \"shut off\" ]; then\n        log_message \"ERROR: Failed to shut down ${virtual_machine_name}\"\n        return 1\n    fi\n    \n    # Create the backup - doesn't use compression since qemu-img convert compression is single threaded and insanely slow\n    log_message \"Creating backup of ${virtual_machine_name}\"\n    if&nbsp;! qemu-img convert -p -f qcow2 -O qcow2 \"$source_file\" \"$backup_file\"; then\n        log_message \"ERROR: Backup failed for ${virtual_machine_name}\"\n        virsh start \"$virtual_machine_name\"\n        return 1\n    fi\n    \n    # Set ownership and permissions for backup file\n    chown libvirt-qemu:kvm \"$backup_file\"\n    chmod 644 \"$backup_file\"\n\n    # Make sure the backup isn't insanely small since that means this didn't work\n    # Fixed stat command for Linux systems\n    local source_size=$(stat -c%s \"$source_file\")\n    local backup_size=$(stat -c%s \"$backup_file\")\n    if [ \"$backup_size\" -lt 1048576 ]; then  # Less than 1MB is suspicious - like a $5 \"genuine\" Rolex\n        log_message \"ERROR: Backup file suspiciously small for ${virtual_machine_name}\"\n        rm -f \"$backup_file\" \"$config_file\"\n        virsh start \"$virtual_machine_name\"\n        return 1\n    fi\n    \n    # Turn virtual machine back on when backup is done. \n    log_message \"Starting ${virtual_machine_name}\"\n    virsh start \"$virtual_machine_name\"\n    \n    # Wait for it to come back online \n    count=0\n    while [ \"$(virsh domstate $virtual_machine_name)\"&nbsp;!= \"running\" ] &amp;&amp; [ $count -lt 12 ]; do\n        sleep 5\n        count=$((count + 1))\n    done\n    \n    # Make sure it actually started(inspect what you expect)\n    if [ \"$(virsh domstate $virtual_machine_name)\"&nbsp;!= \"running\" ]; then\n        log_message \"ERROR: Failed to start ${virtual_machine_name}\"\n        return 1\n    fi\n    \n    # announce that it worked\n    log_message \"Backup of ${virtual_machine_name} completed!\"\n    \n    # Clean up old backups - because nobody likes a full hard drive\n    log_message \"Cleaning up old backups for ${virtual_machine_name}\"\n    find \"$BACKUP_DIR\" -name \"${virtual_machine_name}-*.qcow2\" -mtime +${RETENTION_DAYS} -exec rm -f {} \\;  # Delete old qcow2 files\n    find \"$BACKUP_DIR\" -name \"${virtual_machine_name}-*.xml\" -mtime +${RETENTION_DAYS} -exec rm -f {} \\;   # Delete old xml files\n}\n\n# Start of the main backup process\nlog_message \"Starting backup process\"\n\n# Make sure we're running as root \nif [ \"$EUID\" -ne 0 ]; then\n    log_message \"ERROR: Must run as root\"\n    exit 1\nfi\n\n# Check if the backup directory exists \nif [&nbsp;! -d \"$BACKUP_DIR\" ]; then\n    log_message \"ERROR: Backup directory $BACKUP_DIR does not exist\"\n    exit 1\nfi\n\n# Get list of ALL virtual machines, not just running ones\n# Changed to list all VMs instead of just running ones\nVMS=($(virsh list --all --name))\n\n# Check if we have enough disk space to back up\navailable_space=$(df -B1 \"$BACKUP_DIR\" | awk 'NR==2 {print $4}')\nrequired_space=0\n\n# Calculate how much space we need\nfor virtual_machine in \"${VMS[@]}\"; do\n    if [ -n \"$virtual_machine\" ]; then\n        # Try the default path first\n        local_path=\"\/var\/lib\/libvirt\/images\/${virtual_machine}.qcow2\"\n        \n        # If default path doesn't exist, try to find actual path\n        if [&nbsp;! -f \"$local_path\" ]; then\n            local_path=$(find_vm_disk_path \"$virtual_machine\") || continue\n        fi\n        \n        if [ -f \"$local_path\" ]; then\n            virtual_machine_size=$(du -b \"$local_path\" 2&gt;\/dev\/null | cut -f1)\n            required_space=$((required_space + virtual_machine_size))\n        fi\n    fi\ndone\n\n# Make sure we have enough space \nif [ \"$available_space\" -lt \"$required_space\" ]; then\n    log_message \"ERROR: Insufficient space in backup directory\"\n    exit 1\nfi\n\n# loop for backing up every virtual machine\nfor virtual_machine in \"${VMS[@]}\"; do\n    if [ -n \"$virtual_machine\" ]; then\n        backup_vm \"$virtual_machine\"\n    fi\ndone\n\n# announce it's all done\nlog_message \"Backup process completed!\"\n<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Nerd note: This script would be laughed out of the room for use in production environments for major web companies &amp; datacenters.<\/strong>&nbsp;This script turns off the virtual machine to back it up.<\/p>\n\n\n\n<p>This means that at 1 AM, the service goes down. This would be unacceptable in a production environment where people expect the service to be available 24\/7.<\/p>\n\n\n\n<p>There are ways to do live backups where you flush mysql tables and lock them, make redis background save, pause call processing in asterisk, pause io, create atomic snapshots, coordinate with databases of all the different programs\u2026. the audience of this guide is a person running a home server in his closet. Do you really want to subject a beginner to docker volumes that may not be in a consistent state, email delivery\/receipt being interrupted, database transactionst hat are messed with in the middle fo a write, corrupt call recordings, partially written large files, all so someone can get live backups of a server in their closet, you monster?<\/p>\n\n\n\n<p>If you need that level of uptime, you\u2019re not a newbie reading this guide. or you are, and you need to hire a consultant to set you up with something like veeam.<\/p>\n\n\n\n<p>To subject a newbie to the risk of error\/corruption\/screwups that comes with doing live backups for these things when they\u2019re at the level of this guide being helpful to them is cruel.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">7.2 Set permissions so script works[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=717\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=717\">edit source<\/a>]<\/h4>\n\n\n\n<p>This won\u2019t work if we don\u2019t give it permissions to be executable.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Make script executable\nsudo chmod +x \/root\/vm_backup.sh\n\n# Test script permissions\nsudo -u root \/root\/vm_backup.sh<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">7.3 Tell computer to run script every week, at 1 AM on Sunday[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=718\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=718\">edit source<\/a>]<\/h4>\n\n\n\n<p>Cron is a scheduler. You can tell cron to run a command, a script, etc. once a week, once a month, twice a day, every 10 minutes. We\u2019re going to set this to back up at 1 AM every Sunday.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open root\u2019s crontab:sudo crontab -e<\/li>\n\n\n\n<li>Add this line:0 1 * * 0 \/root\/vm_backup.sh &gt;&gt; \/var\/log\/vm_backup.log 2&gt;&amp;1This will:<ul><li>Run at 1:00 AM every Sunday<\/li><li>Log output to&nbsp;<code>\/var\/log\/vm_backup.log<\/code><\/li><li>Include both standard output and errors in the log<\/li><li>The virtual machine will be down while the transfer occurs<\/li><\/ul>If anyone is calling Rossmann Repair Group at 1 AM on a Sunday morning, they deserve to get a busy signal. Actually they deserve allison smith telling them to get the fk out of here. but a busy signal will suffice.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">7.4 Make sure cron is running[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=719\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=719\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo systemctl status cron<\/pre>\n\n\n\n<p>View scheduled cron jobs:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo crontab -l<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 8: Restoring a virtual machine from a backup[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=720\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=720\">edit source<\/a>]<\/h2>\n\n\n\n<p>So you messed up and deleted everything inside your virtual machine. You want to go back to where you were before.<\/p>\n\n\n\n<p>Remember:<\/p>\n\n\n\n<p><strong>A BACKUP PLAN IS ONLY AS GOOD AS HOW EASY IT IS TO RESTORE FROM A BACKUP!<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Basic Restore[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=721\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=721\">edit source<\/a>]<\/h3>\n\n\n\n<p>By \u201cbasic restore\u201d I mean what to do when you messed up a program configuration or deleted files inside a virtual machine or corrupted something accidentally. You want to go back to the image of the virtual machine you had before, on the same happycloud host computer.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">8.1 Before You Start[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=722\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=722\">edit source<\/a>]<\/h4>\n\n\n\n<p>I\u2019m assuming the following is true: &#8211; Your virtual machine is already defined in Virtual Machine Manager(you see it when you run virtual machine manager GUI) &#8211; Your backups are in&nbsp;<code>\/mediapool\/vmbackups<\/code>&nbsp;&#8211; The backups were created using the qemu-img backup script I provided above &#8211; You just need to restore the virtual machine\u2019s disk because you messed up some files or programs<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">8.2 Find Your Backup[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=723\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=723\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>List available backups for your virtual machine:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">ls -l \/mediapool\/vmbackups\/name-of-your-virtual-machine-*.qcow2<\/pre>\n\n\n\n<p>You\u2019ll see files named like this: &#8211;&nbsp;<code>name-of-your-virtual-machine-20240101.qcow2<\/code>&nbsp;&#8211;&nbsp;<code>name-of-your-virtual-machine-20240108.qcow2<\/code><\/p>\n\n\n\n<p>These are the disk image files that have all of the data\/programs\/databases\/operating system.<\/p>\n\n\n\n<p>Each backup will have an XML file to go with it: &#8211;&nbsp;<code>name-of-your-virtual-machine-20240101.xml<\/code>&nbsp;&#8211;&nbsp;<code>name-of-your-virtual-machine-20240108.xml<\/code><\/p>\n\n\n\n<p>These are the files that tell virtual machine manager all of the details about your virtual machine(RAM\/CPU, hardware setup, etc.)<\/p>\n\n\n\n<p>Pick the most recent backup before you screwed something up.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Fast Restore:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=724\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=724\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Turn off the virtual machine<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"># Shut down the virtual machine gracefully\nvirsh shutdown name-of-your-virtual-machine\n\n# Wait until it's actually off. Check status with:\nvirsh list --all<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Backup Current Disk (just in case)<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"># Move the current (messed up\/broken) disk with date\nmv \/var\/lib\/libvirt\/images\/name-of-your-virtual-machine.qcow2 \/var\/lib\/libvirt\/images\/name-of-your-virtual-machine.qcow2.broken-$(date +%Y%m%d)<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Restore Backup<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"># a cool command to put the virtual machine back where it was\nqemu-img convert -p -f qcow2 -O qcow2 \/mediapool\/vmbackups\/name-of-your-virtual-machine-20240101.qcow2 \/var\/lib\/libvirt\/images\/name-of-your-virtual-machine.qcow2\n\n# set permissions so that our virtual machine management stuff can use it.\nchown libvirt-qemu:kvm \/var\/lib\/libvirt\/images\/name-of-your-virtual-machine.qcow2\nchmod 644 \/var\/lib\/libvirt\/images\/name-of-your-virtual-machine.qcow2<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Start the Virtual Machine<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">virsh start name-of-your-virtual-machine<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Check the Restore[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=725\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=725\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Watch the virtual machine console in Virtual Machine Manager to make sure it boots<\/li>\n\n\n\n<li>Try logging in when it\u2019s up<\/li>\n\n\n\n<li>Check that services(mailcow, immich, syncthing) actually work<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Complicated Restore[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=726\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=726\">edit source<\/a>]<\/h3>\n\n\n\n<p>Let\u2019s say you destroyed more. You also messed up the virtual machine\u2019s configuration in virsh. You edited the xml file for the virtual machine or messed with its settings in the&nbsp;<strong>Virtual Machine Manager<\/strong>&nbsp;GUI, and now nothing works.<\/p>\n\n\n\n<p>For a complete restore of both disk &amp; configuration:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Remove the current virtual machine:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">virsh destroy name-of-your-virtual-machine\nvirsh undefine name-of-your-virtual-machine<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Restore the Disk:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"># Convert the compressed backup to the images directory\nqemu-img convert -p -f qcow2 -O qcow2 \/mediapool\/vmbackups\/name-of-your-virtual-machine-20240101.qcow2 \/var\/lib\/libvirt\/images\/name-of-your-virtual-machine.qcow2\n\n# Fix permissions\nchown libvirt-qemu:kvm \/var\/lib\/libvirt\/images\/name-of-your-virtual-machine.qcow2\nchmod 644 \/var\/lib\/libvirt\/images\/name-of-your-virtual-machine.qcow2<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Restore the virtual machine config:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"># The backup includes the XML configuration file\nvirsh define \/mediapool\/vmbackups\/name-of-your-virtual-machine-20240101.xml<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Start the VM:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">virsh start name-of-your-virtual-machine<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Common screwups[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=727\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=727\">edit source<\/a>]<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u201cFailed to convert image\u201d<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Make sure you have enough disk space<\/li>\n\n\n\n<li>Check that the backup file isn\u2019t corrupted<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u201cFailed to start VM\u201d<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Usually permissions. Everyone is excited to realize they had a backup file whilst copying it back; in the excitement of realizing you actually HAVE a backup, nobody remembers to set permissions on the backup file.<\/li>\n\n\n\n<li>Check that the XML file matches the system config. use virtual machine manager for this to see if anything sticks out in the GUI as a stupid mistake.<\/li>\n\n\n\n<li>Verify all paths exist<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u201cCould not access storage file\u201d<\/strong>: Check paths in both:\n<ul class=\"wp-block-list\">\n<li><code>\/var\/lib\/libvirt\/images\/<\/code><\/li>\n\n\n\n<li>The virtual machine XML config<\/li>\n\n\n\n<li>Make sure permissions are right (644 for files)<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Verifying Success[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=728\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=728\">edit source<\/a>]<\/h3>\n\n\n\n<p>After restoration, verify: 1. VM boots properly 2. Network connectivity works 3. All services start correctly 4. Data and configurations are as expected 5. Check logs for any errors<\/p>\n\n\n\n<p>If something isn\u2019t right, you can always try an older backup &#8211; they\u2019re kept for 56 days.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Accessing Your Samba Share from Any Device[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=729\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=729\">edit source<\/a>]<\/h1>\n\n\n\n<p>Let\u2019s say you want to watch a GNU\/Linux ISO while you\u2019re on the go. You connect to your VPN, and you can browse your files right there. OwlFiles can play music &amp; video files right inside the application and stream them without you having to download them, for a wide variety of codecs, and it does so exceptionally well. It even gives options for hardware vs.&nbsp;software decoding of the video file in case one works better than the other for the format you\u2019re using.<\/p>\n\n\n\n<p>It\u2019s not open source, but it\u2019s the best samba client I have ever used for android.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Android Access with OwlFiles[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=730\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=730\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Install OwlFiles[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=731\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=731\">edit source<\/a>]<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open Google Play Store<\/li>\n\n\n\n<li>Search for \u201cOwlFiles\u201d<\/li>\n\n\n\n<li>Install the app (it\u2019s free!)<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">2. Configure OwlFiles for Samba Access[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=732\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=732\">edit source<\/a>]<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open OwlFiles<\/li>\n\n\n\n<li>Tap the \u201c+\u201d button in the bottom right<\/li>\n\n\n\n<li>Select \u201cNetwork Storage (SMB)\u201d<\/li>\n\n\n\n<li>Fill in the connection details:\n<ul class=\"wp-block-list\">\n<li><strong>Server<\/strong>: Your server\u2019s IP (e.g.,&nbsp;<code>192.168.5.2<\/code>)<\/li>\n\n\n\n<li><strong>Share<\/strong>:&nbsp;<code>zfsarchive<\/code><\/li>\n\n\n\n<li><strong>Username<\/strong>:&nbsp;<code>louis<\/code><\/li>\n\n\n\n<li><strong>Password<\/strong>: Your Samba password<\/li>\n\n\n\n<li><strong>Name<\/strong>: Whatever you want to call it (e.g., \u201cHome Server\u201d)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Tap \u201cTest Connection\u201d to verify<\/li>\n\n\n\n<li>Tap \u201cSave\u201d if test is successful<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">3. Using OwlFiles[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=733\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=733\">edit source<\/a>]<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Browse Files:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Tap your newly created connection<\/li>\n\n\n\n<li>Navigate through folders<\/li>\n\n\n\n<li>Files will stream rather than download first<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Stream Media:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Tap a video\/audio file to stream<\/li>\n\n\n\n<li>No need to download completely first<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>File Operations:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Long-press files for options<\/li>\n\n\n\n<li>Copy, move, delete as needed<\/li>\n\n\n\n<li>Upload from phone to server<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>HINT<\/strong>: Enable \u201cShow hidden files\u201d in settings if you need to see dot files.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">File Operation Best Practices:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=734\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=734\">edit source<\/a>]<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Large Files:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Use copy instead of move for safety<\/li>\n\n\n\n<li>Don\u2019t interrupt transfers<\/li>\n\n\n\n<li>Check free space first<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Media Streaming:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Test a small file first<\/li>\n\n\n\n<li>Check your connection speed<\/li>\n\n\n\n<li>Consider pre-downloading for trips<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Long-press files for options<\/li>\n\n\n\n<li>Copy, move, delete as needed<\/li>\n\n\n\n<li>Upload from phone to server<\/li>\n<\/ul>\n\n\n\n<p><strong>HINT<\/strong>: Enable \u201cShow hidden files\u201d in settings if you need to see dot files.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">File Operation Best Practices:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=735\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=735\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Large Files:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Use copy instead of move for safety<\/li>\n\n\n\n<li>Don\u2019t interrupt transfers<\/li>\n\n\n\n<li>Check free space first<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Media Streaming:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Test a small file first<\/li>\n\n\n\n<li>Check your connection speed<\/li>\n\n\n\n<li>Consider pre-downloading for road trips<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Have your server email you when a hard drive is dying.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=736\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=736\">edit source<\/a>]<\/h1>\n\n\n\n<p>There is one caveat that makes ZFS &amp; RAID functionally&nbsp;<em>useless<\/em>&nbsp;for many of its users..<\/p>\n\n\n\n<p>99% of the population don\u2019t know their drive is failing until things start crashing and working horribly slow. By then, it\u2019s usually too late. You\u2019re heading to Rossmann Repair for data recovery.<\/p>\n\n\n\n<p>Then they think,&nbsp;<em>\u201cif I use RAID, I\u2019m good! One drive can fail and it\u2019ll still work!!!\u201d<\/em><\/p>\n\n\n\n<p>No.<\/p>\n\n\n\n<p>You could have RAID 1 with 20 discs and it still wouldn\u2019t matter, because&nbsp;<em>NOBODY WHO HAS A LIFE CHECKS THE HEALTH OF THEIR DISK DRIVE EVERY DAY.<\/em><\/p>\n\n\n\n<p>If you only check your drive health when it fails, then RAID 1 with 5 disks is useless. You\u2019re still only going to check it when the fifth one starts failing.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Setting Up Postfix Email System on Ubuntu Server 24.04[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=737\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=737\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Install Required Packages[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=738\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=738\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update\nsudo apt install postfix libsasl2-modules mailutils -y<\/pre>\n\n\n\n<p>When prompted during install:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Choose&nbsp;<strong>\u201cInternet Site\u201d<\/strong>&nbsp;for configuration type<\/li>\n\n\n\n<li>Enter your system\u2019s fully qualified domain name when asked of where we are sending emails from, in our case it is&nbsp;<code>home.arpa<\/code><\/li>\n\n\n\n<li>Recipient for root &amp; postmaster mail will be the email you want to receive that at, for me I set it as the same email as ZFS alerts which is&nbsp;<code>l.a.rossmann@gmail.com<\/code>&nbsp;for me<\/li>\n\n\n\n<li>Set&nbsp;<strong>\u201cForce synchronous updates on mail queue?\u201d<\/strong>&nbsp;to no<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_ff734222.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_667e9c06.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_f9f6cd56.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_5c8e2e53.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_b07ae624.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.2 Configure Main Postfix Configuration &#8211; this is similar to what we did for FreePBX voicemail alerts in the previous section[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=739\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=739\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Backup existing configuration:sudo cp \/etc\/postfix\/main.cf \/etc\/postfix\/main.cf.backup<\/li>\n\n\n\n<li>Create new&nbsp;<code>main.cf<\/code>:sudo nano \/etc\/postfix\/main.cf<\/li>\n\n\n\n<li>Copy and paste the provided configuration template if you need, and edit the&nbsp;<code>yourdriveisdead@stevesavers.com<\/code>&nbsp;email in the configuration file with the email you wish to have Postfix use to send you an email.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">  # See \/usr\/share\/postfix\/main.cf.dist for a commented, more complete version\n  \n  \n  # Debian specific:  Specifying a file name will cause the first\n  # line of that file to be used as the name.  The Debian default\n  # is \/etc\/mailname.\n  #myorigin = \/etc\/mailname\n  \n  smtpd_banner = $myhostname ESMTP $mail_name (Debian\/GNU)\n  biff = no\n  \n  # appending .domain is the MUA's job.\n  append_dot_mydomain = no\n  \n  # Uncomment the next line to generate \"delayed mail\" warnings\n  #delay_warning_time = 4h\n  \n  readme_directory = no\n  \n  # See http:\/\/www.postfix.org\/COMPATIBILITY_README.html -- default to 3.6 on\n  # fresh installs.\n  compatibility_level = 3.6\n  \n  \n  \n  # TLS parameters\n  smtpd_tls_cert_file=\/etc\/ssl\/certs\/ssl-cert-snakeoil.pem\n  smtpd_tls_key_file=\/etc\/ssl\/private\/ssl-cert-snakeoil.key\n  smtpd_tls_security_level=may\n  \n  smtp_tls_CApath=\/etc\/ssl\/certs\n  smtp_tls_security_level=may\n  smtp_tls_session_cache_database = btree:${data_directory}\/smtp_scache\n  \n  \n  smtpd_relay_restrictions = permit_mynetworks \n  permit_sasl_authenticated defer_unauth_destination\n  myhostname = debian.home.arpa\n  alias_maps = hash:\/etc\/aliases\n  alias_database = hash:\/etc\/aliases\n  mydestination = $myhostname, debian, localhost.localdomain, localhost\n  relayhost = [smtp.postmarkapp.com]:587\n  smtp_use_tls = yes\n  smtp_sasl_auth_enable = yes\n  smtp_sasl_password_maps = hash:\/etc\/postfix\/sasl_passwd\n  smtp_sasl_security_options = noanonymous\n  smtp_sasl_mechanism_filter = plain\n  sender_canonical_maps = static:yourdriveisdead@stevesavers.com\n  mynetworks = 127.0.0.0\/8 [::ffff:127.0.0.0]\/104 [::1]\/128\n  mailbox_size_limit = 0\n  recipient_delimiter = +\n  # WARNING: Changing the inet_interfaces to an IP other than 127.0.0.1 may expose Postfix to external network connections.\n  # Only modify this setting if you understand the implications and have specific network requirements.\n  inet_interfaces = 127.0.0.1\n  inet_protocols = all\n  message_size_limit = 102400000<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">1.3 Set Up SMTP Authentication, and use your usernames\/passwords\/emails to replace mine[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=740\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=740\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create the SASL password file:sudo nano \/etc\/postfix\/sasl_passwd<\/li>\n\n\n\n<li>Add this line to the file, replacing the username &amp; password with your credentials from postmark:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">[smtp.postmarkapp.com]:587 1788dd83-9917-46e1-b90a-3b9a89c10bd7:1788dd83-9917-46e1-b90a-3b9a89c10bd7<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Set proper permissions for security:sudo chmod 600 \/etc\/postfix\/sasl_passwd<\/li>\n\n\n\n<li>Create the hash database file:sudo postmap \/etc\/postfix\/sasl_passwd<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">1.4 Restart and Test[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=741\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=741\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Restart Postfix:sudo systemctl restart postfix<\/li>\n\n\n\n<li>Verify Postfix is running:sudo systemctl status postfix<\/li>\n\n\n\n<li>Test the email setup:echo &#8222;Test email from $(hostname)&#8221; | mail -s &#8222;Test Email&#8221; l.a.rossmann@gmail.com<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_db123f98.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu67917r1ezu_tmp_cf91d8ae.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p><strong>Verification Steps:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Check mail logs for errors:sudo tail -f \/var\/log\/mail.log<\/li>\n\n\n\n<li>Verify permissions:ls -l \/etc\/postfix\/sasl_passwd*Should show:\n<ul class=\"wp-block-list\">\n<li><code>-rw------- 1 root root<\/code>&nbsp;for sasl_passwd<\/li>\n\n\n\n<li><code>-rw------- 1 root root<\/code>&nbsp;for sasl_passwd.db<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Troubleshooting:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=742\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=742\">edit source<\/a>]<\/h3>\n\n\n\n<p>If emails aren\u2019t being sent:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Check Postfix status:sudo systemctl status postfix<\/li>\n\n\n\n<li>View detailed mail logs:sudo journalctl -u postfix<\/li>\n<\/ol>\n\n\n\n<p>Check mail logs for errors:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo tail -f \/var\/log\/mail.log<\/pre>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Check&nbsp;<code>\/var\/log\/mail.log<\/code>&nbsp;for errors<\/li>\n\n\n\n<li>Check that Postmark credentials are correct (e.g., if you typed&nbsp;<code>postmark.com<\/code>&nbsp;instead of&nbsp;<code>postmarkapp.com<\/code>&nbsp;for server, etc.)<\/li>\n\n\n\n<li>Verify sender domain (<code>stevesavers.com<\/code>) is properly configured in Postmark<\/li>\n\n\n\n<li>Check the&nbsp;<strong>Activity<\/strong>&nbsp;tab on the transactional stream in Postmark<\/li>\n\n\n\n<li>Mail log will tell you what you fkd up 99% of the time.<\/li>\n<\/ol>\n\n\n\n<p><strong>This setup does as follows:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Send FROM:&nbsp;<em><a href=\"mailto:yourdriveisdead@stevesavers.com\">yourdriveisdead@stevesavers.com<\/a><\/em><\/li>\n\n\n\n<li>Send TO:&nbsp;<em><a href=\"mailto:l.a.rossmann@gmail.com\">l.a.rossmann@gmail.com<\/a><\/em><\/li>\n\n\n\n<li>Use the configured SMTP relay<\/li>\n\n\n\n<li>Include proper authentication<\/li>\n<\/ul>\n\n\n\n<p>The system is now ready for the next step in the ZFS monitoring setup.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Creating Complete ZFS Monitoring Script with Logging[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=743\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=743\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 Create Log Directory[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=744\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=744\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo mkdir -p \/var\/log\/zfs-monitor\nsudo chown root:root \/var\/log\/zfs-monitor\nsudo chmod 755 \/var\/log\/zfs-monitor<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 Make the Monitoring Script[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=745\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=745\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo -u root nano \/root\/zfs_health_check.sh<\/pre>\n\n\n\n<p>Copy and paste this complete script:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#!\/bin\/bash\n\n# Configuration\nEMAIL=\"l.a.rossmann@gmail.com\"\nHOSTNAME=$(hostname)\nLOG_FILE=\"\/var\/log\/zfs-monitor\/health_check.log\"\nLOG_MAX_SIZE=$((10 * 1024 * 1024))  # 10MB in bytes\n\n# Email configuration\nFROM_EMAIL=\"yourdriveisdead@stevesavers.com\"\nFROM_NAME=\"Steve\"\nREPLY_TO=\"Steve &lt;steve@stevesavers.com&gt;\"  # Use a more consistent Reply-To address\nRETURN_PATH=\"bounce@stevesavers.com\"  # A safe Return-Path address to handle bounces properly\n\n# Create required directories\nmkdir -p \"$(dirname \"$LOG_FILE\")\"\n\n# Initialize error log\nerrors=\"\"\n\n# Logging functions\nrotate_log() {\n    if [ -f \"$LOG_FILE\" ] &amp;&amp; [ $(stat -f%z \"$LOG_FILE\" 2&gt;\/dev\/null || stat -c%s \"$LOG_FILE\") -gt \"$LOG_MAX_SIZE\" ]; then\n        mv \"$LOG_FILE\" \"$LOG_FILE.old\"\n    fi\n}\n\nlog_message() {\n    echo \"[$(date '+%Y-%m-%d %H:%M:%S')] $1\" | tee -a \"$LOG_FILE\"\n}\n\nlog_error() {\n    local message=\"$1\"\n    errors=\"${errors}n$message\"\n    log_message \"ERROR: $message\"\n}\n\n# Check overall pool status\ncheck_pool_status() {\n    while IFS= read -r pool; do\n        status=$(zpool status \"$pool\")\n        \n        # Check for common failure keywords\n        if echo \"$status\" | grep -E \"DEGRADED|FAULTED|OFFLINE|UNAVAIL|REMOVED|FAIL|DESTROYED|SUSPENDED\" &gt; \/dev\/null; then\n            log_error \"ALERT: Pool $pool is not healthy:n$status\"\n        fi\n        \n        # Check for errors\n        if echo \"$status\" | grep -v \"No known data errors\" | grep -i \"errors:\" &gt; \/dev\/null; then\n            log_error \"ALERT: Pool $pool has errors:n$status\"\n        fi\n        \n        # Check scrub status\n        if echo \"$status\" | grep \"scan\" | grep -E \"scrub canceled|scrub failed\" &gt; \/dev\/null; then\n            log_error \"ALERT: Pool $pool has unusual scrub status:n$(echo \"$status\" | grep \"scan\")\"\n        fi\n    done &lt; &lt;(zpool list -H -o name)\n}\n\n# Check individual device status\ncheck_devices() {\n    while IFS= read -r pool; do\n        devices=$(zpool status \"$pool\" | awk '\/ONLINE|DEGRADED|FAULTED|OFFLINE|UNAVAIL|REMOVED\/ {print $1,$2}')\n        \n        echo \"$devices\" | while read -r device state; do\n            if [ \"$state\"&nbsp;!= \"ONLINE\" ] &amp;&amp; [ \"$device\"&nbsp;!= \"pool\" ] &amp;&amp; [ \"$device\"&nbsp;!= \"mirror\" ] &amp;&amp; [ \"$device\"&nbsp;!= \"raidz1\" ] &amp;&amp; [ \"$device\"&nbsp;!= \"raidz2\" ]; then\n                log_error \"ALERT: Device $device in pool $pool is $state\"\n            fi\n        done\n    done &lt; &lt;(zpool list -H -o name)\n}\n\n# Check capacity threshold (80% by default)\ncheck_capacity() {\n    while IFS= read -r pool; do\n        capacity=$(zpool list -H -p -o capacity \"$pool\")\n        if [ \"$capacity\" -ge 80 ]; then\n            log_error \"WARNING: Pool $pool is ${capacity}% full\"\n        fi\n    done &lt; &lt;(zpool list -H -o name)\n}\n\n# Check dataset properties\ncheck_dataset_properties() {\n    while IFS= read -r dataset; do\n        # Skip base pools\n        if&nbsp;! echo \"$dataset\" | grep \"\/\" &gt; \/dev\/null; then\n            continue\n        fi\n        \n        # Check if compression is enabled\n        compression=$(zfs get -H compression \"$dataset\" | awk '{print $3}')\n        if [ \"$compression\" = \"off\" ]; then\n            log_error \"WARNING: Compression is disabled on dataset $dataset\"\n        fi\n        \n        # Check if dataset is mounted\n        mounted=$(zfs get -H mounted \"$dataset\" | awk '{print $3}')\n        if [ \"$mounted\" = \"no\" ]; then\n            log_error \"WARNING: Dataset $dataset is not mounted\"\n        fi\n        \n        # Check available space\n        available=$(zfs get -H available \"$dataset\" | awk '{print $3}')\n        if [ \"$available\" = \"0\" ] || [ \"$available\" = \"0B\" ]; then\n            log_error \"CRITICAL: Dataset $dataset has no available space\"\n        fi\n    done &lt; &lt;(zfs list -H -o name)\n}\n\n# Function to send email\nsend_email() {\n    local subject=\"$1\"\n    local content=\"$2\"\n    \n    {\n        echo \"Subject: $subject\"\n        echo \"To: ${EMAIL}\"\n        echo \"From: ${FROM_NAME} &lt;${FROM_EMAIL}&gt;\"\n        echo \"Reply-To: ${REPLY_TO}\"\n        echo \"Return-Path: ${RETURN_PATH}\"\n        echo \"Content-Type: text\/plain; charset=UTF-8\"\n        echo\n        echo \"$content\"\n    } | sendmail -t\n}\n\n# Main execution\nrotate_log\nlog_message \"Starting ZFS health check\"\n\n# Run all checks\ncheck_pool_status\ncheck_devices\ncheck_capacity\ncheck_dataset_properties\n\n# Send notification if there are errors\nif [ -n \"$errors\" ]; then\n    log_message \"Issues detected - sending email alert\"\n    subject=\"Storage Alert: Issues Detected on ${HOSTNAME}\"  # Simplified subject line\n    content=$(echo -e \"ZFS Health Monitor Report from ${HOSTNAME}nnThe following issues were detected:${errors}\")\n    send_email \"$subject\" \"$content\"\nelse\n    log_message \"All ZFS checks passed successfully\"\nfi<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 Set Proper Permissions[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=746\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=746\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo -u root chmod +x \/root\/zfs_health_check.sh<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.4 Test the Script[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=747\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=747\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo \/root\/zfs_health_check.sh<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.5 Make sure logging works[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=748\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=748\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">tail -f \/var\/log\/zfs-monitor\/health_check.log<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.6 Features of this Script:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=749\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=749\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Monitoring<\/strong>:\n<ul class=\"wp-block-list\">\n<li>It tells you when your pool has issues BEFORE all your drives die<\/li>\n\n\n\n<li>Device status checks<\/li>\n\n\n\n<li>Capacity warnings<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Email Alerts<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Sends when issues are detected<\/li>\n\n\n\n<li>Includes error information<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>The script is now ready for cron job configuration and regular use. Cron jobs are tasks we tell the machine to perform at regular intervals, similar to setting a utility bill to autopay.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Create Cron Job[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=750\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=750\">edit source<\/a>]<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open root\u2019s crontab:sudo crontab -e<\/li>\n\n\n\n<li>Add these lines:# ZFS Health Check &#8211; Run every 15 minutes *\/15 * * * * \/root\/zfs_health_check.sh &gt;\/dev\/null 2&gt;&amp;1 # Log rotation &#8211; Run daily at midnight 0 0 * * * find \/var\/log\/zfs-monitor -name &#8222;*.old&#8221; -mtime +7 -delete<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Verify it works again, just because[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=751\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=751\">edit source<\/a>]<\/h2>\n\n\n\n<p>Run the script manually to ensure it works:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo \/root\/zfs_health_check.sh<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Check Logs[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=752\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=752\">edit source<\/a>]<\/h3>\n\n\n\n<p>Monitor the log file for any issues:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">tail -f \/var\/log\/zfs-monitor\/health_check.log<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Make sure Cron Job is listed[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=753\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=753\">edit source<\/a>]<\/h3>\n\n\n\n<p>Verify that the cron job is correctly listed:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo crontab -l<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Test Email Notifications[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=754\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=754\">edit source<\/a>]<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Unplug a drive.<\/li>\n\n\n\n<li>Wait.<\/li>\n\n\n\n<li>Does an email come through?<\/li>\n<\/ol>\n\n\n\n<p>The monitoring system is now fully configured and will:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check ZFS status every 15 minutes<\/li>\n\n\n\n<li>Log all checks to&nbsp;<code>\/var\/log\/zfs-monitor\/health_check.log<\/code><\/li>\n\n\n\n<li>Automatically rotate logs when they reach 10MB<\/li>\n\n\n\n<li>Send email alerts only when issues are detected<\/li>\n\n\n\n<li>Clean up old log files after 7 days<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">How to tell if you won:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=755\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=755\">edit source<\/a>]<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2713 Test email received<\/li>\n\n\n\n<li>\u2713 Script detects simulated issues<\/li>\n\n\n\n<li>\u2713 Cron job executes on schedule<\/li>\n\n\n\n<li>\u2713 Logs show proper entries<\/li>\n\n\n\n<li>\u2713 Alerts generated for pool degradation<\/li>\n\n\n\n<li>\u2713 System returns to normal after tests<\/li>\n<\/ul>\n\n\n\n<p>If you got an email, congrats, it works!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Set up OS RAID Array to email you when there\u2019s a problem as well[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=756\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=756\">edit source<\/a>]<\/h2>\n\n\n\n<p>What we set up above is for your&nbsp;<em><strong>ARCHIVE<\/strong><\/em>&nbsp;storage. What about your operating system? We will do the same thing, and also go over a barbaric backup routine that works for me.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">5.1 Creating the alert script[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=757\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=757\">edit source<\/a>]<\/h4>\n\n\n\n<p>I\u2019m not a programmer, so bear with me. This script is for my personal use, but I\u2019m sharing it because it works. Here\u2019s what you need to do:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Edit Email Addresses<\/strong>: You\u2019ll need to change the email addresses in the script. This includes:\n<ul class=\"wp-block-list\">\n<li>The recipient email<\/li>\n\n\n\n<li>The sender email<\/li>\n\n\n\n<li>The reply-to address<\/li>\n\n\n\n<li>The return path for bounced emails<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Script Location<\/strong>: Save the script at&nbsp;<code>root\/mdadm_alert.sh<\/code><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo -u root \/nano -w \/root\/mdadm_alert.sh<\/pre>\n\n\n\n<p>Enter the following:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#!\/bin\/bash\n\n# thank you to stack overflow for giving me the courage to wade through 100s of posts and hack together something that looks like it works. \n\n# stricer error handli\nset -euo pipefail  # \u2018set -e\u2019 exits on errors, \u2018u\u2019 throws errors on unset variables, &amp; \u2018pipefail\u2019 exits if any part of a pipeline fails\nIFS=$'\\n\\t'  # Set IFS (Internal Field Separator) to newline &amp; tab to avoid issues with spaces and other weird characters in filenames\n\n# Configuration variables (where settings are stored)\nEMAIL=\"l.a.rossmann@gmail.com\"  # Email to send alerts to - EDIT THIS \nHOSTNAME=$(hostname)  # Pull the system's hostname dynamically and save it here\nLOG_DIR=\"\/var\/log\/mdadm-monitor\"  # Directory path for where logs go\nLOG_FILE=\"${LOG_DIR}\/raid_health_check.log\"  # Full path to the specific log file for RAID checks\nLOG_MAX_SIZE=$((10 * 1024 * 1024))  # Maximum log file size in bytes (10 MB here)\n\n# Email configuration for the alert message\nFROM_EMAIL=\"yourdriveisdead@stevesavers.com\"  # The email address that will appear as the sender - EDIT THIS\nFROM_NAME=\"Steve\"  # name of the sender, EDIT THIS\nREPLY_TO=\"Steve &lt;steve@stevesavers.com&gt;\"  # Reply-to email address, EDIT THIS\nRETURN_PATH=\"bounce@stevesavers.com\"  # Return path for bounced emails when email fails EDIT THIS\n\n# make empty variables &amp; associated arrays \nerrors=\"\"  # Empty variable to collect error messages\ndrive_health_report=\"\"  # Another empty variable to store drive health details\ndeclare -A RAID_ARRAYS  # array to keep track of RAID arrays we find, indexed by  name like \"boot\"\ndeclare -A SMART_SCORES  # array to store SMART scores for drives, indexed by rive path\n\n# Set up log directory and ensure permissions are correct\nsetup_logging() {\n    # Make the log directory if it doesn\u2019t already exist\n    mkdir -p \"$LOG_DIR\" || { echo \"ERROR: Cannot create log directory $LOG_DIR\"; exit 1; }  # Exit with error if I can\u2019t make the directory\n    chmod 750 \"$LOG_DIR\"  # Set directory permissions to allow owner &amp; group access but not others\n\n    # Check if the log file exists and exceeds the max size limit\n    if [ -f \"$LOG_FILE\" ] &amp;&amp; [ \"$(stat -c%s \"$LOG_FILE\")\" -gt \"$LOG_MAX_SIZE\" ]; then  # \u2018stat -c%s\u2019 gives the size in bytes\n        mv \"$LOG_FILE\" \"$LOG_FILE.old\"  # Archive the old log file by renaming it\n    fi\n    touch \"$LOG_FILE\"  # Create an empty log file if it doesn\u2019t exist\n    chmod 640 \"$LOG_FILE\"  # Set permissions on the log file (read\/write for owner, read for group)\n}\n\n# Function for logging messages w\/ timestamps\nlog_message() {\n    local timestamp  # Make local variable for this\n    timestamp=$(date '+%Y-%m-%d %H:%M:%S')  # Generate a timestamp in this specific format\n    echo \"[$timestamp] $1\" | tee -a \"$LOG_FILE\"  # Output the message with the timestamp to both console &amp; log file\n}\n\n# Function for logging errors (adds them to the error string and logs them as \"ERROR\")\nlog_error() {\n    local message=\"$1\"  # Message passed to this function\n    errors=\"${errors}\\n$message\"  # Append this message to the errors variable\n    log_message \"ERROR: $message\"  # Log the error with a timestamp\n}\n\n# Check that required (commands) are installed on the system\ncheck_dependencies() {\n    log_message \"Checking required dependencies...\"  # Announce the check in the log\n    local missing_deps=()  # Initialize an empty array for any missing commands\n\n    # Loop through each command we need, checking if it\u2019s available\n    for dep in mdadm smartctl lsblk findmnt awk grep dmsetup; do\n        if&nbsp;! command -v \"$dep\" &amp;&gt;\/dev\/null; then  # If the command is missing, add it to the array\n            missing_deps+=(\"$dep\")\n        fi\n    done\n\n    # If the array of missing dependencies isn\u2019t empty, log an error and exit\n    if [ ${#missing_deps[@]} -ne 0 ]; then\n        log_error \"Missing required dependencies: ${missing_deps[*]}\"  # Log missing commands\n        log_error \"Install them with: sudo apt-get install mdadm smartmontools util-linux findutils gawk grep dmsetup\"\n        exit 1  # Exit with error because we\u2019re missing something we need(find what you need if you're getting this)\n    fi\n}\n\n# Find &amp; detect RAID arrays on this system\ndetect_raid_arrays() {\n    log_message \"Detecting RAID arrays...\"  # Log that we\u2019re looking for RAID arrays\n\n    # Find all block devices with names like \/dev\/md0, \/dev\/md1 (these are RAID arrays like the one you made for the OS &amp; boot)\n    local md_devices\n    md_devices=$(find \/dev -name 'md[0-9]*' -type b)  # Save this list to the md_devices variable\n\n    # Loop through each RAID array found and log its details\n    for md_dev in $md_devices; do\n        local array_detail  # Temporary variable for array details\n        array_detail=$(mdadm --detail \"$md_dev\" 2&gt;\/dev\/null) || continue  # Get RAID details; skip if it fails\n\n        # Extract the RAID array name from the details\n        local array_name\n        array_name=$(echo \"$array_detail\" | grep \"Name\" | awk '{print $NF}')  # Last word on the \"Name\" line is the array name\n\n        # Use the name to decide if this array is for boot or root, then add it to RAID_ARRAYS\n        if [[ \"$array_name\" == *\"bootraid\"* ]]; then  # Array name contains \"bootraid\"\n            RAID_ARRAYS[\"boot\"]=\"$md_dev\"  # Save the device path with the key \"boot\"\n            log_message \"Found boot array: $md_dev ($array_name)\"  # Log the found boot array\n        elif [[ \"$array_name\" == *\"osdriveraid\"* ]]; then  # Array name contains \"osdriveraid\"\n            RAID_ARRAYS[\"root\"]=\"$md_dev\"  # Save the device path with the key \"root\"\n            log_message \"Found root array: $md_dev ($array_name)\"  # Log the found root array\n        fi\n    done\n\n    # Check if we actually found both root and boot arrays, and log an error if any are missing\n    if [ -z \"${RAID_ARRAYS[\"boot\"]:-}\" ] || [ -z \"${RAID_ARRAYS[\"root\"]:-}\" ]; then  # If either key is empty\n        log_error \"Failed to detect both boot and root RAID arrays\"  # Log a general error\n        [ -z \"${RAID_ARRAYS[\"boot\"]:-}\" ] &amp;&amp; log_error \"Boot array not found\"  # Specific message if boot is missing\n        [ -z \"${RAID_ARRAYS[\"root\"]:-}\" ] &amp;&amp; log_error \"Root array not found\"  # Specific message if root is missing\n        return 1  # Return an error code\n    fi\n\n    # Print out a summary of all arrays found\n    log_message \"Detected arrays:\"\n    for purpose in \"${!RAID_ARRAYS[@]}\"; do\n        log_message \"  $purpose: ${RAID_ARRAYS[$purpose]}\"\n    done\n}\n\n# Check the health of a specific RAID array\ncheck_array_status() {\n    local array=\"$1\"  # The path of the array device\n    local purpose=\"$2\"  # Either \"boot\" or \"root\" to clarify which array this is\n\n    # Verify that the array actually exists as a block device\n    if [&nbsp;! -b \"$array\" ]; then\n        log_error \"$purpose array device $array does not exist\"  # Log the missing device\n        return 1  # Return error because we can\u2019t check a nonexistent device\n    fi\n\n    # Get details about the RAID array and store it in the detail variable\n    local detail\n    detail=$(mdadm --detail \"$array\" 2&gt;&amp;1) || {  # \u20182&gt;&amp;1\u2019 captures error output in case of issues\n        log_error \"Failed to get details for $purpose array ($array)\"\n        return 1  # Exit with an error code if it failed\n    }\n\n    # Extract the state of the array (like \"clean\" or \"active\") and log it\n    local state\n    state=$(echo \"$detail\" | grep \"State&nbsp;:\" | awk '{print $3,$4}')  # Get the words after \"State&nbsp;:\" from the details\n    log_message \"$purpose array status: $state\"\n\n    # If the array is in an undesirable state, log a warning\nif [[ \"$state\" =~ degraded|DEGRADED|failed|FAILED|inactive|INACTIVE ]]; then\n    log_error \"$purpose array ($array) is in concerning state: $state\"\nfi\n\n    # Detect failed devices within the array\n    local failed_devices\n    failed_devices=$(echo \"$detail\" | grep \"Failed Devices\" | awk '{print $4}')  # Pull the failed devices count\n    if [ \"$failed_devices\" -gt 0 ]; then  # If there are failed devices, go through each one\n        while read -r line; do\n            if [[ \"$line\" =~ \"faulty\" ]]; then  # If the line mentions \"faulty\"\n                local failed_dev\n                failed_dev=$(echo \"$line\" | awk '{print $7}')  # Get the 7th word (the device name)\n                log_error \"$purpose array ($array) has failed device: $failed_dev\"  # Log which device failed\n            fi\n        done &lt; &lt;(echo \"$detail\" | grep -A20 \"Number\" | grep \"faulty\")  # Look up to 20 lines after \"Number\" to find \"faulty\"\n    fi\n\n    # Check if any devices are rebuilding, and log it if they are\n    if echo \"$detail\" | grep -q \"rebuilding\"; then\n        while read -r line; do\n            if [[ \"$line\" =~ \"rebuilding\" ]]; then  # Check for \"rebuilding\" in the line\n                local rebuilding_dev\n                rebuilding_dev=$(echo \"$line\" | awk '{print $7}')  # Get the device name being rebuilt\n                log_error \"$purpose array ($array) is rebuilding device: $rebuilding_dev\"  # Log the rebuilding device\n            fi\n        done &lt; &lt;(echo \"$detail\" | grep -A20 \"Number\" | grep \"rebuilding\")  # Again, look ahead 20 lines for any \"rebuilding\" mention\n    fi\n}\n\n# Function to check the health of each drive within a RAID array\ncheck_drive_health() {\n    local drive=\"$1\"  # The drive device to check (e.g., \/dev\/sda)\n    local health_score=100  # Initialize health score to 100 (a perfect score)\n    local issues=\"\"\n\n    # Skip the check if it\u2019s not a valid block device\n    if [&nbsp;! -b \"$drive\" ]; then\n        log_error \"Device $drive is not a block device\"  # Log the invalid device\n        return 1  # Exit with an error code\n    fi\n\n    log_message \"Checking health of drive $drive...\"  # Announce which drive we\u2019re checking\n\n    # Run SMART health check and reduce health score if it fails\n    if&nbsp;! smartctl -H \"$drive\" | grep -q \"PASSED\"; then  # If it does NOT say \"PASSED\"\n        health_score=$((health_score - 50))  # Drop score by 50 points if it fails\n        issues+=\"\\n- Overall health check failed\"  # Log this specific issue\n    fi\n\n    # Collect SMART attributes for further checks\n    local smart_attrs\n    smart_attrs=$(smartctl -A \"$drive\" 2&gt;\/dev\/null) || true  # Redirect error to \/dev\/null\n\n    # Check for reallocated sectors (sign of drive wear and tear)\n    local reallocated\n    reallocated=$(echo \"$smart_attrs\" | awk '\/^  5\/ {print $10}')  # Look for attribute ID 5 in SMART data\n    if [ -n \"$reallocated\" ] &amp;&amp; [ \"$reallocated\" -gt 0 ]; then\n        health_score=$((health_score - 10))  # Drop health score by 10 if we have reallocated sectors\n        issues+=\"\\n- Reallocated sectors: $reallocated\"  # Add to issues list\n    fi\n\n    # Check for pending sectors (could cause read\/write errors)\n    local pending\n    pending=$(echo \"$smart_attrs\" | awk '\/^197\/ {print $10}')  # Look for attribute ID 197 in SMART data\n    if [ -n \"$pending\" ] &amp;&amp; [ \"$pending\" -gt 0 ]; then\n        health_score=$((health_score - 10))  # Drop health score by 10 if pending sectors are present\n        issues+=\"\\n- Pending sectors: $pending\"  # Add to issues list\n    fi\n\n    SMART_SCORES[\"$drive\"]=$health_score  # Save the final score in SMART_SCORES array\n    if [ \"$health_score\" -lt 100 ]; then\n        drive_health_report+=\"\\nDrive: $drive\\nHealth Score: $health_score\/100\\nIssues:$issues\"  # Append issues to report if any were found\n    fi\n}\n\n# Send email if any errors or health issues were found\nsend_email() {\n    local subject=\"RAID Alert: Issues Detected on ${HOSTNAME}\"  # Set email subject line\n    local content=\"RAID Health Monitor Report from ${HOSTNAME}\\nTime: $(date '+%Y-%m-%d %H:%M:%S')\\n\"\n    [ -n \"$errors\" ] &amp;&amp; content+=\"\\nRAID Issues:${errors}\"  # Append RAID issues to the email content if any\n    [ -n \"$drive_health_report\" ] &amp;&amp; content+=\"\\nDrive Health Report:${drive_health_report}\"  # Append drive health report if any issues were found\n\n    # Build the email using sendmail syntax\n    {\n        echo \"Subject: $subject\"\n        echo \"To: ${EMAIL}\"\n        echo \"From: ${FROM_NAME} &lt;${FROM_EMAIL}&gt;\"\n        echo \"Reply-To: ${REPLY_TO}\"\n        echo \"Return-Path: ${RETURN_PATH}\"\n        echo \"Content-Type: text\/plain; charset=UTF-8\"  # Text format for readability\n        echo\n        echo -e \"$content\"  # Use \u2018-e\u2019 to allow newline characters\n    } | sendmail -t  # Pipe the entire email message to sendmail for delivery\n}\n\n# Main function to execute checks and send email if needed\nmain() {\n    # Make sure script is run as root for necessary permissions\n    [ \"$(id -u)\" -ne 0 ] &amp;&amp; { echo \"ERROR: This script must be run as root\"; exit 1; }\n    setup_logging  # Call function to initialize logging setup\n    log_message \"Starting RAID health check\"  # Announce the start of the health check\n    check_dependencies  # Verify dependencies are available\n    detect_raid_arrays  # Detect RAID arrays\n\n    # Loop through each RAID array and check its status, then check each drive in the array\n    for purpose in \"${!RAID_ARRAYS[@]}\"; do\n        array=\"${RAID_ARRAYS[$purpose]}\"\n        check_array_status \"$array\" \"$purpose\"\n\n        # For each device in the RAID array, check health\n        while read -r device; do\n            if [[ \"$device\" =~ ^\/dev\/ ]]; then\n                check_drive_health \"$device\"\n            fi\n        done &lt; &lt;(mdadm --detail \"$array\" | grep \"active sync\" | awk '{print $NF}')\n    done\n\n    # Send an email if errors or health issues were found; otherwise, log a success message\n    [ -n \"$errors\" ] || [ -n \"$drive_health_report\" ] &amp;&amp; send_email || log_message \"All checks passed successfully\"\n}\n\n# Execute the main function to start everything\nmain  # Calls the main function, running all the checks<\/pre>\n\n\n\n<p>Set permissions properly so it can run:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo -u root chmod +x \/root\/mdadm_alert.sh<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">5.2 Setting Up the Cron Job[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=758\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=758\">edit source<\/a>]<\/h4>\n\n\n\n<p>We want this script to run regularly. I am going to set it to run every 15 minutes.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Open the crontab editor\nsudo -u root crontab -e<\/pre>\n\n\n\n<p>Add the following line to run the script every minute (for testing purposes):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">* * * * * \/root\/mdadm_alert.sh<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;For regular use, set it to run every fifteen minutes, with a line such as&nbsp;<code>*\/15 * * * * \/root\/mdadm_alert.sh<\/code><\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">5.3 Testing the setup &#8211; software run first.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=759\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=759\">edit source<\/a>]<\/h4>\n\n\n\n<p>Let\u2019s simulate a fault condition on&nbsp;<code>\/dev\/md126<\/code>&nbsp;which is what I set up as the RAID1 array for the operating system installation; this is where we created the logical volume for&nbsp;<code>\/<\/code><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Check the status of it as it is now:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo mdadm --detail \/dev\/md126<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>If it shows up as healthy, run the script to make sure we do not have false positives.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo -u root \/root\/mdadm_alert.sh<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>If no false positives, simulate fault condition:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo mdadm \/dev\/md126 --fail \/dev\/sdb3<\/pre>\n\n\n\n<p><code>\/dev\/sdb3<\/code>&nbsp;was the drive &amp; partition that was used in my RAID array. Yours may differ, refer to the output of&nbsp;<code>mdadm --detail<\/code>&nbsp;to see how your RAID array is comprised, and then fail one of the two devices.<\/p>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Run the monitoring script to test again.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo -u root \/root\/mdadm_alert.sh<\/pre>\n\n\n\n<p>You should receive an email. Check spam.<\/p>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>Undo what you did, un-fail the drive.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo mdadm \/dev\/md126 --remove \/dev\/sdb3\nsudo mdadm \/dev\/md126 --add \/dev\/sdb3<\/pre>\n\n\n\n<ol start=\"6\" class=\"wp-block-list\">\n<li>Watch it re-sync. Don\u2019t mess with anything until it is fully resynced.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">watch cat \/proc\/mdstat<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">5.4 Testing the setup for real &#8211; hardware fault.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=760\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=760\">edit source<\/a>]<\/h4>\n\n\n\n<p>Now, let\u2019s test this setup. Unplug one of the drives and see if you get a failure alert. Obviously, don\u2019t do this after you start storing anything important on here. We do this in the build phase of our system to make sure it works, BEFORE trusting this system with anything important.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Check the status of it as it is now:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo mdadm --detail \/dev\/md126<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>If it shows up as healthy, run the script to make sure we do not have false positives.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo -u root \/root\/mdadm_alert.sh<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>If no false positives, unplug the drive from the running system.<\/li>\n<\/ol>\n\n\n\n<p><code>\/dev\/sdb3<\/code>&nbsp;was the drive &amp; partition that was used in my RAID array. Yours may differ, refer to the output of&nbsp;<code>mdadm --detail<\/code>&nbsp;to see how your RAID array is comprised, and then fail one of the two devices.<\/p>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Run the monitoring script to test again.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo -u root \/root\/mdadm_alert.sh<\/pre>\n\n\n\n<p>You should receive an email. Check spam.<\/p>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>Undo what you did, un-fail the drive after plugging it back in..<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo mdadm \/dev\/md126 --remove \/dev\/sdb3\nsudo mdadm \/dev\/md126 --add \/dev\/sdb3<\/pre>\n\n\n\n<ol start=\"6\" class=\"wp-block-list\">\n<li>Watch it re-sync. Don\u2019t mess with anything until it is fully resynced.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">watch cat \/proc\/mdstat<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Backup Strategy[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=761\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=761\">edit source<\/a>]<\/h2>\n\n\n\n<p>Now, let\u2019s talk about backups. It\u2019s not enough to just have a RAID setup; you need a backup plan for when carelessness strikes.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">6.1 Backup Method[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=762\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=762\">edit source<\/a>]<\/h4>\n\n\n\n<p>Here\u2019s my approach:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Physical Copy<\/strong>: I make a physical copy of my disk. This might seem old-school, but it works for me.<\/li>\n<\/ul>\n\n\n\n<p>Another approach:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>LVM Snapshots<\/strong>: You can take an LVM snapshot and then use&nbsp;<code>rsync<\/code>&nbsp;to back up your data. This method can be hit or miss. I don\u2019t use this.<\/li>\n<\/ul>\n\n\n\n<p>You can take a snapshot of your drive with LVM, rsync your files off of the drive elsewhere, reinstall the operating system, and rsync them back, but\u2026 what if some of your files are for older libraries, or programs\/configuration files that have different syntax with different versions? It can become a rabbit hole to hell very easily, and I\u2019m not going to begin to torture newbies with this.<\/p>\n\n\n\n<p><strong>DDRescue<\/strong>&nbsp;is the tool I use to make a copy of my drive. I connect the drive via a USB 3 to SATA plug and create a backup. It\u2019s best to do this to the same make\/model of drive if possible.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">6.2 DDRescue Guide from Ubuntu Server Live Environment[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=763\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=763\">edit source<\/a>]<\/h4>\n\n\n\n<p>We\u2019re going to boot from the same Ubuntu Server LiveUSB image you created to install Ubuntu Server onto the happycloud host machine.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Boot from the USB Drive<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_911d702.png\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Lu55028jxc7f_tmp_a33d9a7f.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Insert the USB drive into your server.<\/li>\n\n\n\n<li>Power on the server and enter the boot menu (usually by pressing&nbsp;<strong>F12<\/strong>&nbsp;or another function key).<\/li>\n\n\n\n<li>Select the&nbsp;<strong>UEFI option<\/strong>&nbsp;for your USB drive.<\/li>\n\n\n\n<li>Choose to Try Ubuntu Server &amp; do not install it.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Install ddrescue<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Update package list &amp; install ddrescue:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update\nsudo add-apt-repository universe\nsudo apt install gddrescue<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Check Current Drives (BEFORE Plugging in Source)<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo fdisk -l<\/pre>\n\n\n\n<p>Take note of the present drives.<\/p>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Connect Source Drive (operating system solid state drive from the happycloud host machine). Either will do. Either connect it physically to an existing SATA\/NVME port, or use a USB-SATA or USB-NVME enclosure if this makes it easier for you.<\/li>\n\n\n\n<li>Wait 5-10 seconds. Be patient.<\/li>\n\n\n\n<li>Check which drive it is. It will be the new drive that shows up. Make sure the model as well as the size &amp; partitions matches what you are expecting.sudo fdisk -l<\/li>\n\n\n\n<li>Connect Target Drive (blank identical disk you are making into a backup drive)<\/li>\n\n\n\n<li>Wait 5-10 seconds. Be patient.<\/li>\n\n\n\n<li>Check which drive it is. It will be the new drive that shows up. Make sure the model as well as the size &amp; partitions matches what you are expecting.sudo fdisk -l<\/li>\n<\/ol>\n\n\n\n<p><strong>TRIPLE CHECK YOUR DEVICES<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># List all drives again\nsudo fdisk -l<\/pre>\n\n\n\n<ol start=\"9\" class=\"wp-block-list\">\n<li>Run DDRescue<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo ddrescue -f -d -r3 \/dev\/source \/dev\/target logfile.log<\/pre>\n\n\n\n<p>For instance, if the source is&nbsp;<code>\/dev\/sdc<\/code>&nbsp;&amp; target is&nbsp;<code>\/dev\/sdd<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo ddrescue -f -d -r3 \/dev\/sdc \/dev\/sdd logfile.log<\/pre>\n\n\n\n<p>Option meanings: &#8211;&nbsp;<code>-f<\/code>&nbsp;: Force overwrite target &#8211;&nbsp;<code>-d<\/code>&nbsp;: Use direct disk access &#8211;&nbsp;<code>-r3<\/code>: Number of retry attempts on bad sectors &#8211; logfile.log: Saves progress (can resume if interrupted)<\/p>\n\n\n\n<p><strong>\u26a0\ufe0f WARNING: \u26a0\ufe0f<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>TRIPLE CHECK device names\n<ul class=\"wp-block-list\">\n<li>Wrong device = destroyed data<\/li>\n\n\n\n<li>Source and target reversed = destroyed source<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Target MUST be same size or larger than source<\/li>\n\n\n\n<li>Make sure you\u2019re using whole drives:\n<ul class=\"wp-block-list\">\n<li><code>\/dev\/sdc<\/code>&nbsp;(correct, whole drive)<\/li>\n\n\n\n<li><code>\/dev\/sdc1<\/code>&nbsp;(WRONG, just one partition)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>If unsure which is which, unplug\/replug and watch:sudo dmesg | tailIt will show new devices added to the linux machine<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>IMPORTANT NOTE:<\/strong>&nbsp;Always have a physical copy of a known-working server solid state drive. If something wrong, you can quickly restore your system by plugging in the backup drive and be back up in 90 seconds or less.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">RAID Configuration Recommendations[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=764\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=764\">edit source<\/a>]<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>For those who are extra cautious, consider running a RAID 1 setup with&nbsp;<strong>three<\/strong>&nbsp;drives instead of&nbsp;<strong>two<\/strong>. Here\u2019s why:<ul><li><strong>Redundancy<\/strong>: When one drive fails, the others are likely not far behind. Having a third drive adds some padding.<\/li><li><strong>Peace of mind<\/strong>: If you\u2019re paranoid about data loss, this setup is a safer bet.<\/li><\/ul>If you wanted to avoid stressing the SSD, you could create a ZFS dataset on the ZFS pool of hard drives you set up for virtual machines, mount that as&nbsp;<code>\/var\/lib\/libvirt\/images\/<\/code>, but I\u2019ve gotten spoiled by the speed of SSDs &#8211; I don\u2019t want to go back. I realize that writing to them a lot means killing them, and I\u2019m ok with that.&nbsp;\ud83d\ude42<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">OS drive backup conclusion:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=765\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=765\">edit source<\/a>]<\/h2>\n\n\n\n<p>Once everything is set up the way you like, shut down your system, remove one of the drives, and make a backup. Use a drive of equal or greater size for the backup. This way, if disaster strikes, you can restore your system in no time.<\/p>\n\n\n\n<p>We now have a simple &amp; effective way to know when our operating system drive is about to die on us, so we can take action before anything horrible occurs. Best of all, if you set this up properly, you can have zero downtime &amp; not even have to turn off the machine to get back up and running when a drive fails.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Setting Up Immich: Google Photos\/iCloud replacement[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=766\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=766\">edit source<\/a>]<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">What is immich?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=767\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=767\">edit source<\/a>]<\/h2>\n\n\n\n<p>Immich is like Google photos or iCloud, if you hosted it yourself; but better! It has the following features that make it stand out to me:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why Immich?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=768\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=768\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">Insanely fast[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=769\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=769\">edit source<\/a>]<\/h4>\n\n\n\n<p><strong>Immich<\/strong>&nbsp;loads &amp; scrolls through things on a core i3 NUC with an old SATA drive faster than&nbsp;<strong>nextcloud<\/strong>&nbsp;allowed me to on an i7-14700k with an NVME SSD. it\u2019s snappy even on slower computers &amp; phones.<\/p>\n\n\n\n<p><strong>Nextcloud<\/strong>&nbsp;made the experience of browsing through images &amp; photos not on my phone so bad I stopped doing it; a flagship phone and an i7-14700k, 64 GB of RAM, and a $400 SSD wasn\u2019t good enough to make this usable.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Machine learning for image search[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=770\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=770\">edit source<\/a>]<\/h4>\n\n\n\n<p>I can type&nbsp;<em>\u201ccat on chair\u201d<\/em>&nbsp;and have every image of a cat on a chair show up. It actually works, it isn\u2019t half assed and full of false positives.<\/p>\n\n\n\n<p>Immich\u2019s machine learning features &amp; included libraries are also used for&nbsp;<strong>face detection<\/strong>. Immich can sort your images by people, so you can see every image with your dad, cousin, girlfriend, ex-girlfriend, etc.<\/p>\n\n\n\n<p>You can&nbsp;<a href=\"https:\/\/huggingface.co\/immich-app\">choose the model you want to use<\/a>. The default model works best for me, but I appreciate Immich respecting my right to choose the model I want.<\/p>\n\n\n\n<p>Immich\u2019s machine learning is done LOCALLY.&nbsp;<strong>Immich can be blocked from connecting to the internet and all machine learning &amp; facial recognition will still work.<\/strong><\/p>\n\n\n\n<p>When people hear the words&nbsp;<em>\u201cArtificial intelligence,\u201d<\/em>&nbsp;<em>\u201ccloud\u201d<\/em>, &amp;&nbsp;<em>\u201cmachine learning\u201d<\/em>&nbsp;are buzzwords were supposed to be for our benefit, but instead have become tools of data mining &amp; abusive models. These are not bad things when they are done in a freedom respecting way. I have no problem with machine learning algorithms going through all of my photos &amp; videos &amp; knowing the names of the people in my photos, because that information will never leave my computer.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Easy proxies[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=771\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=771\">edit source<\/a>]<\/h4>\n\n\n\n<p>Immich supports video &amp; image proxy files. Proxies are photos &amp; videos that are further compressed. They are lower in quality, but their smaller size allows you to load them faster when you\u2019re on a poor internet connection. I use a google pixel, so this is handy. Google pixels have horrible cellphone service &amp; reception because Google is too stubborn to use Qualcomm modems. Google decided that its users care more about&nbsp;<a href=\"https:\/\/www.reddit.com\/r\/GooglePixel\/comments\/1etk3l6\/nothing_makes_me_less_excited_about_pixel_than\/\">lame AI features<\/a>&nbsp;than&nbsp;<a href=\"https:\/\/www.reddit.com\/r\/GooglePixel\/comments\/x61kee\/today_i_have_measured_just_how_bad_my_pixel_6s\/\">having working cell service<\/a>; This is where image proxies &amp; video proxies come in handy.<\/p>\n\n\n\n<p><strong>Nextcloud<\/strong>&nbsp;allows image proxies(with config file editing; ew). Immich allows both&nbsp;<em>image<\/em>&nbsp;AND&nbsp;<em>video<\/em>&nbsp;proxies, so high bitrate videos can still be loaded &amp; viewed on slow internet.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Ease of use[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=772\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=772\">edit source<\/a>]<\/h4>\n\n\n\n<p>This program is so easy to use you\u2019ll almost forget you\u2019re using GNU\/Linux. When I set up my Nextcloud instance, I had to edit config files to get thumbnails to work. Further, nextcloud only allows&nbsp;<em>image<\/em>&nbsp;thumbnails, but not&nbsp;<em>video<\/em>&nbsp;proxies. Not only is it more work with nextcloud to get thumbnails &amp; proxies so you have something that loads well on a slow connection &#8211; it\u2019s not as functional. Everything here is doable within the web interface after installation, and it\u2019s easy as can be.<\/p>\n\n\n\n<p>This program has the easiest installation &amp; documentation I\u2019ve found for this type of GNU\/Linux software. It is useless for me to provide instructions here because [following Immich team\u2019s instructions, this will all work perfectly(<a href=\"https:\/\/immich.app\/docs\/install\/docker-compose\/\">https:\/\/immich.app\/docs\/install\/docker-compose\/<\/a>) with no confusion. Immich is as good as as bitwarden with regards to \u201cjust working\u201d out of the box &amp; a big part of why I fell in love with their progam.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=773\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=773\">edit source<\/a>]<\/h2>\n\n\n\n<p>Before starting, ensure you have:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Docker Compose version 2.x installed(you should\u2019ve done this setting up onlyoffice on this VM earlier)<\/li>\n\n\n\n<li>Docker installed from the official Docker repository(you should\u2019ve done this setting up onlyoffice on this VM earlier)<\/li>\n\n\n\n<li>Enough storage space for the photos &amp; videos from your phone<\/li>\n\n\n\n<li>Did I mention not to install docker using SNAP from the ubuntu install? Don\u2019t do that.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Install docker properly.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=774\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=774\">edit source<\/a>]<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;This step may not be necessary!<\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\n<ul class=\"wp-block-list\">\n<li>YOU DO NOT NEED TO PERFORM THIS STEP IF YOU INSTALLED DOCKER WHILE INSTALLING ONLYOFFICE. IF YOU INSTALLED DOCKER PRIOR TO INSTALLING ONLYOFFICE, SKIP THIS STEP! IF YOU DID NOT INSTALL ONLYOFFICE BECAUSE YOU DIDN\u2019T WANT ONLYOFFICE, THAT MEANS YOU SKIPPED INSTALLING DOCKER AS WELL; IN WHICH CASE, YOU WILL NEED TO FOLLOW THESE INSTRUCTIONS.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Never use Ubuntu\u2019s snap version of docker[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=775\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=775\">edit source<\/a>]<\/h4>\n\n\n\n<p>Ubuntu installs docker by default using the cancerous snap. We do not want to use snap. Ubuntu installer will ask if you want to install Docker, and you should always say No.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Doesn\u2019t onlyoffice\u2019s install script install docker for me?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=776\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=776\">edit source<\/a>]<\/h4>\n\n\n\n<p>Onlyoffice\u2019s installation script&nbsp;<strong>DOES<\/strong>&nbsp;install docker for you. I am still going to have you do it manually.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you choose to not install onlyoffice, and wish to install Immich, I want you to know how to install docker on this virtual machine&nbsp;<em>yourself.<\/em><\/li>\n\n\n\n<li>I don\u2019t want to rely on onlyoffice\u2019s script. It won\u2019t install docker for us if it detects Docker already, so we\u2019re not going to do a double install. What if onlyoffice\u2019s installation script stops installing docker the same way in a new version, or stops installing docker at all within its script?<\/li>\n<\/ul>\n\n\n\n<p>It\u2019s little work to install Docker the right way for our purposes manually, and it\u2019s good to have it documented so that you can use docker for immich even if you elect not to install Onlyoffice.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Update and upgrade your system[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=777\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=777\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update &amp;&amp; sudo apt upgrade -y\nsudo apt install curl git wget -y<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">1.2 Check for other Docker installations:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=778\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=778\">edit source<\/a>]<\/h4>\n\n\n\n<p>Run&nbsp;<code>docker --version<\/code>&nbsp;and see what is installed. Nothing should be installed yet since this is a fresh system. If something is installed, remove it.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Just incase you accidentally installed snap version of docker:\n\nsudo snap remove docker\n\n# For other versions of docker: \n\nsudo apt remove docker docker-engine docker.io containerd runc<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">1.3 Install Docker using official Docker script:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=779\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=779\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">curl -fsSL https:\/\/get.docker.com -o get-docker.sh\nsudo sh get-docker.sh<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;It\u2019s very important to use the official Docker installation and not the Snap version. The Snap version can cause issues due to its sandboxed nature, making it a mess for mailcow\u2019s requirements. Docker snap makes me sad, and it\u2019ll make you sad too if you try to make things work with it.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">1.4 Install Docker Compose:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=780\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=780\">edit source<\/a>]<\/h4>\n\n\n\n<p>Ubuntu\u2019s&nbsp;<code>docker-compose-plugin<\/code>&nbsp;is safe to use, it is not snap cancer.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install docker-compose-plugin -y\nsudo systemctl enable --now docker<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">1.5 Verify the install[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=781\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=781\">edit source<\/a>]<\/h4>\n\n\n\n<p>Run&nbsp;<code>docker compose version<\/code>&nbsp;and make sure the version is 2.0 or higher. Run&nbsp;<code>docker --version<\/code>&nbsp;and make sure version is 24.0.0 or higher<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1.6 Set proper permissions:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=782\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=782\">edit source<\/a>]<\/h4>\n\n\n\n<p>Docker needs to be run as root for some operations, but you can add your user to the docker group to avoid using&nbsp;<code>sudo<\/code>&nbsp;all the time. To be clear, mailcow\u2019s own&nbsp;<a href=\"https:\/\/docs.mailcow.email\/getstarted\/install\/#check-selinux-specifics\">documentation<\/a>&nbsp;and&nbsp;<a href=\"https:\/\/community.mailcow.email\/d\/59-mailcow-containers-running-as-root\">community<\/a>&nbsp;suggest starting with root or&nbsp;<code>sudo<\/code>, and you should trust them more than me. To quote mailcow developers,&nbsp;<em>\u201cControlling the Docker daemon as non-root user does not give you additional security. The unprivileged user will spawn the containers as root likewise. The behaviour of the stack is identical.\u201d<\/em>&nbsp;Run this command to add your user:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo usermod -aG docker $USER<\/pre>\n\n\n\n<p>Log out and log back in, or run:&nbsp;<code>newgrp docker<\/code><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Immichdiagrambad.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Immichok.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Immichdiagramgood.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Understand how this will be set up differently from stock setup.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=783\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=783\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 How you\u2019re supposed to use Immich[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=784\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=784\">edit source<\/a>]<\/h4>\n\n\n\n<p>The stock setup of Immich, by default, is to have Immich upload your images &amp; videos from your phone to the immich server. You control your library on your phone &amp; on your server in the immich application.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 Syncthing conflict with Immich[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=785\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=785\">edit source<\/a>]<\/h4>\n\n\n\n<p>Didn\u2019t we already set up syncthing to do this? Yes, we did!<\/p>\n\n\n\n<p>I don\u2019t want to use Immich to sync my phone\u2019s&nbsp;<strong>DCIM\/Camera<\/strong>&nbsp;folder, and then syncthing for everything else. In my opinion, it doesn\u2019t make sense to use Immich by itself to do this; Immich is for photos &amp; videos, it is not for Music, Documents, &amp; all the other folders on our phone. If we used syncthing for those files &amp; folders, and used Immich for photos\/videos, that means we have two applications running at the same time, that do the same thing. This means 2 points of failure rather than 1.<\/p>\n\n\n\n<p>Syncthing was designed with one purpose in mind; transfer files from device to device. I would prefer to use a tool that was designed for the job.<\/p>\n\n\n\n<p>As a result, I am going to set up the&nbsp;<code>~\/androidbackup\/DCIM<\/code>&nbsp;folder as an&nbsp;<strong>external library<\/strong>&nbsp;in Immich.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 Attaching ZFS pool to Immich[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=786\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=786\">edit source<\/a>]<\/h4>\n\n\n\n<p>See Also, remember the giant ZFS pool we created? On my setup, that\u2019s over 100 terabytes of stuff! Much of that are old images &amp; videos that are not in my phone photo backup directory. I want to see those in Immich.<\/p>\n\n\n\n<p>We created a Samba share for our ZFS pool so we could access it from elsewhere. I am going to create a&nbsp;<strong>read only<\/strong>&nbsp;samba share that is mounted on&nbsp;<code>~\/Pictures<\/code>, and then set this up with Immich as a&nbsp;<strong>second external library.<\/strong><\/p>\n\n\n\n<p>TL;DR &#8211; Immich will have access to everything stored in your ZFS pool archive as a photo library, as well as your android phone\u2019s photos. This allows me to perform machine learning on everything; my android phone photo backups, current android phone photos, as well as all of my stuff from the past 15 years all within one piece of software.<\/p>\n\n\n\n<p>After this is done I will be able to use the search feature and find photos I forgot about within seconds, dating back 15 years. Awesome.&nbsp;\ud83d\ude42<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>QUESTION:<\/strong>&nbsp;Why do we want the zfs pool share to be read only?<\/p>\n\n\n\n<p>The&nbsp;<strong>androidstuff<\/strong>&nbsp;virtual machine that houses our syncthing backup of our android phone is going to be backed up regularly to our zfs pool. We have a copy of that being backed up every week. The entire ZFS pool, for me, is over 100 terabytes &#8211; so having version controlled backups is much more difficult.<\/p>\n\n\n\n<p>As a result, I am personally much more protective of the data on my zfs pool than I am the data on my androidphone backups.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Mount a read only samba share of the ZFS pool for Immich onto the androidstuff virtual machine[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=787\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=787\">edit source<\/a>]<\/h2>\n\n\n\n<p>We are going to do the following:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>On the&nbsp;<strong>happycloud<\/strong>&nbsp;host machine, create another samba share of our ZFS pool&nbsp;<code>\/mediapool\/archive<\/code>&nbsp;that is read only.<\/li>\n\n\n\n<li>Mount this inside the&nbsp;<strong>androidstuff<\/strong>&nbsp;virtual machine on&nbsp;<code>~\/Pictures<\/code>&nbsp;which is the Pictures subdirectory of my home directory.&nbsp;<code>~\/<\/code>&nbsp;is shorthand for your home directory; in my case,&nbsp;<code>~\/<\/code>&nbsp;is the same as&nbsp;<code>\/home\/louis\/<\/code><\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">3.1 Modify samba configuration on happycloud host machine[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=788\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=788\">edit source<\/a>]<\/h4>\n\n\n\n<p>SSH into the happycloud host machine:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ssh louis@happycloud.home.arpa<\/pre>\n\n\n\n<p>or<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ssh louis@192.168.5.2<\/pre>\n\n\n\n<p>Our&nbsp;<code>\/etc\/samba\/smb.conf<\/code>&nbsp;file currently looks like this:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[global]\n    # Network settings\n    workgroup = HOME\n    realm = home.arpa\n    netbios name = happycloud\n    server string = ZFS Archive Server\n    dns proxy = no\n    \n    # Security settings\n    security = user\n    map to guest = bad user\n    server signing = auto\n    client signing = auto\n    \n    # Logging\n    log level = 1\n    log file = \/var\/log\/samba\/%m.log\n    max log size = 1000\n    \n    # Performance optimization\n    socket options = TCP_NODELAY IPTOS_LOWDELAY\n    read raw = yes\n    write raw = yes\n    use sendfile = yes\n    min receivefile size = 16384\n    aio read size = 16384\n    aio write size = 16384\n    \n    # Multichannel support\n    server multi channel support = yes\n    \n    # Disable unused services\n    load printers = no\n    printing = bsd\n    printcap name = \/dev\/null\n    disable spoolss = yes\n    \n    # Character\/Unix settings\n    unix charset = UTF-8\n    dos charset = CP932<\/pre>\n\n\n<p>[archive]<\/p>\n\n\n\n<p>comment = ZFS Archive Share path = \/mediapool\/archive valid users = louis invalid users = root browseable = yes read only = no writable = yes create mask = 0644 force create mode = 0644 directory mask = 0755 force directory mode = 0755 force user = louis force group = louis veto files = \/._*\/.DS_Store\/.Thumbs.db\/.Trashes\/ delete veto files = yes follow symlinks = yes wide links = no ea support = yes inherit acls = yes hide unreadable = yes guest ok = no<\/p>\n\n\n\n<p>We are going to add something like this to the bottom of the&nbsp;<code>\/etc\/samba\/smb.conf<\/code>&nbsp;file. Obviously&nbsp;<strong>feel free to set the&nbsp;<code>path<\/code>&nbsp;folder to what YOU want Immich to see<\/strong>. This will be read-only, so if something happens on your host, you won\u2019t lost everything.<\/p>\n\n\n\n<p>Use nano to edit the file:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo nano -w \/etc\/samba\/smb.conf<\/pre>\n\n\n\n<p>Enter the following at the end. Hit enter so there\u2019s a pretty little space before the new section.&nbsp;\ud83d\ude42<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[immich]\n    comment = ZFS Archive Share (Read-Only)\n    path = \/mediapool\/archive\n    valid users = louis\n    browseable = yes\n    read only = yes\n    guest ok = no\n    create mask = 0644\n    directory mask = 0755\n    veto files = \/._*\/.DS_Store\/.Thumbs.db\/.Trashes\/\n    delete veto files = yes\n    follow symlinks = yes\n    wide links = no\n    ea support = yes\n    inherit acls = yes\n    hide unreadable = yes<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3.2 Configure the samba share on the androidstuff virtual machine[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=789\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=789\">edit source<\/a>]<\/h4>\n\n\n\n<p>We want this to mount each time the&nbsp;<strong>androidstuff<\/strong>&nbsp;virtual machine that will run Immich boots. To do this, we will edit&nbsp;<code>\/etc\/fstab<\/code>&nbsp;&#8211; the file that defines where hard drives, partitions, network shares, are mounted on the filesystem.<\/p>\n\n\n\n<p>We have to install the packages that allow us to mount samba shares:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install cifs-utils -y<\/pre>\n\n\n\n<p>Edit the file:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo nano -w \/etc\/fstab<\/pre>\n\n\n\n<p>Add the following line:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/192.168.5.2\/immich \/home\/louis\/Pictures cifs ro,credentials=\/etc\/samba_credentials,iocharset=utf8,vers=3.0 0 0<\/pre>\n\n\n\n<p>Make sure that the IP address matches the IP address of the machine that you have your ZFS pool on.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>\/\/192.168.5.2<\/code>&nbsp;is the address of the computer that is running samba server for our samba share.\n<ul class=\"wp-block-list\">\n<li><code>immich<\/code>&nbsp;is the name of the samba share.<\/li>\n\n\n\n<li>In&nbsp;<strong>happycloud<\/strong>\u2019s\u2019&nbsp;<code>\/etc\/samba\/smb.conf<\/code>&nbsp;configuration file, the line<code>path = \/mediapool\/archive<\/code>&nbsp;is present under the&nbsp;<code>[immich]<\/code>&nbsp;share settings.<\/li>\n\n\n\n<li>Therefore, `<code>\/\/192.168.5.2\/immich<\/code>&nbsp;will show us&nbsp;<code>\/mediapool\/archive<\/code>&nbsp;on the machine located at&nbsp;<code>192.168.5.2<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><code>cifs<\/code>&nbsp;is the filesystem type. CIFS stands for&nbsp;<strong>Common Internet File System<\/strong>.<\/li>\n\n\n\n<li><code>ro<\/code>&nbsp;means readonly.<\/li>\n\n\n\n<li><code>\/etc\/samba_credentials<\/code>&nbsp;is the file that will house the username &amp; password to access this share.<\/li>\n\n\n\n<li>For the love of god, do not forget to set the proper permissions on the<code>\/etc\/samba_credentials<\/code>&nbsp;file when I tell you to.<\/li>\n<\/ul>\n\n\n\n<p>Once you\u2019re done adding that line to the file, we need to provide it a username\/password so it can log into the password protected share.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Create the credentials file that will house the username &amp; password:\nsudo nano -w \/etc\/samba_credentials<\/pre>\n\n\n\n<p>Add your username and password you set when you set the password for your samba user to the file in the following format:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">username=louis\npassword=passwordman<\/pre>\n\n\n\n<p>If you forgot what the samba password is for your user, refer to&nbsp;<strong>step 6.5<\/strong>&nbsp;in the&nbsp;<strong>Setting up ZFS for data storage<\/strong>&nbsp;portion of the guide.<\/p>\n\n\n\n<p><strong>Make sure that this file is not accessible by anyone besides root!<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo chown root \/etc\/samba_credentials\nsudo chmod 600 \/etc\/samba_credentials<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3.3 Set the permissions for samba credentials file[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=790\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=790\">edit source<\/a>]<\/h4>\n\n\n\n<p>Important enough to be worth stating again:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo chown root \/etc\/samba_credentials\nsudo chmod 600 \/etc\/samba_credentials<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">3.4 Mount the samba share on the androidstuff virtual machine[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=791\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=791\">edit source<\/a>]<\/h4>\n\n\n\n<p>Run the following to mount everything in the&nbsp;<code>\/etc\/fstab<\/code>&nbsp;file, including your samba share.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo mount -a\nsudo systemctl daemon-reload<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3.5 Make sure it worked.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=792\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=792\">edit source<\/a>]<\/h4>\n\n\n\n<p>In&nbsp;<code>\/home\/louis\/Pictures<\/code>on the&nbsp;<strong>androidstuff<\/strong>&nbsp;virtual machine you should see everything that is on&nbsp;<code>\/mediapool\/archive<\/code>&nbsp;on the&nbsp;<strong>happycloud<\/strong>&nbsp;host server. Try making a file and saving it there. It shouldn\u2019t work.<\/p>\n\n\n\n<p>Create a file on happycloud. Go to the terminal window for happycloud, or just ssh in if you don\u2019t have one open.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ssh louis@happycloud.home.arpa\n\n# Put a file called hello_world.log that says \"hi\" inside of it into the \/mediapool\/archive directory\n\necho \"hi\" &gt; \/mediapool\/archive\/helloworld.log<\/pre>\n\n\n\n<p>Then, on the&nbsp;<strong>androidstuff<\/strong>&nbsp;virtual machine, try to view it. We mounted this samba share on&nbsp;<code>\/home\/louis\/Pictures<\/code>&nbsp;so&nbsp;<code>hello_world.log<\/code>&nbsp;should show up on&nbsp;<code>\/home\/louis\/Pictures\/hello_world.log<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">louis@androidstuff:~$ cat helloworld.log\nlouis@androidstuff:~$ cat ~\/Pictures\/helloworld.log \nhi\nlouis@androidstuff:~$ rm ~\/Pictures\/helloworld.log \nrm: remove write-protected regular file '\/home\/louis\/Pictures\/helloworld.log'? y\nrm: cannot remove '\/home\/louis\/Pictures\/helloworld.log': Read-only file system\nlouis@androidstuff:~$ sudo rm ~\/Pictures\/helloworld.log \n[sudo] password for louis: \nrm: cannot remove '\/home\/louis\/Pictures\/helloworld.log': Read-only file system\n<\/pre>\n\n\n\n<p>As you can see, I can see the file, I can read the file, but I can\u2019t delete the file. Perfect.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Make your directories[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=793\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=793\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">4.1 Create Directory Structure[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=794\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=794\">edit source<\/a>]<\/h4>\n\n\n\n<p>I like to put the programs I am downloading\/working on in&nbsp;<code>\/home\/louis\/Downloads\/programs<\/code>&nbsp;The&nbsp;<code>~\/<\/code>&nbsp;means your home directory: so if your username is chris,&nbsp;<code>~\/Downloads\/programs<\/code>&nbsp;means&nbsp;<code>\/home\/chris\/Downloads\/programs<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Create and enter directory\nmkdir -p ~\/Downloads\/programs\/immich-app\ncd ~\/Downloads\/programs\/immich-app<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4.2 Download Program[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=795\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=795\">edit source<\/a>]<\/h4>\n\n\n\n<p>This is installed via docker and the installation files\/instructions from Immich themselves are completely plug &amp; play. a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Get docker-compose.yml\nwget -O docker-compose.yml https:\/\/github.com\/immich-app\/immich\/releases\/latest\/download\/docker-compose.yml\n\n# Get environment file\nwget -O .env https:\/\/github.com\/immich-app\/immich\/releases\/latest\/download\/example.env<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4.3 Optional Hardware Acceleration Files[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=796\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=796\">edit source<\/a>]<\/h4>\n\n\n\n<p>I don\u2019t use hardware acceleration since my machine does not have a GPU, or any sort of coral device. This is experimenta as well so it may give you issues. However, if you plan to use hardware acceleration, grab these to set them up &amp;&nbsp;<a href=\"https:\/\/immich.app\/docs\/features\/ml-hardware-acceleration\/\">follow the instructions from Immich documentation<\/a>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># For transcoding acceleration\nwget -O hwaccel.transcoding.yml https:\/\/github.com\/immich-app\/immich\/releases\/latest\/download\/hwaccel.transcoding.yml\n\n# For machine learning acceleration\nwget -O hwaccel.ml.yml https:\/\/github.com\/immich-app\/immich\/releases\/latest\/download\/hwaccel.ml.yml<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Edit docker-compose.yml &amp; Environment File[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=797\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=797\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">5.1 Edit the&nbsp;<code>.env<\/code>&nbsp;file[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=798\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=798\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">nano -w .env<\/pre>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Database Setting<\/strong>\n<ul class=\"wp-block-list\">\n<li>Change&nbsp;<code>DB_PASSWORD<\/code>&nbsp;. You should use characters from A to Z, a to z, and 0 to 9 &#8211; don\u2019t use anything funky. I recommend the&nbsp;<a href=\"https:\/\/bitwarden.com\/password-generator\/#password-generator\">Bitwarden password generator<\/a>.\n<ul class=\"wp-block-list\">\n<li>You can use bitwarden password generator on their website without installing their program, but I suggest installing their program at some point.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Upload Location<\/strong>\n<ul class=\"wp-block-list\">\n<li>Set&nbsp;<code>UPLOAD_LOCATION<\/code>&nbsp;to where you want items you upload to immich to go.-I don\u2019t use this because I use syncthing to upload things to&nbsp;<code>\/home\/louis\/androidbackup<\/code>** rather than uploading straight to immich.<\/li>\n\n\n\n<li>For the purposes of how I use Immich &amp; this guide, I will not be changing this.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Timezone<\/strong>\n<ul class=\"wp-block-list\">\n<li>Uncomment and set the&nbsp;<code>TZ=<\/code>&nbsp;line to your timezone.<\/li>\n\n\n\n<li>Find timezone codes&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_tz_database_time_zones\">here<\/a><\/li>\n\n\n\n<li>For example, mine would be&nbsp;<code>America\/Chicago<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">5.2 Edit the&nbsp;<code>docker-compose.yml<\/code>&nbsp;file[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=799\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=799\">edit source<\/a>]<\/h4>\n\n\n\n<p>Open the file for editing:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">nano -w docker-compose.yml<\/pre>\n\n\n\n<p>This file in its entirety is fine as is. Nothing has to be changed. The two lines I add are to allow immich access to the&nbsp;<code>~\/Pictures<\/code>&nbsp;directory where my ZFS pool\u2019s files are located, and the&nbsp;<code>~\/androidbackup\/DCIM<\/code>&nbsp;directory where the photos &amp; videos I took using the camera app on my android phone are stored.<\/p>\n\n\n\n<p>The two lines I added to the file below are:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">      - \/home\/louis\/androidbackup\/DCIM:\/files\/phonepics:rw\n      - \/home\/louis\/Pictures:\/files\/zfspics:ro<\/pre>\n\n\n\n<p>These lines do the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Makes&nbsp;<code>\/home\/louis\/androidbackup\/DCIM<\/code>&nbsp;on the host computer Immich is running on show up as&nbsp;<code>\/files\/phonepics<\/code>&nbsp;inside the docker container for Immich, with read write permissions.<\/li>\n\n\n\n<li>Makes&nbsp;<code>\/home\/louis\/Pictures<\/code>&nbsp;on the host computer Immich is running on show up as&nbsp;<code>\/files\/zfspics<\/code>&nbsp;inside the docker container for Immich, with read only permissions.<\/li>\n<\/ul>\n\n\n\n<p>To see where I put these in the context of the full file, look below:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#\n# WARNING: Make sure to use the docker-compose.yml of the current release:\n#\n# https:\/\/github.com\/immich-app\/immich\/releases\/latest\/download\/docker-compose.yml\n#\n# The compose file on main may not be compatible with the latest release.\n#\n\nname: immich\n\nservices:\n  immich-server:\n    container_name: immich_server\n    image: ghcr.io\/immich-app\/immich-server:${IMMICH_VERSION:-release}\n    # extends:\n    #   file: hwaccel.transcoding.yml\n    #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding\n    volumes:\n      # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file\n      - ${UPLOAD_LOCATION}:\/usr\/src\/app\/upload\n      - \/etc\/localtime:\/etc\/localtime:ro\n      - \/home\/louis\/androidbackup\/DCIM:\/files\/phonepics:rw\n      - \/home\/louis\/Pictures:\/files\/zfspics:ro\n    env_file:\n      - .env\n    ports:\n      - '2283:2283'\n    depends_on:\n      - redis\n      - database\n    restart: always\n    healthcheck:\n      disable: false\n\n  immich-machine-learning:\n    container_name: immich_machine_learning\n    # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.\n    # Example tag: ${IMMICH_VERSION:-release}-cuda\n    image: ghcr.io\/immich-app\/immich-machine-learning:${IMMICH_VERSION:-release}\n    # extends: # uncomment this section for hardware acceleration - see https:\/\/immich.app\/docs\/features\/ml-hardware-acceleration\n    #   file: hwaccel.ml.yml\n    #   service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable\n    volumes:\n      - model-cache:\/cache\n    env_file: \n      - .env\n    restart: always\n    healthcheck:\n      disable: false\n\n  redis:\n    container_name: immich_redis\n    image: docker.io\/redis:6.2-alpine@sha256:2ba50e1ac3a0ea17b736ce9db2b0a9f6f8b85d4c27d5f5accc6a416d8f42c6d5\n    healthcheck:\n      test: redis-cli ping || exit 1\n    restart: always\n\n  database:\n    container_name: immich_postgres\n    image: docker.io\/tensorchord\/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0\n    environment:\n      POSTGRES_PASSWORD: ${DB_PASSWORD}\n      POSTGRES_USER: ${DB_USERNAME}\n      POSTGRES_DB: ${DB_DATABASE_NAME}\n      POSTGRES_INITDB_ARGS: '--data-checksums'\n    volumes:\n      # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file\n      - ${DB_DATA_LOCATION}:\/var\/lib\/postgresql\/data\n    healthcheck:\n      test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum=\"$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')\"; echo \"checksum failure count is $$Chksum\"; [ \"$$Chksum\" = '0' ] || exit 1\n      interval: 5m\n      start_interval: 30s\n      start_period: 5m\n    command:\n      [\n        'postgres',\n        '-c',\n        'shared_preload_libraries=vectors.so',\n        '-c',\n        'search_path=\"$$user\", public, vectors',\n        '-c',\n        'logging_collector=on',\n        '-c',\n        'max_wal_size=2GB',\n        '-c',\n        'shared_buffers=512MB',\n        '-c',\n        'wal_compression=on',\n      ]\n    restart: always\n\nvolumes:\n  model-cache:<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>DOCKER CHEAT SHEET: going through&nbsp;<code>docker-compose.yml<\/code>&nbsp;file for Immich<\/strong><\/p>\n\n\n\n<p>This file sets up a bunch of containers<em>(virtualized, minimalistic computers that run inside your computer)<\/em>&nbsp;for the Immich photo gallery\/library\/machine learning &amp; management system.<\/p>\n\n\n\n<p><strong>1.&nbsp;<code>name: immich<\/code><\/strong>&nbsp;This is the name of the overall Docker Compose project.<\/p>\n\n\n\n<p><strong>2.&nbsp;<code>services:<\/code><\/strong>&nbsp;This section lists all the containers (services) that make up the Immich application. Each service is a part of the overall program.<\/p>\n\n\n\n<p><strong>immich-server<\/strong>&nbsp;<strong>3.&nbsp;<code>immich-server:<\/code><\/strong>&nbsp;This is the primary backend service of Immich. It handles the main functions of the program like uploading, managing, &amp; displaying photos.<\/p>\n\n\n\n<p><strong>4.&nbsp;<code>container_name: immich_server<\/code><\/strong>&nbsp;This is the name of the container so when you run&nbsp;<code>docker ps -a<\/code>&nbsp;to see what containers are running you can see this one and know what it is for immediately. Custom name for the main immich container so it is easy to find when you type&nbsp;<code>docker ps -a<\/code>&nbsp;. Sometimes while debugging things that are not working you may want to enter the environment of the virtual container<em>(this is like sshing into your server, but into the virtual server that runs immich)<\/em>, which you can do by typing&nbsp;<code>docker exec -it immich_server bash<\/code>&nbsp;&#8211; but to do that you need to know which container is which! This is where using sensible names comes into play.<\/p>\n\n\n\n<p><strong>5.&nbsp;<code>image: ghcr.io\/immich-app\/immich-server:${IMMICH_VERSION:-release}<\/code><\/strong>&nbsp;This tells it what Docker image to use for the backend. It pulls the latest stable version unless you\u2019ve overridden&nbsp;<code>IMMICH_VERSION<\/code>&nbsp;in your&nbsp;<code>.env<\/code>&nbsp;file. Since Immich does not destroy their software with new releases, I am setting it to grab the latest version.<\/p>\n\n\n\n<p><strong>6.&nbsp;<code>volumes:<\/code><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>${UPLOAD_LOCATION}:\/usr\/src\/app\/upload<\/code>: Links the photo upload storage location from your system to the container. The path&nbsp;<code>${UPLOAD_LOCATION}<\/code>&nbsp;is defined in the&nbsp;<code>.env<\/code>&nbsp;file. Whatever this is will show up inside the container at&nbsp;<code>\/usr\/src\/app\/upload<\/code><\/li>\n\n\n\n<li><code>\/etc\/localtime:\/etc\/localtime:ro<\/code>: This makes the container use the same time as your computer\u2019s time. The&nbsp;<code>:ro<\/code>&nbsp;makes it read-only so your computer can\u2019t do what the characters in predestination did. The only thing worse than using google photos is&nbsp;<em><strong>SPOILER ALERT<\/strong><\/em>&nbsp;having your machine send you back in time so you are an orphan who was its own mother like in&nbsp;<strong>Predestination<\/strong>. Still a decent time travel movie but it has nothing on&nbsp;<strong>Primer<\/strong>.<\/li>\n\n\n\n<li><code>\/home\/louis\/androidbackup\/DCIM:\/files\/phonepics:rw<\/code>: Maps a directory with phone pictures to&nbsp;<code>\/files\/phonepics<\/code>&nbsp;in the container. This is read-write (<code>rw<\/code>). SO whatever is inside my&nbsp;<code>\/home\/louis\/androidbackup\/DCIM<\/code>&nbsp;directory on the&nbsp;<code>androidstuff<\/code>&nbsp;virtual machine running at&nbsp;<code>192.168.5.5<\/code>&nbsp;that we set up will show up inside the&nbsp;<code>immich-server<\/code>&nbsp;docker container under the directory&nbsp;<code>\/files\/phonepics<\/code>.<\/li>\n\n\n\n<li><code>\/home\/louis\/Pictures:\/files\/zfspics:ro<\/code>: Maps a directory with other pictures to&nbsp;<code>\/files\/zfspics<\/code>&nbsp;in the container. This one is read-only (<code>ro<\/code>).<\/li>\n<\/ul>\n\n\n\n<p><strong>7.&nbsp;<code>env_file:<\/code><\/strong>&nbsp;Loads environment variables from the&nbsp;<code>.env<\/code>&nbsp;file, which centralizes configuration settings.<\/p>\n\n\n\n<p><strong>8.&nbsp;<code>ports:<\/code><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>'2283:2283'<\/code>: Maps port&nbsp;<code>2283<\/code>&nbsp;on your host system to port&nbsp;<code>2283<\/code>&nbsp;in the container. This allows you to access Immich\u2019s server on your browser at&nbsp;<code><a href=\"http:\/\/192.168.5.5:2283\/\">http:\/\/192.168.5.5:2283<\/a><\/code>&nbsp;since we are installing this dockerized deployment of Immich to the&nbsp;<code>androidstuff<\/code>&nbsp;virtual machine located at&nbsp;<code>192.168.5.5<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>9.&nbsp;<code>depends_on:<\/code><\/strong>&nbsp;This lists the services this container depends on.&nbsp;<code>redis<\/code>&nbsp;and&nbsp;<code>database<\/code>&nbsp;must be running before the server starts. Don\u2019t be scared by the word depends. It is included in&nbsp;<em>\u201cdependency\u201d<\/em>, but you\u2019re using a docker image deployed by good developers; dependencies are no longer something to be afraid of&nbsp;\ud83d\ude42 I promise&nbsp;\ud83d\ude42<\/p>\n\n\n\n<p><strong>10.&nbsp;<code>restart: always<\/code><\/strong>&nbsp;Automatically restarts the container if it crashes or if the system reboots. When you turn the system on immich will be on without having to go to its directory &amp; run&nbsp;<code>docker compose up -d<\/code>&nbsp;each time the computer starts.<\/p>\n\n\n\n<p><strong>11.&nbsp;<code>healthcheck:<\/code><\/strong>&nbsp;Monitors the container\u2019s health. The&nbsp;<code>disable: false<\/code>&nbsp;line means health checks are enabled.<\/p>\n\n\n\n<p><strong>immich-machine-learning<\/strong>&nbsp;<strong>12.&nbsp;<code>immich-machine-learning:<\/code><\/strong>&nbsp;This container handles machine learning tasks, like face or object recognition<em>(searching for \u201ccat on chair\u201d)<\/em>&nbsp;in your photos.<\/p>\n\n\n\n<p><strong>13.&nbsp;<code>container_name: immich_machine_learning<\/code><\/strong>&nbsp;Custom name for the machine learning container so it is easy to find when you type&nbsp;<code>docker ps -a<\/code>&nbsp;. Sometimes while debugging things that are not working you may want to enter the environment of the virtual container<em>(this is like sshing into your server, but into the virtual server that runs immich)<\/em>, which you can do by typing&nbsp;<code>docker exec -it immich_machine_learning bash<\/code>&nbsp;&#8211; but to do that you need to know which container is which! This is where using sensible names comes into play.<\/p>\n\n\n\n<p><strong>14.&nbsp;<code>image:<\/code><\/strong>&nbsp;Pulls the machine learning image from GitHub. You can enable hardware acceleration by adding a specific tag (e.g.,&nbsp;<code>-cuda<\/code>) if supported by your system.<\/p>\n\n\n\n<p><strong>15.&nbsp;<code>volumes:<\/code><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>model-cache:\/cache<\/code>: Links a Docker-managed volume to the container\u2019s&nbsp;<code>\/cache<\/code>&nbsp;directory for storing machine learning model data.<\/li>\n<\/ul>\n\n\n\n<p><strong>16.&nbsp;<code>env_file:<\/code><\/strong>&nbsp;Loads environment variables from&nbsp;<code>.env<\/code>&nbsp;for consistent configuration. For instance, instead of editing certain configuration files after or while setting up\/compiling the program, you put them in the environment file and when the docker container starts, it uses what is in the environment file.<\/p>\n\n\n\n<p><strong>17.&nbsp;<code>restart: always<\/code><\/strong>&nbsp;The container restarts if it crashes &amp; will start up with the computer.<\/p>\n\n\n\n<p><strong>18.&nbsp;<code>healthcheck:<\/code><\/strong>&nbsp;Keeps the container healthy and ensures it\u2019s running properly.<\/p>\n\n\n\n<p><strong>redis<\/strong>&nbsp;<strong>19.&nbsp;<code>redis:<\/code><\/strong>&nbsp;Redis is a high-speed database used for caching data and managing background tasks.<\/p>\n\n\n\n<p><strong>20.&nbsp;<code>container_name: immich_redis<\/code><\/strong>&nbsp;Custom name for the Redis container so it is easy to find when you type&nbsp;<code>docker ps -a<\/code>&nbsp;. Sometimes while debugging things that are not working you may want to enter the environment of the virtual container<em>(this is like sshing into your server, but into the virtual server that runs immich)<\/em>, which you can do by typing&nbsp;<code>docker exec -it immich_redis bash<\/code>&nbsp;&#8211; but to do that you need to know which container is which! This is where using sensible names comes into play.<\/p>\n\n\n\n<p><strong>21.&nbsp;<code>image:<\/code><\/strong>&nbsp;Specifies the exact Redis image to use, including a SHA256 checksum for security.<\/p>\n\n\n\n<p><strong>22.&nbsp;<code>healthcheck:<\/code><\/strong>&nbsp;Runs a simple test (<code>redis-cli ping<\/code>) to confirm the Redis service is working.<\/p>\n\n\n\n<p><strong>23.&nbsp;<code>restart: always<\/code><\/strong>&nbsp;Automatically restarts Redis if it fails\/it starts with the computer.<\/p>\n\n\n\n<p><strong>database<\/strong>&nbsp;<strong>24.&nbsp;<code>database:<\/code><\/strong>&nbsp;This is the PostgreSQL database, which stores metadata and application data for Immich.<\/p>\n\n\n\n<p><strong>25.&nbsp;<code>container_name: immich_postgres<\/code><\/strong>&nbsp;Custom name for the database container so it is easy to find when you type&nbsp;<code>docker ps -a<\/code>&nbsp;. Sometimes while debugging things that are not working you may want to enter the environment of the virtual container<em>(this is like sshing into your server, but into the virtual server that runs immich)<\/em>, which you can do by typing&nbsp;<code>docker exec -it immich_postgres bash<\/code>&nbsp;&#8211; but to do that you need to know which container is which! This is where using sensible names comes into play.<\/p>\n\n\n\n<p><strong>26.&nbsp;<code>image:<\/code><\/strong>&nbsp;Specifies a custom PostgreSQL image with vector support, used by Immich for advanced search features.<\/p>\n\n\n\n<p><strong>27.&nbsp;<code>environment:<\/code><\/strong>&nbsp;&#8211;&nbsp;<code>POSTGRES_PASSWORD<\/code>: Password for the database. &#8211;&nbsp;<code>POSTGRES_USER<\/code>: Username for the database. &#8211;&nbsp;<code>POSTGRES_DB<\/code>: Name of the database. &#8211;&nbsp;<code>POSTGRES_INITDB_ARGS<\/code>: Additional arguments for database<\/p>\n\n\n\n<p><strong>28.&nbsp;<code>volumes:<\/code><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>${DB_DATA_LOCATION}:\/var\/lib\/postgresql\/data<\/code>: Maps the database storage location from your system to the container. Edit&nbsp;<code>${DB_DATA_LOCATION}<\/code>&nbsp;in the&nbsp;<code>.env<\/code>&nbsp;file to change where your database files are stored.<\/li>\n<\/ul>\n\n\n\n<p><strong>29.&nbsp;<code>healthcheck:<\/code><\/strong>&nbsp;Runs periodic checks to ensure the database is healthy. It verifies that the database is running, accessible, and free of checksum errors.<\/p>\n\n\n\n<p><strong>30.&nbsp;<code>command:<\/code><\/strong>&nbsp;Customizes PostgreSQL\u2019s behavior with specific options, like enabling vector indexing (<code>shared_preload_libraries=vectors.so<\/code>) &amp; improving performance with optimized settings like&nbsp;<code>max_wal_size=2GB<\/code>.<\/p>\n\n\n\n<p><strong>31.&nbsp;<code>restart: always<\/code><\/strong>&nbsp;Makes database container restart if something goes wrong\/it starts with the computer.<\/p>\n\n\n\n<p><strong>volumes<\/strong>&nbsp;<strong>32.&nbsp;<code>volumes:<\/code><\/strong>&nbsp;&#8211;&nbsp;<code>model-cache<\/code>: A named volume for storing machine learning models. This ensures that cached data persists across container restarts or recreations.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Start the System[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=800\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=800\">edit source<\/a>]<\/h2>\n\n\n\n<p>While in the directory you downloaded the&nbsp;<code>docker-compose.yml<\/code>&nbsp;and&nbsp;<code>.env<\/code>&nbsp;file to, run the following:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker compose up<\/pre>\n\n\n\n<p>I like to type&nbsp;<code>docker compose up<\/code>&nbsp;at first without the&nbsp;<code>-d<\/code>&nbsp;because I can see what is happening without having to use tail on a logfile somewhere. If you don\u2019t care to do that, you can start it up like this with the&nbsp;<code>-d<\/code>&nbsp;which allows the program to start without it stopping when you close the terminal window you ran the command in.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker compose up -d<\/pre>\n\n\n\n<p><strong>Visiting Immich web interface<\/strong>: at this point you should be able to visit&nbsp;<code><a href=\"http:\/\/192.168.5.5:2283\/\">http:\/\/192.168.5.5:2283<\/a><\/code>&nbsp;or&nbsp;<code><a href=\"http:\/\/androidstuff.home.arpa:2283\/\">http:\/\/androidstuff.home.arpa:2283<\/a><\/code>&nbsp;and see Immich, in all its glory&nbsp;\ud83d\ude42<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">If it doesn\u2019t work:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=801\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=801\">edit source<\/a>]<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Wrong Docker Version<\/strong>&nbsp;If you get&nbsp;<code>unknown shorthand flag: 'd' in -d<\/code>, you\u2019re likely using the wrong Docker version. Fix by:\n<ul class=\"wp-block-list\">\n<li>Remove the distribution\u2019s docker.io package. If you used snap, I will hurt you.<\/li>\n\n\n\n<li>Install Docker from the official repository<\/li>\n\n\n\n<li>If you used ubuntu version of docker installed via snap upon installation of ubuntu server after all the times I told you not to in the past 1000 pages of this guide\u2026..<\/li>\n\n\n\n<li>You asked for this.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Docker Compose Command<\/strong>\n<ul class=\"wp-block-list\">\n<li>Use&nbsp;<code>docker compose<\/code>&nbsp;(not&nbsp;<code>docker-compose<\/code>)<\/li>\n\n\n\n<li>Installing from Docker official repository is required here. You saw how to do this in the onlyoffice setup section on this virtual machine.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114081931118.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114081943465.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114081947837.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114081952635.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114082104266.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114082148529.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114082040918.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114082203688.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114082215711.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114082308766.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114082636100.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114082702362.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114082732250.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114083349204.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114102736005.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114085055146.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114085114634.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114085134227.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114085158141.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114085215897.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114085323218.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114085419575.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114102843677.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114085501334.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114103219273.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114085653523.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114085749209.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114085900361.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114085939405.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114085956763.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114090009152.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114090053347.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114103825099.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114104024871.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Configure Immich[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=802\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=802\">edit source<\/a>]<\/h2>\n\n\n\n<p>Once it\u2019s started it\u2019ll ask you to set up a username and a password. Once that\u2019s done, we have a few tasks to complete.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">6.1 Set up your android backup &amp; zfs pool as libraries in Immich[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=803\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=803\">edit source<\/a>]<\/h4>\n\n\n\n<p>This is necessary so you can see your files.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click the circle in the upper right corner that has the first letter of your username.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Administration<\/strong><\/li>\n\n\n\n<li>Click&nbsp;<strong>External Libraries<\/strong>&nbsp;on the left menu<\/li>\n\n\n\n<li>Click on the plus or on the&nbsp;<strong>Create Library<\/strong>&nbsp;button in the upper right to create a library.<\/li>\n\n\n\n<li>Create two libraries: and set yourself as the owner of each.<\/li>\n\n\n\n<li>Click on the three dots next to the library.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Rename<\/strong><\/li>\n\n\n\n<li>Name each library &#8211; (e.g.&nbsp;<strong>zfs pool<\/strong>&nbsp;and&nbsp;<strong>android phone<\/strong>.)<\/li>\n\n\n\n<li>Click the three dots again and click&nbsp;<strong>Edit Import Paths<\/strong><\/li>\n\n\n\n<li>Set each external library to have the path we chose above for our zfs pool and our android phone backup.&nbsp;<code>- \/home\/louis\/androidbackup\/DCIM:\/files\/phonepics:rw - \/home\/louis\/Pictures:\/files\/zfspics:ro<\/code><\/li>\n\n\n\n<li>Once done with this, go back to&nbsp;<strong>Settings<\/strong>&nbsp;in the left hand menu<\/li>\n\n\n\n<li>Go to&nbsp;<strong>Video Transcoding Settings<\/strong><\/li>\n\n\n\n<li>If you want video proxies created so you are watching lower bitrate files when you load immich(useful if you use this on a phone with bad internet speeds), change&nbsp;<strong>Transcode policy<\/strong>&nbsp;to&nbsp;<strong>All videos<\/strong><strong>NOTE:<\/strong>&nbsp;Transcoding videos doesn\u2019t delete the original. It creates new videos in a subfolder of the&nbsp;<code>immich-app<\/code>&nbsp;directory. The original video file is preserved in full quality in its original location.<\/li>\n\n\n\n<li>If you have a fast computer, or lots of patience, set&nbsp;<strong>Preset<\/strong>&nbsp;to&nbsp;<strong>fast<\/strong>&nbsp;&#8211; this will make video files that are smaller for the same quality than&nbsp;<strong>ultrafast<\/strong>. For&nbsp;<strong>Constant Rate Factor<\/strong>, higher is smaller file\/worse quality, lower number is larger file\/better quality. If you are making video proxies because your internet service sucks I\u2019d set this to 28.<\/li>\n\n\n\n<li>In&nbsp;<strong>Settings<\/strong>, go over to&nbsp;<strong>External Library<\/strong><\/li>\n\n\n\n<li>Under&nbsp;<strong>Library Watching<\/strong>&nbsp;enable&nbsp;<strong>Watch external libraries for file changes<\/strong><\/li>\n\n\n\n<li>Under&nbsp;<strong>Periodic Scanning<\/strong>&nbsp;Make sure this is turned on. I would make this something daring; perhaps once an hour. Remember, since we are not using the Immich app to upload the photos to Immich, Immich is not aware without scanning manually if we have added files or not.<\/li>\n\n\n\n<li>On the left hand menu, go over to&nbsp;<strong>Jobs<\/strong>.<\/li>\n\n\n\n<li>Next to&nbsp;<strong>LIBRARY<\/strong>, click the ALL button.<\/li>\n\n\n\n<li>Wait patiently.<\/li>\n\n\n\n<li>You\u2019re done.&nbsp;\ud83d\ude42<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7: Enjoy Immich[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=804\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=804\">edit source<\/a>]<\/h2>\n\n\n\n<p>Once the&nbsp;<strong>Jobs<\/strong>&nbsp;tab shows that Immich is done processing everything, head over to the homepage, and try the search box. It\u2019s awesome.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114111713397.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114111737760.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114111751348.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114112125953.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114112154974.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114114756999.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114115240120.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114115256590.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 8: Install Android App[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=805\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=805\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">8.1 Install the F-Droid store app[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=806\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=806\">edit source<\/a>]<\/h4>\n\n\n\n<p>Download F-Droid from the&nbsp;<a href=\"https:\/\/f-droid.org\/docs\/Get_F-Droid\/\">F-Droid website<\/a>&nbsp;and then open the apk to install it. F-Droid allows you to downlod all sorts of interesting open source apps.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">8.2 Install Immich[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=807\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=807\">edit source<\/a>]<\/h4>\n\n\n\n<p>Find &amp; install Immich<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">8.3 Start Immich[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=808\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=808\">edit source<\/a>]<\/h4>\n\n\n\n<p>When you start Immich, in the&nbsp;<strong>Server Endpoint URL<\/strong>&nbsp;field, but the same thing you put in your web browser to connect;&nbsp;<code><a href=\"http:\/\/192.168.5.5:2283\/\">http:\/\/192.168.5.5:2283<\/a><\/code>&nbsp;or&nbsp;<code><a href=\"http:\/\/androidstuff.home.arpa:2283\/\">http:\/\/androidstuff.home.arpa:2283<\/a><\/code><\/p>\n\n\n\n<p>Don\u2019t forget to put the port. Also, this will only work on local wifi or with your VPN on from your smartphone.&nbsp;<strong>Make sure you are connected to wifi or are connected to the VPN!<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Notes on upgrades\/updates:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=809\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=809\">edit source<\/a>]<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>\u201cBreaking changes\u201d<\/em>&nbsp;are when an old version of Immich will not work properly when updating to a new version of immich.<\/li>\n\n\n\n<li>Review release notes to see if this is the case with your version. This is something that is being worked on so it won\u2019t happen in the future. Alex is great with informing users on these changes.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Update Process[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=810\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=810\">edit source<\/a>]<\/h3>\n\n\n\n<p>To upgrade to a new version, go to the directory with Immich, in our case,&nbsp;<code>~\/Downloads\/programs\/immich-app<\/code>. Turn Immich off, pull the new version, and then turn it on again.&nbsp;<strong>I suggest having a backup of everything before doing this.<\/strong>&nbsp;Doing perfect VM backups will be in the next section.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd ~\/Downloads\/programs\/immich-app\ndocker compose down\ndocker compose pull\ndocker compose up -d<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Nextcloud Notes to replace Google Keep[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=811\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=811\">edit source<\/a>]<\/h1>\n\n\n\n<p>For most intents &amp; purposes, nextcloud is horrible. It does one thing right for me; notes. plaintext, or markdown notes.<\/p>\n\n\n\n<p>I live my life on a schedule where my day is mapped out in 5 to 15 minute increments, that is constantly changing. I&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=JKCSLur0VYw\">discussed this in a video 11 years ago<\/a>. Throughout the day I am constantly opening my notes application &amp; hitting the voice-to-text button so I can talk into my phone before I forget what I wanted to type or do. Sometimes, in the middle of the note I forget what I wanted to jot down and will speak out something that resembles the idea I hope I remember later.<\/p>\n\n\n\n<p>I need my notes. I need them to be easily accessible, available as either lists or as post-it-notes in the style of google keep. I need the notes application and the web interface to be easily accessible without having to install extra stuff on my computer if I don\u2019t want to. I need the interface to be as simplistic &amp; uncluttered as possible. More options = more chances for confusion for someone who&nbsp;<em>needs<\/em>&nbsp;a notes application(or physical notepad) to not forget what I am doing constantly.<\/p>\n\n\n\n<p>Nextcloud\u2019s interface does that for me. It mimics google keep\u2019s functionality and is the closest spot on thing I\u2019ve found to it.<\/p>\n\n\n\n<p><strong>If you want something that is well programmed, forget about this. Go install Joplin. I use nextcloud notes because the interface &amp; ease of use\/deployment is worth it for me.<\/strong>&nbsp;I have played around with joplin. It\u2019s obviously better coded software; but the phone application interface isn\u2019t it for me, and I don\u2019t want to go hunting for a client that will at best provide me the same experience I already have.<\/p>\n\n\n\n<p>I am a single user loading plain text files. As bad as nextcloud is, it can\u2019t mess that up. Well, maybe it can &#8211; but it hasn\u2019t for me yet.<\/p>\n\n\n\n<p>Follow these steps to deploy Nextcloud on your server (IP:&nbsp;<code>192.168.5.5<\/code>) with Docker Compose. This setup is restricted to clients within the&nbsp;<code>192.168.5.0\/24<\/code>&nbsp;and&nbsp;<code>192.168.6.0\/24<\/code>&nbsp;subnets.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installing Nextcloud for notes[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=812\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=812\">edit source<\/a>]<\/h2>\n\n\n\n<p>Nextcloud notes we install via docker. We will install ONLY the notes component when we enter the web interface so the least amount of nextcloud is on our system as is necessary.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: SSH into the androidstuff virtual machine computer[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=813\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=813\">edit source<\/a>]<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">ssh louis@192.168.5.5<\/pre>\n\n\n\n<p>OR<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ssh louis@androidstuff.home.arpa<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Install docker[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=814\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=814\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 Verify Docker installation:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=815\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=815\">edit source<\/a>]<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">IF YOU ELECTED TO INSTALL IMMICH OR ONLYOFFICE ON THIS VIRTUAL MACHINE, THIS PART IS ALREADY DONE &amp; YOU CAN SKIP TO STEP 3![<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=816\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=816\">edit source<\/a>]<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\n<ul class=\"wp-block-list\">\n<li>If you installed onlyoffice or immich on the androidstuff virtual machine, &amp; followed the instructions for it, you already installed docker properly on this virtual machine, and have no need to do this again. Skip to step 3 if that is the case.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Run&nbsp;<code>docker --version<\/code>&nbsp;and make sure the version is 24.0.0 or later. If not, remove the old version:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt remove docker docker-engine docker.io containerd runc<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 Install Docker using official Docker script:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=817\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=817\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">curl -fsSL https:\/\/get.docker.com -o get-docker.sh\nsudo sh get-docker.sh<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;It\u2019s very important to use the official Docker installation and not the Snap version. The Snap version can cause issues due to its sandboxed nature, making it a mess for&nbsp;<code>mailcow<\/code>\u2019s requirements. It is bad for our purposes, don\u2019t use it.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">2.4 Install Docker Compose &amp; prerequisites:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=818\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=818\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install docker-compose-plugin -y\nsudo systemctl enable --now docker<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.5 Make sure it worked[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=819\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=819\">edit source<\/a>]<\/h4>\n\n\n\n<p>Run&nbsp;<code>docker compose version<\/code>&nbsp;and make sure the version is 2.0 or higher.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Install nextcloud using docker[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=820\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=820\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">3.1 Create directory to store Docker Compose file &amp; volumes:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=821\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=821\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">mkdir -p ~\/nextcloud &amp;&amp; cd ~\/nextcloud<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3.2 Copy your&nbsp;<code>docker-compose.yml<\/code>&nbsp;file into this directory or create it:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=822\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=822\">edit source<\/a>]<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">nano docker-compose.yml<\/pre>\n\n\n\n<p><strong>Paste the content below:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">services:\n  db:\n    image: mariadb:10.11\n    restart: always\n    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW\n    volumes:\n      - db:\/var\/lib\/mysql\n    environment:\n      - MYSQL_ROOT_PASSWORD=rootpasswd\n      - MYSQL_PASSWORD=dbpasswd\n      - MYSQL_DATABASE=nextcloud\n      - MYSQL_USER=nextcloud\n\n  redis:\n    image: redis:alpine\n    restart: always\n\n  app:\n    image: nextcloud\n    restart: always\n    ports:\n      - 8089:80\n    depends_on:\n      - redis\n      - db\n    volumes:\n      - nextcloud:\/var\/www\/html\n    environment:\n      - MYSQL_PASSWORD=dbpasswd\n      - MYSQL_DATABASE=nextcloud\n      - MYSQL_USER=nextcloud\n      - MYSQL_HOST=db\n      - NEXTCLOUD_TRUSTED_DOMAINS=192.168.5.5 192.168.5.0\/24 192.168.6.0\/24\n\nvolumes:\n  nextcloud:\n  db:<\/pre>\n\n\n\n<p><strong>Save and exit the file.<\/strong><\/p>\n\n\n\n<p>I\u2019ll help reformat this markdown to ensure each line starts with \u201c&gt;\u201d and remove the horizontal rules (\u201c\u2014\u201d) while preserving all the original text exactly. Here\u2019s the reformatted version:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>DOCKER CHEAT SHEET: going over the&nbsp;<code>docker-compose.yml<\/code>&nbsp;for nextcloud<\/strong><\/p>\n\n\n\n<p>This file sets up three services (containers): one for the Nextcloud app, one for the database (MariaDB), &amp; one for caching (Redis). Let\u2019s go through it line by line so you understand what\u2019s going on.<\/p>\n\n\n\n<p><strong>1.&nbsp;<code>services:<\/code><\/strong>&nbsp;This section lists the containers (services) that make up the Nextcloud deployment. Each container plays a specific role in the overall application.<\/p>\n\n\n\n<p><strong>Database (<code>db<\/code>)<\/strong><\/p>\n\n\n\n<p><strong>2.&nbsp;<code>db:<\/code><\/strong>&nbsp;This is the MariaDB database container. MariaDB is a database similar to mysql database. It\u2019s where nextcloud stores info on users, settings, files, etc.<\/p>\n\n\n\n<p><strong>3.&nbsp;<code>image: mariadb:10.11<\/code><\/strong>&nbsp;This tells Docker to use the MariaDB 10.11 image. It\u2019s a specific version of MariaDB that ensures compatibility with the version of Nextcloud you\u2019re running. This is why docker is awesome; this just pulls the right version of the right program. You don\u2019t have to worry about this. The maintainers of the software provide template&nbsp;<code>docker-compose.yml<\/code>&nbsp;files that rarely need more than minimal adjustment to work for your needs. No dependency rabbit hole to hell.<\/p>\n\n\n\n<p><strong>4.&nbsp;<code>restart: always<\/code><\/strong>&nbsp;Makes the database container restart automatically if it crashes or when the system reboots, and has it start up when you turn on the virtual machine(or computer, if you are installing directly onto the host machine)<\/p>\n\n\n\n<p><strong>5.&nbsp;<code>command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW<\/code><\/strong>&nbsp;Customizes how MariaDB runs: &#8211;&nbsp;<code>--transaction-isolation=READ-COMMITTED<\/code>: Prevents dirty reads, ensuring reliable database transactions. &#8211;&nbsp;<code>--log-bin=binlog<\/code>: Enables binary logging for replication (useful for backups or scaling). &#8211;&nbsp;<code>--binlog-format=ROW<\/code>: Logs changes at the row level for better replication accuracy.<\/p>\n\n\n\n<p><strong>6.&nbsp;<code>volumes:<\/code><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>db:\/var\/lib\/mysql<\/code>: Maps the container\u2019s&nbsp;<code>\/var\/lib\/mysql<\/code>&nbsp;directory (where the database stores its files) to the&nbsp;<code>db<\/code>&nbsp;volume. This makes data persist even if the container is removed or restarted as it is stored to a volume(remember containers are like linux livecds, nothing is saved when you reboot them)<\/li>\n<\/ul>\n\n\n\n<p><strong>7.&nbsp;<code>environment:<\/code><\/strong>&nbsp;These environment variables configure MariaDB: &#8211;&nbsp;<code>MYSQL_ROOT_PASSWORD=rootpasswd<\/code>: Sets the root password for MariaDB. &#8211;&nbsp;<code>MYSQL_PASSWORD=dbpasswd<\/code>: Password for the&nbsp;<code>nextcloud<\/code>&nbsp;user, who will access the database. &#8211;&nbsp;<code>MYSQL_DATABASE=nextcloud<\/code>: Creates a database named&nbsp;<code>nextcloud<\/code>&nbsp;during container setup. &#8211;&nbsp;<code>MYSQL_USER=nextcloud<\/code>: Creates a database user named&nbsp;<code>nextcloud<\/code>.<\/p>\n\n\n\n<p><strong>Redis (<code>redis<\/code>)<\/strong><\/p>\n\n\n\n<p><strong>8.&nbsp;<code>redis:<\/code><\/strong>&nbsp;This is the Redis container which is a caching system that speeds up Nextcloud by temporarily storing frequently used data. \u201cSpeeds up\u201d in the theoretical sense. Nothing speeds up nextcloud.<\/p>\n\n\n\n<p><strong>9.&nbsp;<code>image: redis:alpine<\/code><\/strong>&nbsp;Specifies the Redis image to use. The&nbsp;<code>alpine<\/code>&nbsp;tag uses a lightweight version of Redis for minimal resource usage.<\/p>\n\n\n\n<p><strong>10.&nbsp;<code>restart: always<\/code><\/strong>&nbsp;Automatically restarts the Redis container if it crashes or when the system reboots.<\/p>\n\n\n\n<p><strong>Nextcloud Application (<code>app<\/code>)<\/strong><\/p>\n\n\n\n<p><strong>11.&nbsp;<code>app:<\/code><\/strong>&nbsp;This is the main container for the Nextcloud application. It provides the web interface and handles user requests.<\/p>\n\n\n\n<p><strong>12.&nbsp;<code>image: nextcloud<\/code><\/strong>&nbsp;Tells Docker to use the official Nextcloud image.<\/p>\n\n\n\n<p><strong>13.&nbsp;<code>restart: always<\/code><\/strong>&nbsp;Ensures the Nextcloud container restarts if it crashes or when the system reboots.<\/p>\n\n\n\n<p><strong>14.&nbsp;<code>ports:<\/code><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>8089:80<\/code>: Maps port 80 in the container (Nextcloud\u2019s default web server port) to port 8089 on the host. You\u2019ll access Nextcloud in your browser at&nbsp;<code><a href=\"http:\/\/192.168.5.5:8089\/\">http:\/\/192.168.5.5:8089<\/a><\/code>&nbsp;since this is being set up on the&nbsp;<code>androidstuff<\/code>&nbsp;virtual machine.<\/li>\n<\/ul>\n\n\n\n<p><strong>15.&nbsp;<code>depends_on:<\/code><\/strong>&nbsp;Ensures that&nbsp;<code>redis<\/code>&nbsp;and&nbsp;<code>db<\/code>&nbsp;containers start before the Nextcloud container. Without this, Nextcloud would crash while waiting for its database and caching system.<\/p>\n\n\n\n<p><strong>16.&nbsp;<code>volumes:<\/code><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>nextcloud:\/var\/www\/html<\/code>: Links the container\u2019s&nbsp;<code>\/var\/www\/html<\/code>&nbsp;directory (where Nextcloud\u2019s files live) to the&nbsp;<code>nextcloud<\/code>&nbsp;volume. This ensures Nextcloud\u2019s data persists even if the container is recreated.<\/li>\n<\/ul>\n\n\n\n<p><strong>17.&nbsp;<code>environment:<\/code><\/strong>&nbsp;Configures the Nextcloud container with the following environment variables: &#8211;&nbsp;<code>MYSQL_PASSWORD=dbpasswd<\/code>: Matches the database user\u2019s password set in the&nbsp;<code>db<\/code>&nbsp;service. &#8211;&nbsp;<code>MYSQL_DATABASE=nextcloud<\/code>: Specifies the name of the database created in the&nbsp;<code>db<\/code>&nbsp;service. &#8211;&nbsp;<code>MYSQL_USER=nextcloud<\/code>: Specifies the database user created in the&nbsp;<code>db<\/code>&nbsp;service. &#8211;&nbsp;<code>MYSQL_HOST=db<\/code>: Tells Nextcloud where to find the database (the&nbsp;<code>db<\/code>&nbsp;service within this&nbsp;<code>docker-compose.yml<\/code>). &#8211;&nbsp;<code>NEXTCLOUD_TRUSTED_DOMAINS=192.168.5.5 192.168.5.0\/24 192.168.6.0\/24<\/code>: Lists IP addresses or subnets that are allowed to access the Nextcloud instance. I want nextcloud to be accessible when I am on my LAN which is the same network as nextcloud, and I also want it to be accessible when I am connecting to my home server using my VPN, so I have put my LAN of&nbsp;<code>192.168.5.0\/24<\/code>&nbsp;&amp; my VPN network of&nbsp;<code>192.168.6.0\/24<\/code><\/p>\n\n\n\n<p><strong>Volumes<\/strong><\/p>\n\n\n\n<p><strong>18.&nbsp;<code>volumes:<\/code><\/strong>&nbsp;Defines persistent storage for Nextcloud and MariaDB: &#8211;&nbsp;<code>nextcloud<\/code>: Stores Nextcloud\u2019s files. &#8211;&nbsp;<code>db<\/code>: Stores MariaDB\u2019s database files.<\/p>\n\n\n\n<p><strong>FINAL NOTE:<\/strong>&nbsp;This&nbsp;<code>docker-compose.yml<\/code>&nbsp;file sets up a fully functional Nextcloud deployment with three containers working together: &#8211;&nbsp;<strong>MariaDB (db):<\/strong>&nbsp;Handles data storage for Nextcloud. &#8211;&nbsp;<strong>Redis (redis):<\/strong>&nbsp;Speeds up Nextcloud by caching frequently used data. &#8211;&nbsp;<strong>Nextcloud (app):<\/strong>&nbsp;Provides the web interface and file management. The volumes ensure your data persists, and the environment variables make configuration easy. By using this file, you avoid dependency hell and can back up your Nextcloud setup easily by saving the volumes and&nbsp;<code>docker-compose.yml<\/code>&nbsp;file.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">3.4 Deploy the Containers[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=823\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=823\">edit source<\/a>]<\/h4>\n\n\n\n<p>Run Docker Compose to start nextcloud:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker-compose up -d<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202040521824.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202040603166.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202040734008.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202040816607.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Access Nextcloud for first time[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=824\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=824\">edit source<\/a>]<\/h2>\n\n\n\n<p>Visit&nbsp;<a href=\"http:\/\/192.168.5.5:8089\/\">http:\/\/192.168.5.5:8089<\/a>&nbsp;in your web browser to complete the setup.&nbsp;<strong>Don\u2019t enable ANY application when asked besides notes!<\/strong>&nbsp;Click onto the notes tab at the top to experiment with notes.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202041129391.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202041140622.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202041439357.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202042213145.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202041522822.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202041531856.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202041613763.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202041647018.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202041654059.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202041700123.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Installing Nextcloud Android App[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=825\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=825\">edit source<\/a>]<\/h2>\n\n\n\n<p>I use nextcloud notes from my phone all the time. It is one of my favorite ways of getting random things I type\/copy &amp; paste\/dump onto my desktop into my phone &amp; vice versa. Here\u2019s how to install the Nextcloud app on your phone and connect it to your server.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Install the Nextcloud App[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=826\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=826\">edit source<\/a>]<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Open the Google Play Store<\/strong>&nbsp;(or F-Droid store).<\/li>\n\n\n\n<li>Search for&nbsp;<strong>\u201cNextcloud\u201d<\/strong>&nbsp;and install the official app by&nbsp;<em>\u201cNextcloud\u201d<\/em>.<\/li>\n\n\n\n<li>Once installed, open it.<\/li>\n\n\n\n<li>I hope this part is self explanatory by now.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Add Your Server[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=827\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=827\">edit source<\/a>]<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>On the app\u2019s welcome screen, tap&nbsp;<strong>\u201cLog in\u201d<\/strong>.<\/li>\n\n\n\n<li>Enter your server address:<\/li>\n<\/ol>\n\n\n\n<p><code><a href=\"http:\/\/192.168.5.5:8089\/\">http:\/\/192.168.5.5:8089<\/a><\/code><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\n<ul class=\"wp-block-list\">\n<li>(Make sure your phone is connected to the same network as your server.<\/li>\n\n\n\n<li>If not, connect to your VPN using the OpenVPN application we set up.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Tap&nbsp;<strong>\u201cNext\u201d<\/strong>&nbsp;&amp; wait for the app to verify the server connection. It might take a while; this is nextcloud, after all.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Log In[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=828\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=828\">edit source<\/a>]<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Enter the username &amp; password you created during the first step of accessing Nextcloud\u2019s web interface from the web browser on your desktop earlier.<\/li>\n\n\n\n<li>Tap&nbsp;<strong>\u201cLog in\u201d<\/strong>.<\/li>\n\n\n\n<li>Allow the application the permission it asks for to access your nextcloud account.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Enable Notes Synchronization[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=829\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=829\">edit source<\/a>]<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Once logged in, you\u2019ll see a list of notes.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>You\u2019re done. You can write down your notes on your phone &amp; they\u2019ll sync instantly with your server at home. You can make it look like google keep if you want. It just makes sense right out of the box with a very intuitive user interface and doesn\u2019t try to add a bunch of stuff I don\u2019t need\/want. It works. Even though it\u2019s nextcloud; it works.&nbsp;\ud83d\ude42 If the lack of https\/ssl bothers you, feel free to follow the instructions from the frigate part of the guide that goes over setting up nginx as a reverse proxy so you can use ssl. If you are using onlyoffice on port 443, you\u2019ll have to choose a different port for nextcloud, but that\u2019s fine. You\u2019d visit&nbsp;<a href=\"https:\/\/192.168.5.5:444\/\">https:\/\/192.168.5.5:444<\/a>&nbsp;to get to nextcloud instead of&nbsp;<a href=\"https:\/\/192.168.5.5\/\">https:\/\/192.168.5.5<\/a>&nbsp;&#8211; you\u2019ll live!<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Setting Up trusted &amp; untrusted WiFi with TP-Link EAP610 &amp; pfSense[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=830\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=830\">edit source<\/a>]<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Understanding the problem. Why do this?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=831\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=831\">edit source<\/a>]<\/h2>\n\n\n\n<p>Let\u2019s say there\u2019s a device on your network you don\u2019t trust. You want to use it, but you don\u2019t trust it. Exhibit A, a Chinese security camera. Hikvision makes good, cheap cameras; but my government tells me I shouldn\u2019t trust them, and I&nbsp;<a href=\"https:\/\/www.fcc.gov\/document\/fcc-bans-authorizations-devices-pose-national-security-threat\">listen to &amp; believe everything that my government tells me<\/a>.<\/p>\n\n\n\n<p>I will want to limit its access to the internet, and other machines. Let\u2019s say it connects via wifi.<\/p>\n\n\n\n<p>You can block it from connecting to the internet by its IP &#8211; but what if it tries to change its IP? You could create a static mapping in pfSense based on its MAC address, but what if it spoofs its MAC address? If this device were truly malicious, it could do the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Spoof its MAC address to get around a static mapping<\/li>\n\n\n\n<li>Try to connect using every single IP address<\/li>\n\n\n\n<li>See if it eventually finds an IP address in that subnet that allows it to go online &amp; connect to other networks\/devices<\/li>\n\n\n\n<li>Upload audio recordings of you saying you had a celebrity crush on Sabrina Carpenter, or that you cry listening to Tori Amos\u2019 Baker Baker. Where\u2019d your reputation be then?<\/li>\n<\/ul>\n\n\n\n<p>If you want to be more stringent with this &#8211; if you genuinely believe your refridgerator is out to get you by recording your intimate moments &amp; blackmailing you with them(it\u2019s probably not), we can make a separate network for them.<\/p>\n\n\n\n<p>We\u2019ll create two separate networks:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Main Network<\/strong>:&nbsp;<code>192.168.5.0\/24<\/code>&nbsp;for trusted devices&nbsp;<em>(we\u2019ve already created this)<\/em><\/li>\n\n\n\n<li><strong>Guest Network<\/strong>:&nbsp;<code>192.168.7.0\/24<\/code>&nbsp;for untrusted devices&nbsp;<em>(needs to be created)<\/em><\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note<\/strong>: This is not a normal wifi access point. it is an enterprise level device that allows seamless switching between multiple access points, so that if you have a giant area you never lose your connection or connection strength. The downside is that this isn\u2019t as simple as a standard wifi router, this isn\u2019t your linksys wrt54g from 2005 you configure by typing&nbsp;<code>192.168.1.1<\/code>&nbsp;and typing in&nbsp;<code>admin<\/code>&nbsp;for the user &amp; password. You need to install controller software to use it; and it\u2019s worth it. These access points like the eap610 can be found used on ebay in liquidation sales for $45, which is cheaper than a lot of wifi routers.<\/p>\n<\/blockquote>\n\n\n\n<p>Our LAN subnet, where our servers &amp; computers connect to, is&nbsp;<code>192.168.5.0\/24<\/code>&nbsp;meaning that clients connecting here can grab from&nbsp;<code>192.168.5.2<\/code>&nbsp;to&nbsp;<code>192.168.5.254<\/code>&nbsp;&#8211;&nbsp;<code>192.168.5.1<\/code>&nbsp;is taken by the router.<\/p>\n\n\n\n<p>Our OpenVPN subnet that we connect to when we use our VPN is&nbsp;<code>192.168.6.0\/24<\/code>meaning that clientst hat connect here can grab from&nbsp;<code>192.168.6.2<\/code>&nbsp;to&nbsp;<code>192.168.6.254<\/code>&nbsp;&#8211;&nbsp;<code>192.168.6.1<\/code>&nbsp;is taken by the VPN gateway.<\/p>\n\n\n\n<p>Here we\u2019re going to create&nbsp;<code>192.168.8.0\/24<\/code>&nbsp;as another subnet.<\/p>\n\n\n\n<p>If you\u2019re trusted wifi, you get to connect to the&nbsp;<code>192.168.5.0\/24<\/code>&nbsp;network. If you are connecting to the untrusted wifi, you get to connect to the&nbsp;<code>192.168.7.0\/24<\/code>&nbsp;untrusted network.<\/p>\n\n\n\n<p>When we set up OpenVPN, pfSense created a firewall rule automatically that allowed the VPN subnet of&nbsp;<code>192.168.6.0\/24<\/code>&nbsp;to connect to everything. We will do the opposite for this network. We can create a rule that blocks all traffic TO and FROM the&nbsp;<code>192.168.7.0\/24<\/code>&nbsp;network. Then, we can create specific allow rules for the very specific devices we want it to connect to. If it\u2019s a thermostat, we allow it a connection to &amp; from to&nbsp;<code>192.168.5.4<\/code>, our home assistant machine. If it is a camera, we allow it a connection to &amp; from&nbsp;<code>192.168.5.2<\/code>, our frigate machine.<\/p>\n\n\n\n<p>It doesn\u2019t matter if the device spoofs its MAC address to get around a static mapping at this point. It doesn\u2019t matter if it tries to grab every single IP address on the subnet &#8211; because NOTHING on&nbsp;<code>192.168.7.0\/24<\/code>&nbsp;is allowed to connect to anything anyway. So, it\u2019s stuck.<\/p>\n\n\n\n<p>This is more \u201csecure\u201d if your threat model includes a thermostat with a hidden microphone in it connected to your wifi, that might want to get around being blocked from phoning home.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Can\u2019t access your main network<\/li>\n\n\n\n<li>Can\u2019t see your devices<\/li>\n\n\n\n<li>Can still access the internet<\/li>\n<\/ol>\n\n\n\n<p>This is what VLANs are for. We\u2019ll create two completely separate networks:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Main Network (192.168.5.0\/24): For your trusted devices<\/li>\n\n\n\n<li>Guest Network (192.168.7.0\/24): For everyone else<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113190058398.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113190156285.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113190459933.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113190855998.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113190925796.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113190952807.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113191027630.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113191045988.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113191714961.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113192027212.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113191736911.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113191815241.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113192136101.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113192201701.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113192215825.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: PfSense Configuration Guide for Trusted &amp; Untrusted Networks[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=832\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=832\">edit source<\/a>]<\/h2>\n\n\n\n<p>We want to have two separate networks; but we are using one cable to connect the switch to our wifi access point. We do that with VLANs, which are \u201cvirtual\u201d LANs. Each packet we send is going to have a tag on it that tells it which LAN it is. The switch, &amp; in the case the wifi access point, will use this to direct the traffic to the correct virtual LAN.<\/p>\n\n\n\n<p>Each of our wifi clients will be connecting to a LAN. The trusted wifi network will connect to the standard&nbsp;<code>192.168.5.0\/24<\/code>&nbsp;LAN, and the untrusted to a 2nd network we create on&nbsp;<code>192.168.7.0\/24<\/code><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 Create VLANs[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=833\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=833\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to:&nbsp;<strong>Interfaces &gt; Assignments &gt; VLANs<\/strong><\/li>\n\n\n\n<li>Click \u201cAdd\u201d to create first VLAN:\n<ul class=\"wp-block-list\">\n<li>Parent Interface: Select your LAN interface (usually igb0 or em0)<\/li>\n\n\n\n<li>VLAN Tag: 7<\/li>\n\n\n\n<li>Priority: leave blank<\/li>\n\n\n\n<li>Description:&nbsp;<strong>\u201cmaliciouswifi\u201d<\/strong><\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cSave\u201d<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 Create Network Interfaces[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=834\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=834\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to:&nbsp;<strong>Interfaces &gt; Assignments<\/strong><\/li>\n\n\n\n<li>From the&nbsp;<strong>\u201cAvailable network ports\u201d<\/strong>&nbsp;dropdown:\n<ul class=\"wp-block-list\">\n<li>Select the VLAN 7 interface and click \u201cAdd\u201d<\/li>\n\n\n\n<li>Note the names assigned (typically OPT1 and OPT2<\/li>\n\n\n\n<li>Name this&nbsp;<strong>maliciouswifi<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 Set IP range of new interface[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=835\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=835\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to:&nbsp;<strong>Interfaces &gt; MALICIOUSWIFI<\/strong><\/li>\n\n\n\n<li>In&nbsp;<strong>\u201cGeneral Configuration\u201d<\/strong>&nbsp;set the following options:\n<ul class=\"wp-block-list\">\n<li>Set&nbsp;<strong>\u201cDescription\u201d<\/strong>&nbsp;to maliciouswifi<\/li>\n\n\n\n<li>Set&nbsp;<strong>\u201cIPv4\u201d Configuration Type\u201d<\/strong>&nbsp;to Static IPv4<\/li>\n\n\n\n<li>Set&nbsp;<strong>\u201cIPv6 Configuration type\u201d<\/strong>&nbsp;to None.\n<ul class=\"wp-block-list\">\n<li>If you have a reason to use IPv6, you are probably a network administrator for the world trade tower or a mall or something &amp; aren\u2019t reading this guide anyway.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>In&nbsp;<strong>\u201cStatic IPv4 Configuration\u201d<\/strong>&nbsp;set the following options:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u201cIPv4 Address\u201d<\/strong>&nbsp;to&nbsp;<code>192.168.7.1<\/code>\n<ul class=\"wp-block-list\">\n<li>The slash thingie at the end to&nbsp;<code>\/24<\/code>&nbsp;&#8211; this means we get the entire range from&nbsp;<code>192.168.7.2<\/code>&nbsp;to&nbsp;<code>192.168.7.254<\/code>&nbsp;for wifi clients connecting to this network when we set up DHCP server.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Set&nbsp;<strong>\u201cIPv4 Upstream Gateway\u201d<\/strong>&nbsp;to None<\/li>\n<\/ul>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Hit&nbsp;<strong>\u201cSave\u201d<\/strong><\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">2.4 Configure DHCP Server[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=836\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=836\">edit source<\/a>]<\/h4>\n\n\n\n<p>DHCP is what allows you to connect to a wifi network and get online without having to specify the IP address, gateway, DNS server, etc. This is necessary so clients get an IP address when they connect to the wifi network automatically.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Malicious wifi Network DHCP:<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to:&nbsp;<strong>Services &gt; DHCP Server &gt; MALICIOUSWIFI<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The interface maliciouswifi will be at the top after you click onto&nbsp;<strong>\u201cDHCP Server\u201d<\/strong><\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Configure:\n<ul class=\"wp-block-list\">\n<li>Enable: \u2713 Checked&nbsp;<strong>\u201d Enable DHCP server on MALICIOUSWIFI interface \u201c<\/strong><\/li>\n\n\n\n<li><strong>\u201cAddress Pool Range\u201d<\/strong>:\n<ul class=\"wp-block-list\">\n<li>From: 192.168.7.2<\/li>\n\n\n\n<li>To: 192.168.7.254<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click Save<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113192410257.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113192442850.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113192623441.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113192834456.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113193208715.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Configure Firewall Rules[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=837\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=837\">edit source<\/a>]<\/h2>\n\n\n\n<p>Now, we\u2019re going to block this from connecting to anything.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3.1 Block maliciouswifi to everything[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=838\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=838\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to:&nbsp;<strong>Firewall &gt; Rules &gt; MALICIOUSWIFI<\/strong><\/li>\n\n\n\n<li>Add this rule:<ol><li>Block Inter-VLAN Access:<\/li><\/ol>\n<ul class=\"wp-block-list\">\n<li>Action: Block<\/li>\n\n\n\n<li>Interface:&nbsp;<strong>\u201cMALICIOUSWIFI\u201d<\/strong><\/li>\n\n\n\n<li>Protocol: Any<\/li>\n\n\n\n<li>Source: Any<\/li>\n\n\n\n<li>Destination: Any<\/li>\n\n\n\n<li>Description:&nbsp;<strong>\u201cBlock maliciouswifi access to everything\u201d<\/strong><\/li>\n\n\n\n<li>Click Save<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\n<ol class=\"wp-block-list\">\n<li>\n<ol class=\"wp-block-list\">\n<li>\n<ol class=\"wp-block-list\">\n<li>3.2 Add allow rules for devices you wish to speak to one another.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n\n\n\n<p>Right now devices connected to this wifi network can\u2019t connect to anything. Even if it were a malicious device that were going to try every IP on this subnet after spoofing its MAC address and try to get access to the outside world, it\u2019s stuck.<\/p>\n\n\n\n<p>We would want to add rules&nbsp;<strong>ABOVE<\/strong>&nbsp;the&nbsp;<em>\u201cBlock maliciouswifi access to everything\u201d<\/em>&nbsp;rule for things we did want to talk.<\/p>\n\n\n\n<p>For instance, let\u2019s say a wireless camera were attached here. We would want to add a rule to allow traffic from the camera, let\u2019s say it\u2019s at&nbsp;<code>192.168.7.15<\/code>&nbsp;to the frigate machine at&nbsp;<code>192.168.5.2<\/code>&nbsp;, and then another rule to allow traffic from the frigate machine to the camera. This rule would be listened to&nbsp;<em>before<\/em>&nbsp;the rule to block everything.<\/p>\n\n\n\n<p>You can use this to make sure that the thermostat only communicates with home assistant, that the fish camera only communicates with your VPN, etc. It\u2019s a great way to keep untrusted devices from having rampant access to everything.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: TP-Link Omada Controller SDN Installation Guide[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=839\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=839\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">4.0 Optional note for the paranoid(skip ahead if not paranoid)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=840\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=840\">edit source<\/a>]<\/h4>\n\n\n\n<p><strong>To be clear, if you\u2019re at this level of paranoia, just find a router that has meshing with openwrt and deal with the lower level of performance with switching you\u2019ll get with it. I have yet to find an open source access point + open source firmware that is even close to closed source ones with regards to seamless roaming across multiple access points without dropoffs or slowdowns<\/strong><\/p>\n\n\n\n<p>If you have a problem with running closed source software from a company headquartered in Shenzhen on your computer &#8211; I don\u2019t blame you. Rather than install this onto your host system, you can install it onto a virtual machine you do not allow to access the internet, that runs nothing but this software. You would install the virtual machine for omada the same way you would install the virtual machine for mailcow. We have done this many times &#8211; simply follow the instructions we\u2019ve already followed, with the following changes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When installing Ubuntu server, choose minimal install in the installer.<\/li>\n\n\n\n<li>Set the IP to 192.168.5.7 instead of 192.168.5.3 we chose for mailcow<\/li>\n\n\n\n<li>Set the hostname &amp; name of the computer to&nbsp;<strong>wifitool<\/strong><\/li>\n\n\n\n<li>Set the static mapping in pfsense with hostname&nbsp;<strong>wifitool<\/strong><\/li>\n\n\n\n<li>Make a pfSense firewall rule blocking all traffic&nbsp;<strong>to<\/strong>&nbsp;and&nbsp;<strong>from<\/strong><code>192.168.5.7<\/code>&nbsp;on the LAN interface for any protocol, so it looks like this:\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114175555928.png\"><\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114175638119.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114175738722.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114175818156.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>Lastly, if you want a level of paranoia that matches&nbsp;<a href=\"https:\/\/www.reuters.com\/world\/us\/us-lawmakers-urge-probe-wifi-router-maker-tp-link-over-fears-chinese-cyber-2024-08-15\/\">congress<\/a>, you can set up temporary pfSense firewall rules that block the computer you use to access the tp-link omada controller in your web browser from connecting as well &#8211; and toggle them on each time you run the tp-link omada controller software in your browser, and make a rule blocking the IP address of each individual access point from going online as well.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4.1 Prepare the System[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=841\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=841\">edit source<\/a>]<\/h4>\n\n\n\n<p>Before installation, remove any conflicting packages like older MongoDB versions, Java, or remnants of previous Omada installations to avoid conflicts.&nbsp;<strong>We never installed these packages onto our server, so they should not be there. Just in case they are. To be clear, you should not have any use for these packages at this point if you\u2019ve been following this guide.<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt purge -y mongodb-org* openjdk-11-* openjdk-8-* jsvc\nsudo apt autoremove -y\nsudo apt clean<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4.2 Install Java 8 and MongoDB[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=842\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=842\">edit source<\/a>]<\/h4>\n\n\n\n<p>Install Java 8, as the Omada Controller requires it, and install MongoDB (v7.0 is recommended here). It wants old Java. Not version 11.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update\n\n# Some of this software you may already have. No big deal, it doesn't hurt to make sure. \nsudo apt install -y openjdk-8-jre-headless jsvc curl gnupg lsb-release\n\ncurl -fsSL https:\/\/pgp.mongodb.com\/server-7.0.asc | sudo gpg -o \/usr\/share\/keyrings\/mongodb-server-7.0.gpg --dearmor\necho \"deb [arch=amd64,arm64 signed-by=\/usr\/share\/keyrings\/mongodb-server-7.0.gpg] https:\/\/repo.mongodb.org\/apt\/ubuntu $(lsb_release -sc)\/mongodb-org\/7.0 multiverse\" | sudo tee \/etc\/apt\/sources.list.d\/mongodb-org-7.0.list\n\nsudo apt update\n\nsudo apt install -y mongodb-org<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo systemctl enable mongod --now\nsudo systemctl status mongod<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>IMPORTANT NOTE:<\/strong>&nbsp;mongodb is expecting you to be using an older version of Ubuntu Linux(22.04, codename \u201cjammy\u201d) for this to work. We are using Ubuntu Server (24.04, code name \u201cnoble\u201d). There is nothing wrong with this<em>(besides the fact that I subjected you to ubuntu in the first place, but that\u2019s a conversation for another time)<\/em>. 24.04 is the latest stable, long term release. However, mongodb still thinks that jammy is the latest long term\/stable release.<\/p>\n\n\n\n<p>If mongodb does not have a repository for ubuntu 24.04 jammy by the time this guide is released, you will have to make the following edit for apt to let you install mongdo from this repository:<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-preformatted\"># Open source list file for mongodb for editing\nsudo nano -w \/etc\/apt\/sources.list.d\/mongodb-org-7.0.list<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"># Find the following line:\ndeb [arch=amd64,arm64 signed-by=\/usr\/share\/keyrings\/mongodb-server-7.0.gpg] https:\/\/repo.mongodb.org\/apt\/ubuntu noble\/mongodb-org\/7.0 multiverse<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"># Replace the word `noble` with `jammy`\ndeb [arch=amd64,arm64 signed-by=\/usr\/share\/keyrings\/mongodb-server-7.0.gpg] https:\/\/repo.mongodb.org\/apt\/ubuntu jammy\/mongodb-org\/7.0 multiverse<\/pre>\n\n\n\n<p><strong>The steps in the three grey code boxes above are only necessary if you received an error while trying to install mongodb<\/strong><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4.3 Find Omada SDN Controller Software on tp-link\u2019s website to download[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=843\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=843\">edit source<\/a>]<\/h4>\n\n\n\n<p>Download the latest .deb package from&nbsp;<a href=\"https:\/\/www.tp-link.com\/us\/support\/download\/omada-software-controller\/\">TP-Link\u2019s Download section<\/a>. Right click the download button, click&nbsp;<strong>copy link<\/strong>&nbsp;in your browser, and paste it into the command below:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Make subdirectory for storing programs if it isn't already there in our home directory\n\nmkdir -p ~\/Downloads\/programs\ncd ~\/Downloads\/programs\n\n# Check TP-Link's website for the latest version of this sfotware, it should be a .deb file with a filename that looks something like what you see below, just with a newer version\n\nwget https:\/\/static.tp-link.com\/upload\/software\/2024\/202411\/20241101\/Omada_SDN_Controller_v5.14.32.3_linux_x64.deb<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4.4 Install the Omada Controller[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=844\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=844\">edit source<\/a>]<\/h4>\n\n\n\n<p>Install the Omada Controller SDN package. If dependencies are flagged, ignore them to proceed with the installation.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo dpkg --ignore-depends=jsvc -i Omada_SDN_Controller.deb\n# Just incase anything funny happened while installing an ancient version of java\nsudo apt --fix-broken install<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4.5 Verify it installed &amp; Start the Controller[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=845\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=845\">edit source<\/a>]<\/h4>\n\n\n\n<p>The Omada Controller should now be running. Access the Omada interface by navigating to&nbsp;<code><a href=\"https:\/\/192.168.5.2:8043\/\">https:\/\/192.168.5.2:8043<\/a><\/code>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;If it gets stuck on \u201cStarting Omada Controller. Please wait\u2026.\u201d and keeps outputting dots, and never starts, and it gives you a bs error about java virtual machine not being available, you followed TP-Link\u2019s documentation instead of mine. Do not pass go, do not collect $200, go directly to jail. That is your punishment for expecting GNU\/Linux documentation for a piece of software to work; and you deserve it.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>To enable it on boot, type&nbsp;<code>systemctl enable tpeap<\/code>&nbsp;, but it should already be starting on boot.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4.5: VLAN tags[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=846\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=846\">edit source<\/a>]<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113114803712.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>This can be confusing. There are $250 wifi routers that, when put in wifi bridge mode to be used as a switch, will not pass VLAN tags properly. Then there are $20&nbsp;<a href=\"https:\/\/www.netgear.com\/business\/wired\/switches\/unmanaged\/gs308\/\">Netgear GS308v3 switches<\/a>&nbsp;that support VLAN tags perfectly.<\/p>\n\n\n\n<p>You don\u2019t have to spend a lot of money to get a switch that has VLAN tags. How do you tell if yours supports VLAN tags? Good question. Netgear\u2019s&nbsp;<a href=\"https:\/\/www.downloads.netgear.com\/files\/GDC\/Unmanaged_Switches\/300-Series_Gigabit_DS.pdf\">datasheet for the GS308<\/a>&nbsp;and their&nbsp;<a href=\"https:\/\/www.downloads.netgear.com\/files\/GDC\/GS308v3\/GS305v3_GS308v3_IG_EN.pdf\">instructional manual for the GS308<\/a>&nbsp;do not mention the word \u201cVLAN\u201d &#8211; not even once. It says it supports 802.1p QOS, but that is not 802.1Q VLAN tagging.<\/p>\n\n\n\n<p>Most modern switches DO support this; but what if you have an old one? What if you are re-purposing an old wifi router as a switch for this setup? Many wifi routers, even older ones, have settings that allow them to be used as a wireless bridge.<\/p>\n\n\n\n<p>As I have said earlier on, when people tell you to&nbsp;<em>\u201cRTFM\u201d<\/em>, what they are actually saying is&nbsp;<em>\u201ceat shit and die\u201d<\/em>&nbsp;&#8211; it\u2019s their way of expressing that they hate you. Manuals are functionally useless for 99% of products sold, and rarely if ever answer actual questions. They answer questions that can be answered intuitively without a manual.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113115922968.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>My best answer is as follows; if you are going to have a very small home network, the Netgear GS308 is a great pick that works with VLAN tags. It\u2019s dirt cheap and a workhorse. If you want something that is more upscale, I\u2019d suggest looking at the&nbsp;<a href=\"https:\/\/www.tp-link.com\/us\/business-networking\/omada-switch-l3-l2-managed\/sg3218xp-m2\/v1\/\">TP-Link Omada SG3218XP-M2<\/a>&nbsp;&amp; other switches in that series, for the following reasons<\/p>\n\n\n\n<p><strong>2.5 GbE speeds<\/strong><\/p>\n\n\n\n<p>Most switches have gigabit ports. This means 1 gigabit &#8211; which translates to&nbsp;<strong>100-120 megabytes per second<\/strong>&nbsp;in the real world. Around 2009 when these started to become cheaper(sub-$200), this was more than enough, since hard drives of the time were in the 70-120 megabyte per second range. This meant that it made no sense to pay extra for a switch with more bandwidth, since your hardware was not capable of making use of the extra bandwidth. Whether using a $10,000 switch or the $50 1 gigabit switch, your transfer speed would be the same.<\/p>\n\n\n\n<p>As time has moved on, even cheap desktop hard drives do over 180-250 megabytes per second, and cheapie solid state drives can achieve 200-400 megabyte per second read &amp; write easily. 1 gigabit ports on switches mean you are losing out on transfer speed.<\/p>\n\n\n\n<p>2.5 GbE switches are capable of&nbsp;<strong>270-290<\/strong>&nbsp;megabytes per second,approximately, in the real world. This is still under the capability of more expensive NVME solid state drives, but it is over double what you get with the old gigabit switches.<\/p>\n\n\n\n<p><strong>Power over Ethernet(PoE)<\/strong><\/p>\n\n\n\n<p>If you do plan on setting up security cameras, PoE means that you can plug the ethernet cable into the camera without having to run a separate line for power. The power for the camera is provided by the switch through the ethernet cable.<\/p>\n\n\n\n<p><strong>Easy management using Omada controller software<\/strong><\/p>\n\n\n\n<p>If you want to have fun with some of this switch\u2019s other features, you can use the same software we\u2019ll be using for EAP-610 wireless access points to control the switch.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113193732516.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113193805590.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113194116940.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113194135465.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113194243719.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113194341452.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113194419692.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113194432870.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113194509149.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113194551382.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113194714308.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241113194736836.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114081503037.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114081612226.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Configuring TP-Link EAP610 VLANs in Omada Controller[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=847\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=847\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">5.1 Loading controller &amp; adopting your access point[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=848\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=848\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Visit Omada Controller in your browser:https:\/\/192.168.5.2:8043<strong>NOTE:<\/strong>&nbsp;Take a close look att he IP address &amp; port in the terminal and visit the URL it tells you to upon finishing the installation of TP-Link Omada controller software.<\/li>\n\n\n\n<li>Adopt the access point that matches the IP address you see in pfSense under&nbsp;<strong>Diagnostics \u2013&gt; ARP Table<\/strong>&nbsp;or under\n<ul class=\"wp-block-list\">\n<li>Go to Devices<\/li>\n\n\n\n<li>check that EAP610 shows as&nbsp;<strong>\u201cConnected\u201d<\/strong><\/li>\n\n\n\n<li>If not adopted, use \u201cAdopt\u201d button<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">5.2 Navigate to where we create a new network[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=849\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=849\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click on the zone you just created on the main homepage under&nbsp;<strong>Site List<\/strong>&nbsp;once you log in. In our case, that is&nbsp;<strong>home_demo<\/strong><\/li>\n\n\n\n<li>Click on&nbsp;<strong>\u201cSettings\u201d<\/strong>&nbsp;in the lower left corner.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Make sure you clicked on a zone first &#8211; if you click on&nbsp;<em>\u201cSettings\u201d<\/em>&nbsp;in the lower left corner it will take you to the settings for the controller program rather than for the zone you\u2019re setting up for wifi.<\/li>\n<\/ul>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Click&nbsp;<strong>\u201cWireless Networks\u201d<\/strong><\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cCreate New Wireless Network\u201d<\/strong><\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">5.3 Configure the easy settings for the network[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=850\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=850\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Fill in all the usual settings for normal wifi setup you\u2019ve done before on normal wifi routers\n<ul class=\"wp-block-list\">\n<li><strong>SSID<\/strong>: maliciouswifi\n<ul class=\"wp-block-list\">\n<li>this is the name of the network that shows up when you search for wifi networks on your laptop or phone<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Device type:<\/strong>&nbsp;EAP\n<ul class=\"wp-block-list\">\n<li>Band: 2.4 GHz, 5 GHz<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Security Key<\/strong>: whatever password you want for connecting to it\n<ul class=\"wp-block-list\">\n<li>This is the wifi password for the network<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">5.4 Configure VLAN settings you\u2019re likely not familiar with if you\u2019re reading this[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=851\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=851\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click&nbsp;<strong>\u201cAdvanced Settings\u201d<\/strong><\/li>\n\n\n\n<li>Set&nbsp;<strong>\u201cVLAN\u201d<\/strong>&nbsp;to&nbsp;<strong>\u201cCustom\u201d<\/strong>&nbsp;and&nbsp;<strong>\u201cAdd VLAN<\/strong>\u201d should show up as a new menu item.<\/li>\n\n\n\n<li>Choose&nbsp;<strong>\u201cBy VLAN ID\u201d<\/strong>&nbsp;when the&nbsp;<strong>\u201cAdd VLAN\u201d<\/strong>&nbsp;part shows up after you click&nbsp;<strong>\u201cCustom\u201d<\/strong><\/li>\n\n\n\n<li>Set the number to 7, which we chose when making the VLA N in pfSense.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114111018846.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114111105623.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114111257746.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114111344084.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114111434791.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114111555972.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241114111626689.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Make sure blocking rules work[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=852\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=852\">edit source<\/a>]<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Connect your phone to this network. Don\u2019t use a VPN. Turn VPN off.<\/li>\n\n\n\n<li>Try connecting to the web or to home assistant, or anything we set up. It shouldn\u2019t work.<\/li>\n\n\n\n<li>Add a firewall rule to allow traffic to &amp; from the IP address your phone has grabbed, to the home assistant VM which we set up at&nbsp;<code>192.168.5.4<\/code><\/li>\n\n\n\n<li>Try to access the home assistant VM now on your phone.<\/li>\n\n\n\n<li>If it works now, but didn\u2019t before, you did a good job.<\/li>\n<\/ol>\n\n\n\n<p>You can now connect untrusted wifi IoT devices to this and be confident that there is a slightly lower chance that your refridgerator is going to report you fapping back to the manufacturer.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>How to Set Up VLC on Android to Play Videos from a Samba Server<\/li>\n<\/ol>\n\n\n\n<p>What\u2019s the point of hoarding 100 terabytes of recipes and GNU\/Linux ISOs if you can\u2019t enjoy them on your home entertainment system or your smartphone; no matter where you are in the world?<\/p>\n\n\n\n<p>I\u2019ll start with the phone setup and then move on to the home entertainment system. A lot of people think my GNU\/Linux setup that connects to my home entertainment system is way more complicated than it actually is. It\u2019s simpler than you think.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc001070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc002070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc004070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc006070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc007070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc008070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc009070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc010070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc012070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc013070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc019070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc020070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc021070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc022070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc025070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc026070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc029070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc030070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc036070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc040070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc042070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc044070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Installing VLC on Android[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=853\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=853\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Download VLC from the F-Droid Store[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=854\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=854\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to f-droid store app<\/li>\n\n\n\n<li>Search for VLC<\/li>\n\n\n\n<li>Download VLC<\/li>\n\n\n\n<li>Install VLC<\/li>\n\n\n\n<li>be happy<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc006070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc007070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc008070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc009070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc010070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc012070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc013070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc019070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc020070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Adding Samba share as a \u201cfavorite\u201d[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=855\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=855\">edit source<\/a>]<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Open VLC<\/strong>: Once you have it installed, open it up.<\/li>\n\n\n\n<li>Grant VLC the permissions it asks for, if you want it to find files on your phone &amp; be able to play them.<\/li>\n\n\n\n<li><strong>Add a Server<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<code>Browse<\/code>.<\/li>\n\n\n\n<li>Click on the three dots in the upper right corner.<\/li>\n\n\n\n<li>Select&nbsp;<code>Add a server favorite<\/code>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Choose Protocol<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Select&nbsp;<code>SMB<\/code>&nbsp;as your protocol. It defaults to FTP, but we want SMB.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Enter Server Address<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Type in the server address where your ZFS pool is located. This could be something like&nbsp;<code>happycloud.com<\/code>&nbsp;or simply the IP address:&nbsp;<code>192.168.5.2<\/code>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Server Name<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Enter a server name, like&nbsp;<code>ZFS pool<\/code>, and hit OK.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc021070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc022070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc025070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc026070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc029070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc030070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc036070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc040070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc042070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vlc044070a_hometheeater_ANDROIDCAP_screen-20241116-140426.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Find your hidden share[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=856\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=856\">edit source<\/a>]<\/h2>\n\n\n\n<p>Once you\u2019ve added the server to your favorites, you might notice nothing pops up on the screen. Plus, you might see items in favorites you never added. Don\u2019t worry, it\u2019s just open source quirks. Scroll over, and you\u2019ll see the share you added. No mistakes here\u2014it\u2019s just open source being open source.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\n<ul class=\"wp-block-list\">\n<li>Make sure you\u2019re connected to your VPN!<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Before you can connect to your share, make sure you\u2019re attached to your VPN. Without it, you won\u2019t be able to access your share. Once connected, you can click on your share!<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Authenticate<\/strong>:\n<ul class=\"wp-block-list\">\n<li>You\u2019ll see&nbsp;<code>Archive<\/code>, but you need to authenticate with your username and password.<\/li>\n\n\n\n<li>Enter your credentials. You can save them in VLC or use a password manager like Bitwarden\u2014whatever floats your boat. I\u2019ll save it in VLC for now.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Access Files<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Click on your file, and let\u2019s watch. Ignore any video player tips. And there you have it! That\u2019s how you connect to your share from anywhere in the world to view your files.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Alternative Programs[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=857\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=857\">edit source<\/a>]<\/h2>\n\n\n\n<p>There are also non-open source programs that are pretty good at browsing, like&nbsp;<strong>Owl Files<\/strong>. You\u2019d set them up similarly by entering your Samba credentials and network share information. Connect to your VPN, and your files are right there and available for you.<\/p>\n\n\n\n<p>And that\u2019s it! Enjoy your media from your ZFS pool wherever you are.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Setting Up a GNU\/Linux-Based Home Entertainment System[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=858\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=858\">edit source<\/a>]<\/h1>\n\n\n\n<p>Here we\u2019ll set up a living room stereo &amp; source for your television for fun. Welcome to the portion of our guide where we dive into setting up a GNU\/Linux computer and a Samba server as the heart of your living room entertainment center. I\u2019ll also walk you through setting up a hi-fi stereo system to achieve high-fidelity sound affordably, with no audiophile snake oil.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116221000894.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116215926331.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116220449259.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116220837576.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116221436445.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Hooking everything up:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=859\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=859\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Connect your computer to your televison with an HDMI cable.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=860\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=860\">edit source<\/a>]<\/h3>\n\n\n\n<p>I hope I don\u2019t have to explain this one. I wouldn\u2019t use your server for this, I use a computer I have in my living room.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 You don\u2019t need a powerful computer for an entertainment system[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=861\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=861\">edit source<\/a>]<\/h4>\n\n\n\n<p>Most modern CPUs (Intel\/AMD) have integrated graphics that support hardware-accelerated video decoding for formats like H.264, HEVC (H.265), and VP9. This means:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Nearly anything made in the past 10 years, even cheap stuff, will be fine for most video playback.<\/li>\n\n\n\n<li>You do not need to buy a GPU to watch stuff in your living room.<\/li>\n<\/ul>\n\n\n\n<p>If buying a dedicated living room computer, II would suggest buying a machine that has optical audio output so that you can output digital audio to a receiver or DAC(digital to analog converter); rather than doing the audio processing on the computer, this sends the digital signal to another device to do it. If your motherboard\u2019s analog audio output\/headphone jack is noisy and you don\u2019t have a digital output, you\u2019re stuck paying for an audio interface to get good sound or digital output.<\/p>\n\n\n\n<p>It is difficult to recommend cheap pre-built PCs as many have loud fans due to poor cooling that become annoying in an environment where you will listen to music and quiet scenes in youtube videos, movies &amp; television. If you\u2019re reading this guide, you most likely will want to build one yourself.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1.2 Understanding HDMI Cable Requirements[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=862\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=862\">edit source<\/a>]<\/h4>\n\n\n\n<p>If your computer is far away from the television, and you want to do 4k, you may want a 50 ft cable. The problem is that most 50 ft cables that advertise they do 4k are a scam. The vendors prey upon people that can\u2019t tell the difference between 4k30hz(30 frames per second) and 4k60(4k resolution at 60 frames per second).<\/p>\n\n\n\n<p>Here\u2019s what you need to know:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Integrated graphics is fine &#8211; you do not need a dedicated GPU to playback 4k 60 hz video content. A decent CPU made sometime in the past 10 years is more than enough.<\/li>\n\n\n\n<li>Expensive HDMI cables will never make a difference in picture quality. They either do 4k at 60 hz or they don\u2019t.<\/li>\n\n\n\n<li>HDMI 2.0 bandwidth requirements:\n<ul class=\"wp-block-list\">\n<li>4K @ 30Hz requires about 8.16 Gbps<\/li>\n\n\n\n<li>4K @ 60Hz requires about 16.32 Gbps<\/li>\n\n\n\n<li>Any cable claiming \u201c18 Gbps\u201d should handle 4K60 if it actually meets specs. Most amazon\/walmart no-name junk don\u2019t.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.3 Video Cable Buying Guide[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=863\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=863\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A&nbsp;<a href=\"https:\/\/www.monoprice.com\/product?p_id=15429\">cheap sub-$10 cable from monoprice<\/a>&nbsp;is fine for shorter runs(25 feet or less) and will do 4k60 with ease.<\/li>\n\n\n\n<li>If impatient, you can buy a&nbsp;<a href=\"https:\/\/www.walmart.com\/ip\/GE-15ft-HDMI-2-0-Cable-with-Ethernet-Gold-Plated-Connectors-48722\/\">high quality, General Electric HDMI cable that does 4k60 from walmart<\/a>&nbsp;for about $20, in store, same day.<\/li>\n\n\n\n<li>If running more than 25 ft, fiber optic active HDMI cables from reputable vendors like&nbsp;<a href=\"https:\/\/www.monoprice.com\/product?p_id=43331\">monoprice<\/a>&nbsp;or&nbsp;<a href=\"https:\/\/www.bluejeanscable.com\/store\/hdmi-cables\/hdmi-cable.htm\">bluejeanscable<\/a>&nbsp;become necessary because:\n<ul class=\"wp-block-list\">\n<li>Traditional copper cables have signal degradation over longer distances<\/li>\n\n\n\n<li>This doesn\u2019t mean a worse picture; rather, you can\u2019t use higher resolutions or framerates.<\/li>\n\n\n\n<li>Active fiber cables regenerate the signal and pass signal with less degredation allowing 4k at 60 hz(60 fps) over long distances.<\/li>\n\n\n\n<li>They\u2019re more expensive but actually work at advertised specs unlike amazon\/walmart scams.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>There are cheaper 50 ft options, but they are&nbsp;<a href=\"https:\/\/www.walmart.com\/ip\/HDMI-Cable-4K-Ultra-HD-50-Foot-2-Pack-2-0-Cable-High-Speed-18Gbps-4K-60Hz-HDR-3D-2160p-1080p-HDCP-2-2-ARC-Cables-Monitors-HDTV\/564196472\">scams<\/a>.<\/li>\n\n\n\n<li>bluejeanscable&nbsp;<a href=\"https:\/\/www.bluejeanscable.com\/legal\/mcp\/index.htm\">humiliated monster.com\u2019s legal department<\/a>, are honest &amp; upfront about what they sell, produce quality products, and debunk bs on their blog. For this reason alone, they\u2019ve earned my loyalty.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116215551750.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116222626732.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116231037348.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116231235888.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116231341624.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Hook up your computer\u2019s sound output to your stereo.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=864\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=864\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 Analog out from your desktop motherboard or laptop headphone jack.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=865\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=865\">edit source<\/a>]<\/h4>\n\n\n\n<p>A cable like a&nbsp;<a href=\"https:\/\/www.monoprice.com\/product?p_id=665\">1\/8\u201d to stereo RCA<\/a>&nbsp;from monoprice allows you to hook up the headphone jack from your computer to many stereo amplifiers and home audio receivers. In my setup, I do not have a receiver that is capable of video &#8211; I have a&nbsp;<a href=\"https:\/\/www.reddit.com\/r\/audiophile\/comments\/eqpns1\/rotel_rb1090_added_to_my_system_this_evening\/\">30 year old Rotel RB-1090 tank<\/a>&nbsp;with RCA input, so this is what I would use to hook up my laptop or a desktop to my stereo if I didn\u2019t have a separate audio interface.<\/p>\n\n\n\n<p>If you don\u2019t wait to wait for an order, you can also&nbsp;<a href=\"https:\/\/www.walmart.com\/ip\/onn-6-AUX-to-RCA\/1342171538\">buy these at your local walmart<\/a>.<\/p>\n\n\n\n<p><strong>Why this will suck<\/strong>:<\/p>\n\n\n\n<p>The analog audio output from your motherboard is often horrible because you have so much else going on in there. Your GPU, CPU, RAM, are all high bandwidth devices, you have everything on a single circuit board. Things have improved vastly in this regard since I was young and dealt with the horrors of trash like the ac97, where there was audible hissing &amp; warbling that changed in pitch &amp; intensity when you dragged windows around the screen, and weird high frequency sounds depending on the sensitivity of your stereo system. However, it is often still there.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 HDMI output from your computer to your TV.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=866\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=866\">edit source<\/a>]<\/h4>\n\n\n\n<p>If you use the speakers built into your television, you are missing out bigtime. However, there are cases where you have no choice. In this case, the audio and video will get to your television over the HDMI cable, and your setup will be simple.<\/p>\n\n\n\n<p><strong>Why this will suck<\/strong>:<\/p>\n\n\n\n<p>Television speakers are trash. * They will be filled with cabinet resonances from the giant television. * You can\u2019t fit speakers that will do a proper job inside of a very thin televsiion. * The proper location of speakers in your room will not be the same location as the television in your room.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 HDMI output from your computer to your receiver.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=867\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=867\">edit source<\/a>]<\/h4>\n\n\n\n<p>You may have a setup where you have a receiver that you hook up between your devices &amp; your sound system\/TV &#8211; in that case, just plug the HDMI out from the computer into that. Then you can use HDMI to carry the sound &amp; the video. This is common in home theater setups where you might a bluray player, a cable box\/FIOS TV box, and a game console that plug into a receiver. This receiver usually feeds your television a video feed, and connects directly to your speakers and subwoofer.<\/p>\n\n\n\n<p><strong>Why this is better<\/strong>: You are not using the analog audio output from your laptop or desktop. This allows you the flexibility to choose an audio device that does not have poor sound quality, rather than being stuck with what comes in your computer. Digital output means even if the motherboard\u2019s audio circuit is total garbage, it doesn\u2019t make a difference, since you aren\u2019t using it. You will be sending the raw 1s &amp; 0s of the audio to another device &amp; letting it do the work of turning it into an audio signal.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.4 Optical output from your computer to your receiver.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=868\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=868\">edit source<\/a>]<\/h4>\n\n\n\n<p>Optical audio output is available on most desktop motherboards. It is worth checking to see if yours has this; which is green in the photo above. Most sound cards also have this port, if you have a sound card.<\/p>\n\n\n\n<p>This requires an optical cable, but optical audio cables are considerably cheaper than optical video cables, since the bandwidth requirements are so much lower. For same day purchases, a&nbsp;<a href=\"https:\/\/www.walmart.com\/ip\/onn-6-Digital-Optical-Audio-Toslink-Sound-Bar-TV-Cable-Black\/\">cheap walmart optical cable<\/a>&nbsp;will do fine, and&nbsp;<a href=\"https:\/\/www.monoprice.com\/product?p_id=1419\">high quality 50 ft cables<\/a>&nbsp;from reputable vendors like monoprice cost less than $15.<\/p>\n\n\n\n<p><strong>Why this is better<\/strong>: You are not using the analog audio output from your laptop or desktop. This allows you the flexibility to choose an audio device that does not have poor sound quality, rather than being stuck with what comes in your computer. Digital output means even if the motherboard\u2019s audio circuit is total garbage, it doesn\u2019t make a difference, since you aren\u2019t using it. You will be sending the raw 1s &amp; 0s of the audio to another device &amp; letting it do the work of turning it into an audio signal.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>\u201cUHM, AKSHUALLY\u201d NOTICE:<\/strong>&nbsp;Some wiseguy\u2019s going to say that this is unnecessary. They might say that if we\u2019re connecting our computer to the television using an HDMI cable, that the audio is&nbsp;<em>already<\/em>&nbsp;going to the television through the HDMI cable, and that you can use the optical output from the television to send the audio to the receiver digitally without having to worry about whether your computer has a digital SPDIF output.<\/p>\n\n\n\n<p>Some televisions do this. Some don\u2019t. Some claim they do and have broken menus. If we are going to be buying gear from scratch, I think it makes sense to keep our options open.&nbsp;<strong>In 2024, there is no price premium to pay by asking for an audio jack that came out in 1983.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">2.5 Basic purchase considerations[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=869\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=869\">edit source<\/a>]<\/h4>\n\n\n\n<p>We will go into this in greater detail later: for now, let\u2019s go over the basics.<\/p>\n\n\n\n<p>If your computer is far away from the receiver or amplifier, you should really consider using an optical cable to connect your computer to the audio source to avoid hiss, distortion, hum, and horrible audio. Even high quality analog audio cables suck when they are unbalanced over long distances; no laptop or standard desktop computer uses balanced output. However, even the cheapest of spdif optical cables will be fine even at 50 ft with audio signals. Digital audio signals are far lower in bandwidth so there is no real worry about degredation at any practical household length of cable.<\/p>\n\n\n\n<p>On the low end, I would suggest a used stereo receiver that has optical audio input from a reputable brand. These can be found on&nbsp;<a href=\"https:\/\/www.ebay.com\/sch\/i.html?_fsrp=1&amp;_from=R40&amp;Audio%2520Inputs=Digital%2520Optical%2520TOSLINK&amp;Number%2520of%2520Channels=2%7C2%252E1&amp;_nkw=stereo+receiver&amp;_sacat=0&amp;Audio%2520Outputs=Digital%2520Optical%2520TOSLINK%7CDigital%2520Coaxial%2520RCA&amp;LH_BIN=1&amp;rt=nc&amp;Type=Stereo%2520Receiver%7CIntegrated%2520Amplifier&amp;_dcat=14981\">eBay by searching with the following filters<\/a>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Number of channels<\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong>2.1<\/strong>&nbsp;if you want to attach a subwoofer later<\/li>\n\n\n\n<li><strong>2<\/strong>&nbsp;if you don\u2019t care.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Type<\/strong>:&nbsp;<strong>Stereo Receiver<\/strong>&nbsp;and&nbsp;<strong>Integrated Amplifier<\/strong>\n<ul class=\"wp-block-list\">\n<li>This will provide you with volume control, ability to utilize multiple sources, and an amplifier for your speakers.<\/li>\n\n\n\n<li>I don\u2019t bother with surround sound.\n<ul class=\"wp-block-list\">\n<li>Two good speakers will always beat 6 crappy speakers.<\/li>\n\n\n\n<li>For any given price point, you get a higher budget when buying two speakers than you do buying six.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Audio Inputs<\/strong>:&nbsp;<strong>Digital Optical TOSLINK<\/strong>.\n<ul class=\"wp-block-list\">\n<li>This means the receiver has a&nbsp;<strong>DAC<\/strong>&nbsp;<em>(digital to analog converter)<\/em>. This turns the 1s &amp; 0s that make up the audio files on your computer into an analog signal.<\/li>\n\n\n\n<li>The one in your receiver usually does a better job. I\u2019m not talking about audiophile nonsense, just basic competence.<\/li>\n\n\n\n<li>On lower quality PC motherboards you can literally hear hiss that changes when you do CPU intensive things on your machine when using sensitive stereo equipment or headphones.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Buying Format<\/strong>: Buy it now.\n<ul class=\"wp-block-list\">\n<li>Bidding wars on eBay are fun &amp; dopamine releasing. They\u2019re exciting. When people win, they feel like they\u2019ve won until they realize they\u2019ve paid 30% over the used-market-value of what they purchased.<\/li>\n\n\n\n<li>If buying from auctions on eBay, consider using an&nbsp;<strong>auction sniper<\/strong>&nbsp;like&nbsp;<a href=\"https:\/\/www.gixen.com\/main\/index.php\">Gixen.com<\/a>. Auction snipers are programs where you input what you wish to pay for something, and it submits your bid seconds before the auction ends. This way, you don\u2019t get caught up in a bidding war. If you bid too early, it allows others the chance to increase their bid as well, which drives up the price.<\/li>\n\n\n\n<li>Using an auction sniper removes the emotional aspect from auctions that drives up prices, and encourages price-discipline in setting the max you are willing to pay for the item&nbsp;<em>early on.<\/em><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Access Media On Your Samba Share[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=870\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=870\">edit source<\/a>]<\/h3>\n\n\n\n<p>For a media computer, my setup is actually dirt simple. It goes like this.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Connect computer to TV\/stereo.<\/li>\n\n\n\n<li>Find file I want to play(music or video) in my file explorer(thunar, windows explorer, etc)<\/li>\n\n\n\n<li>Double click to open in VLC<\/li>\n\n\n\n<li>Enjoy<\/li>\n<\/ol>\n\n\n\n<p>Here\u2019s how you can access your files:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>File Explorer<\/strong>: I use&nbsp;<code>Thunar<\/code>&nbsp;as my file explorer. If you\u2019re on Windows, you\u2019re likely using Windows Explorer.<\/li>\n\n\n\n<li><strong>Accessing Samba Share<\/strong>:\n<ul class=\"wp-block-list\">\n<li>In Windows, you\u2019d type&nbsp;<code>\\\\<\/code>&nbsp;followed by the IP address of your ZFS pool computer. For instance, in our case, it would be&nbsp;<code>\\\\192.168.5.2<\/code><\/li>\n\n\n\n<li>On Linux, type&nbsp;<code>smb:\/\/<\/code>&nbsp;followed by the IP address or hostname of your share in&nbsp;<strong>Thunar<\/strong>&nbsp;file manager Enter your username and password when prompted. For instance, in our case, it would be&nbsp;<code>smb:\/\/192.168.5.2<\/code>\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116214553212.png\"><img decoding=\"async\" src=\"https:\/\/wiki.futo.org\/thumb.php?f=Image-20241116214553212.png&amp;width=446\" alt=\"\"\/><\/a><\/figure>\n\n\n\n<p>Once you do this, you\u2019ll have access to all your files stored on the ZFS pool.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Play Media with VLC[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=871\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=871\">edit source<\/a>]<\/h3>\n\n\n\n<p>To enjoy your GNU\/Linux ISOs &amp; recipes, simply find your files in the Samba share, double-click to open them in&nbsp;<strong>VLC<\/strong>. Boom, you\u2019re set.&nbsp;<a href=\"https:\/\/www.videolan.org\/vlc\/\">VLC is an open source media player<\/a>&nbsp;that is fast, efficient, and supports nearly every audio format, video format, codec etc. on earth. It works on Windows, Mac, GNU\/Linux, Android, iPhones, ChromeOS, FreeBSD.. just about everything. .<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Putting together affordable home hi-fi[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=872\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=872\">edit source<\/a>]<\/h1>\n\n\n\n<p>Now, let\u2019s break down the audio components becaus, you don\u2019t need to spend a fortune for good sound. You just have to avoid snake oil and sound bars.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Speakers[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=873\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=873\">edit source<\/a>]<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Speakers<\/strong>: I use&nbsp;<code>Vandersteen Audio<\/code>&nbsp;speakers. They have minimal cabinet resonance, phase coherent crossovers &amp; driver positioning, and even frequency response for clear sound.<\/li>\n\n\n\n<li><strong>Amplifier<\/strong>: An Rotel RB-1090 powers my speakers.<\/li>\n\n\n\n<li><strong>Subwoofers<\/strong>: Two HSU Research ULS-15 from Dr.&nbsp;Hsu, one of the inventors of the original subwoofer.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Vandersteen-2c-loudspeakers-left-on-curb.jpg\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116234208414.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116234642727.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116234527754.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116234922873.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Speaker Selection: Why I Use Vandersteens[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=874\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=874\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Minimal cabinet resonances &amp; diffraction off the bezel.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=875\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=875\">edit source<\/a>]<\/h4>\n\n\n\n<p>These speakers cost $1100 used when I got them, and under $900 were available with minor crossover issues. I like these for a very good reason; exceptional engineering with little\/no attention put to marketing or looks. True function over form.<\/p>\n\n\n\n<p>They have great frequency response AND phase response. Further, their shape avoids baffle diffraction &amp; cabinet resonances.<\/p>\n\n\n\n<p>Do this &#8211; put your hands by your mouth and cup them. That weird boxy sound you get? That\u2019s what it\u2019s like when you have a speaker that\u2019s a giant box. It\u2019s why your television sounds like garbage.<\/p>\n\n\n\n<p>When you look at these Vandersteens, you notice that even though it looks like a big speaker, the top part is actually just a pole. It\u2019s nothing in there &#8211; it\u2019s almost completely hollow besides the bass cabinet. Minimal baffle, minimal diffraction. When there\u2019s diffraction that means you\u2019re listening to the noise from the speaker driver PLUS the reflections off the cabinet that are milliseconds apart.<\/p>\n\n\n\n<p>When you get used to hearing speakers that have minimal cabinet resonances and baffle diffraction, it\u2019s really hard to go back to speakers that do. Everything else sounds like a speaker; this sounds real.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116235548018.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116235521916.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241116235356286.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Used market availability.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=876\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=876\">edit source<\/a>]<\/h4>\n\n\n\n<p><strong>Inflation? What inflation?<\/strong><\/p>\n\n\n\n<p>In 2009 I bought a set of model 2 for $400 from someone with a leaky apartment, and in 2011 I had the choice of $1100 for high quality used or $900 for a set with minor, repairable crossover issues. Now, a set of 2c are $650, and 3a signatures are $1600 in good condition.<\/p>\n\n\n\n<p><strong>Low end models feature same high end engineering<\/strong><\/p>\n\n\n\n<p>99% of what you get in the Vandersteen Model 3a signature which is $7000 new and $1000-$2000 used you get in the lower end models like the 2c.<\/p>\n\n\n\n<p><strong>These are always for sale.<\/strong><\/p>\n\n\n\n<p>Anytime you to go ebay.com or audiogon.com , someone is selling a set of these.<\/p>\n\n\n\n<p><strong>Subwoofer? Why?<\/strong><\/p>\n\n\n\n<p>These are down about 1 dB at 30 hz. That\u2019s insane. Most likely, the subwoofer you have with your soundbar or home theater produces less bass than these.<\/p>\n\n\n\n<p>The extension along with a small cabinet does come at a price &#8211; you\u2019re not going to 120 dB with a lot of low end with these. But, for most music and even movies at reasonable volumes in average sized spaces, you\u2019ll get the full range experience without feeling like you\u2019re missing out.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Speaker Selection: Why I Use Axiom M3[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=877\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=877\">edit source<\/a>]<\/h3>\n\n\n\n<p><strong>Quality engineering over marketing wankery<\/strong><\/p>\n\n\n\n<p><strong>Axiom<\/strong>&nbsp;is a company that was early to the scene with direct-to-the-consumer online sales. Their \u201cmarketing budget\u201d was a guy named Alan Lofft who answered people\u2019s questions on an early webforum that looked like a usenet newsgroup with their logo in the top.<\/p>\n\n\n\n<p>Axiom conducted research at the&nbsp;<strong>National Research Council<\/strong>&nbsp;in Canada, where double-blind tests were performed in which ordinary people would say what they preferred with regards to audio quality. Taking this scientific approach with input from the public, combined with extensive testing and design in a top quality facility allowed them to draw direct conclusions from how speakers measured to what people wanted.<\/p>\n\n\n\n<p><strong>Affordability<\/strong><\/p>\n\n\n\n<p>Although their prices have went up for brand new speakers, they can still be found dirt cheap used. Back in the day, their m22 speaker sounded similar to paradigm studio speakers that were near triple the price.<\/p>\n\n\n\n<p>Speakers like the M60 that cost $800 new are no longer competitive deals at their current pricing of $2000\/pair &#8211; but speakers like the M3 can be found for $160-$220, fit on a desk, and offer exceptional sound for dirt cheap.<\/p>\n\n\n\n<p><strong>Exceptional frequency response<\/strong><\/p>\n\n\n\n<p>Speakers like the M3 have a neutral frequency response and a very natural sound.<\/p>\n\n\n\n<p><strong>Minimal cabinet resonances<\/strong><\/p>\n\n\n\n<p>Take a look at the M3. Notice how the walls are not parallel? This lessens the type of internal standing waves that occur when a speaker is a perfect cube box. It\u2019s a small touch, but little details like this show them actually focusing on engineering rather than making it look pretty, paying for annoying influencer marketing campaigns, and trendy nonsense.<\/p>\n\n\n\n<p>Same deal with Vandersteens &#8211; you can grab the Model 2s used for like $600. These go down to about 30 hertz, very linearly. So you could easily use these without a subwoofer and get better bass than 99% of those computer speaker setups with their tiny subwoofers. These actually have a 10-inch passive radiator in the back and an 8-inch woofer in the front.<\/p>\n\n\n\n<p>The key is don\u2019t buy this stuff new. Just look through eBay for a few minutes, check AudioGon, and you can find insane deals. You\u2019ll end up with speakers that absolutely destroy setups that cost 5-10 times more.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Debunking Audiophile Myths[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=878\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=878\">edit source<\/a>]<\/h2>\n\n\n\n<p>Now, let\u2019s address some audiophile myths. There\u2019s this idea that more expensive always equals better, especially when it comes to cables. You\u2019re going to hear about people justifying $5,000 cables, which is&nbsp;<em>absolute nonsense<\/em>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">ABX Double blind testing doesn\u2019t matter[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=879\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=879\">edit source<\/a>]<\/h4>\n\n\n\n<p>A key sign you\u2019re speaking to someone who has their head as far up their ass as their ego, or a salesman, is when they refuse to acknowledge the benefits of ABX double blind tests. Hydrogenaudio is&nbsp;<strong>THE<\/strong>&nbsp;place for top tier codec developers &amp; programmers to congregate and showcase their new developments; they have had ABX testing as part of their forum rules for over 20 years. If you post about sonic differences without sharing ABX test results.. you\u2019re gone.<\/p>\n\n\n\n<p>That should tell you something.<\/p>\n\n\n\n<p>The ABX test is a method used to objectively compare audio equipment. It involves three inputs\u2014A, B, and X, where X is randomly selected from either A or B. The listener must identify X without prior knowledge, and if they can\u2019t consistently tell the difference, their input is considered irrelevant.<\/p>\n\n\n\n<p>You have a program where you know what A is(an uncompressed wav file), you know what B is(a compressed 128 kbps AAC file), but you don\u2019t know what X is. Every time you hit the X button, you are listening to either A or B &#8211; but you don\u2019t know which. It is your job to figure out what X is, each time.<\/p>\n\n\n\n<p>If you can\u2019t get it right&nbsp;<em><strong>12 out of 16 times<\/strong><\/em>, you didn\u2019t hear a difference. It was all in your head.<\/p>\n\n\n\n<p>Our memory for people\u2019s voices is exceptional. Our ability to be honest with ourselves about our auditory memory is&nbsp;<strong>complete garbage<\/strong>. The reason for this is that we forget what something sounded like with regards to every sonic detail the moment we stop listening to it. It\u2019s easy for our brain to&nbsp;<em>\u201cthink\u201d<\/em>&nbsp;it heard a difference when it didn\u2019t.<\/p>\n\n\n\n<p><strong>This is a good thing, right?<\/strong><\/p>\n\n\n\n<p>It depends how you see it.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">The upside of ABX testing:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=880\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=880\">edit source<\/a>]<\/h5>\n\n\n\n<p>If you can\u2019t hear the difference between a $200 amplifier and a $20,000 amplifier, you just avoided breaking into your 401k for $19,800 worth of audiophile bs.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">The downside of ABX testing:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=881\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=881\">edit source<\/a>]<\/h5>\n\n\n\n<p>The crushing of fragile egos.<\/p>\n\n\n\n<p>Read youtube comments sections. Anytime a company, a manufacturer, a developer, etc. screws a group of people over, there are two groups of people in the comments:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>People who are supportive<\/li>\n\n\n\n<li>People who say that everyone who made a difference choice than them in\n<ul class=\"wp-block-list\">\n<li>Who they voted for<\/li>\n\n\n\n<li>Who they worked for<\/li>\n\n\n\n<li>Who they did work for<\/li>\n\n\n\n<li>What software they bought<\/li>\n\n\n\n<li>What hardware they bought<\/li>\n\n\n\n<li>etc, etc. is an idiot.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>This is done because it&nbsp;<em>makes people feel better about themselves<\/em>. If I can hear the difference between a $5 cable and a $500 cable, it means I\u2019m a connoisseur, unlike the plebs &amp; unwashed masses who can\u2019t tell the difference. It also makes me&nbsp;<strong>feel<\/strong>&nbsp;like I am getting an upgrade when I am actually not. Above all, it gives people an ego boost, and who doesn\u2019t want that?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Audio Memory and Bias:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Human auditory memory is fleeting. The moment you switch from one system to another, your ability to accurately remember the sound diminishes.<\/li>\n\n\n\n<li>This makes it easy to convince yourself that a more expensive component sounds better, even if it doesn\u2019t.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Warning:<\/strong>&nbsp;Avoid falling for marketing gimmicks that promise crazy improvements whose vendors will hide from ABX testing. Forums like&nbsp;<code>hydrogenaudio<\/code>&nbsp;can offer a reality check with evidence-based discussions.<\/p>\n<\/blockquote>\n\n\n\n<p>By focusing on what ACTUALLY matters; speaker quality, room acoustics, and well-researched purchases\u2014you can make a hi-fi system that satisfies both your ears and your wallet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Expensive equipment is a priority over acoustic treatment[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=882\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=882\">edit source<\/a>]<\/h3>\n\n\n\n<p>When you look on audiophile webforums, you will see people with Krell amplifiers, wilson watt puppy speakers, and lavry digital to analog converters in untreated drywall rooms. No bass traps. No acoustic panels. It\u2019s insane.<\/p>\n\n\n\n<p>A $400 stereo in a good room will beat a $40,000 stereo in an untreated room.<\/p>\n\n\n\n<p>Avoid falling into the trap of spending thousands on equipment that doesn\u2019t deliver proportionately better sound. Focus on well-designed, affordable electronics, and you\u2019ll have a setup that works amazing in your living room without emptying your wallet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Receivers, amps, electronics[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=883\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=883\">edit source<\/a>]<\/h2>\n\n\n\n<p>Today, audio electronics that are competently designed(key word;&nbsp;<em>competently<\/em>) will be indistinguishable in an ABX test from gear that costs $10,000. Paying $10,000 for an amplifier or $8000 for a DAC isn\u2019t an exercise in audible improvements; they\u2019re just status symbols.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Basic Building Blocks[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=884\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=884\">edit source<\/a>]<\/h3>\n\n\n\n<p>You need three main things to get from digital music to sound: 1. Something to turn digital into analog (DAC) 2. Something to control volume and inputs (preamp) 3. Something to make it loud enough for speakers (power amp)<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Digital to Analog Converter (DAC)[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=885\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=885\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Takes the digital signal from your computer, the 1s and 0s, and turns it into an electrical audio signal.<\/li>\n\n\n\n<li>This could be in your computer motherboard, a soundcard, in a box by itself, in your receiver, or your television.<\/li>\n\n\n\n<li>Most modern ones are fine &#8211; don\u2019t fall for a $10000 DAC or similar bs<\/li>\n\n\n\n<li>Having this OUTSIDE of your computer usually means less chances for computer-y noise in your audio like hiss\/high frequency noises when doing something with your computer.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Preamp[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=886\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=886\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This controls which input you\u2019re listening to, so you can switch between a bluray player, cable box, playstation, etc.<\/li>\n\n\n\n<li>This is what has a volume knob, so it\u2019s pretty much a fancy switch &amp; volume control, sometimes has bass\/treble controls on it.<\/li>\n\n\n\n<li>This isn\u2019t what makes things&nbsp;<em>louder<\/em>&nbsp;&#8211; that\u2019s for the power amplifier.<\/li>\n\n\n\n<li>This can be better than taking the output from a digital to analog converter and simply lowering the audio volume in VLC.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Preamp? Why the hell would I pay for a fancy volume knob when my mouse wheel and VLC let me do that for free?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=887\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=887\">edit source<\/a>]<\/h4>\n\n\n\n<p>When you lower the audio signal volume in VLC, you\u2019re not attenuating an analog signal. Attenuating an analog signal takes the same audio you had and just shrinks the waveform.<\/p>\n\n\n\n<p>When you lower the volume using VLC and then amplifying that, you\u2019re lowering the volume digitally. 16 bit audio has 96 dB of dynamic range, 24 bit audio has 144. If you lower the volume digitally too much, it will start to sound like you are actually losing bits of audio. Even digital preamps usually use a&nbsp;<em>digital signal<\/em>&nbsp;to control&nbsp;<strong>analog amplification &amp; attenuation.<\/strong><\/p>\n\n\n\n<p>A great example of this would be to hook a digital to analog converter with no volume control\/attenuation knob up to your computer, and plug it&nbsp;<strong>straight<\/strong>&nbsp;into a power amp. This would be full volume all the time. Then, lower the volume in VLC. This will sound different than lowering the volume on an analog preamp, because you\u2019re not lowering the signal, you\u2019re throwing away digital data.<\/p>\n\n\n\n<p><strong>If you think paying extra for a preamp is stupid, just buy a stereo receiver. You get a good enough preamp along with a good enough DAC &amp; amp and it costs around the same or less than just a preamp from \u201caudiophile\u201d brands.<\/strong><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Power Amp[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=888\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=888\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Turns a tiny audio signal into a big audio signal.<\/li>\n\n\n\n<li>As long as it\u2019s competently designed and can power a 4 ohm load without turning off, you\u2019re fine.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Now the Combinations:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=889\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=889\">edit source<\/a>]<\/h3>\n\n\n\n<p>Similar to how a modern wireless router is actually a router, a switch, and a wireless access point all in one, the devices below are usually combinations of the devices above:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Integrated Amp[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=890\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=890\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Preamp + Power amp in one box<\/li>\n\n\n\n<li>Usually does not come with a digital to analog converter, so still needs a DAC if you have a source with a digital output.<\/li>\n\n\n\n<li>Usually cheaper than separate components when comparing with others from the same company.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Receiver[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=891\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=891\">edit source<\/a>]<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DAC + Preamp + Power amp all in one<\/li>\n\n\n\n<li>Often has digital inputs like optical\/HDMI<\/li>\n\n\n\n<li>Has radio tuner, (that is why it\u2019s called a receiver)<\/li>\n\n\n\n<li>Usually the cheapest all-in-one option<\/li>\n\n\n\n<li>Good for most people who just want things to work &amp; sound good without being overly complicated.<\/li>\n<\/ul>\n\n\n\n<p>Most modern electronics that are competently designed all sound basically the same. Don\u2019t fall for that \u201cmagical preamp\u201d or \u201cwarm sounding DAC\u201d garbage. Get something with enough power for your speakers, digital inputs you need, and spend the rest of your money on speakers and room treatment.<\/p>\n\n\n\n<p>The only time you need separate components is: * Need more power than receivers offer * Want to upgrade one piece at a time * Have some specific feature need * Found a crazy deal on used gear<\/p>\n\n\n\n<p>For most of the people reading this, a used ten year old receiver with optical input will do everything you need, and cost under $200.&nbsp;<strong>Save your money for the stuff that actually matters; good speakers &amp; acoustic treatment.<\/strong>&nbsp;(and your retirement).<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241117013839490.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241117014642043.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Suggested electronics: 5-10 year old receiver with optical\/coax in.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=892\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=892\">edit source<\/a>]<\/h3>\n\n\n\n<p>There are two ways in the affordable, consumer realm to transfer digital audio signals.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SPDIF using an optical cable(toslink).<\/li>\n\n\n\n<li>SPDIF using a coaxial cable.\n<ul class=\"wp-block-list\">\n<li>This is like an analog RCA audio cable, same connector, but requires a cable that is manufactured to much stricter specifications.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Getting a receiver that supports&nbsp;<em>both<\/em>&nbsp;gives you flexibility incase your motherboard only supports one or the other.<\/p>\n\n\n\n<p>Laptops rarely have coaxial or optical out. While you can get an audio interface, this is extra money, and often not immediately available. A USB to spdif device requires an online order, while a 1\/8\u201d to RCA cable is available everywhere.<\/p>\n\n\n\n<p>This device above allows you to have the flexibility to use whatever works best for you at the time.&nbsp;<a href=\"https:\/\/www.ebay.com\/itm\/156102995033?_trksid=p4375194.c101800.m5481\">Best of all, it\u2019s $187<\/a>. Used devices like these in good condition from harman kardon(before they cheaped out, go back to 2012-ish era), denon, onkyo, etc. are being sold sub-$200 on eBay &amp; audiogon every day.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Understanding Room Acoustics[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=893\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=893\">edit source<\/a>]<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">What makes rooms sound bad?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=894\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=894\">edit source<\/a>]<\/h4>\n\n\n\n<p>Before we get into the technical setup, let\u2019s talk about room acoustics because it&nbsp;<em>really<\/em>&nbsp;makes a difference. Two rooms can be identical in shape &amp; size and sound completely different if one is treated and the other is not.<\/p>\n\n\n\n<p>Some bare-walled, people call&nbsp;<em>\u201cechoey\u201d<\/em>. Those aren\u2019t&nbsp;<strong>echoes<\/strong>, they\u2019re&nbsp;<strong>early reflections<\/strong>. An&nbsp;<strong>echo<\/strong>&nbsp;is when you yell and then you hear it repeat back&nbsp;<strong>a second or two later<\/strong>. An&nbsp;<strong>early reflection<\/strong>&nbsp;is when you speak and you hear yourself alongside yourself&nbsp;<strong>a few milliseconds later<\/strong>.<\/p>\n\n\n\n<p>What that means is that you\u2019re not just hearing you, you\u2019re hearing you alongside something else. It creates a totally different sonic experience &amp; it\u2019s annoying. It\u2019s distortion; it\u2019s noise added to the original signal.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Why the word \u201caudiophile\u201d is a joke[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=895\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=895\">edit source<\/a>]<\/h4>\n\n\n\n<p>Self proclaimed&nbsp;<strong>\u201caudiophiles\u201d<\/strong>&nbsp;will spend $1000 on cables and $5000 on digital to analog converters that claim they reduce inaudible distortion 0.001%. Not&nbsp;<strong>ACTUALLY<\/strong>&nbsp;reduce distortion 0.001% &#8211;&nbsp;<em><strong>CLAIM TO<\/strong><\/em>&nbsp;reduce distortion 0.001%.<\/p>\n\n\n\n<p>Yet, they won\u2019t spend a few hundred dollars on room treatment that reduces distortion 5% to 15%.<\/p>\n\n\n\n<p>It\u2019s ridiculous. Walk into many hi-fi dealers and they won\u2019t even mention room treatment, or try to sell you room treatment. But they will upsell you to a $4000 amplifier, or $500 cable, when it sounds the same as a $200 amp and a $5 cable.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Buying acoustic panels.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=896\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=896\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Acoustic panels[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=897\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=897\">edit source<\/a>]<\/h4>\n\n\n\n<p>24\u201d\u2019x48\u201dx2\u201d acoustic panels are the most common. Something like&nbsp;<a href=\"https:\/\/www.atsacoustics.com\/item--ATS-Acoustic-Panel-24-x-48-x-2--1001.html\">this ATS Acoustic 24 x 48\u201d x 2\u201d panel<\/a>. Pretend you\u2019re playing pool and put the panels where the sound is going to bounce around your room as it leaves your speakers. Hang these about 2 to 3 feet above the floor, behind the speakers, and behind the listening position as well.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Bass traps[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=898\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=898\">edit source<\/a>]<\/h4>\n\n\n\n<p>Bass traps are just bigger acoustic panels. The more insulating material, the lower the frequencies they absorb. It is most obvious when midrange and high frequencies are reduced in volume as this is within the range we are most sensitive to hearing differences in, since these are the frequencies of the human voice.<\/p>\n\n\n\n<p>You may wonder what the point of a bass trap is. Most people want&nbsp;<em><strong>more<\/strong><\/em>&nbsp;bass, not less! Reflections are the enemy of bass.<\/p>\n\n\n\n<p>If low frequency reflections are only a few milliseconds away from the original sound, they can cause phase issues where they cancel each other out, resulting in giant peaks and nulls in certain areas of the room, at certain frequencies. By&nbsp;<strong>absorbing<\/strong>&nbsp;the reflections, you wind up with&nbsp;<strong>more, and higher quality&nbsp;<em>net<\/em><\/strong>&nbsp;bass.<\/p>\n\n\n\n<p>Bass traps usually start at 4\u201d of thickness.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Acoustic foam[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=899\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=899\">edit source<\/a>]<\/h4>\n\n\n\n<p><a href=\"https:\/\/www.amazon.com\/JBER-Acoustic-Soundproofing-Resistant-Treatment\/dp\/B08R1JFZCF?crid=2ZD3L0YJRKWHH&amp;dib=eyJ2IjoiMSJ9.I2VrY2tWcVyr8K7lX_3vj_F0oqWJSMyQWdmwc_CLXm0ETvcT70DlUkA5WkaV2_4e_k_vYbWY2ZzKwXM94vQYxgrmZOEtmIDK-ATi3sAbLLYU13HM_8tlJJ5YLp40IQciG0-1A2epdNltNct6tKiHIJ0rZZk5wdp96msp-Hhbxa7VsW81O_d2UZYfJVtqA8Hygwnzl2o2Gv5HuBsWLYUbJk3kbXaxxJEVoehDBHwgiUmRJnsIyBjr7JskLQHM8ra6AX4UsgFd3fpEZDRHMgBkpsJFDGFb8DdVepF0ODt6Q6I.4-RG_jpCaEIScDOr8y8kaImu864LS0mPU33Upfd76Zk&amp;dib_tag=se&amp;keywords=acoustic%2Bfoam&amp;qid=1731827043&amp;sprefix=acoustic%2Bfoam%2Caps%2C130&amp;sr=8-6&amp;th=1\">Acoustic foam<\/a>&nbsp;is a much cheaper alternative unless you\u2019re getting ripped off buying Auralex. However, it is way less effective. It mostly absorbs high frequencies, and the darker colors are exceptional at making rooms look depressing.<\/p>\n\n\n\n<p>Still, this is considerably better than having nothing at all.<\/p>\n\n\n\n<p>they don\u2019t absorb low frequencies, just the higher ones. Compare that to, which are much more effective.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Cheap Foam<\/strong>: Absorbs only high frequencies; ineffective for bass.<\/li>\n\n\n\n<li><strong>Owens Corning 703<\/strong>: Absorbs a broader range of frequencies, including low ones.<\/li>\n<\/ul>\n\n\n\n<p>Even with subpar treatment, you avoid some early reflections that can muddy up your sound. But trust me, investing in quality acoustic panels is worth it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Make your own acoustic panels[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=900\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=900\">edit source<\/a>]<\/h3>\n\n\n\n<p>Here\u2019s what you need to make your own acoustic panels:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><a href=\"https:\/\/www.acoustimac.com\/acoustic-insulation-materials\/acoustic-insulation\/owens-corning-acoustic-insulation\/oc7032\">Owens Corning 703 fiberglass<\/a><\/strong>&nbsp;for the absorption material<\/li>\n\n\n\n<li><strong>2&#215;4 wood<\/strong>&nbsp;to frame the fiberglass.<\/li>\n\n\n\n<li><strong>Burlap<\/strong>&nbsp;to hold the fiberglass in place and keep it from falling out<\/li>\n\n\n\n<li><strong>Staplegun<\/strong>&nbsp;to attach the burlap to the wood frame.<\/li>\n\n\n\n<li><strong>Brackets and drywall\/brick anchors<\/strong>&nbsp;to hang them on your wall<\/li>\n<\/ul>\n\n\n\n<p>That\u2019s it. My original acoustic panels were all DIY.<\/p>\n\n\n\n<p>Materials like Owens Corning 703 fiberglass and burlap to create broadband acoustic absorbers. Avoid using generic insulation from Home Depot as it\u2019s not designed for sound absorption. Insulation is too loose, the sound waves move around the fibers but don\u2019t get absorbed into it.<\/p>\n\n\n\n<p>To recap:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Buy some Owens Corning 703 fiberglass or a similar product for sound absorption.<\/li>\n\n\n\n<li>Grab some 2x4s and cut them to 2 feet by 4 feet.<\/li>\n\n\n\n<li>Purchase burlap and use a staple gun to wrap the fiberglass in burlap.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Hunting for Deals[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=901\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=901\">edit source<\/a>]<\/h2>\n\n\n\n<p>To stretch your budget:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Browsing eBay and audiogon regularly for deals on high-end speakers and receivers<\/li>\n\n\n\n<li>Create bookmarks for searches that fit your criteria for models and brands you like on these websites. Check it every morning for a few seconds so you get a good deal before someone else buys it.<\/li>\n<\/ul>\n\n\n\n<p>With patience, you can put together a hi-fi system that outperforms setups priced at $10,000-$15,000 for just about $1,500. Or a setup for $400 that sounds closer to $4000.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sourcing your content; 4k blurays with the right drive[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=902\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=902\">edit source<\/a>]<\/h2>\n\n\n\n<p>Because the MPAA &amp; RIAA are a bag of dicks, they have managed to get almost every bluray drive manufacturer to not allow you to make a backup of your own property. They won\u2019t rip 4k blurays.<\/p>\n\n\n\n<p>However, there is a way around this; get a Pioneer BDR-2213 running a&nbsp;<a href=\"https:\/\/www.avsforum.com\/threads\/ripping-uhd-4k-discs-with-makemkv-instructions-how-to.2942740\/page-233\">nice old firmware<\/a>.<\/p>\n\n\n\n<p>With this, you can rip your content in the&nbsp;<strong>exact same uncompressed quality<\/strong>&nbsp;you got it in. This will look so much better than the garbage low bitrate streaming quality you get from modern streaming services.<\/p>\n\n\n\n<p>Modern streaming services give you three options:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Use an HDCP compliant processor, HDCP compliant monitor, HDCP compliant operating system, to watch content you paid for. Jump through more hoops when PAYING than you do when pirating.<\/li>\n\n\n\n<li>Use a smarttv, a device that is&nbsp;<a href=\"https:\/\/www.consumerreports.org\/electronics\/privacy\/how-to-turn-off-smart-tv-snooping-features-a4840102036\/\">honest to your face that it spies on you and sells your personal data<\/a><\/li>\n\n\n\n<li>Be stuck viewing a 1-2 mbps low resolution stream.<\/li>\n\n\n\n<li>Give a giant middle finger to the MPAA with a Pioneer BDR-2213, running old firmware.<\/li>\n<\/ol>\n\n\n\n<p>Option 4 wins every time.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Elegant Home Theater PC Setup: for people who don\u2019t want a disorganized mess[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=903\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=903\">edit source<\/a>]<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Why my setup makes no sense[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=904\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=904\">edit source<\/a>]<\/h2>\n\n\n\n<p>My setup is very strange. It\u2019s disorganized, unwieldly, and not visually appearing.<\/p>\n\n\n\n<p><strong>My setup:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201165246911.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>You likely want something that looks more like this:<\/p>\n\n\n\n<p><strong>Sensible setup:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201164907705.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">My weird computer[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=905\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=905\">edit source<\/a>]<\/h3>\n\n\n\n<p>I don\u2019t have a bedroom computer, home theater computer, office computer, etc. I have one computer that sits in my living room that I use for everything. I lived in an 1100 sq ft studio apartment for twelve years, so I had one PC for my 1 room home. This cube was my work computer, my video editing machine, my personal machine, my home theater PC; all in one.<\/p>\n\n\n\n<p><strong>What makes a good home theater PC is not what makes a good video editing workstation.<\/strong>&nbsp;For a home theater PC, you should have something like this:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Very&nbsp;<strong>quiet<\/strong><\/li>\n\n\n\n<li>Very&nbsp;<strong>cheap<\/strong><\/li>\n\n\n\n<li><strong>Pre-built<\/strong>, because you have enough on your plate than to take time building a custom computer that rips blurays &amp; runs a pretty version of VLC<\/li>\n\n\n\n<li><strong>Optical audio output<\/strong>&nbsp;If you don\u2019t want to buy an external audio interface separately<\/li>\n\n\n\n<li><strong>Power efficient<\/strong>&nbsp;so you aren\u2019t taking 150-250 watts to play an mkv file<\/li>\n\n\n\n<li><strong>Small pretty form factor<\/strong>&nbsp;that fits in with your living room perfectly<\/li>\n<\/ul>\n\n\n\n<p><strong>Above all, you don\u2019t want it to look like a giant mess!<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201163928279.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201163719583.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">My stoneage home theater software[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=906\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=906\">edit source<\/a>]<\/h4>\n\n\n\n<p>I showed you what I use; a computer file explorer to browse to my video &amp; music files, and double click them to play them in VLC. There are several reasons this is horrible:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>File &amp; folder browsing.<\/strong>\n<ul class=\"wp-block-list\">\n<li>If your folders are a mess, it will be difficult to find your stuff.<\/li>\n\n\n\n<li>Immich tags photos by face &amp; description; we want something like this that\u2019ll just make sense of our 160 terabytes of stuff.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Blinding user interface<\/strong>.\n<ul class=\"wp-block-list\">\n<li>Computer operating systems are designed for use with a monitor right next to you, not a TV that is 3 meters away.<\/li>\n\n\n\n<li>You can change your display settings &amp; scaling, but making it work with a TV makes it awkward.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Manual lookup of info<\/strong>: finding ratings, credits, other info isn\u2019t immediately accessible &amp; requires leaving the file explorer or VLC to find.<\/li>\n<\/ul>\n\n\n\n<p>There\u2019s nothing inherently&nbsp;<em><strong>wrong<\/strong><\/em>&nbsp;with this setup. It\u2019s just not everyone\u2019s cup of tea, so we\u2019re going to set up something built for a home theater living room system. This can be done&nbsp;<strong>quickly and easily<\/strong>&nbsp;&#8211; unlike many other things in GNU\/Linux!<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201163459503.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201163452149.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201163157029.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Beautiful software made for a living room Television[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=907\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=907\">edit source<\/a>]<\/h4>\n\n\n\n<p><a href=\"https:\/\/kodi.tv\/\">Kodi<\/a>&nbsp;is a program that turns your computer into a polished home theater system for your living room TV.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>User-friendly interface<\/strong>&nbsp;designed for couch viewing. No need to squint or strain your eyes.<\/li>\n\n\n\n<li><strong>Automatic library organization.<\/strong>&nbsp;Kodi scans folders &amp; files and turns the biggest messes into beautifully organized library of movies, shows, and music.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Metadata integration.<\/strong>&nbsp;Kodi grabs information from online databases &amp; shows detailed summaries, artwork, &amp; ratings for movies, tv, and music.<\/li>\n\n\n\n<li><strong>Open-source and offline-friendly.<\/strong>&nbsp;You can run Kodi without an internet connection, ensuring your&nbsp;<em>legally ripped, totally un-copyrighted<\/em>&nbsp;media collection remains private.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Built-in song lyric support.<\/strong>&nbsp;Kodi automatically fetches &amp; displays lyrics for your music.<\/li>\n\n\n\n<li><strong>Seamless playback with buffering.<\/strong>&nbsp;Kodi caches files so your media doesn\u2019t stutter or skip, even if your server is slow or under heavy load.<\/li>\n\n\n\n<li><strong>Effortless 4K playback.<\/strong>&nbsp;From high-bitrate h.264 to h.265, VC-1, or MPEG-2 files, Kodi can play anything you\u2019ll encounter on the high seas or your personal bluray collection.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Kodi takes minutes to install &amp; configure[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=908\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=908\">edit source<\/a>]<\/h4>\n\n\n\n<p><a href=\"https:\/\/kodi.tv\/\">Kodi<\/a>&nbsp;software is made for a home theater PC; you on the couch, television eight feet away, &amp; it can be installed in 2 minutes or less using a GNU\/Linux distribution called&nbsp;<a href=\"https:\/\/libreelec.tv\/\">LibreELEC<\/a>. This is not a convoluted installation process. It\u2019s so seamless you\u2019ll almost forget you\u2019re using open source software.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201154938170.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Doesn\u2019t my TV already do this?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=909\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=909\">edit source<\/a>]<\/h4>\n\n\n\n<p>You should be able to trust your television to play television and movies. That is what it is there for.<\/p>\n\n\n\n<p>The year is 2024, and consumer protection in the United States<em>(&amp; many other countries)<\/em>&nbsp;is a joke. Many modern televisions come pre-configured to sell your personal data, equipped with the ability to tell who you are and what you\u2019re watching. LG is&nbsp;<a href=\"https:\/\/privacy.us.lg.com\/\">upfront about it<\/a>. You will hear the argument that this is necessary to keep televisions affordable; this is made by simps for television manufacturers, or the television manufacturers themselves. Above you\u2019ll see an image of the menu of an LG G3 OLED television.&nbsp;<strong>The LG G3 OLED television is configured, by default, to spy on &amp; sell the personal information of its user; even when purchased new, at full $3600 MSRP from an Authorized LG Dealer. You cannot remove these elements of its operating system. You thought you owned the television that you bought, but the television thinks it owns you<\/strong>.<\/p>\n\n\n\n<p>You can use your television to play back media, but it is often highly restricted. Combine this with the fact that most, if not all, modern televisions come with spyware pre-installed that you cannot remove, and we\u2019re not doing that. My television will go on the internet over my dead body.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201171221209.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201175526385.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201181227051.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201180622550.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">An ASUS Asustor Flashstor mini-pc for a home theater computer[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=910\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=910\">edit source<\/a>]<\/h3>\n\n\n\n<p>This machine fits all of our above requirements above&nbsp;<em>beautifully.<\/em><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Quiet Operation[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=911\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=911\">edit source<\/a>]<\/h4>\n\n\n\n<p>Dealing with noise is important when setting up a home theater PC. Your gaming PC probably sounds like an annoying $20 amazon drone, and many minipcs aren\u2019t much better. This machine makes little to no noise even when playing back high bitrate h.265 files &amp; fits easily inside a TV stand or on a small shelf.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Impressive Storage Capacity[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=912\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=912\">edit source<\/a>]<\/h4>\n\n\n\n<p>We are using our server for storage, not the Asustor Flashstor mini-pc. If you wanted to try using this as a small starter server, here\u2019s where the ASUS Asustor MiniPC shines\u2014<strong>storage capacity<\/strong>. Unlike most if not all mini-PCs which offer 1 or 2 slots at best for SATA\/NVMe drives, the asustor has&nbsp;<strong>six NVMe slots on the cheapest model<\/strong>. This lets you to install up to 24 terabytes of incredibly fast storage on the cheap asustor, or 48 terabytes on the higher end models.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Cost: $300-$400 on eBay[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=913\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=913\">edit source<\/a>]<\/h4>\n\n\n\n<p>These can be found under&nbsp;<a href=\"https:\/\/www.ebay.com\/itm\/126778026449?_skw=asustor&amp;itmmeta=01JE2ADEGT8FRQ5A3F382XAQFR&amp;itmprp=enc%3AAQAJAAAA4HoV3kP08IDx%2BKZ9MfhVJKlHyaaNfhwG0a0qDGiezVnDGbOrDK%2F0m3Z9BOZntIaopaUpFxI2BZ%2FT%2FUTiynBT9r7jGvcZTsYZmKJPAsYnqOf9l1H4iDCewdnk0vpdINtJo5cipLcikC049ecEiax%2FSE5Kafw1PFAajDKRAWEloFrPrK8tfztOIe7j8c9yBUCD17X8rMaY8gUt0KDZBg%2BGT7oGU3%2FHCKycRaUA7HfxYxgfYWQ501010hLK2fFmdl4uPjbvGSslrE0lW3RuxeEVFXNlA331a1QtuPZO%2BPMydshy%7Ctkp%3ABk9SR7rotcrwZA\">$350 used<\/a>&nbsp;which gets you a lag-free, quiet machine with six NVMe slots.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Audio &amp; Video output options[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=914\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=914\">edit source<\/a>]<\/h4>\n\n\n\n<p>The Asustor Flashstor does&nbsp;<strong>4k60 out of its HDMI port<\/strong>&nbsp;just fine. Some cheap no-name fly by night minipc companies use old HDMI standards for their ports &amp; get stuck at 4k30.<\/p>\n\n\n\n<p>For high-quality audio, having an&nbsp;<strong>optical SPDIF<\/strong>&nbsp;output is important. as mentioned before, this allows the digital-to-analog conversion to be handled by dedicated audio equipment rather than your multipurpose PC, which sidesteps the noisy nonsense you get when you try encoding video or doing CPU intensive things with headphones plugged in. You may not notice this while your headphones are turned up as you\u2019re engaged playing an exciting game, but quiet passages of movies get ruined by this very easily. The Asustor flashstor includes an optical SPDIF audio output jack, allowing you to connect directly to most modern home theater receivers.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Benefit<\/strong>: Avoids the need for additional USB audio interfaces.<\/li>\n\n\n\n<li><strong>Setup<\/strong>: Use a simple $5 optical cable from Walmart to connect to your stereo system.<\/li>\n<\/ul>\n\n\n\n<p>It has&nbsp;<strong>optical audio output<\/strong>. This allows you to plug the machine into a&nbsp;<strong>stereo receiver<\/strong>\u2019s optical audio input, a discrete&nbsp;<strong>digital to analog converter<\/strong>, or an&nbsp;<strong>integrated amp<\/strong>\u2019s optical audio input for clean sound output.<\/p>\n\n\n\n<p>HDMI carries audio, but if you\u2019re like me &amp; have a separate audio setup from your television, you\u2019d have to get an HDMI audio\/video splitter to get HDMI video to your TV and SPDIF digital audio to your stereo receiver that goes to your speakers. Some TVs can pass through the audio digitally to your stereo receiver, some don\u2019t, but even if they do this is an added pain in the ass. Having optical audio out makes this easier.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Powerful, expandable machine[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=915\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=915\">edit source<\/a>]<\/h4>\n\n\n\n<p>Even the cheapest Asustor flashstor handles 4K video effortlessly.&nbsp;<a href=\"https:\/\/www.aaawave.com\/asustor-flashstor-6-gen-2-6-bay-nas-quad-core-2-3ghz-cpu-10gbe-ports-8gb-ram-ddr5-6x-m-2-ssd-slots-diskless-fs6806x\/\">Higher end models<\/a>&nbsp;are&nbsp;<strong>twice as powerful as the server in this guide<\/strong>&nbsp;and only take a&nbsp;<strong>fraction of its power<\/strong>, making them suitable as a starter server. Low end models have&nbsp;<strong>6 NVMe solid state drive slots<\/strong>, but you can buy this with up to&nbsp;<a href=\"https:\/\/www.asustor.com\/en-gb\/product?p_id=91\">12 NVMe drive slots<\/a>&nbsp;which would give you 48 terabytes of NVMe storage for a server, with 10 gigabit ethernet for fast network transfers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The asustor flashstor can be a starter server.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=916\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=916\">edit source<\/a>]<\/h3>\n\n\n\n<p>Using an Asustor as a starter server is a great idea. If you know you want a home theater PC, you\u2019re going to buy something like this anyway; and even the low end model is powerful enough for most tasks. You can always demote it to a home theater PC down the line when\/if you decide to put together a giant 200 terabyte monster like what is pictured above. like what I have pictured above.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Don\u2019t use your server as an HTPC at the same time; attack surface &amp; why you should care[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=917\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=917\">edit source<\/a>]<\/h4>\n\n\n\n<p>The&nbsp;<strong>attack surface<\/strong>&nbsp;(or threat surface) refers to all the different points where a hacker could potentially gain unauthorized access to your system. This means that the more you install onto your machine, the greater the likelihood you turn into one of the poor schmucks in&nbsp;<code>\/r\/asustor<\/code>&nbsp;who got&nbsp;<a href=\"https:\/\/www.reddit.com\/r\/asustor\/top\/?t=all\">owned by ransomware<\/a>. The more things a machine does, the larger its attack surface becomes &amp; the more opportunities attackers have to exploit vulnerabilities.<\/p>\n\n\n\n<p>If you use the same PC for Kodi&nbsp;<em>and<\/em>&nbsp;services like Mailcow (mail server), FreePBX (phone system), Immich (photos), or Nextcloud (notes), you\u2019re mixing a&nbsp;<strong>home theater interface<\/strong>&nbsp;with&nbsp;<strong>mission-critical infrastructure.<\/strong>&nbsp;Bad idea.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Why?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=918\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=918\">edit source<\/a>]<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Increased Exposure:<\/strong>&nbsp;Running Kodi means more risk of vulnerabilities from media files, plugins, user interaction, etc. If exploited, it could compromise your entire server &amp; everything running on it.<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Conflicting Security Needs:<\/strong>&nbsp;A server for mail and photos requires high uptime, strict access control &amp; limited exposure. A home theater PC is inherently less secure because it\u2019s meant to interact with more devices, networks, &amp; potentially risky media.<\/li>\n\n\n\n<li><strong>Damage Scope:<\/strong>&nbsp;If someone hacks your Kodi system, do you really want that person having backdoor access to your email, phone, or photos? Keep the two separate &amp; isolate them for better security.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Why Not Use It as a Router?[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=919\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=919\">edit source<\/a>]<\/h4>\n\n\n\n<p>You might wonder, can your MiniPC double as a router since it has two Ethernet ports? These are 2.5 GbE ports, which is faster than the typical 1 GbE ports. It offers speeds of 250 to 290 MB\/s. However, they use Realtek chipsets (likely the RTL8169) &amp; while you&nbsp;<strong>can<\/strong>&nbsp;use Realtek for a firewall, you really&nbsp;<strong>shouldn\u2019t<\/strong>. This isn\u2019t a meme like running your own self managed mail server. It\u2019s just a bad idea. Don\u2019t ever mix Realtek chipsets with FreeBSD based firewalls(which pfSense is).<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>IMPORTANT NOTE:<\/strong>&nbsp;Avoid using Realtek chipsets for firewall purposes. Stick to using your MiniPC as a home theater PC instead.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">Being silly: adding eight 3.5\u201d enterprise class hard drives to the Asustor Flashstor mini-pc.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=920\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=920\">edit source<\/a>]<\/h4>\n\n\n\n<p>Let\u2019s say you chose to use this device as a server down the line. It only has NVMe slots for solid state drives. 24 terabytes of flash storage might be too little for you. If you want to use hard drives with it, you can\u2019t plug desktop drives directly into it; but that doesn\u2019t mean you can\u2019t try.&nbsp;\ud83d\ude42<\/p>\n\n\n\n<p>You can actually add eight 3.5\u201d desktop hard drives to an asustor flashstor if you bought one with a&nbsp;<strong>USB-C 4.0 port<\/strong>. If you\u2019re looking to expand beyond NVMe, the higher end models with USB-C ports allow this. If you wanted to go crazy, you could get the following hardware. To be clear, this is ridiculous &amp; not recommended; but there\u2019s something fun about doing ridiculous things. The lengths I have gone through to make use of hardware I already own are great, and I feel compelled to share some of what is possible with you.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>USB-C to PCI Express Card enclosure<\/strong>:&nbsp;<a href=\"https:\/\/www.startech.com\/en-us\/usb-hubs\/2tbt3-pcie-enclosure\">This unit<\/a>&nbsp;allows you to plug a desktop PCI Express card slot into a computer that has a USB-C port. This is needed since the flashstor has no PCI Express card slots fit for desktop PCI Express cards. You might have to cut a hole in it for the SATA cables to come out of.<\/li>\n\n\n\n<li><strong>PCI Express Serial ATA card:<\/strong>&nbsp;<a href=\"https:\/\/www.ebay.com\/itm\/235464441248?_skw=Intel+RS3WC080&amp;itmmeta=01JE2DYJ39X6E1NKT2GP1AS8V9&amp;hash=item36d2c63da0:g:CCUAAOSwV-pmX3xi&amp;itmprp=enc%3AAQAJAAAA8HoV3kP08IDx%2BKZ9MfhVJKkYGG99u%2FPOyPVfli1VueephfY%2BGqf7itGPMgXK9xShe8TO%2F13dLnEVBooi09dW9ucYYBmmKuUWb%2Bklu5F7ZOnOqT4ElYFOD5WYW%2BEopRsmt5d%2FkPeRRw017E%2BNG9Vw314EAe2bRQy6uCoaUvPIN8kyPH9KL4MntdQwmCFrwfF5uxIhLfnNUaA9I7KetS1rB%2BFQD9R2XPt0jqfIoa6Zm5MMxsDO1uvhf7Pj1CpfOr4sI6KcjRjJGboW3btGqsWtVMbkzNJJ6gIge4pvstvwwIwf3U8WSiTkw1aDplebZRVtYQ%3D%3D%7Ctkp%3ABk9SR9yh-s3wZA\">This<\/a>&nbsp;lets you plug in another 8 serial ATA desktop hard drives.<\/li>\n\n\n\n<li><strong>Mini SAS to SATA cable, SFF-8643:<\/strong>&nbsp;An&nbsp;<a href=\"https:\/\/store.supermicro.com\/us_en\/supermicro-minisas-hd-to-4-sata-30-60-70-70cm-cable-cbl-sast-0704.html\">SFF-8643 adapter cable<\/a>&nbsp;goes between your PCI Express SATA card and your eight hard drives. You would need two.<\/li>\n\n\n\n<li><strong>Power Splitter<\/strong>: Needed for powering multiple drives, something like the&nbsp;<a href=\"https:\/\/www.startech.com\/en-us\/cables\/pyo4sata\">startech SATA power splitter<\/a>.<\/li>\n\n\n\n<li><strong>SATA drive power supply:<\/strong>&nbsp;You\u2019d now need to power those SATA drives.\n<ul class=\"wp-block-list\">\n<li>Something like&nbsp;<a href=\"https:\/\/www.amazon.com\/Warmstor-Adapter-Computer-Connector-Converter\/dp\/B076WZ1N4K\/ref=sr_1_1?crid=37QM5VOFZAM1Q&amp;dib=eyJ2IjoiMSJ9.at93EUUqXo4LGsFjaIg29R-3dDWigqy5MVKmMfIc25yVZWtMqLDzaSH-DHMJYveHuMrs1bMeVSNTqIfDEcuR4zNnfmb44SYNvSe9ZIwYayzkeF5ujjqWWJoOQUxT8etauoS_V66crJBIkf0DITtJN6fJdcnduzoipt7rnRagWy14VBViEpoWeBAO0Fyfht6AfmB3Xn6ymUIyFiie2_j5yQOP5wGBtK2ng7o6GjnRfvY.7fqScExFcxLobhy3oP0mk34glrLTeHSzt46MPMK8Ro4&amp;dib_tag=se&amp;keywords=Sata+Power+Supply&amp;qid=1733101321&amp;sprefix=sata+power+supply%2Caps%2C281&amp;sr=8-1\">this<\/a>&nbsp;could power 2 drives at a time.<\/li>\n\n\n\n<li>Any PC power supply that can do over 10 amps on the 12 volt rail would suffice for eight 3.5\u201d enterprise class serial ATA hard drives, but you see why this is getting silly.<\/li>\n\n\n\n<li>Either you are going to have to do some research to find a sleek looking power supply that does 10 amps at 12 volts to reliably power eight 3.5\u201d enterprise class hard drives, OR:<\/li>\n\n\n\n<li>Short the green PS_ON wire on a desktop PC power supply to the black wire with a paperclip to turn it on. Desktop PC power supplies only turn on when they are plugged into a desktop computer, and this would only be plugged into the drives.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Setting Up Your Home Theater[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=921\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=921\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Introduction once you have your mini-pc[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=922\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=922\">edit source<\/a>]<\/h3>\n\n\n\n<p><strong>Overview of steps involved:<\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/libreelec.tv\/\">LibreELEC<\/a>&nbsp;is a GNU\/Linux distribution that takes&nbsp;<strong>less than 90 seconds to install<\/strong>&nbsp;that starts up into&nbsp;<a href=\"https:\/\/kodi.tv\/\">Kodi<\/a><em>(our media center software)<\/em>&nbsp;software&nbsp;<strong>right out of the box.<\/strong>&nbsp;This is so easy; it just works. It\u2019s so good you\u2019ll forget you\u2019re even using GNU\/Linux or open source software. The steps below are as follows:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Make LibreELEC install disk<\/strong>&nbsp;to install LibreELEC linux distribution onto our asustor home theater PC.<\/li>\n\n\n\n<li><strong>OPTIONAL: Install NVMe drives into Asustor.<\/strong>&nbsp;My home theater PC does not store any content; that is what my server is for. If you want your Asustor to have&nbsp;<strong>local storage<\/strong>&nbsp;as well, you can install NVMe drives into the bottom of it.\n<ul class=\"wp-block-list\">\n<li>Use a phillips #0 screwdriver to remove the four screws on the bottom of the Asustor.<\/li>\n\n\n\n<li>Be gentle; the clips you have to pull back to fit your NVMe drive in aren\u2019t the most durable. In fact, they remind me of the flimsy MacBook A1181 screen bezel clips that broke if you looked at them the wrong way.<\/li>\n\n\n\n<li>Avoid pressing directly on the SSD\u2019s chip when pushing it into the mini-PC. Instead, apply pressure to the pc board of the solid state drive so you don\u2019t put pressure on the solder balls under the SSD\u2019s chip.<\/li>\n\n\n\n<li>If at any point you are debating whether to pull back harder on the clips of the asustor that hold the NVMe drive in, or to push harder on the SSD,&nbsp;<strong>always elect to pull harder on the NVMe clips on the asustor<\/strong>. The cost of those breaking is nothing; just use a piece of&nbsp;<a href=\"https:\/\/www.amazon.com\/VCHOMY-Sublimation-Polyimide-Temperature-Insulation\/dp\/B0C9PMHWGS\">kapton heat resistant tape<\/a>&nbsp;to hold the SSD in. The cost of breaking the SSD, is several hundred dollars, or random reboots if you cause a crash in a solder ball that will take you months to trace back to that stupid SSD.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Plug Asustor into television, keyboard, &amp; mouse<\/strong><\/li>\n\n\n\n<li><strong>Disable secure boot\/security features in asustor BIOS(UEFI technically)<\/strong>&nbsp;so we can install Linux on it.<\/li>\n\n\n\n<li><strong>Erase Bloatware:<\/strong>&nbsp;Asus\u2019s garbage software will be removed so it can never be used again, even by accident.<\/li>\n\n\n\n<li><strong>Install Libreelec:<\/strong>&nbsp;This provides a clean, efficient operating system specially made for home theater PCs.<\/li>\n\n\n\n<li><strong>Set Up KODI:<\/strong>&nbsp;We\u2019ll use this to catalog media files making them easy to search &amp; access. As soon as you turn the computer on, in less than 30 seconds it will be booted up into KODI so you can access all of your files.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note:<\/strong>&nbsp;This setup will automatically pull information from internet databases, giving you detailed descriptions &amp; reviews of your content.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Installing LibreELEC operating system with KODI[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=923\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=923\">edit source<\/a>]<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Download LibreELEC:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Head to the&nbsp;<a href=\"https:\/\/libreelec.tv\/downloads\/generic\/\">LibreELEC<\/a>&nbsp;website and download the generic image for your hardware.<\/li>\n\n\n\n<li>Generic is what we want; you can download versions for other non-x86 architectures if you want a home theater PC that isn\u2019t based on x86, which is cool, but we\u2019re using an x86 based minipc here.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Creating a Bootable LibreELEC USB Drive[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=924\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=924\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Download LibreELEC[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=925\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=925\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Head to the&nbsp;<a href=\"https:\/\/libreelec.tv\/downloads\/generic\/\">LibreELEC Downloads<\/a>&nbsp;page and download the generic image for your hardware.\n<ul class=\"wp-block-list\">\n<li>Choose the&nbsp;<strong>Generic<\/strong>&nbsp;version for x86-based systems.<\/li>\n\n\n\n<li>If you\u2019re feeling adventurous, you can download versions for non-x86 architectures, but we\u2019re focusing on an x86-based mini-PC here.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>The file will be in&nbsp;<code>.img.gz<\/code>&nbsp;format. You will need to unzip it.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Unzip the&nbsp;<code>.gz<\/code>&nbsp;File[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=926\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=926\">edit source<\/a>]<\/h3>\n\n\n\n<p><strong>Instructions for GNU\/Linux, macOS, and Windows:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Linux:<\/strong>gunzip LibreELEC-Generic.x86_64-12.0.1.img.gzThis will extract&nbsp;<code>LibreELEC-Generic.x86_64-12.0.1.img<\/code>&nbsp;in the same directory.<\/li>\n\n\n\n<li><strong>macOS:<\/strong>\n<ol class=\"wp-block-list\">\n<li>Open Terminal and navigate to the directory with the downloaded file:cd \/wherever\/you\/downloaded\/it\/to<\/li>\n\n\n\n<li>Use the&nbsp;<code>gunzip<\/code>&nbsp;command:gunzip LibreELEC-Generic.x86_64-12.0.1.img.gz<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li><strong>Windows:<\/strong>\n<ol class=\"wp-block-list\">\n<li>Download and install a tool like&nbsp;<a href=\"https:\/\/www.7-zip.org\/\">7-Zip<\/a>.<\/li>\n\n\n\n<li>Right-click the&nbsp;<code>.gz<\/code>&nbsp;file and select&nbsp;<strong>7-Zip \u2192 Extract Here<\/strong>&nbsp;to extract the&nbsp;<code>.img<\/code>&nbsp;file.<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Create a Bootable USB Drive[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=927\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=927\">edit source<\/a>]<\/h3>\n\n\n\n<p><strong>\u26a0 Warning:<\/strong>&nbsp;This process will erase everything on the USB drive.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Insert a USB flash drive (at least 4GB in size) into your computer.<\/li>\n\n\n\n<li>Use one of the methods below to write the LibreELEC image to the USB drive.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Windows:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=928\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=928\">edit source<\/a>]<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Download and install&nbsp;<a href=\"https:\/\/rufus.ie\/\">Rufus<\/a>.<\/li>\n\n\n\n<li>Open Rufus and select your USB drive.<\/li>\n\n\n\n<li>Click the&nbsp;<strong>\u201cSELECT\u201d<\/strong>&nbsp;button and choose the&nbsp;<code>.img<\/code>&nbsp;file you extracted.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cStart\u201d<\/strong>&nbsp;and let Rufus create the bootable USB.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">macOS or GNU\/Linux:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=929\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=929\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Figure out which is the right USB Drive:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=930\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=930\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the terminal and run:sudo fdisk -l<\/li>\n\n\n\n<li>Make a note of the connected drives.<\/li>\n\n\n\n<li>Insert your USB flash drive and run the command again:sudo fdisk -l<\/li>\n\n\n\n<li>Identify the new drive that appears. It\u2019s usually something like&nbsp;<code>\/dev\/sdX<\/code>&nbsp;or&nbsp;<code>\/dev\/diskX<\/code>.<\/li>\n\n\n\n<li><strong>Double-check<\/strong>&nbsp;that you\u2019ve identified the correct drive:\n<ul class=\"wp-block-list\">\n<li>Unplug the USB drive.<\/li>\n\n\n\n<li>Run&nbsp;<code>sudo fdisk -l<\/code>&nbsp;again. The drive should disappear.<\/li>\n\n\n\n<li>Plug it back in and confirm it reappears.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>If you\u2019re sure the drive is correct, proceed.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Write the Image to the USB Drive:[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=931\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=931\">edit source<\/a>]<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Replace&nbsp;<code>\/dev\/sdX<\/code>&nbsp;with your USB drive\u2019s path and run:sudo dd if=LibreELEC-Generic.x86_64-12.0.1.img of=\/dev\/sdX bs=4M status=progress<\/li>\n\n\n\n<li>Wait for the process to complete. It may take a few minutes.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201233219809.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201233359161.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Set up the Asustor minipc[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=932\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=932\">edit source<\/a>]<\/h3>\n\n\n\n<p><strong>Connect to Your TV and Network:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>HDMI Cable:<\/strong>&nbsp;Connect it from the mini PC to your television.<\/li>\n\n\n\n<li><strong>Ethernet Cable:<\/strong>&nbsp;Connect an ethernet cable so it can connect to your server\u2019s ZFS pool.<\/li>\n\n\n\n<li><strong>Optical Audio Cable:<\/strong>&nbsp;Use this for audio output to your stereo system. Make sure you insert the optical cable correctly; it is not like a USB-C cable, it fits one way, and there are four possible ways for this to go in. That gives you a 25% chance to plug it in without destroying the jack if you are blindly messing around with it trying to plug it in. Those are bad odds. Pay attention to the plug &amp; the jack!<\/li>\n\n\n\n<li><strong>Power Cable:<\/strong>&nbsp;Plug this in last, as the asustor flashstor minipc powers on automatically when connected.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201194913746.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201215358549.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Boot into LibreELEC installation and install it[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=933\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=933\">edit source<\/a>]<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Insert the bootable USB drive into your mini-PC.<\/li>\n\n\n\n<li>Restart the system and enter the BIOS\/UEFI settings by pressing&nbsp;<strong>F2<\/strong>&nbsp;over &amp; over again as fast as possible right after the machine turns on.<\/li>\n\n\n\n<li>Go to&nbsp;<strong>\u201cboot\u201d<\/strong>&nbsp;menu by using the right arrow key and pressing enter.<\/li>\n\n\n\n<li>Set the USB drive as the primary boot device.<\/li>\n\n\n\n<li>In the BIOS, disable any TPM and secure boot options that interferes with Linux installation. This is similar to what we did on the Intel NUC early in the guide when installing pfSense onto it.<\/li>\n\n\n\n<li>Save changes &amp; reboot. LibreELEC will boot from the USB drive. Hitting&nbsp;<strong>F10<\/strong>&nbsp;will exit the BIOS &amp; save your changes.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>If you managed to erase your entire computer by writing the LibreELEC image to your operating system drive EVEN AFTER reading these instructions, congratulations! You\u2019re almost as stupid as me. Almost. Don\u2019t do that.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201220116461.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201225302004.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201225320577.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201225331606.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5: Install LibreELEC onto the Asustor[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=934\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=934\">edit source<\/a>]<\/h3>\n\n\n\n<p>We are erasing all of the Asustor software &amp; replacing it. This process will take less than 90 seconds. and<\/p>\n\n\n\n<p>Next, we install LibreELEC, which is just enough OS to run&nbsp;<code>Kodi<\/code>.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Boot and Install<\/strong>: Follow the prompts to install LibreELEC onto the internal eMMC.<\/li>\n\n\n\n<li>Choose the drive you wish to install it onto, which will be the&nbsp;<code>\/dev\/mmcblk0<\/code>&nbsp;device in the case of the Asustor Flashstor. That is the memory that the ASUS software is installed onto; we are erasing it to install LibreELEC &amp; KODI.<\/li>\n\n\n\n<li>You\u2019re done. That\u2019s it. In &amp; out in less than 90 seconds &#8211; amazing.&nbsp;\ud83d\ude42<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>NOTE:<\/strong>&nbsp;If you have not installed any new NVMe drives into the Asustor Flashstor minipc, there should only be one device showing up to install onto, which will be the internal EMMC at&nbsp;<code>\/dev\/mmcblk0<\/code>. If you have installed new NVMe SSDs, they will show up qith&nbsp;<code>\/dev\/nvmexn1<\/code>&nbsp;notation with&nbsp;<code>x<\/code>&nbsp;being the number of the SSD in the machine.<\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201230528292.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201230547810.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201230624240.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201230635545.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201230715169.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201230801939.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201231031498.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201231050869.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201231926114.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201231959756.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201232226059.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201232445242.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201232501935.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201232537212.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201232606886.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201232625879.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201233609572.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201233509199.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201233621905.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201233647328.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201233736391.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201233907464.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201233943591.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201233658326.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241201234055519.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 6: Boot into the LibreELEC system &amp; set it up[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=935\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=935\">edit source<\/a>]<\/h3>\n\n\n\n<p>After installing LibreELEC, it will boot into the operating system &amp; start KODI. The rest of the setup is a breeze.<\/p>\n\n\n\n<p><strong>Networking Configuration<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use the default internet connection settings.<\/li>\n\n\n\n<li>There is no need to configure a static IP address for a&nbsp;<em>client.<\/em>&nbsp;Static IP addresses are for servers.<\/li>\n\n\n\n<li>If you are using this to watch stuff stored on your server\u2019s ZFS pool, disabling samba server &amp; disabling ssh is the smart way to go. No need to run unnecessary services if you don\u2019t have to.<\/li>\n<\/ul>\n\n\n\n<p><strong>Audio Configuration:<\/strong><\/p>\n\n\n\n<p>By default, it will output audio via the HDMI cable.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If your HDMI cable connects to an&nbsp;<strong>audio\/video receiver that is hooked up to your speakers<\/strong>, you\u2019re fine.<\/li>\n\n\n\n<li>If your HDMI cable connects to your&nbsp;<strong>television<\/strong>, you may hear the audio through your&nbsp;<strong>TV speakers<\/strong>, which is horrible; we will need to change where Kodi outputs to.<\/li>\n<\/ul>\n\n\n\n<p>To change the audio output:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Access System Settings<\/strong>: Navigate to the gear icon for settings, then&nbsp;<strong>Audio<\/strong>.<\/li>\n\n\n\n<li><strong>Select the Audio Output Device<\/strong>: Choose&nbsp;<code>ALSA: HDA Intel PCH, ALC888-VD Digital S\/PDIF<\/code>. Yours may look mildly different &#8211; we want whatever looks closest to S\/PDIF digital optical\/toslink output. Experiment to find which one works for you.<\/li>\n\n\n\n<li><strong>Check Display Settings<\/strong>: Make sure it is set to what your television is capable of. in my case, it is set at ***3840 by 2160 and 60 fps.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Why not a static IP? Didn\u2019t we make a static IP for everything else?<\/strong><\/p>\n\n\n\n<p>Static IPs aren\u2019t important for a computer that doesn\u2019t provide services. When we\u2019re running a server, like our machine with the ZFS pool that stores our media files, we are running something where clients(aka our home theater PC) are going to want to know where to access it.<\/p>\n\n\n\n<p>Think of your server like your favorite store. We are going to tell our home theater PC to always go to the store to get movies(\u2026.) at&nbsp;<code>192.168.5.2<\/code>&nbsp;&#8211; so our server always NEEDS to be at&nbsp;<code>192.168.5.2<\/code>.<\/p>\n\n\n\n<p>The home theater PC we are setting up right now is the&nbsp;<em>\u201ccustomer\u201d<\/em>&nbsp;&#8211; it doesn\u2019t have to have a static IP, nor does it always have to be at the same address every day.<\/p>\n\n\n\n<p>A customer can visit a store from a different address every day; it makes no difference to the shopowner selling goods to the customer. However, if the&nbsp;<em><strong>store\u2019s<\/strong><\/em>&nbsp;address changed&nbsp;<em>every single day<\/em>&nbsp;without notice, the customer would have a very hard time finding the store. They may stop going to that store altogether.<\/p>\n\n\n\n<p>We can use the default setup where the server grabs an IP address via DHCP<em>(aka, it grabs whatever\u2019s available from the router)<\/em>&nbsp;without concern here.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7: Adding Media Content to Kodi[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=936\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=936\">edit source<\/a>]<\/h2>\n\n\n\n<p>After setup, let\u2019s add some media content to your system.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click on&nbsp;<strong>\u201cMovies\u201d<\/strong>&nbsp;or&nbsp;<strong>\u201cTV shows\u201d<\/strong>&nbsp;on the side.<\/li>\n\n\n\n<li>Click&nbsp;<strong>\u201cAdd Videos\u201d<\/strong><\/li>\n\n\n\n<li>Click where it says&nbsp;<strong>&lt;None&gt;<\/strong>&nbsp;in order to add an address.<\/li>\n\n\n\n<li><strong>Add Samba Share<\/strong>: Use the IP address and share path to add your media content. For our server that we set up, you would use as follows to access the ZFS pool:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>smb:\/\/192.168.5.2\/archive<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>SECURITY NOTE:<\/strong>&nbsp;In my personal setup, I like to make a&nbsp;<strong>separate read only<\/strong>&nbsp;user when setting up samba for my media directory that I use for clients that will be viewing music, videos, tv, etc.<\/p>\n\n\n\n<p>The reason for this is that if the software I am using to view has a delete button I accidentally press, my cat walks on my keyboard\/remote while I am watching something, the software has a bug\/glitch etc., I do not lose my media collection. Here is an example from my own samba configuration:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[television]\n    comment = television shows\n    path = \/drive1thru8\/television\n    browseable = yes\n    read only = no\n    valid users = louis, kodi\n    write list = louis\n    create mask = 0644\n    directory mask = 0755\n    force user = louis\n    force group = louis\n    inherit permissions = yes\n    inherit acls = yes\n    ea support = yes<\/pre>\n\n\n\n<p>This would be accessible at&nbsp;<code>smb:\/\/192.168.5.2\/television<\/code>. My user,&nbsp;<code>louis<\/code>, can read &amp; write, whereas the user&nbsp;<code>kodi<\/code>&nbsp;can only read. I would log into the samba share as&nbsp;<code>kodi<\/code>&nbsp;from my home theater PC, or any client where I solely intend to view content.<\/p>\n\n\n\n<p>Even if Kodi\u2019s source code were hijacked by some bastard whose goal it was to destroy our entire media library, they would not be able to.<\/p>\n\n\n\n<p><em><strong>LESSON:<\/strong><\/em>&nbsp;<strong>It is good practice to give minimum necessary permissions to everything!<\/strong>&nbsp;5.&nbsp;<strong>Scan Media<\/strong>: Scan the added directories for movies, TV shows, etc., and organize them in Kodi. 6.&nbsp;<strong>Choose media type:<\/strong>&nbsp;For&nbsp;<strong>\u201cThis directory contains\u201d<\/strong>, choose the media type so Kodi is able to look things up for you about what you are watching, grab art, reviews, ratings, etc. 7. Click onto Movies\/TV(whatever you just added) &amp; search for something. 8. Play &amp; enjoy&nbsp;\ud83d\ude42<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Performance Testing with High-Quality Media[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=937\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=937\">edit source<\/a>]<\/h2>\n\n\n\n<p>Once the physical setup is complete, it\u2019s time to test how well this setup handles high-definition content.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Video Playback Test:<\/strong>&nbsp;Let\u2019s see how it handles a 4K video file. I\u2019m using a 70-80 GB file of&nbsp;<em>\u201cBatman Begins\u201d<\/em>&nbsp;to push the limits. See if it is able to seek within the file quickly, and if there\u2019s any lagging on action scenes or very dark-shot areas&nbsp;<em>(this is where bitrate is usually going to be highest, and therefore most difficult for cheap hardware to play back properly)<\/em><\/li>\n\n\n\n<li><strong>Audio Performance:<\/strong>&nbsp;Listen for any distortions or skipping in the digital audio output, digital scratching noises.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Noise Levels and Setup[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=938\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=938\">edit source<\/a>]<\/h2>\n\n\n\n<p>My custom water-cooled desktop with Noctua fans is noisy. I provided comparisons witha DPA 4065 omnidirectional mic in the video, in a normal living room, for you to hear; between that and the Asustor Flashstor minipc. This is not a&nbsp;<em>completely<\/em>&nbsp;passive device, but for most; it does amazingly well.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u201cPiracy\u201d[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=939\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=939\">edit source<\/a>]<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">We can\u2019t talk about home theater PCs without delving into Piracy.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=940\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=940\">edit source<\/a>]<\/h2>\n\n\n\n<p>We live in a world where companies are trying to normalize the idea that you don\u2019t own what you bought &amp; paid for anymore. Piracy is no longer an immoral act; in many cases, it is a necessity to retain what you have rightfully purchased from companies that think that word means something different than what was written in the Oxford English Dictionary 700 years ago.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202045458828.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202045338954.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">The Death of Digital Ownership[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=941\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=941\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Sony &amp; Discovery\u2019s Content Removal Scam[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=942\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=942\">edit source<\/a>]<\/h3>\n\n\n\n<p>Sony &amp; discovery tried to&nbsp;<a href=\"https:\/\/web.archive.org\/web\/20240000000000*\/https:\/\/www.playstation.com\/en-us\/legal\/psvideocontent\/\">remove customer content from their libraries AFTER they purchased it<\/a>. The word PURCHASE &#8211; not rent, was used to describe the transaction.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Discovery Entitlements Affected Titles<\/p>\n\n\n\n<p>As of 31 December 2023, due to our content licensing arrangements with content providers, you will no longer be able to watch any of your previously purchased Discovery content and the content will be removed from your video library.<\/p>\n\n\n\n<p>We sincerely thank you for your continued support.<\/p>\n\n\n\n<p>Thank you,<\/p>\n\n\n\n<p>PlayStation Store<\/p>\n<\/blockquote>\n\n\n\n<p>They might as well be telling you to go gargle their balls.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202061005960.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">The Hidden Redefinition of \u201cPurchase\u201d[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=943\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=943\">edit source<\/a>]<\/h3>\n\n\n\n<p>Sony\u2019s claim is that their terms of service to&nbsp;<em><strong>redefine the word \u201cpurchase\u201d to mean something new<\/strong><\/em>&nbsp;so they could still CLAIM you were \u201cbuying\u201d something when you were not. See their&nbsp;<a href=\"https:\/\/web.archive.org\/web\/20240403115117\/https:\/\/www.playstation.com\/en-us\/legal\/psn-terms-of-service\/\">terms of service<\/a>&nbsp;below:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>10.1.<\/strong>&nbsp;All intellectual property rights subsisting in PSN Content, including all software, data, services, and other content subsisting in or used in connection with PSN, the Online ID and access to content and hardware used in connection with PSN belong to SIE, its affiliates, and its licensors. Use of the terms \u201cown,\u201d \u201cownership\u201d, \u201cpurchase,\u201d \u201csale,\u201d \u201csold,\u201d \u201csell,\u201d \u201crent\u201d or \u201cbuy\u201d in this Agreement or in connection with PSN Content does not mean or imply any transfer of ownership of any content, data or software or any intellectual property rights from SIE, its affiliates or its licensors to any user or third party.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>10.2.<\/strong>&nbsp;Except as stated in this Agreement, all Content provided through PSN is licensed on a non-exclusive and revocable basis to you for your personal, private, non-transferable, non-commercial, limited use on a limited number of PlayStation Devices or other devices in the country in which your Account is registered.<\/p>\n<\/blockquote>\n\n\n\n<p>They use the word&nbsp;<strong>\u201cPURCHASE\u201d<\/strong>&nbsp;on their website, but then hide behind this garbage buried into page 21 of their terms of service. The word&nbsp;<em><strong>\u201cPURCHASE\u201d<\/strong><\/em>&nbsp;has had a specific meaning since the 14th century, when Oxford English Dictionary defined the word&nbsp;<em>\u201cpurchase\u201d<\/em>&nbsp;as meaning&nbsp;<em>\u201cto acquire in exchange for payment; to buy\u201d<\/em>&nbsp;or&nbsp;<em>\u201cobtaining something in exchange for payment in money or an equivalent; buying.\u201d<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">A History of Anti-Consumer Behavior[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=944\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=944\">edit source<\/a>]<\/h3>\n\n\n\n<p>Because consumer protection in the United States is a joke, they are allowed to redefine the meaning of a 14th century word to justify taking away your personal property without refunding your money.<\/p>\n\n\n\n<p>If they were honest, they would put this&nbsp;<em>\u201cnew\u201d<\/em>&nbsp;definition of the word&nbsp;<em>\u201cpurchase\u201d<\/em>&nbsp;on their front page next to the&nbsp;<strong>\u201cAdd to cart\u201d<\/strong>&nbsp;button.&nbsp;<em><strong>They don\u2019t do that.<\/strong><\/em>&nbsp;They hide it on page 21 of a legalese terms of service they know damn well you will never read.<\/p>\n\n\n\n<p>They know what it would do to their sales if they said&nbsp;<em>\u201cpurchase actually means we can take it back from you at any time without refunding you\u201d<\/em>&nbsp;in the same font size they use next to the&nbsp;<strong>\u201cAdd to cart\u201d<\/strong>&nbsp;button. They\u2019re not.<\/p>\n\n\n\n<p>This is the same company that&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Sony_BMG_copy_protection_rootkit_scandal\">installed malware &amp; rootkits on people\u2019s computers when they legally paid for content<\/a>&nbsp;that expects you to be an honest upstanding citizen who buys content &amp; allows them to take it back.<\/p>\n\n\n\n<p>Right.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202050157648.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202050450042.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Streaming Services: Paying More for Less[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=945\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=945\">edit source<\/a>]<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202061328214.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Image-20241202061922004.png\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Netflix\u2019s 4K scam[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=946\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=946\">edit source<\/a>]<\/h3>\n\n\n\n<p>Modern streaming services are equally dishonest when they try to upsell customers to a higher priced plan for higher quality video. Modern media companies are obsessed with control and want you to view and listen to content on completely locked down platforms. This is to the point where you have to build a special computer or use a television that is&nbsp;<a href=\"https:\/\/www.consumerreports.org\/electronics\/privacy\/how-to-turn-off-smart-tv-snooping-features-a4840102036\/\">blatant spyware<\/a>&nbsp;to watch the content you paid for in the advertised bitrate &amp; resolution.<\/p>\n\n\n\n<p><strong>I don\u2019t use the Netflix application on my LG television to watch Netflix because my television attempts to collect &amp; sell my personal data without my consent from the moment I turn it on. I find this unacceptable.<\/strong>&nbsp;I am happy to pay to watch content; but I am not going to give up my data &amp; my privacy to do it, nor do I wish to trust such an unscrupulous piece of hardware that&nbsp;<em><strong>opts me into this by default.<\/strong><\/em><\/p>\n\n\n\n<p>Netflix will upsell you to 4k, but&nbsp;<strong>nowhere on their plans page, pricing page, or help page do they tell you that you will receive a low bitrate, 720p stream if you use firefox on GNU\/Linux &#8211; or a very low bitrate 1080p stream in chrome<\/strong>&nbsp;The only way to get a high bitrate, 4k stream is as follows:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>The requirements to actually get 4K streaming working on a PC are buried in documentation and frankly absurd. You need:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Windows 10 or newer(not necessary when pirating)<\/li>\n\n\n\n<li>HDCP 2.2 compliant monitor and GPU(not necessary when pirating)<\/li>\n\n\n\n<li>GPU with HEVC hardware decoder(not necessary when pirating)<\/li>\n\n\n\n<li>4K monitor (even if you just want higher bitrate, or to view 1080p content on a 1080p monitor, which is not a problem when pirating)<\/li>\n\n\n\n<li>4K HDR monitor (some services won\u2019t deliver 4K without HDR, which is not a problem when pirating)<\/li>\n\n\n\n<li>PlayReady 3.0 support(not necessary when pirating)<\/li>\n\n\n\n<li>Microsoft Edge or the Windows Store app(pirating is cross platform &amp; operating system agnostic)<\/li>\n\n\n\n<li>Intel processor with SGX enabled (AMD processors are unsupported, enjoy your oxidating 14th gen intel CPU; by the way, piracy is processor\/platform agnostic &amp; works on all)<\/li>\n\n\n\n<li>No DisplayLink products or similar display adapters(piracy plays on any display product)<\/li>\n<\/ul>\n\n\n\n<p>As someone who repairs motherboards professionally, I find it unreasonable to expect average consumers to verify all these requirements before subscribing to a service that prominently advertises \u201c4K streaming\u201d as a feature. For comparison, game publishers clearly list their system requirements right next to the purchase button.<\/p>\n\n\n\n<p>Even more frustrating is that these restrictions exist purely due to DRM requirements, not technical limitations. The same content can stream perfectly fine at full quality to smart TV apps, proving the bandwidth and technology exists to deliver high-quality streams to any capable device.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">The Hidden Quality Gap[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=947\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=947\">edit source<\/a>]<\/h3>\n\n\n\n<p>Just as Sony doesn\u2019t have the balls(or the integrity) to place their re-defined concept of what it means to&nbsp;<em>\u201cpurchase\u201d<\/em>&nbsp;something on their product page;&nbsp;<strong>Netflix doesn\u2019t have the balls to list their series of limitations on 4k playback on the plans &amp; pricing page.<\/strong><\/p>\n\n\n\n<p>Netflix&nbsp;<em><strong>KNOWS<\/strong><\/em>&nbsp;conversions will go down if consumers understand the hoops they\u2019d have to jump through to get a higher quality stream, ESPECIALLY if they knew that they could pay for the higher quality plan and get an even WORSE VIDEO QUALITY than they\u2019d get on the normal plan just because they weren\u2019t using hardware anointed by netflix to properly f the user in the ass.<\/p>\n\n\n\n<p>In the words of Eteel from reddit:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Publishers advertise the requirements needed to run the game, and they do it freely\u2014literally next to or below the button you press to buy the game. And that\u2019s even though no one actually, realistically expects to run Cyberpunk 2077 in 4k with raytracing on GTX 1080 TI. That in no way compares to the reasonable base-level expectation that you\u2019d be able to play a video in 4k using Chrome.<\/p>\n\n\n\n<p>Netflix advertises no such information. They do have a help page listing which broswers support which resolution, but in order to get to it (or to even find out that it exists), you need to search for why you\u2019re not getting 4k in the first place, and in order to search for why you\u2019re not getting 4k in the first place, you already need to have bought the service thinking you\u2019re going to get 4k using Chrome\u2026<\/p>\n\n\n\n<p>And here\u2019s what Netflix doesn\u2019t tell you even on this help page: they don\u2019t tell you that while Chrome does support 1080p, it does not support high-bitrate 1080p. Playing Vikings: Valhalla on 1080p on Edge gets you 3000 bitrate while on Chrome gets you 1000 bitrate. That\u2019s a significant difference they don\u2019t advertise.<\/p>\n\n\n\n<p>There\u2019s still more to say about this, but I digress.<\/p>\n\n\n\n<p>And to address this comment of yours:<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>What would that be? I understand criticism of DRMs but endorsing piracy as a solution for consumer issues would set a crazy precedent. Would it be okay for me to shoplift items that are too expensive for me to purchase? What if the cheaper ones quality doesn\u2019t meet my demands?<\/p>\n<\/blockquote>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>It\u2019s not okay to shoplift items that are too expensive, but it is also not okay for Ubisoft Connect to advertise buying a license to play a game as buying the game. It literally has a button that says \u201cBuy the game,\u201d but when you read the fine print, it tells you that you don\u2019t actually own the game even if you buy it (in contrast to buying a shirt which you own.) In actuality, if you buy one of their games, they still withhold the right to remove it from the store, in which case you\u2019d be unable to play it even though you bought it. In essence, they redefine the word \u201cbuy\u201d to not mean \u201cown\u201d despite the fact that in common language usage, we have always understood the two terms to exist in connection to each other.<\/p>\n<\/blockquote>\n\n\n\n<p>Keep in mind that even the 3 mbps 1080p stream is&nbsp;<strong>garbage<\/strong>. When you pirate, you have the option to download a full bitrate video file. You can download movies &amp; television shows that have&nbsp;<strong>50 mbps bitrate with high quality encoding settings<\/strong>, and often&nbsp;<strong>completely uncompressed blurays.<\/strong><\/p>\n\n\n\n<p>Or, you can stream a piece of media using netflix at 3 mbps. 1 mbps if you\u2019re using the wrong web browser. Or processor. Or screen cable. Or whatever.<\/p>\n\n\n\n<p>And download button? screw your download button &#8211; you can watch it until you can\u2019t, and if you want a higher quality copy, sorry pal &#8211; you\u2019re stuck with 1 mbps in 2024, even though a 50 mbps copy was available on usenet 14 years ago.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hardware &amp; Format Restrictions[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=948\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=948\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Bluray Limitations[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=949\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=949\">edit source<\/a>]<\/h3>\n\n\n\n<p>Let\u2019s not even get started on the limitations regarding 4k blurays. If you want to rip a 4k bluray, you can\u2019t &#8211; you\u2019re stuck at 1080p unless you buy a drive like the Pioneer BDR-2213 with older firmware that allows you to back up a copy of what you&nbsp;<strong>legally bought &amp; paid for.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Digital Books: Another Broken Promise[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=950\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=950\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Kindle Purchases and Country Restrictions<\/strong>[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=951\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=951\">edit source<\/a>]<\/h4>\n\n\n\n<p>Amazon Kindle thinks that&nbsp;<a href=\"https:\/\/x.com\/krishnanrohit\/status\/1772011384206672370\">moving to a new country means you should lose all your Kindle books<\/a>. Imagine paying to buy a book and then having it disappear as your flight leaves your country\u2019s border. Welcome to 2024.<\/p>\n\n\n\n<p>It gets better. Amazon has instructions on their website to&nbsp;<em>\u201ctransfer\u201d<\/em>&nbsp;your account, but their own customer service reps are clueless on how any of it works.<\/p>\n\n\n\n<p>Amazon hides behind licensing agreements and geo-restrictions to justify this anti-ownership garbage. While you\u2019re given the&nbsp;<strong>impression<\/strong>&nbsp;you\u2019re&nbsp;<em>\u201cpurchasing\u201d<\/em>&nbsp;a book, you\u2019re actually just getting a temporary license tied to the country you bought it in. Move countries? f you, buy the book again.<\/p>\n\n\n\n<p>This isn\u2019t about technical limitations. This is about&nbsp;<strong>control<\/strong>. Amazon and companies like it are obsessed with locking down what you own. They know you won\u2019t read the fine print until you\u2019re angry, but by then, it\u2019s too late.<\/p>\n\n\n\n<p>This isn\u2019t just about Kindle. It\u2019s about digital purchases everywhere. You don\u2019t actually own what you buy. Whether it\u2019s Kindle books, movies on Amazon, or games on Sony, the story is the same: they sell you the illusion of ownership &amp; lock you down with restriction after restriction after they\u2019ve pocketed your money. You should consider yourself lucky if they even allow you to keep using what you bought in a restricted manner; sometimes they just take it away &amp; leave you nothing at all.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Broken System of Consumer Protection[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=952\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=952\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">No Real Consequences[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=953\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=953\">edit source<\/a>]<\/h3>\n\n\n\n<p>In the United States, consumer protection &amp; our congress\/senate no longer create laws that protect the rights of consumers. Everything I described above is disgustingly unethical; if I advertised as deceptively as sony, netflix, disney, or discovery did, I would be fined out of business if my customers hadn\u2019t ransacked my store &amp; broken the window. But they get away with it.<\/p>\n\n\n\n<p>Technically; legally, these companies are in the right for what they\u2019re doing. and even if they weren\u2019t, when they do something horribly illegal &amp; unethical, what our joke of a government&nbsp;<a href=\"https:\/\/docs.fcc.gov\/public\/attachments\/FCC-24-40A1.pdf\">fines them<\/a>&nbsp;is amounts to&nbsp;<a href=\"https:\/\/investors.att.com\/~\/media\/Files\/A\/ATT-IR-V2\/t-2023-12-31-10k-2024.pdf\">0.37% of their net profit for the year<\/a><\/p>\n\n\n\n<p>Piracy is how you take back ownership when the government that exists to&nbsp;<a href=\"https:\/\/legaljournal.princeton.edu\/the-supreme-courts-perversion-of-property-rights\/?utm_source=chatgpt.com\">protect your property rights<\/a>&nbsp;takes 37% of your paycheck &amp;&nbsp;<a href=\"https:\/\/imgur.com\/a\/cPTYhYh\">allows your $3600 television to roofie you &amp; steal your personal data<\/a>&nbsp;&amp; your content providers to&nbsp;<a href=\"https:\/\/docs.fcc.gov\/public\/attachments\/FCC-24-40A2.pdf\">sell your location to bounty hunters<\/a>&nbsp;or&nbsp;<a href=\"https:\/\/web.archive.org\/web\/20240820100244\/https:\/\/www.nytimes.com\/2024\/08\/14\/nyregion\/disney-wrongful-death-lawsuit-arbitration.html\">kill your wife &amp; get away with it<\/a>&nbsp;due to forced arbitration agreement in a video streaming app terms of service. Forced arbitration agreements like the one that Disney tried to use to justify shielding themselves from any liability for a person\u2019s death are&nbsp;<em>still legal in America today<\/em>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A Personal Note: Supporting Content While Rejecting Control[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=954\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=954\">edit source<\/a>]<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">I pay for content; you should too.[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=955\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=955\">edit source<\/a>]<\/h3>\n\n\n\n<p>I buy &amp; pay for what I find valuable. Whether it\u2019s my bluray copy of&nbsp;<a href=\"https:\/\/www.blu-ray.com\/Tori-Amos-Live-At-Montreux-1991-1992\/19345\/\">Tori Amos\u2019 Live at Montreux<\/a>&nbsp;concert from 1992 or my 22 year old copy of SuSE Linux Professional 8.1 I bought at best buy for $79.99. Not only do I pay for 32 year old concerts, I pay for software you can&nbsp;<em>legally download for free<\/em>&nbsp;if I think it\u2019s worthwhile. For all the trouble I give open source software, I paid for a copy of GNU\/Linux back when you had to&nbsp;<a href=\"https:\/\/www.linuxquestions.org\/questions\/linux-newbie-8\/k3b-scsi-emulation-127823\/\">compile your own kernel to burn a CD<\/a>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wiki.futo.org\/wiki\/File:Suse.jpeg\"><\/a><\/li>\n<\/ul>\n\n\n\n<p>I believe in paying for what I find valuable. It empowers me to ask for what I am worth when I provide value to others. I believe in fair exchange of value.<\/p>\n\n\n\n<p>that being said: I will&nbsp;<strong>never<\/strong>&nbsp;let someone else tell me what I&nbsp;<strong>CAN<\/strong>&nbsp;or&nbsp;<strong>CANNOT<\/strong>&nbsp;do with what I&nbsp;<em>bought and paid for<\/em>; nor will I ever tolerate being provided a&nbsp;<em>worse experience as a paying customer<\/em>&nbsp;than what I get as a non-paying customer. The limitations placed on your experience when you buy media are not worse due to scarcity or technological limitations; rather, the technological limitations are PURPOSELY PUT IN PLACE BY THE PERSON YOU ARE PAYING.<\/p>\n\n\n\n<p>At my business, we see our customers as partners; not adversaries. If a business I am seeking a service or good from treats me like the enemy after I\u2019ve given them money; I will treat them in kind.<\/p>\n\n\n\n<p><strong>Piracy is how you retain control over what you bought and paid for. Never feel guilty about that.<\/strong>&nbsp;But remember that it is on us to pay for what we find valuable, &amp; demonstrate that we are willing to pay for what we find valuable, if we want to live in a world where non-abusive business models win.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A Nuanced View of Digital Rights &amp; Piracy[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=956\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=956\">edit source<\/a>]<\/h2>\n\n\n\n<p>Not all situations where customers choose piracy are equal. Here\u2019s a hierarchy of scenarios that I\u2019ve ordered from most to least \u201cjustifiable\u201d or \u201cok\u201d to make the point. When you hear the words&nbsp;<em>\u201cpiracy\u201d<\/em>&nbsp;or&nbsp;<em>\u201ccopyright infringement\u201d<\/em>,&nbsp;<strong>they are often used to paint anyone who does not accept being bent over by companies that wish to re-define what it means to&nbsp;<em>\u201cown\u201d<\/em>&nbsp;something; if not take away the concept of ownership completely.<\/strong>&nbsp;Do not accept the premise of assholes, or laws, that pretend that each of the following scenarios below are the same.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Legitimate Ownership Issues[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=957\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=957\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1. Degraded Physical Media &#8211; No Replacement Available[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=958\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=958\">edit source<\/a>]<\/h4>\n\n\n\n<p>You paid for physical media that has degraded. The content is no longer for sale anywhere, and you need a way to access what you rightfully &amp; legally purchased. It is still protected by copyright, but you are literally incapable of purchasing it again due to lack of availability that is not your fault.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2. Degraded Physical Media &#8211; Replacement Available[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=959\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=959\">edit source<\/a>]<\/h4>\n\n\n\n<p>You paid for physical media that has degraded. While you could buy it again, you\u2019ve already paid the creators once for lifetime access.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3. Lost Digital Purchase &#8211; No Repurchase Option[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=960\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=960\">edit source<\/a>]<\/h4>\n\n\n\n<p>You purchased digital media that was accidentally erased\/lost, and it\u2019s no longer available for sale anywhere.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4. Lost Digital Purchase &#8211; Repurchase Available[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=961\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=961\">edit source<\/a>]<\/h4>\n\n\n\n<p>You purchased digital media that was accidentally erased\/lost. While it\u2019s still for sale, you\u2019ve already paid once for what was advertised as a \u201cpurchase.\u201d<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Corporate Deception &amp; Control[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=962\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=962\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">5. The \u201cPurchase\u201d That Wasn\u2019t[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=963\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=963\">edit source<\/a>]<\/h4>\n\n\n\n<p>You&nbsp;<strong>PURCHASED<\/strong>&nbsp;digital media; using the commonly understood definition of PURCHASE that existed from the 14th century that 99% of customers understand &#8211; permanent ownership. but it stopped working because someone you never met decided&nbsp;<em>\u201cfuck you\u201d<\/em>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">6. Bait &amp; Switch Streaming[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=964\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=964\">edit source<\/a>]<\/h4>\n\n\n\n<p>You paid for a streaming service specifically advertised with certain content. That content was removed with no refund option, &amp; now requires a second subscription to a different service to access.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">7. Rental vs.&nbsp;Purchase Confusion[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=965\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=965\">edit source<\/a>]<\/h4>\n\n\n\n<p>The distinction between rental &amp; purchase was unclear or deliberately obscured so you\u2019d think you were&nbsp;<strong>PURCHASING<\/strong>&nbsp;something.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Technical Restrictions &amp; Quality Issues[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=966\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=966\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">8. The 4K Lockout[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=967\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=967\">edit source<\/a>]<\/h4>\n\n\n\n<p>You paid for higher quality content (like 4K) but received lower quality (720p\/1080p) or same resolution but with radically reduced, horrible bitrate, due to artificial DRM restrictions that were buried at the end of a bs 30 page EULA; if made available to you at all. Your hardware is fully capable, but artificial limitations put in place by the content distributor keep you from using what you bought &amp; paid for.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">9. DRM Workarounds While Supporting Creators[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=968\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=968\">edit source<\/a>]<\/h4>\n\n\n\n<p>You purchase physical media to support creators but use a pirated copy to avoid DRM restrictions or long shipping delays.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Random Shitty Scenarios[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=969\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=969\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">10. Region Lock Issues[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=970\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=970\">edit source<\/a>]<\/h4>\n\n\n\n<p>Content is completely unavailable in your region with no legal purchase option, even though you\u2019re willing to pay.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">11. DRM Protest Without Support[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=971\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=971\">edit source<\/a>]<\/h4>\n\n\n\n<p>You reject DRM-restricted content but also choose not to purchase available DRM-free options when they exist, turning a blind eye.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">12. Selective Support[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=972\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=972\">edit source<\/a>]<\/h4>\n\n\n\n<p>You support creators directly but won\u2019t acknowledge how distributors &amp; other parts of the content creation pipeline process add value(paying for studiosm, people who support the recording &amp; making of content, etc.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Indefensible Positions[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=973\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=973\">edit source<\/a>]<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">13. False Justification[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=974\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=974\">edit source<\/a>]<\/h4>\n\n\n\n<p>Using DRM and middlemen as excuses while never actually supporting creators in any way.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">14. Empty Protests[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=975\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=975\">edit source<\/a>]<\/h4>\n\n\n\n<p>Claiming DRM opposition while pirating even when DRM-free options exist.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">15. Simply being an asshole[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=976\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=976\">edit source<\/a>]<\/h4>\n\n\n\n<p>Taking content with no intention to ever support creators; even the ones you truly enjoy, even when you have the money to pay for it, while using a litany of excuses to justify the behavior.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">16. &#8222;I just want free stuff.&#8221;[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=977\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=977\">edit source<\/a>]<\/h4>\n\n\n\n<p>No justification, no excuse, no attempt to support creators\u2014just pure entitlement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=978\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=978\">edit source<\/a>]<\/h2>\n\n\n\n<p>While many of these scenarios are brought about via legit grievances with the current state of you-own-nothing-digital-media with spyware on top, in my opinion, there\u2019s a clear ethical distinction between retaining access to content you\u2019ve purchased versus never intending to support people who have provided you value. The higher items on this list represent what I find to be genuine consumer rights abuses, while the lower items represent entitled cunts hiding behind moral superiority who lack the honesty to say they just don\u2019t want to pay for anything. Even an&nbsp;<em>\u201cI hate that industry and want to bleed them dry &amp; don\u2019t care about the consequences\u201d<\/em>&nbsp;would be more acceptable to me, for at least it\u2019s honest.<\/p>\n\n\n\n<p>When I advocate for having full control over what you buy &amp; pay for, I\u2019m specifically addressing the upper scenarios where customers have made good-faith attempts to support creators but are getting screwed left &amp; right by content companies &amp; distributors by artificial restrictions, deceptive practices, and technical limitations.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Final Thoughts[<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;veaction=edit&amp;section=979\">edit<\/a>&nbsp;|&nbsp;<a href=\"https:\/\/wiki.futo.org\/index.php?title=Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software&amp;action=edit&amp;section=979\">edit source<\/a>]<\/h1>\n\n\n\n<p>The joy of this process is in making it your own. I gave you a rough outline here of what you can do; a guide that shows you what is possible, so that you could have those little kicks of dopamine that show up when something works. Those kicks of dopamine are imperative to you feeling good &amp; moving forward. Without them, most people give up &amp; stop trying. If you stop trying, you never learn.<\/p>\n\n\n\n<p>The purpose of this guide wasn\u2019t to tell you this is the only way to do all of these things. Rather, it was to provide you a framework that I&nbsp;<em>100% know works since I followed it myself<\/em>. I\u2019ve already set up a system like this, one chunk at a time, over 14 years. I can tell you what to do, but putting together instructions that actually work is only possible if I run through the process in realtime to ensure everything I am telling&nbsp;<em>you<\/em>&nbsp;to do actually works for me. By going through the guide as I write it, if I leave something out of this guide &#8211; then what I am doing won\u2019t work.<\/p>\n\n\n\n<p>My hope is that once you are un-encumbered by the linux-isms &amp; open sourcisms &amp;&nbsp;<em>RTFM<\/em>&nbsp;elitist forum assholes that link you to documentation that is wrong or makes no sense, that you\u2019ll feel empowered to make something that kicks ass on your own. This is not the&nbsp;<em>only<\/em>&nbsp;way to do this, nor is this even the&nbsp;<em>\u201cright\u201d<\/em>&nbsp;way. There\u2019s no such thing as the&nbsp;<em>\u201cright\u201d<\/em>&nbsp;way(although there are many&nbsp;<strong>WRONG<\/strong>&nbsp;ways!).<\/p>\n\n\n\n<p>You don\u2019t have to clone this setup. Figure out what works for you, build something cool in small pieces &amp; baby steps. You don\u2019t have to do it all at once. Enjoy the journey! I can\u2019t wait to see what you build. That\u2019s it for today, &amp; as always,&nbsp;<strong>I hope you learned something!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>An extensive story about nowadays digital life<\/p>\n","protected":false},"author":2,"featured_media":8711,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30],"tags":[1677,1675,1678,1676],"class_list":["post-8699","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatica","tag-digital","tag-it","tag-life","tag-own"],"_links":{"self":[{"href":"https:\/\/site.noi3.org\/index.php?rest_route=\/wp\/v2\/posts\/8699","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/site.noi3.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/site.noi3.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/site.noi3.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/site.noi3.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8699"}],"version-history":[{"count":9,"href":"https:\/\/site.noi3.org\/index.php?rest_route=\/wp\/v2\/posts\/8699\/revisions"}],"predecessor-version":[{"id":8758,"href":"https:\/\/site.noi3.org\/index.php?rest_route=\/wp\/v2\/posts\/8699\/revisions\/8758"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/site.noi3.org\/index.php?rest_route=\/wp\/v2\/media\/8711"}],"wp:attachment":[{"href":"https:\/\/site.noi3.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/site.noi3.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/site.noi3.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}