<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Homelab on Panic! At The Terminal</title>
    <link>https://blog.nousiainen.xyz/tags/homelab/</link>
    <description>Recent content in Homelab on Panic! At The Terminal</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 20 Jul 2025 22:45:27 +0300</lastBuildDate>
    <atom:link href="https://blog.nousiainen.xyz/tags/homelab/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>SSH Hardening and Automation User Setup with Ansible</title>
      <link>https://blog.nousiainen.xyz/docs/ssh-hardening-ansible/</link>
      <pubDate>Sat, 12 Jul 2025 12:00:00 +0300</pubDate>
      <guid>https://blog.nousiainen.xyz/docs/ssh-hardening-ansible/</guid>
      <description>&lt;h1 id=&#34;ssh-hardening-and-automation-user-setup-with-ansible&#34;&gt;&#xA;  SSH Hardening and Automation User Setup with Ansible&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#ssh-hardening-and-automation-user-setup-with-ansible&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s a little post about how I do SSH hardening for my RHEL9 homelab and how I ensure that the Ansible automation user is properly set. The playbook stems from an incident I had in Red Hat Insights where it was reported that I had an SSH configuration that allowed legacy ciphers. It was also adviced to create a crypto policy that disables weak algorithms.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automating KVM Backups with Ansible</title>
      <link>https://blog.nousiainen.xyz/docs/backing-up-kvm/</link>
      <pubDate>Sat, 12 Jul 2025 10:00:00 +0300</pubDate>
      <guid>https://blog.nousiainen.xyz/docs/backing-up-kvm/</guid>
      <description>&lt;h1 id=&#34;automating-kvm-homelab-backups-with-ansible&#34;&gt;&#xA;  Automating KVM Homelab Backups with Ansible&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#automating-kvm-homelab-backups-with-ansible&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;When you&amp;rsquo;re running a dozen virtual machines in your homelab, manual backups quickly become a nightmare.&lt;/p&gt;&#xA;&lt;p&gt;In this post, I&amp;rsquo;ll walk you through my Ansible-based backup strategy for my KVM homelab. It automatically backs up all VMs by shutting them down gracefully, copying their disk images and configurations to a NAS, and bringing them back online.&lt;/p&gt;&#xA;&lt;h2 id=&#34;backup-strategy&#34;&gt;&#xA;  Backup Strategy&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#backup-strategy&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;My backup strategy uses Ansible to orchestrate the entire process:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automated Network Monitoring: Adding Servers to LibreNMS with Ansible</title>
      <link>https://blog.nousiainen.xyz/docs/guide-librenms-ansible/</link>
      <pubDate>Mon, 07 Jul 2025 14:00:00 +0300</pubDate>
      <guid>https://blog.nousiainen.xyz/docs/guide-librenms-ansible/</guid>
      <description>&lt;h1 id=&#34;automated-network-monitoring-adding-servers-to-librenms-with-ansible&#34;&gt;&#xA;  Automated Network Monitoring: Adding Servers to LibreNMS with Ansible&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#automated-network-monitoring-adding-servers-to-librenms-with-ansible&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;Adding servers to LibreNMS by hand is tedious, and should be done by automation. In this post, I&amp;rsquo;ll show you how I&amp;rsquo;ve automated the entire process of configuring SNMP and adding servers to LibreNMS using Ansible.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-workflow&#34;&gt;&#xA;  The Workflow&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#the-workflow&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Basically what the playbook does is:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Install and configure SNMP&lt;/li&gt;&#xA;&lt;li&gt;Set up necessary firewall rules&lt;/li&gt;&#xA;&lt;li&gt;Add the server to LibreNMS&lt;/li&gt;&#xA;&lt;li&gt;Add it to the correct device group.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;the-playbook&#34;&gt;&#xA;  The Playbook&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#the-playbook&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;step-1-installing-snmp-components&#34;&gt;&#xA;  Step 1: Installing SNMP Components&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#step-1-installing-snmp-components&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Ensure snmp is installed&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;ansible.builtin.dnf&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;net-snmp&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;net-snmp-utils&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;state&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;present&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;net-snmp&lt;/code&gt; package is needed for the SNMP daemon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Optimizing KVM Virtual Machines with Tuned Profiles</title>
      <link>https://blog.nousiainen.xyz/docs/kvm-vm-tuning-ansible/</link>
      <pubDate>Mon, 07 Jul 2025 12:00:00 +0300</pubDate>
      <guid>https://blog.nousiainen.xyz/docs/kvm-vm-tuning-ansible/</guid>
      <description>&lt;h1 id=&#34;optimizing-kvm-virtual-machines-with-tuned-profiles&#34;&gt;&#xA;  Optimizing KVM Virtual Machines with Tuned Profiles&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#optimizing-kvm-virtual-machines-with-tuned-profiles&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;The &lt;code&gt;tuned&lt;/code&gt; service on Red Hat-based systems provides pre-configured performance profiles that can significantly improve your VM performance with minimal effort.&lt;/p&gt;&#xA;&lt;p&gt;In this post, I&amp;rsquo;ll show you how to optimize your KVM VMs using tuned profiles and automate the entire process with Ansible.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-playbook&#34;&gt;&#xA;  The Playbook&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#the-playbook&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Since I manage dozens of VMs in my homelab, doing this manually would be tedious. Instead, I use this Ansible playbook to apply tuned optimization to all my VMs:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automating RHEL Server Updates with Ansible</title>
      <link>https://blog.nousiainen.xyz/docs/rhel-server-updates-ansible/</link>
      <pubDate>Sat, 05 Jul 2025 16:00:00 +0300</pubDate>
      <guid>https://blog.nousiainen.xyz/docs/rhel-server-updates-ansible/</guid>
      <description>&lt;h1 id=&#34;automating-rhel-server-updates-with-ansible&#34;&gt;&#xA;  Automating RHEL Server Updates with Ansible&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#automating-rhel-server-updates-with-ansible&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;&#xA;  Introduction&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#introduction&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;I hate updating my servers manually so I&amp;rsquo;ve set up this playbook to run updates. This was probably the first playbook I ever wrote for my home lab, and it&amp;rsquo;s been running automatically for years now on a weekly schedule every Friday night through AAP (Ansible Automation Platform).&lt;/p&gt;&#xA;&lt;p&gt;This guide shows you how to automate RHEL (and other yum/dnf based distros like Fedora, CentOS etc.) server updates using Ansible, including proper reboot handling.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting up BIND9 for Internal DNS on RHEL9</title>
      <link>https://blog.nousiainen.xyz/docs/bind9-internal-setup-guide/</link>
      <pubDate>Thu, 03 Jul 2025 20:00:00 +0300</pubDate>
      <guid>https://blog.nousiainen.xyz/docs/bind9-internal-setup-guide/</guid>
      <description>&lt;h1 id=&#34;setting-up-bind9-for-internal-dns-on-rhel9&#34;&gt;&#xA;  Setting up BIND9 for Internal DNS on RHEL9&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#setting-up-bind9-for-internal-dns-on-rhel9&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;This guide covers setting up BIND9/named for internal reverse/forward DNS resolution on a RHEL9 server. Unlike public authoritative DNS servers, internal DNS servers provide recursive resolution for your internal network and handle local domain queries.&lt;/p&gt;&#xA;&lt;p&gt;All IP addresses, network ranges, and hostnames in this guide are examples. Replace them with your actual values.&lt;/p&gt;&#xA;&lt;p&gt;For the entirety of the guide we&amp;rsquo;ll be running every single command as root.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
