<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Infrastructure on Panic! At The Terminal</title>
    <link>https://blog.nousiainen.xyz/categories/infrastructure/</link>
    <description>Recent content in Infrastructure on Panic! At The Terminal</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 09 Sep 2025 21:04:56 +0300</lastBuildDate>
    <atom:link href="https://blog.nousiainen.xyz/categories/infrastructure/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>In-Place Upgrade from RHEL 9 to RHEL 10 Using Leapp</title>
      <link>https://blog.nousiainen.xyz/docs/rhel9-to-rhel10-upgrade/</link>
      <pubDate>Thu, 24 Jul 2025 12:00:00 +0200</pubDate>
      <guid>https://blog.nousiainen.xyz/docs/rhel9-to-rhel10-upgrade/</guid>
      <description>&lt;h1 id=&#34;in-place-upgrade-from-rhel-9-to-rhel-10-using-leapp&#34;&gt;&#xA;  In-Place Upgrade from RHEL 9 to RHEL 10 Using Leapp&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#in-place-upgrade-from-rhel-9-to-rhel-10-using-leapp&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;This guide walks through the process of upgrading from RHEL 9 to RHEL 10 in place, without requiring a complete system reinstallation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;current-system-status&#34;&gt;&#xA;  Current System Status&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#current-system-status&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s what my lab&amp;rsquo;s test VM looks like:&lt;/p&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;user@test ~&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;$ hostnamectl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Static hostname: test.home.arpa&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       Icon name: computer-vm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         Chassis: vm 🖴&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      Machine ID: dec9d730df4f4e629ba20d02aed02f03&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         Boot ID: 67e690ef7fbe45edb112a82dcdf72a97&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Virtualization: kvm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Operating System: Red Hat Enterprise Linux 9.6 &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Plow&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     CPE OS Name: cpe:/o:redhat:enterprise_linux:9::baseos&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          Kernel: Linux 5.14.0-570.28.1.el9_6.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Architecture: x86-64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Hardware Vendor: Red Hat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Hardware Model: KVM&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Firmware Version: 1.16.3-4.el9&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We can see we&amp;rsquo;re currently running RHEL 9.6 on a KVM virtual machine.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker Instance Upgrades with Ansible</title>
      <link>https://blog.nousiainen.xyz/docs/docker-upgrades/</link>
      <pubDate>Wed, 16 Jul 2025 18:23:20 +0200</pubDate>
      <guid>https://blog.nousiainen.xyz/docs/docker-upgrades/</guid>
      <description>&lt;h1 id=&#34;docker-instance-upgrades-with-ansible&#34;&gt;&#xA;  Docker Instance Upgrades with Ansible&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#docker-instance-upgrades-with-ansible&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;This guide shows how to automate Docker container upgrades using Ansible playbooks instead of manual updates. By automating this process, you ensure consistency, reduce errors, and save time when updating multiple Docker instances across your infrastructure.&lt;/p&gt;&#xA;&lt;h2 id=&#34;infrastructure-overview&#34;&gt;&#xA;  Infrastructure Overview&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#infrastructure-overview&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;My homelab includes these Docker-based services:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Nginx Proxy Manager&lt;/strong&gt; (proxy.home.arpa) - Reverse proxy with SSL&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Healthchecks&lt;/strong&gt; (health.home.arpa) - Monitoring service&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Home Assistant&lt;/strong&gt; (hass.home.arpa) - Home automation platform&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Bitwarden&lt;/strong&gt; (bit.home.arpa) - Password manager&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;ansible-playbook-structure&#34;&gt;&#xA;  Ansible Playbook Structure&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#ansible-playbook-structure&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;host-configuration&#34;&gt;&#xA;  Host Configuration&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#host-configuration&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;The playbook targets specific hosts with Docker services:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Infrastructure as Code with Ansible Automation Platform</title>
      <link>https://blog.nousiainen.xyz/docs/ansible-automation-platform-iac-setup/</link>
      <pubDate>Sun, 13 Jul 2025 15:00:00 +0300</pubDate>
      <guid>https://blog.nousiainen.xyz/docs/ansible-automation-platform-iac-setup/</guid>
      <description>&lt;h1 id=&#34;infrastructure-as-code-for-ansible-automation-platform-setup&#34;&gt;&#xA;  Infrastructure as Code for Ansible Automation Platform Setup&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#infrastructure-as-code-for-ansible-automation-platform-setup&#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;Setting up Ansible Automation Platform (AAP) manually through the web interface is tedious and highly prone to errors.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve written an Ansible playbook that completely automates the setup of my AAP environment, from credentials and projects to job templates and workflow orchestration. So in case I ever need to rebuild the environment from scratch, all I would need to do is just add the project where that playbook is stored, and add a single template by hand and run it. I&amp;rsquo;d do it that way because I don&amp;rsquo;t like running ansible playbooks from the CLI, I always, always use AAP!&lt;/p&gt;</description>
    </item>
    <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>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>
    <item>
      <title>Setting up BIND9 for Public DNS on RHEL9</title>
      <link>https://blog.nousiainen.xyz/docs/bind9-external-setup-guide/</link>
      <pubDate>Thu, 03 Jul 2025 18:00:00 +0300</pubDate>
      <guid>https://blog.nousiainen.xyz/docs/bind9-external-setup-guide/</guid>
      <description>&lt;h1 id=&#34;setting-up-bind9-for-public-dns-on-rhel9&#34;&gt;&#xA;  Setting up BIND9 for Public DNS on RHEL9&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#setting-up-bind9-for-public-dns-on-rhel9&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;This guide covers setting up BIND9/named as an authoritative public DNS server on RHEL9. Unlike internal DNS servers that provide recursive resolution, public authoritative DNS servers are responsible for answering queries about domains you own and control.&lt;/p&gt;&#xA;&lt;p&gt;This setup includes security hardening measures such as proper logging and zone transfer restrictions to protect your DNS infrastructure from abuse.&lt;/p&gt;&#xA;&lt;p&gt;All IP addresses, domain names, and server configurations in this guide are examples. Replace them with your actual values.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Installing Red Hat Identity Management (IPA) without DNS on RHEL9</title>
      <link>https://blog.nousiainen.xyz/docs/redhat-idm-install-guide/</link>
      <pubDate>Thu, 03 Jul 2025 16:00:00 +0300</pubDate>
      <guid>https://blog.nousiainen.xyz/docs/redhat-idm-install-guide/</guid>
      <description>&lt;h1 id=&#34;installing-red-hat-identity-management-ipa-without-dns-on-rhel9&#34;&gt;&#xA;  Installing Red Hat Identity Management (IPA) without DNS on RHEL9&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#installing-red-hat-identity-management-ipa-without-dns-on-rhel9&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;Red Hat Identity Management (IdM) provides centralized authentication, authorization, and account information by storing data about users, groups, hosts, and other objects necessary to manage the security aspects of a network of computers. This guide covers installing IdM/IPA server without the integrated DNS service on RHEL9.&lt;/p&gt;&#xA;&lt;p&gt;This guide demonstrates setting up a high-availability IPA deployment with two servers:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automated KVM VM Provisioning with Ansible and OSBuild on RHEL9</title>
      <link>https://blog.nousiainen.xyz/docs/automated-vm-provisioning-with-ansible-and-osbuild/</link>
      <pubDate>Thu, 03 Jul 2025 14:00:00 +0300</pubDate>
      <guid>https://blog.nousiainen.xyz/docs/automated-vm-provisioning-with-ansible-and-osbuild/</guid>
      <description>&lt;h1 id=&#34;automated-kvm-vm-provisioning-with-ansible-and-osbuild-on-rhel9&#34;&gt;&#xA;  Automated KVM VM Provisioning with Ansible and OSBuild on RHEL9&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#automated-kvm-vm-provisioning-with-ansible-and-osbuild-on-rhel9&#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;When I started looking into automating my homelab VM provisioning, I was surprised by the lack of examples combining Ansible with OSBuild for KVM environments. Not many tutorials focus on KVM, so I wanted something that used Red Hat&amp;rsquo;s tooling - as I run a RHEL homelab.&lt;/p&gt;&#xA;&lt;p&gt;I used to provision my homelab virtual machines by hand and eventually I got tired of doing it since I like to tinker around a lot and constantly add new VMs. So, I decided to automate the process using the combination of Ansible and OSBuild.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Enable EPEL Repository on RHEL9</title>
      <link>https://blog.nousiainen.xyz/docs/epel/</link>
      <pubDate>Tue, 03 Jun 2025 17:53:34 +0300</pubDate>
      <guid>https://blog.nousiainen.xyz/docs/epel/</guid>
      <description>&lt;h1 id=&#34;enable-epel-repository-on-rhel-9&#34;&gt;&#xA;  Enable EPEL Repository on RHEL 9&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#enable-epel-repository-on-rhel-9&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;The EPEL repository provides packages that are not included in the standard RHEL repositories, such as &lt;code&gt;htop&lt;/code&gt; and &lt;code&gt;vim&lt;/code&gt; for example.&lt;/p&gt;&#xA;&lt;h2 id=&#34;prerequisites&#34;&gt;&#xA;  Prerequisites&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#prerequisites&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Before installing EPEL, you need to enable the CodeReady Builder repository, which provides dependencies for many EPEL packages.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installation-steps&#34;&gt;&#xA;  Installation Steps&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#installation-steps&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;enable-codeready-builder-repository&#34;&gt;&#xA;  Enable codeready builder repository&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#enable-codeready-builder-repository&#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-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;subscription-manager repos --enable codeready-builder-for-rhel-9-&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;arch&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;-rpms&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;install-epel-release&#34;&gt;&#xA;  Install epel-release&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#install-epel-release&#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-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;verification&#34;&gt;&#xA;  Verification&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#verification&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;After installation, you can verify that EPEL is enabled by listing available repositories:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Extending LVM Partitions</title>
      <link>https://blog.nousiainen.xyz/docs/linux-partitions/</link>
      <pubDate>Mon, 04 Nov 2024 18:58:46 +0200</pubDate>
      <guid>https://blog.nousiainen.xyz/docs/linux-partitions/</guid>
      <description>&lt;h1 id=&#34;extending-lvm-partitions&#34;&gt;&#xA;  Extending LVM Partitions&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#extending-lvm-partitions&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;This guide walks you through extending LVM partitions when you&amp;rsquo;ve added new disk space to your system.&lt;/p&gt;&#xA;&lt;h2 id=&#34;lvm-structure&#34;&gt;&#xA;  LVM Structure&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#lvm-structure&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;LVM operates with three main components:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Physical Volumes (PV)&lt;/strong&gt;: The actual disk partitions&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Volume Groups (VG)&lt;/strong&gt;: Collections of physical volumes&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Logical Volumes (LV)&lt;/strong&gt;: The volumes you mount and use&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;common-scenario&#34;&gt;&#xA;  Common Scenario&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#common-scenario&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;You&amp;rsquo;ve added disk space to a virtual machine and need to extend the root filesystem. This is a common requirement in virtualized environments where storage needs grow over time.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
